Пример программирования с использованием одномерного массива
Задание: В одномерном массиве целых чисел поменять местами элемент с максимальным значением и первый элемент массива.
Разработка алгоритма
Исходные данные:
- n - количество элементов массива;
- С – одномерный массив.
Результат: одномерный массив С.
Промежуточные переменные:
- I – индекс текущего элемента массива;
- k индекс максимального элемента массива;
- max – максимальный элемент массива;
На рис.4 приведена схема алгоритма.
Рис. 4. Схема алгоритма.
Разработка интерфейса пользователя
Расположим на форме следующие компоненты:
Label1, Label2, Label3– для вывода подсказок;
Edit1 и Button1 – для ввода количества элементов массива;
StGr1 и Button2 – для ввода исходного массива;
StGr2 – для вывода преобразованного массива;
На рис. 5 показаны объекты, расположенные на форме.
Рис.5. Дерево объектов.
Форма с размещенными на ней компонентами изображена на рис 6.
Рис. 6. Форма на этапе проектирования.
Текст модуля
unit Unit_3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
StGr1: TStringGrid;
Label2: TLabel;
Button2: TButton;
Label3: TLabel;
StGr2: TStringGrid;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var N:integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Visible:=true;
Button2.Visible:=true;
StGr1.Visible:=true;
// Ввод количества элементов
N:=StrToInt(Edit1.Text);
StGr1.ColCount:=N;
StGr2.ColCount:=N;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,k,max:integer;
C:array[1..20] of integer;
begin
Label3.Visible:=true;
StGr2.Visible:=true;
Button3.Visible:=true;
// Ввод массива
i:=1;
While i<=N do
begin
C[i]:=StrToInt(StGr1.Cells[i-1,0]); { Ввод элемента массива}
i:=i+1;
end;
// Поиск максимального элемента и его индекса
i:=1;
max:=C[1];
k:=1;
repeat
if max<C[i] then
begin
max:=C[i];
k:=i;
end;
i:=i+1;
until i>N;
// Обмен элементов
C[k]:=C[1];
C[1]:=max;
// Вывод массива
for i:=1 to N do
StGr2.Cells[i-1,0]:=Inttostr(C[i]);
end;
procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin
for i:=1 to n do
begin
StGr1.Cells[i-1,0]:='';
StGr2.Cells[i-1,0]:='';
end;
Edit1.Clear;
Label2.Visible:=false;
Button2.Visible:=false;
StGr1.Visible:=false;
Label3.Visible:=false;
StGr2.Visible:=false;
Button3.Visible:=false;
Edit1.SetFocus;
end;
end.
Результаты вычислений
Порядок выполнения работы
1. Получить у преподавателя задание.
2. Разработать алгоритм и представить его в виде схемы.
3. Разработать интерфейс программы.
4. Написать на Delphi программу.
5. Отладить программу.
Содержание отчета
6. Титульный лист.
7. Задание.
8. Схема алгоритма.
9. Текст программы.
10. Результаты вычислений.
Контрольные вопросы
1. Для чего предназначены операторы цикла?
2. Укажите ошибки в следующих операторах:
X,Y:Real;
Y:=0;
For X := 1.2 To 4.2 Do
Y := Y + Cos(X);
I, N, S: Integer;
N :=25;
ForI := 1 To Sqrt (N) Do
S:=S * I;
For I := 1 To 10 Do
I :=I + 2;
3. Определить значение переменной F после выполнения следующих фрагментов программы:
F, K, I :Integer;
F := 0; K:=1;
ForI :=2 To K Do
F :=F + 1;
F :=0; I:=1;
Repeat
I := I+1;
F := F+I;
Until <=3;
F :=0; I:=1;
WhileI <=3 Do
Begin
F:=F +I;
I :=I+1
End;
4. Сколько раз выполнится следующий цикл?
K, I :Integer;
For I :=1 To K+2 Do
K := K+1;
5. Какие из приведенных описаний массивов являются неправильными?
Var B :array [2, 7] of real;
Type Mas1 = array [1..8] ofinteger;
Var A1 , A2 :Mas1;
VarC : array [-2..7] ofinteger;
VarB : array ['B' .. 'F'] ofinteger;
6. Сколько элементов содержит ниже описанный массив:
Var С: array ['a' .. 'p'] ofreal;