Название: Информатика и программирование - Лабораторный практикум (М.Г. Зайцев)

Жанр: Информатика

Просмотров: 1177


Рекомендации к выполнению

 

1. Для выполнения заданий используйте пример приложения, помещенный ниже. Внимательно прочтите, изучите и повторите этот пример. Используйте разработанное в примере приложение для выполнения заданий лабораторной работы. Для этого предварительно создайте новую папку, куда скопируйте все файлы приложения (для этого используйте в пункте Файл основного меню команду Save Project As). После чего откройте его в Delphi и внесите необходимые изменения.

2. Описания разрабатываемых в работе процедур и функций помещайте в разделе реализации (раздел модуля, который начинается после зарезервированного слова implementation) модуля формы вашего приложения.

3. Для обработки компонентов одномерного массива используйте оператор цикла For.

 

Варианты заданий

 

1. Разработайте приложение, которое обеспечивает:

 · ввод  значений  в  два  одномерных  массива  типа  array

    [0..Elmnts-1]  of Real  с клавиатуры терминала и отобра-

    жение на экране компонентов массивов;

 · вычитание массивов с отображением результата на экране.

2. Разработайте приложение, которое обеспечивает:

 · ввод  значений  в  два  одномерных  массива  типа  array

    [0..Elmnts-1] of Real с клавиатуры терминала и отображе-

    ние на экране компонентов массивов;

 · перемножение  массивов  с  отображением результата на

    экране.

3. Разработайте приложение, которое:

 · обеспечивает ввод значений в одномерный массив  типа

    array [0..Elmnts-1] of Real с клавиатуры терминала и ото-

    бражение на экране компонентов массива;

 · находит и отображает на экране сумму значений компо-

    нентов массива.

4. Разработайте приложение, которое:

 · обеспечивает ввод значений в одномерный массив  типа

    array [0..Elmnts-1] of Real с клавиатуры терминала и ото-

    бражение на экране компонентов массива;

 · находит и отображает на экране  минимальное значение

    компонентов массива.

5. Разработайте приложение, которое:

 · обеспечивает ввод значений в одномерный массив  типа

    array [0..Elmnts-1] of Real с клавиатуры терминала и ото-

    бражение на экране компонентов массива;

 · находит и отображает на экране максимальное значение

    компонентов массива.

6. Разработайте приложение, которое:

 · беспечивает  ввод  значений в одномерный  массив типа

    array [0..Elmnts-1] of Real с клавиатуры терминала и ото-

    бражение на экране компонентов массива;

 · переставляет местами значения компонентов массива в об-

    ратном порядке и отображает  на экране полученный ре-

    зультат.

7. Разработайте приложение, которое:

 · беспечивает  ввод  значений в одномерный  массив  типа

    array [0..Elmnts-1] of Real с клавиатуры терминала и ото-

    бражение на экране компонентов массива;

 · упорядочивает значения компонентов массива в порядке

    возрастания и отображает на экране полученный резуль-

    тат.

8. Разработайте приложение, которое:

 · обеспечивает ввод  значений в одномерный массив типа

    array [0..Elmnts-1] of Real с клавиатуры терминала и ото-

    бражение на экране компонентов массива;

 · упорядочивает значения компонентов массива в порядке

    убывания и отображает на экране полученный результат.

 

Пример

 

Пусть требуется написать приложение, которое обеспечило бы пользователя следующими возможностями:

· ввод значений в два одномерных массива с клавиатуры терминала и отображение на экране компонентов массивов;

· сложение массивов с отображением результата на экране.

Для решения этой задачи можно построить приложение, состоящее из одной формы следующего вида:

 

 

Назначение компонентов формы следующее:

· многострочные редакторы – компоненты мемо1, мемо2, мемо3 используются для отображения содержимого массивов а, в и с (с=а + в);

· компонент редактор (Edit1) используется для ввода с клавиатуры значений элементов массивов а и в, записи введенных в массивы значений в компоненты Мемо1 и Мемо2;

· компоненты радиокнопка «Массив А», радиокнопка «Массив В» используются для переключения ввода значений элементов массива между массивами а и в;

· компонент кнопка «Добавить» (Button1) используется для перезаписи значения элемента массива из компонента Edit1 в компонент мемо1 для массива а или в компонент мемо2 для массива в;

· компонент Button2 кнопка «Очистить» используется для очистки полей Мемо1, Мемо2, Мемо3 и установки в компоненты массивов а, в, с значений 0;

· компонент кнопка «=» (Button3) используется для вычисления суммы массивов а и в, записи результата в массив с и отображения массива с в компонент Мемо3;

· компонент (Button4) кнопка «Выход» используется для завершения работы приложения.

Чтобы пользователь не мог вносить изменений в строки компонентов Мемо1, Мемо2, Мемо3 непосредственно с клавиатуры, установите свойства Enabled этих компонентов в инспекторе объектов в False.

Предложенной форме соответствует модуль, текст которого приведен ниже.

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls;

 

type

  TForm1 = class(TForm)

    Edit1: TEdit;// ввод значений элементов массивов А и В

    Label1: TLabel;

    Label2: TLabel;

    Button1: TButton;// Добавить

    Button2: TButton;// Очистить

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    RadioButton1: TRadioButton;// ввод в массив А

    RadioButton2: TRadioButton;// ввод в массив В

    Button3: TButton;// =

    Memo1: TMemo;// A

    Memo2: TMemo;// B

    Memo3: TMemo;// C

    Button4: TButton;//Выход

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure RadioButton1Click(Sender: TObject);

    procedure RadioButton2Click(Sender: TObject);

    procedure Edit1Exit(Sender: TObject);

    procedure FormActivate(Sender: TObject);//установка начальных

//значений перед отображением формы на экран

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

const

  Elmnts = 5;//количество элементов в одномерных массивах

type

  Vector = array[0..Elmnts-1] of Real;

var

  Count1: Cardinal = 0;//число элементов, введенных в массив А

  Count2: Cardinal = 0;//число элементов, введенных в массив В

  A: Vector = (0,0,0,0,0);

  B: Vector = (0,0,0,0,0);

  C: Vector = (0,0,0,0,0);

{$R *.DFM}

 

procedure TForm1.Button1Click(Sender: TObject);

//добавление элементов с клавиатуры в массив

begin

  case RadioButton1.Checked of

  True: begin if Count1<5 then begin//заполнение массива А

                Memo1.Lines.Add(Edit1.Text);

                A[Count1]:= StrToFloat(Edit1.Text);

                inc(Count1);//Увеличивает значение Count1 на 1

              end

              else ShowMessage('Массив заполнен');

              Edit1.SetFocus;

        end;

  False: begin if Count2<5 then begin//заполнение массива В

                Memo2.Lines.Add(Edit1.Text);

                B[Count2]:= StrToFloat(Edit1.Text);

                inc(Count2);

              end

              else ShowMessage('Массив заполнен');

              Edit1.SetFocus;

        end;

  end;     

end;

 

procedure VectorSetZero(a: array of real);

var i: Cardinal;//заполняет массив А нулями

begin

  for i:= 0 to High(a) do a[i]:=0;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

//очищает массивы А, В, С нулями;

//очищает строки компонентов мемо1, мемо2, мемо3;

//устанавливает количество элементов, введенных в массивы в 0

begin

  VectorSetZero(a);

  VectorSetZero(b);

  VectorSetZero(c);

  Memo1.Lines.Clear;

  Memo2.Lines.Clear;

  Memo3.Lines.Clear;

  Count1:= 0;

  Count2:= 0;

  Edit1.SetFocus;

end;

 

procedure TForm1.RadioButton1Click(Sender: TObject);

begin

  Edit1.SetFocus;

end;

 

procedure TForm1.RadioButton2Click(Sender: TObject);

begin

  Edit1.SetFocus;

end;

 

procedure TForm1.Edit1Exit(Sender: TObject);

var a:Real;

begin

  try

  a:= StrToFloat(Edit1.Text)

  except

    on EConvertError do begin

        ShowMessage('Ошибка ввода');

        Edit1.SetFocus

    end;   

  end;

end;

 

procedure TForm1.FormActivate(Sender: TObject);

begin

  RadioButton1.Checked:= True;

  Edit1.Text:='0';

  VectorSetZero(a);

  VectorSetZero(b);

  VectorSetZero(c);

  Memo1.Lines.Clear;

  Memo2.Lines.Clear;

  Memo3.Lines.Clear;

  Edit1.SetFocus;

end;

 

procedure AddVectors(a,b: array of Real; var c: array of Real;m: TMemo );

var i:Cardinal;//сложение массивов А и В

begin

  for i:= 0 to High(a) do begin

    c[i]:= a[i]+b[i];

    M.Lines.Add(FloatToStr(c[i]))

  end

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

  AddVectors(a,b,c,Memo3);

  RadioButton1.Checked:= True;

  Edit1.SetFocus;

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

  Application.Terminate//Завершить работу приложения

end;

 

end.

 

Содержание отчета

 

1. Задание.

2. Текст программы на Object Pascal.

3. Тестовые наборы данных для тестирования приложения.

 

Контрольные вопросы

 

1. Назовите синтаксические правила описания регулярного типа (массива).

2. Какого типа может быть тип компонентов массива?

3. Какого типа может быть тип индексов массива?

4. Как подсчитать количество компонентов массива по его описанию?

5. Как сослаться на компонент массива в тексте программы?

6. Какая операция определена на всем массиве?

7. Какие операции определены на компонентах массива?

8. Что такое размер массива и размерность массива?

9. Какими должны быть индексные выражения при ссылке на компонент массива?

 10. Что такое открытый параметр-массив?

 11. Как индексируются элементы открытого параметра-мас-сива внутри подпрограммы?

 12. Для чего предназначена стандартная функция High?

 13. Для чего предназначена стандартная функция Low?

 14. Для чего используют визуальные компоненты «радио кноп-ка» (класс TRadioButton)?

 15. Что обозначает свойство Checked компонента «радио кнопка» (класс TRadioButton)?

 16. Для чего применяется метод Terminate объекта Application (класс TApplication)?

 

Лабораторная работа № 7

 

Массивы (двумерные)