Пример 3
Пассажирский самолет может поднять груз общим весом 30 т. Составить программу для определения веса почтового груза, который можно поместить в самолете после посадки пассажиров и загрузки их багажа. Во время регистрации пассажиров ЭВМ должна подсчитывать количество пассажиров (условный вес одного пассажира 70 кг). Предусмотреть возможность ввода номера пассажира и веса его багажа в таблицу и вывода таблицы на экран. Упорядочить номера пассажиров в зависимости от веса багажа пассажиров. Unit Work;
Interface Const N = 7; {количество элементов массива} Type mas = array [1..N] of integer; Procedure View(x: mas; l:integer) {информация о пассажирах} Procedure zapolnenie (var x: mas); {заполнение элементов массива} procedure Create(var x: mas; var l:integer); {регистрация пассажиров} procedure View_sort(x: mas; l:integer); {oтсортированный просмотр пассажиров} procedure Gruz(x: mas; l:integer); {почтовый груз} procedure sort(var x,y: array of integer; count: integer); {сортируется массив x, а элементы y переставляются соответственно}
Implementation
{информация о пассажирах} procedure View(x: mas; l:integer); var i, S: integer; begin
Writeln(' Информация о пассажирах'); Writeln('| № п/п| Регистрационный № | Вес багажа |'); Writeln('_________________________________________'); S:= 0; For i:= 1 to l do begin WriteLn('|', i:4, ' | ', x[1,i]:6,' | ', x[2,i]:6,' | '); S:= S + x[2,i] + ves; Writeln('_________________________________________'); end;
Writeln ('Всего ', l, ' пассажиров'); Writeln ('Общий вес ', S); ReadKey; end;
{регистрация пассажиров} procedure Create(var x: mas; var l:integer); var i, S: integer; ch: char; begin Writeln('Регистрация пассажиров'); i:= 0; S:= 0; repeat inc(i); write('Введите регистрационный номер ',i, '-го пассажира '); ReadLn(x[1,i]); write('Введите вес багажа ',i, '-го пассажира '); ReadLn(x[2,i]); S:= S + x[2,i] + ves; Write('Продолжить? (Y/N) '); ReadLn(ch); If (i > N) or (S > N_max) then begin writeln('Самолет перегружен!'); break end; until (ch='N') or (ch='n'); l:= i; Writeln ('Регистрация завершена'); ReadKey; end; {oтсортированный просмотр пассажиров} procedure View_sort(x: mas; l:integer); var y: mas; t,t1: mas1;
begin t:= x[2]; t1:= x[1]; sort(t,t1,l); y[1]:= t1; y[2]:= t; Writeln('Упорядоченный вывод '); View(y,l); end;
{почтовый груз} procedure Gruz(x: mas; l:integer); var i, S: integer; begin
S:= 0; For i:= 1 to l do begin S:= S + x[2,i]; end;
Writeln ('Всего ', l, ' пассажиров'); Writeln ('Общий вес багажа ', S); Writeln ('Общий вес пассажиров ', ves * l); Writeln ('Вес почтового груза ', N_max - S - ves *l); ReadKey; end;
{сортировка массивов} procedure sort; var i,k,c: integer; f: boolean;
begin k:= 0; repeat f:= true; for i:= 0 to count-k-2 do begin if x[i] > x[i+1] then begin c:= x[i]; x[i]:= x[i+1]; x[i+1]:= c; c:= y[i]; y[i]:= y[i+1]; y[i+1]:= c; f:= false end; end; inc(k); until f; end; end.
Program Lab_Rab_6_4; Uses Crt, Work; Const N_max = 30000; {максимальная грузоподъемность самолета} N = 300; {максимальное количество пассажиров} Ves = 50; {условный вес пассажира} Type mas1 = array [1..N] of integer; mas = array [1..2] of mas1;
var Ch: integer; {пункт меню} A: mas; Count: integer;
Begin Count:= 0; Repeat ClrScr; Writeln('1 - Регистрация пассажиров '); Writeln('2 - Просмотр пассажиров '); Writeln('3 - Отсортированный вывод '); Writeln('4 - Почтовый груз '); Writeln('5 - Выход '); Writeln; Write('Введите № пункта меню - '); ReadLn(Ch); ClrScr; Case ch of 1: Create (A,Count); 2: View(A,Count); until Ch=5; End.
Задание 3.3 (12 баллов) Написать программу в процедурном стиле. Указания. Интерфейс программы оформить в виде некоторого меню, пункты которого соответствуют заданиям варианта. Выполнить процедурную декомпозицию задачи методом пошаговой детализации. Реализацию выделенных подзадач оформить в виде модуля. Подготовить тесты иллюстрирующие правильность работы программы.
|