Автор работы: Пользователь скрыл имя, 28 Февраля 2013 в 14:29, лабораторная работа
Цель работы: Целью лабораторной работы является изучение алгоритмов обработки одномерных числовых массивов, символьных массивов (строк) и двухмерных числовых массивов (матриц), изучение организации подпрограмм и создание подпрограмм обработки массивов.
Муромский институт (филиал) федерального государственного
бюджетного образовательного учреждения высшего профессионального
образования «Владимирский государственный университет имени Александра Григорьевича и Николая Григорьевича Столетовых»
Факультет ИТ
Кафедра САПР
ЛАБОРАТОРНАЯ
РАБОТА
по «Информатика
и программирование»
(наименование дисциплины)
Тема Массивы. Работа с числовыми и строковыми массивами. Двухмерные массивы (матрицы). Подпрограммы. Создание подпрограмм обработки массивов.
Руководитель
Быков А.А.
(фамилия, инициалы)
(подпись) (дата)
Студент ПИн-112
(группа)
Акимов А.А.
(фамилия, инициалы)
(подпись) (дата)
Муром 2012
Лабораторная работа №2
Тема: Массивы. Работа с числовыми и строковыми массивами. Двухмерные массивы (матрицы). Подпрограммы. Создание подпрограмм обработки массивов.
Цель работы: Целью лабораторной работы является изучение алгоритмов обработки одномерных числовых массивов, символьных массивов (строк) и двухмерных числовых массивов (матриц), изучение организации подпрограмм и создание подпрограмм обработки массивов.
Теоретическая часть.
Массивы
Массивы представляют собой ограниченную упорядоченную совокупность однотипных величин. Каждая отдельная величина называется элементом массива. Тип элементов может быть любым, и называется базовым типом. Вся совокупность компонент определяется одним именем – именем массива. Доступ к элементу массива происходит по индексу – координатам элемента в массиве.
Символьные массивы
Особое место в языках программирования высокого уровня занимают массивы символов - строки. Работа со строками похожа на работу с обычными массивами. Доступ к отдельным символам строки производится также как и для одномерных массивов.
Двухмерные массивы (матрицы)
Двухмерные массивы (матрицы) представляют собой массив, индекс элемента в котором состоит из двух частей – номера строки и номера столбца. В памяти ЭВМ двухмерные массивы хранятся в виде одномерного массива, по строкам. Работа с двухмерными массивами похожа на работу с обычными массивами, однако, для обработки такого массива необходимо организовать два вложенных цикла – по строкам и по столбцам.
Подпрограммы
Алгоритм решения задачи проектируется путем декомпозиции всей задачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подпрограмм. Подпрограмма - это последовательность операторов, которые определены и записаны только в одном месте программы, однако их можно вызвать для выполнения из одной или нескольких точек программы. Каждая подпрограмма определяется уникальным именем. В
языке ObjectPascal существуют два типа подпрограмм - процедуры и функции.
Ввод/вывод текста
Компонент TEdit позволяет вводить или выводить только одну строку текста. Для ввода/вывода текста состоящего из нескольких строк (например значений элементов массива) можно использовать компонент TMemo.
Ввод/вывод информации, представленной в виде таблицы
Среда программирования Delphi содержит компонент TStringGrid, который представляет собой графический элемент, осуществляющий ввод или вывод табличной информации.
Страничная организация интерфейса. Закладки
Иногда в программе необходимо, чтобы в одном окне в зависимости от выбора пользователя отображались различные элементы. Это можно реализовать при
помощи специальных компонент Delphi TPageControl – контейнер страниц (закладок) и TTabSheet – страница (закладка).
Меню
В ОС Windows существует специальный элемент интерфейса - меню, который позволяет выбирать различные режимы и выполнять различные команды. Существует два типа меню: главное меню и контекстное меню. Главное меню всегда присутствует в окне и располагается под полосой заголовка программы. Контекстное меню вызывается при нажатии правой кнопки мыши и показывается в том месте, где была нажата кнопка.
Практическая часть.
Для создания приложения «работа с массивами» вначале я разработал интерфейс приложения, используя необходимые компоненты. Запустив программу Delphi, появляется дизайнер форм, который реализует окно приложения.
С помощью компонента TPageControl добавляем на форму элемент содержащий закладки, а компонент TTabSheet реализует эти закладки как показано на рисунке 1.
Рис.1
Далее создаём компонент TMemo для ввода/вывода многострочного текста в нашем приложении. Для полноценной работы первой закладки «массивы» добавляем компоненты TLabel, TButton, TEdit. Интерфейс первой закладки готов – это показано на рисунке 2.
Рис.2
Для создания интерфейса закладки «строки» мы используем только три компонента: TLabel, TButton, TEdit. Этих компонентов достаточно для полноценной работы данной закладки. Полученный интерфейс показан на рисунке 3.
Рис.3
Для
создания интерфейса закладки «матрицы»
нам необходим компонент
После завершения работы над закладками создаём главное меню нашего приложения с помощью компонента TMainMenu, а при помощи компонента TMenuItem создаём пункты меню. Полученный интерфейс приложения показан на рисунке 4.
Рис.4
После разработки интерфейса приложения я создаю необходимые обработчики событий.
Далее представлен исходный текст программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Menus, StdCtrls, Grids;
type
Arr = array [0..9] of integer; //объявляем массив из 10 чисел
TMatrix=array [0..9,0..9] of integer;//объявляем матрицу размером 10х10
TForm1 = class(TForm)
Массивы: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
Окна: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Memo2: TMemo;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label5: TLabel;
Edit2: TEdit;
Label6: TLabel;
Edit3: TEdit;
Button3: TButton;
Label7: TLabel;
Edit4: TEdit;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Edit6: TEdit;
Button4: TButton;
Button5: TButton;
Button6: TButton;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Edit5: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A : Arr;
M : TMatrix;
S : TMatrix;
implementation
{$R *.dfm}
//процедура заполнения
procedure TForm1.Button1Click(Sender: TObject);//
var i,n:integer;
begin
n:= StrToInt(Edit1.Text);//ввод колличества символов в массиве
begin
for i := 0 to n-1 do//цикл заполнения случайными числами
A[i] := random(21)-10;//заполнение массива случайными числами от -10 до 10
end;
begin
for i := 0 to n do//цикл заполнения массива
Memo1.Lines.Add(IntToStr(A[i])
end;
end;
//процедура вычисления
procedure TForm1.Button2Click(Sender: TObject);
var i,n,p: integer;
begin
n:=StrToInt(Edit1.Text);
p:=StrToInt(Edit2.Text);//
begin
for i := 0 to n do //цикл вычисления кратности
if (A[i]mod p=0) then//если остаток от деления =0 то
Memo2.Lines.Add(IntToStr(A[i])
end;
end;
//процедура перевода
procedure TForm1.Button3Click(Sender: TObject);
var
i,result:integer;
bin:string;
begin
bin:=Edit3.Text;//записываем двоичное число
result:=0;//обнуляем переменную result
for i:=1 to length(bin) do//цикл обработки каждого символа строки
begin
if (copy(Edit3.Text,i,1)<>
and (copy(Edit3.Text,i,1)<>
then //то
begin
ShowMessage('Ошибка');// выдаётся сообщение об ошибке
Exit;//выход из программы
end;
if not (copy(Edit3.Text,i,1)<>
result:=result+(1 shl(length(bin)-i));// сдвигаем строковую величину на разряд влево и прибавляем к переменной result.полученный результат является десятичным числом
end;
Edit4.Text:=IntToStr(result);/
end;
//процедура заполнения стекой компонент StringGrid1 и StringGrid2
procedure TForm1.Button4Click(Sender: TObject);
var r,c: integer;
begin
r:= StrToInt(Edit5.Text);//ввод количества строк
c:= StrToInt(Edit6.Text);//ввод количества столбцов
StringGrid1.RowCount:=r;
StringGrid1.ColCount:=c;
StringGrid2.RowCount:=r;
StringGrid2.ColCount:=c;
end;
//процедура заполнения
procedure TForm1.Button5Click(Sender: TObject);
var r,c,i,j:integer;
begin
r:= StrToInt(Edit5.Text);
c:= StrToInt(Edit6.Text);
begin
for i:=0 to r-1 do
for j:=0 to c-1 do
M[i,j]:=random(10);//
end;
begin
for i:=0 to r-1 do
for j:=0 to c-1 do
StringGrid1.Cells[j,i]:=
end;
end;
//процедура сложения каждой строки с предыдущей
procedure TForm1.Button6Click(Sender: TObject);
var r,c,i,j:integer;
begin
r:= StrToInt(Edit5.Text);
c:= StrToInt(Edit6.Text);
begin
for i:=0 to r-1 do
for j:=0 to c-1 do
S[i,j]:=M[i,j]+M[i-1,j]//
end;
begin
for i:=0 to r-1 do
for j:=0 to c-1 do
StringGrid2.Cells[j,i]:=
end;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
TabSheet1.Show;//при нажатии кнопки «Массивы» в меню переходим на данную вкладку
end;
procedure TForm1.N4Click(Sender: TObject);
begin
TabSheet2.Show;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
TabSheet3.Show;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
Form1.Close;
end;
//процедура тестирования
procedure TForm1.N7Click(Sender: TObject);
var i,n,p:integer;
begin
TabSheet1.Show;
n:= 10;
p:=2;
begin
for i := 0 to n-1 do
A[i] := random(21)-10;
end;
begin
for i := 0 to n do
Memo1.Lines.Add(IntToStr(A[i])
end;
begin
Edit1.Text:=IntToStr(n);
Edit2.Text:=IntToStr(p);
begin
for i := 0 to n do
if (A[i]mod p=0) then
Memo2.Lines.Add(IntToStr(A[i])
end;
end;
end;
//процедура тестирования
procedure TForm1.N8Click(Sender: TObject);
var i,result:integer;
bin:string;
begin
TabSheet2.Show;
bin:='001';
Edit3.Text:=bin;
result:=0;
for i:=1 to length(bin) do
begin
if (copy(bin,i,1)<>IntToStr(1))
and (copy(bin,i,1)<>IntToStr(0))
then
begin
ShowMessage('Ошибка');
Exit;
end;
if not (copy(bin,i,1)<>IntToStr(1)) then
result:=result+(1 shl(length(bin)-i));
end;
Edit4.Text:=IntToStr(result);
end;
//процедура тестирования
procedure TForm1.N9Click(Sender: TObject);
var r,c,i,j:integer;
begin
TabSheet3.Show;
r:= 5;
c:= 5;
Edit5.Text:=IntToStr(r);
Edit6.Text:=IntToStr(c);
StringGrid1.RowCount:=r;
StringGrid1.ColCount:=c;
StringGrid2.RowCount:=r;
StringGrid2.ColCount:=c;
begin
for i:=0 to r-1 do
for j:=0 to c-1 do
M[i,j]:=random(10);
end;
begin
for i:=0 to r-1 do
for j:=0 to c-1 do
StringGrid1.Cells[j,i]:=
end;
begin
for i:=0 to r-1 do
for j:=0 to c-1 do
S[i,j]:=M[i,j]+M[i-1,j]
end;
begin
for i:=0 to r-1 do
for j:=0 to c-1 do
StringGrid2.Cells[j,i]:=
end;
end;
end.
Вывод: в ходе данной лабораторной работы я изучил алгоритмы обработки одномерных числовых массивов, символьных массивов (строк) и двухмерных числовых массивов (матриц), изучил организации подпрограмм и создание подпрограмм обработки массивов.