Разработка многомодульного проекта — КиберПедия 

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

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

Разработка многомодульного проекта

2021-04-18 44
Разработка многомодульного проекта 0.00 из 5.00 0 оценок
Заказать работу

Разработка модулей проекта

Модуль 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

Usesconvertor, 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

UsesWindows, 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.

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

1. Из каких 2 –х частей может состоять структура данных – запись?

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

3. Какое количество памяти выделяется переменной типа запись, и как размещаются данные в этой переменной?

4. Как обратиться к элементу записи: - простой структуры; - типа массив?

5. Приведите определение структуры данных для хранения сведений о результатах сессии студента, обучающегося в вузе в течении 5 лет и получающего каждую сессию пять оценок.

6. Приведите пример записного типа с вариантной частью.

7. Что такое «уточненное имя»?

8. Как рассчитать количество памяти, выделяемой под переменную – запись?

9. Определите имя элемента в структуре структуры mass:

Type

 data=record

Day:1..31; Momth:1..12;Years:word;

End;

Tar=array [byte] of data;

Var mass:Tar;

10. Для чего используется оператор with? Продемонстрируйте его использование при организации ввода данных для примера п.4.

11. Определите структуру для хранения данных линейного многочлена n-ой степени вида  и алгоритм для ее заполнения. Подсказка: данными являются коэффициенты и степени; члены многочлена, поступающего на обработку, не обязательно располагаются по возрастанию степеней.

 

Лабораторная работа 10

 


Поделиться с друзьями:

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.02 с.