Показать сообщение отдельно
Старый 05.01.2016, 23:46   #1 (permalink)
hedgehod
Member
 
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию Тема: записи; Pascal ABC; Нахождение максимального багажа

Здравствуйте. Посмотрите пожалуйста задачу, первую часть я написала, она универсальна, т.е. работает для любых случаев, а вот 2 часть (b) никак не выходит сделать ее универсальной.
Задача: Багаж пассажира характеризуется количеством вещей и общим весом вещей. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно - действительное (вес в килограммах).
a) Определить, имеются ли два пассажира, багажи которых совпадают по числу вещей и различаются по весу не более чем на 0,5 кг.
b) Выяснить, имеется ли пассажир, багаж которого превышает багаж каждого из остальных пассажиров и по числу вещей, и по весу.

Const n=3;
Type bag = record
kol:byte;
ves:real;
end;
Var passagir:array[1..3] of bag;
i,j, k,ii :integer;
max_kol,max_ves:real;
Begin
For i:=1 to n do with passagir[i] do begin
Writeln ('введите данные', i,'-го пассажира');
Writeln ('введите количество вещей');
Readln (kol);
Writeln ('введите общий вес багажа');
readln (ves);
end;

k:=1; //начало 1 части
For i:=1 to (n-1) do
for j:=i+1 to n do begin
if (passagir[j].kol=passagir[i].kol) then
if (passagir[j].ves>=passagir[i].ves-0.5) and (passagir[j].ves<=passagir[i].ves+0.5) then k:=k+1; end;
if k>n then writeln('у ', n,' пассажиров багаж совпадает')
else if k=n then writeln('у ', n-1,' пассажиров багаж совпадает')
else if (k<n) and (k<>1) then writeln('у ', k,' пассажиров багаж совпадает')
else if k=1 then Writeln ('нет пассажиров с одинаковым багажом');

max_kol:=0; //начало 2 части
max_ves:=0;
ii:=0;
For i:= 1 to (n-1) do
for j:=i+1 to n do begin

if (passagir[i].kol=passagir[j].kol)and (passagir[i].ves=passagir[j].ves) then
if (passagir[j].kol=max_kol)or (passagir[j].ves=max_ves) then begin
max_kol:=0;
max_ves:=0;
ii:=0;
end
else
if (passagir[j].kol>max_kol)and (passagir[j].ves>max_ves) then begin

max_kol:=passagir[j].kol;
max_ves:=passagir[j].ves;
ii:=j;
end;
end;
if (max_kol=0) and (max_ves=0) then Writeln('нет одного пассажира багаж которого превышает багаж остальных')
else Writeln('Багаж ', ii, ' пассажира превышает багаж остальных',' max_kol=', max_kol, ' max_ves=', max_ves);
end.
hedgehod вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070