Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб12-17 (Delphi) - выполнять в мое отсутствие.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
3.73 Mб
Скачать

1. Из таблицы 3.1 взять условие задачи (вариант согласовать с преподавателем). Таблица 3.1

Функция

Функция

1

,

x[0;1], dx=0,1

16

, , x[0;1], dx=0,1

2

, , x[0;1] и dx=0,1

17

, ; x[0;1], dx=0,1

3

, , x[20;30], dx=1

18

,

; x[1;2], dx=0,1

4

, ,

x[0;1] и dx=0,1

19

, , x[0;1], dx=0,1

5

, Z0=10, , x[10;20], dx=1

20

,

;

x[0;1]; dx=0,1; Z0=1

6

, , x[10;20], dx=1

21

, , x[0;1], dx=0,1

7

, , x[0;1], dx=0,1

22

, ,

x[0;1], dx=0,1

8

, , x[0;1], dx=0,1

23

, ; x[0;1], dx=0,1

9

, , , x[0;1], dx=0,1

24

, ; x[0;1], dx=0,1

10

, , x[0;1], dx=0,1

25

, , x[0;1], dx=0,1

11

, , x[0;1], dx=0,1

26

, , x[0;1], dx=0,1

12

, ,

x[0;10], dx=1

27

, , x[0;1], dx=0,1

13

, , x[1;2], dx=0,1

28

,

x[0;1], dx=0,1

14

, ,

, x[0;1], dx=0,1

29

, ; x[0;1], dx=0,1

15

, , x[0;1], dx=0,1

30

, ; x[0;1], dx=0,1

2. Составьте блок-схему и создайте оконное приложение для расчета значений Z с использованием процедур или функций (см. лабораторную работу №1 и приведенный ниже пример).

Пример:

Вычислить

Блок-схема алгоритма с использованием процедуры (рис.3.1).

Р ис.3.1

Программа 1 с использованием процедуры:

program p1;

{$APPTYPE CONSOLE}

uses SysUtils;

var а,b,c,tl,t2,t3,u:real;

procedure max(x,y:real;var z:real);

begin

if х>у then z := х else z := у

end;

begin

writeln('Enter а,b,с');

readln(a,b,c);

max(a,a+b,tl);

шах(а,b+c,t2);

max(a+b*c,a*c,t3);

u := (tl+t2)/(1+t3);

writeln('u=',u:7:3);

readln

end.

Блок-схема алгоритма с использованием функции (рис.3.2).

Р ис.3.2

Программа 2 с использованием функции:

program p2;

{$APPTYPE CONSOLE}

uses SysUtils;

var а,b,c,u:real;

function max(x,y:real):real;

begin

if х>у then result := х else result := у

end;

begin

writeln('Enter а,b,с');

readln(a,b,c);

u := (max(a,a+b)+mах(а,b+c))/(1+max(a+b*c,a*c));

writeln('u=',u:7:3);

readln

end.

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

1. При каких условиях целесообразно использовать подпрограммы?

2. Опишите структуру процедур и функций.

3. Каково назначение процедур и функций и различие в их записи?

4. Перечислите правила описания и определения функций.

5. Перечислите правила описания и определения процедур.

6. Как передаются параметры в подпрограмму?

7. Как согласуются формальные и фактические параметры?

8. Подробно опишите программный код, который разработан для выполнения лабораторной работы.

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

ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ

СТРУКТУРИРОВАННЫХ ТИПОВ ДАННЫХ

Цель:

- изучить правила описания и определения массивов на языке Object Pascal;

- получить практические навыки программирования на языке Object Pascal и создания оконного приложения в среде Delphi .

Общие сведения:

Массив – это упорядоченная совокупность элементов одного и того же типа. Элементы массива имеют уникальные индексы. Каждый элемент массива однозначно определяется именем массива и собственным индексом.

Массивы подразделяются на статические и динамические.

Статические массивы - это фиксированное количество упорядоченных однотипных компонентов (элементов) с индексами. Статический массив объявляется следующим образом:

var <имя массива> :array [<тип индекса (индексов)>] of <тип элементов>;

Индексом массива может быть любой порядковый тип, на практике обычно применяется тип Integer.

Доступ к компонентам массива осуществляется указанием имени массива, за которым в квадратных скобках помещается значение индекса (индексов) компонента.

Задание статического двумерного массива осуществляется следующим образом:

var <имя массива> : array[1..N,1..M] of <тип элементов>;

Динамические массивы - это массив, в котором при объявлении указывается только тип его элементов. Размеры динамических массивов изменяются в ходе выполнения программы.

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

var <имя массива> :array of <тип>;

Длина массива задается при помощи процедуры SetLength:

SetLength(<имя массива>,N);

Данная команда отводит в памяти массив на N элементов с индексами от 0 до (N-1).

Индексами динамических массивов всегда являются целые числа. Начальный индекс – всегда 0.

Доступ к элементам динамического массива аналогичен доступу к элементам статического массива.

Многомерный динамический массив объявляется следующим образом:

var <имя массива> :array of array of <тип>;

Длина многомерного динамического массива задается при помощи процедуры SetLength:

SetLength(<имя массива>,N,M);

Динамический массив из памяти удаляется следующим образом:

<имя массива>:= nil;

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

Задание:

  1. Из таблицы 4.1 взять условие задачи (вариант согласовать с преподавателем) Массив X[i,j] заполнить случайными числами, 5i7; 5j7.

Таблица 4.1

№ вар.

Задание

Диапазон

Xij

1

Вычислить и запомнить сумму и число положительных элементов каждого столбца массива.

-5; 5

2

Записать на место отрицательных элементов массива нули.

-3; 5

3

Вычислить сумму и число элементов под главной диагональю.

5; 10

4

Найти среднеарифметическое значение элементов массива.

0; 5

5

Вычислить среднеарифметическое значение элементов для каждой строки

1; 7

6

Вычислить и запомнить сумму элементов каждого столбца массива.

2; 9

7

Вычислить и запомнить сумму и число положительных элементов каждой строки массива.

-5; 3

8

Вычислить сумму и число положительных элементов над главной диагональю.

-3; 2

9

Найти наибольший элемент для каждой строки

2; 6

10

Записать элементы строк массива в обратном порядке

0; 4

11

Поменять элементы четных строк с нижними нечетными

-4; 4

12

Записать на место положительных элементов массива единицы.

-5; 4

13

Найти наибольший элемент для каждого столбца.

2; 5

14

Найти наименьший элемент массива

1; 6

15

Найти среднеарифметическое значение отрицательных элементов массива.

-4; 6

16

Вычислить сумму и число положительных элементов под главной диагональю.

-3; 1

17

Вычислить и запомнить сумму и число отрицательных элементов каждой строки массива.

-4; 5

18

Вычислить сумму элементов главной диагонали

-6; 1

19

Найти наименьший элемент каждой строки

3; 6

20

Вычислить сумму и число отрицательных элементов над главной диагональю.

-3; 4

21

Поменять элементы нечетных строк с верхними четными

4; 7

22

Найти среднегеометрическое значение элементов массива.

-2; 2

23

Вычислить среднеарифметическое значение элементов для каждого столбца

1; 7

24

Найти наибольший элемент массива

-6; 2

25

Вычислить сумму и число отрицательных элементов под главной диагональю.

-7; 4

26

Записать элементы столбцов массива в обратном порядке

2; 4

27

Вычислить и запомнить сумму и число отрицательных элементов каждого столбца массива.

-6; 6

28

Вычислить сумму и число отрицательных элементов над главной диагональю.

-6; 3

29

Найти наименьший элемент каждого столбца

2; 7

30

Найти среднеарифметическое значение положительных элементов массива.

-4; 6

2. Составьте блок-схему и создайте оконное приложение (см. приведенный ниже пример).

Пример:

В целочисленной матрице X(7,7) поменять местами первую и последнюю строки.

Решение:

Блок-схема алгоритма (рис.4.1).

1. Для нового проекта создайте новую папку.

2. Откройте новый проект, используя команду главного меню File|New Application.

3. Из страниц Standard и Additional на Form1 поместите четыре компонента Label, четыре компонента Edit, четыре компонента Button и два компонента String Grid (см. рис.4.2).

4. С помощью Инспектора Объектов свойствам компонентов StringGrid1 и StringGrid2

задайте следующие значения:

FixedCols = 0,

FixedRows = 0,

ColCount = 7,

RowCount = 7.

5. В Инспекторе Объектов для обеих таблиц выберите свойство Options и установите значение флага goEditing равным True.

Р ис.4.1

Рис.4.2

6. Установите свойства компонентов Labell, Label2, Label3 и Label4:

Labell: TLabel

Name = I_Label

Caption=’imax=’

Label2: TLabel

Name = J_Label

Caption = ‘jmax=‘

Label2: TLabel

Name = XN_Label

Caption = ‘Xнач=‘

Label4: TLabel

Name = XK_Label

Caption = ‘Xкон=‘

7. Установите свойства Editl, Edit2, Edit3 и Edit4:

Editl: TEdit

Name = I_Edit

Text = ‘ ‘

Edit2: TEdit

Name = J_Edit

Text = ‘ ‘

Edit2: TEdit

Name = XN_Edit

Text = ‘ ‘

Edit2: TEdit

Name = XK_Edit

Text = ‘ ‘

8. Для компонентов Buttonl, Button2, Button3 и Button4 задайте значение свойства Caption равным: ‘Заполнить’, ‘Расчет’, ‘Очистка’ и ‘Выход’ соответственно.

9. Активизируйте кнопку Заполнить и создайте следующий обработчик события OnC]ick:

procedure TForm1.Button1Click(Sender: TObject);

begin

randomize;

imax:=StrToInt(I_Edit.Text);

jmax:=StrToInt(J_Edit.Text);

xn:=StrToInt(XN_Edit.Text);

xk:=StrToInt(XK_Edit.Text);

for i:=0 to (imax-1) do

begin

for j:=0 to (jmax-1) do

begin

X[j,i]:=Random(xk-xn+1)+xn;

StringGrid1.Cells[j,i]:=IntToStr(X[j,i]);

end

end

end;

Нумерация строк и столбцов начинается с 0. В свойстве Cells[j,i] первый индекс обозначает номер столбца, а второй - номер строки.

10. Активизируйте кнопку Расчет и в заготовке обработчика события OnClick разместите следующий код:

procedure TForm1.Button2Click(Sender: TObject);

var d :integer;

begin

for j:=0 to (jmax-1) do

begin

d:=X[j,0];

X[j,0]:=X[j,(imax-1)];

X[j,(imax-1)]:=d;

StringGrid2.Cells[j,0]:=IntToStr(X[j,0]);

StringGrid2.Cells[j,(imax-1)]:=IntToStr(X[j,(imax-1)]);

for i:=1 to (imax-2)do

StringGrid2.Cells[j,i]:=StringGrid1.Cells[j,i];

end

end;

11. Для очистки первой и второй таблицы, полей ввода данных предназначена кнопка Очистка. Активизируйте её и в заготовку обработчика события поместите следующий код:

procedure TForm1.Button3Click(Sender: TObject);

begin

I_Edit.Clear;

J_Edit.Clear;

XN_Edit.Clear;

XK_Edit.Clear;

for i:=0 to (imax-1) do

begin

for j:=0 to (jmax-1) do

begin

StringGrid1.Cells[j,i]:=' ';

StringGrid2.Cells[j,i]:=' ';

end

end

end;

12. Активизируйте кнопку Выход и в обработчик события OnClick вставьте строку

Close;

13. Сохраните проект при помощи команды главного меню File|Save All и запустите его на выполнение.

Полный текст сформированного модуля lab_4.pas имеет вид:

unit lab_4;

interface

uses

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

StdCtrls, Grids;

type

TForm1 = class(TForm)

Button2: TButton;

Button3: TButton;

Button4: TButton;

I_Label: TLabel;

I_Edit: TEdit;

J_Label: TLabel;

J_Edit: TEdit;

Button1: TButton;

XN_Label: TLabel;

XK_Label: TLabel;

XN_Edit: TEdit;

XK_Edit: TEdit;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

X :array[0..6,0..6] of integer;

imax,jmax,i,j,xn,xk :integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

randomize;

imax:=StrToInt(I_Edit.Text);

jmax:=StrToInt(J_Edit.Text);

xn:=StrToInt(XN_Edit.Text);

xk:=StrToInt(XK_Edit.Text);

for i:=0 to (imax-1) do

begin

for j:=0 to (jmax-1) do

begin

X[j,i]:=Random(xk-xn+1)+xn;

StringGrid1.Cells[j,i]:=IntToStr(X[j,i]);

end

end

end;

procedure TForm1.Button2Click(Sender: TObject);

var d :integer;

begin

for j:=0 to (jmax-1) do

begin

d:=X[j,0];

X[j,0]:=X[j,(imax-1)];

X[j,(imax-1)]:=d;

StringGrid2.Cells[j,0]:=IntToStr(X[j,0]);

StringGrid2.Cells[j,(imax-1)]:=IntToStr(X[j,(imax-1)]);

for i:=1 to (imax-2)do

StringGrid2.Cells[j,i]:=StringGrid1.Cells[j,i];

end

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

I_Edit.Clear;

J_Edit.Clear;

XN_Edit.Clear;

XK_Edit.Clear;

for i:=0 to (imax-1) do

begin

for j:=0 to (jmax-1) do

begin

StringGrid1.Cells[j,i]:=' ';

StringGrid2.Cells[j,i]:=' ';

end

end

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Close;

end;

end.

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

1. Какие структурированные типы данных используются в языке программирования Object Pascal?

2. Какие операторы языка используются для описания массивов?

3. В чем состоит особенность организации цикла при обработке массивов?

4. Укажите особенности ввода и вывода массивов.

5. Как получить случайное число с заданного интервала?

6. Приведите порядок размещения компонентов на форме.

7. Подробно опишите программный код, который разработан для выполнения лабораторной работы.

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

ОБРАБОТКА ФАЙЛОВЫХ СТРУКТУР ДАННЫХ

Цель работы: овладение навыками алгоритмизации и программирования файловых структур данных; проектирование структуры файла; чтение данных из файла.

Общие сведения

Файл – это набор информации, имеющий имя. Object Pascal располагает средствами создания и обработки файлов различных типов. Чтобы получить доступ к файлу, нужно связать созданное в Delphi приложение с некоторым файлом для чтения или записи информации при помощи переменных файлового типа, объявленных как:

TextFile – текстовый файл;

File of <тип> – типизированный файл;

File – нетипизированный файл.

Пример описания файловых переменных:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]