
Пример 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.