
Лабораторная работа №3
Тема: «Структурированные типы данных: массивы. Организация подпрограмм: процедуры и функции».
Цель работы:
изучить характеристики и основные операции с структурой данных – массив;
получить навыки ввода и вывода одномерных и двумерных массивов;
освоить принципы структурного программирования (организация подпрограмм: функций и процедур).
Пример 3.1. Нахождение значения и номера максимального элемента одномерного массива
Описание переменных:
-
Имя
Структура
Тип
Семантика
n
a
max
imax
простая
массив
простая
простая
целый
целый
целый
целый
количество элементов массива
заданный массив
максимальный элемент
номер максимального элемента
Для решения данной задачи используется функция GetSubStr(st:string;n:integer):string для выделения подстроки из строки. Данная функция размещается в разделе Implementation модуля формы Unit1. Т.к. вводимые элементы массива записываются в поле редактора Edit2, то функция Getsubstr будет выделять символы в строке Edit2 до пробела, т.е. цифры числа очередного элемента массива.
function GetSubStr(st:string;n:integer):string;
Var I,p:integer;
begin
for i:=1 to n-1 do begin
p:=pos(' ',st);
st:=copy(st,p+1,length(st)-p)
end;
p:=pos(' ',st);{найти конец нужной подстроки}
if p <> 0 then result:=copy(st,1,p-1) else result:=st
end;
Вид формы с компонентами:
Процедура обработки щелчка на кнопке "Расчет"
procedure TForm1.Button1Click(Sender: TObject);
const nn=20;// количество элементов массива
type size=1..nn;
Var a:array[size]of integer;
I,n,imax:size;
max:integer;
begin
n:=StrToInt(Edit1.text);
for i:=1 to n do a[i]:=StrToInt(GetSubStr(Edit2.text,i));
max:=a[1]; imax:=1;
for i:=1 to n do
if a[i] > max then begin max:=a[i];imax:=i end;
Label5.Caption:='max='+IntToStr(max);
Label6.Caption:='indexmax='+IntToStr(imax);
end;
Сценарий выполнения программы:
Запустить программу (Run).
Ввести в поле Edit1 значение количества элементов массива, не превышающее 21.
В поле Edit2 ввести элементы массива, разделяя их пробелом.
Нажать кнопку “Расчет”.
Просмотреть результаты (ниже приведен пример).
Для завершения работы нажать кнопку “Выход”.
Пример 3.2 Решение задачи примера 5.1 с использованием ввода элементов массива из строк компонента Memo
Вид формы:
Описание компонентов, размещенных на форме:
-
Компоненты
Свойство
Значение
Form1
Label1
Label2
Label3
Label4
Label5
Button1
Button2
Edit1
Memo1
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Text
Lines
Поиск максимального элемента
Количество вводимых элементов
m=
max=
indexmax=
Ввод
Поиск
Выход
пусто
пусто
Используя страницу Standart палитры компонент, поместите в правой части формы компонент Memo (текстовый редактор), измените его параметры, выберите в окне Инспектора Объектов объект Memo1, затем на странице Свойства произведите двойной щелчок на поле значения Strings свойства Lines для формирования и редактирования текста. После этого в окне String List Editor удалите текст Memo1, введите текст в 0-й строке “Вводите массив” и щелкните мышью на кнопке ОК.
Ввод элементов массива и поиск в массиве максимального элемента и его индекса осуществляется в разных процедурах, поэтому описание массива и переменной “m” нужно выполнить в разделе Interface модуля Unit1:
const mm=20;//максимальный размер массива
type size=1..mm;
var
Form1: TForm1;
a:array[size]of integer;
m:size;
Процедура обработки щелчка на кнопке “Ввод”
procedure TForm1.Button1Click(Sender: TObject);