
- •Лабораторная работа №9 Комбиированный тип - запись Тип данных – Запись
- •Формат определения типа.
- •Правила создания записного типа
- •Представление переменной типа запись в памяти
- •Доступ к значению поля в записи
- •Расчет объема памяти, выделяемого переменной типа запись
- •Требования к выполнению лабораторной работы
- •Варианты заданий
- •Пример разработки одномодульного приложения.
- •Контрольные вопросы
- •Лабораторная работа 10 Разработка приложений под Windows средст вами Delphi Создание оконного приложения
- •Требования к выполнению лабораторной работы
- •Контрольные вопросы
- •Лабораторная работа №11 Объектно-ориентированное программирование Определение класса
- •Наследование
- •Требовния к выполнению лабораторной работы
- •Варианты заданий
- •Контрольные вопросы.
- •Лабораторная работа №12 файлы Текстовый файл
- •Типизированный файл
- •Требования к выполнению лабораторной работы
- •Варианты заданий
- •Контрольные вопросы
- •Библиографический список
Пример разработки одномодульного приложения.
Разработать приложение, выполняющее арифметические операции с обыкновенной дробью, состоящей из числителя и знаменателя. Числитель и знаменатель представлены целыми числами.
Пример кода одномодульного приложения
Program PrimRec;
Uses
sysutils;
type
TDroby=record
a:integer;
b:integer;
end;
TDar=array of Tdroby;
//Добавление записи в массив
procedure Add_to_Array(var Mass:TDar;r:TDroby);
var
i:word;
begin
i:=high(Mass);
setlength(Mass,i+1);
Mass[i]:=r;
end;
//Сложение двух дробей
function ADD(r1,r2:TDroby):TDroby;
begin
result.a:=r1.a*r2.b+r1.b*r2.a;
result.b:=r1.b*r2.b;
sokrashenye_droby(result);
end;
//наибольший общий делитель числителя и знаменателя дроби //для сокращения дроби
function NOD_a_b(r:TDroby):integer;
var
n,m,modr:integer;
begin
n:=r.a;
m:=r.b;
modr:= n mod m;
while modr<>0 do
begin
n:=m;
m:=modr;
modr:=n mod m;
end;
result:=m;
end;
//Сокращение дроби
procedure sokrashenye_droby(var r:Tdroby);
var
del:integer;
begin
del:=NOD_a_b(r);
r.a:=r.a div del;
r.b:=r.b div del;
end;
//Нахождение суммы дробей массива
function Add_Mass(Var Mass:TDar):Tdroby;
var
i:integer;
sum:Tdroby;
begin
if length(Mass)=0 then showMessage('Массив дробей не создан')
else
begin
sum.a:=Mass[0].a;
sum.b:=Mass[0].b;
for i:=1 to high(Mass) do
begin
sum:=ADD(sum,Mass[i])
end;
end;
result:=sum;
end;
//Ввод дроби
procedure input_record(var r:Tdroby;var p:boolean);
begin
p:=true;
MY_writeln('Введите дробь');
MY_writeln('Числитель');readln(r.a);
MY_writeln('Знаменатель');readln(r.b);
if (r.a=0) or (r.b=0) then p:=false
else
sokrashenye_droby(r);
end;
//Ввод данных в массив записей (дробей)
procedure input_Array(var mass:Tdar;var p:boolean);
var
otvet:char;
r:TDroby;
i:integer;
begin
i:=0;
MY_writeln('Создание массива завершается по требованию пользователя');
repeat
input_record(r); p:=true;
Add_to_Array(Mass,r);
MY_writeln('Продолжить ввод дробей Y/N');
readln(otvet)
until (otvet='N') or (otvet='n');
end;
//вывод записи
procedure out_record(var r:Tdroby);
begin
my_write('Дробь=');
writeln(r.a,'/',r.b);
end;
//Вывод массива записей
procedure out_Array(var mass:Tdar);
var
i:integer;
begin
for i:=0 to high(mass) do
with mass[i] do
write(a,'/', b,' ');
end;
procedure my_writeln(const s:string);
begin
writeln(RUSANSI1251_ASCII866(s));
end;
procedure my_write(const s:string);
begin
writeln(RUSANSI1251_ASCII866(s));
end;
//ОСНОВНАЯ ПРОГРАММА
var
r1,r2:TDroby;
mass:TDar;
n,num:byte;
p1,p2:boolean; //признаки заполнения массива
otvet:char;
sum:Tdroby;
begin
P1:=false;P2:=false;
while true do
begin
My_writeln('Набор операций');
My_writeln('1.Формирование одной дроби');
My_writeln('2.Вывод дроби');
My_writeln('3.Создание массива дробей');
MY_writeln('4.Вывод массива');
MY_writeln('5.Сложение всех дробей массива');
MY_writeln('6.Выход');
MY_writeln('Введите номер операции');
Readln(num);
case num of
1: begin
input_record(r1,p1); //p1 - признак заполнения записи
end;
2: begin
if p1 then
out_record(r1)
else
My_writeln('Дробь не введена');
end;
3: begin
input_Array(mass,p2);
end;
4:
if p2 then
out_Array( mass)
else
MY_writeln('Масcив не создан');
5:if p2 then
begin
sum:=ADD_Mass( mass);
MY_write(' Сумма=');
out_record(sum);
end
else
MY_writeln('Масcив не создан');
6:halt(0);
end
end;
end.
Разработка многомодульного проекта
Разработка модулей проекта
Модуль MY_Unit_Def
Содержит определение типа записи и типа массива записей.
unit MY_Unit_Def;
interface
type
TDroby=record
a:integer;
b:integer;
end;
TDar=array of Tdroby;
implementation
end.
Модуль MY_Unit_Input_Output
Содержит операции ввода и вывода записей и массива записей, организованные с помощью процедур стандартного ввода-вывода.
Для выполнения стандартного ввода-вывода требуется включить в интерфейсную часть модуля оператор uses и подключить модули с функциями конвертирования и определения структуры записи и массива.
Unit MY_Unit_Input_Output;
interface
Uses convertor, MY_Unit_Def;
procedure input_record(var r:Tdroby;var p:boolean);//ввод записи
procedure out_record(var r:Tdroby); //вывод записи
procedure out_Array(var mass:Tdar); //вывод массива дробей
//отображение текстовых значений в формате ASCII
procedure my_writeln(const s:string);
procedure my_write(const s:string);
//заполнение массива
procedure input_Array(var mass:Tdar;var p:boolean);
implementation
//реализация всех подпрограмм интерфейсной части
procedure input_record(var r:Tdroby;var p:boolean);
begin
p:=true;
MY_writeln('Введите дробь');
MY_writeln('Числитель');readln(r.a);
MY_writeln('Знаменатель');readln(r.b);
if (r.a=0) or (r.b=0) then p:=false
else
sokrashenye_droby(r);
end;
procedure input_Array(var mass:Tdar;var p:boolean);
var
otvet:char;
r:TDroby;
i:integer;
begin
i:=0;
MY_writeln('Создание массива завершается по требованию пользователя');
repeat
input_record(r); p:=true;
Add_to_Array(Mass,r);
MY_writeln('Продолжить ввод дробей Y/N');
readln(otvet)
until (otvet='N') or (otvet='n');
end;
procedure out_record(var r:Tdroby);
begin
my_write('Дробь=');
writeln(r.a,'/',r.b);
end;
procedure out_Array(var mass:Tdar);
var
i:integer;
begin
for i:=0 to high(mass) do
with mass[i] do
write(a,'/', b,' ');
end;
procedure my_writeln(const s:string);
begin
writeln(RUSANSI1251_ASCII866(s));
end;
procedure my_write(const s:string);
begin
writeln(RUSANSI1251_ASCII866(s));
end;
Модуль MY_Unit_Operation
Содержит подпрограммы, которые реализуют операции над массивом записей.
Необходимо включить в интерфейсную часть модуля оператор uses и подключить модули с функциями конвертирования и определения структуры записи и массива.
Unit MY_Unit_Input_Output;
interface
Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Rec_droby, MY_Unit_Def;
//сложение двух дробей
function ADD(r1,r2:TDroby):TDroby;
//НОД числ. И знам.
function NOD_a_b(r:TDroby):integer;
//создание дин.масс
procedure Add_to_Array(var Mass:TDar;r:TDroby);
//сложение всех дробей массива
function Add_Mass(Var Mass:TDar):Tdroby;
procedure sokrashenye_droby(var r:Tdroby); //сокращение дроби
implementation
procedure Add_to_Array(var Mass:TDar;r:TDroby);
var
i:word;
begin
i:=high(Mass);
setlength(Mass,i+1);
Mass[i]:=r;
end;
function ADD(r1,r2:TDroby):TDroby;
begin
result.a:=r1.a*r2.b+r1.b*r2.a;
result.b:=r1.b*r2.b;
sokrashenye_droby(result);
end;
function NOD_a_b(r:TDroby):integer;
var
n,m,modr:integer;
begin
n:=r.a;
m:=r.b;
modr:= n mod m;
while modr<>0 do
begin
n:=m;
m:=modr;
modr:=n mod m;
end;
result:=m;
end;
procedure sokrashenye_droby(var r:Tdroby);
var
del:integer;
begin
del:=NOD_a_b(r);
r.a:=r.a div del;
r.b:=r.b div del;
end;
function Add_Mass(Var Mass:TDar):Tdroby;
var
i:integer;
sum:Tdroby;
begin
if length(Mass)=0 then showMessage('Массив дробей не создан')
else
begin
sum.a:=Mass[0].a;
sum.b:=Mass[0].b;
for i:=1 to high(Mass) do
begin
sum:=ADD(sum,Mass[i])
end;
end;
result:=sum;
end;
end.
Пример кода созданного многомодульного проекта
program Drody;
{$APPTYPE CONSOLE}
Uses SysUtils, MY_Unit_Def, Convertor, MY_Unit_Input_Output in MY_Unit_Input_Output.pas, MY_Unit_Operation;
var
r1,r2:TDroby;
mass:TDar;
n,num:byte;
p1,p2:boolean; //признаки заполнения массива
otvet:char;
sum:Tdroby;
begin
P1:=false;P2:=false;
while true do
begin
My_writeln('Набор операций');
My_writeln('1.Формирование одной дроби');
My_writeln('2.Вывод дроби');
My_writeln('3.Создание массива дробей');
MY_writeln('4.Вывод массива');
MY_writeln('5.Сложение всех дробей массива');
MY_writeln('6.Выход');
MY_writeln('Введите номер операции');
Readln(num);
case num of
1: begin
input_record(r1,p1); //p1 - признак заполнения записи
end;
2: begin
if p1 then
out_record(r1)
else
My_writeln('Дробь не введена');
end;
3: begin
input_Array(mass,p2);
end;
4:
if p2 then
out_Array( mass)
else
MY_writeln('Масcив не создан');
5:if p2 then
begin
sum:=ADD_Mass( mass);
MY_write(' Сумма=');
out_record(sum);
end
else
MY_writeln('Масcив не создан');
6:halt(0); end end;end.