Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 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 вне форума   Ответить с цитированием

Старый 05.01.2016, 23:46
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Эти обсуждения очень схожи с вашей темой

Создание программы. Тема: типизированные файлы. Pascal ABC
Pascal, задачи на записи и графические построения
Тема записи. Паскаль
Задача. Записи Pascal
Pascal ABC. Массивы. Нахождение значения переменной Y
Pascal ABC, записи, нужен вывод отсортированной строки

Старый 06.01.2016, 11:39   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ох, сударыня, да что ж Вы накрутили-то такое страшное? Всё гораздо проще. Но прежде - прошу извинить за переход на английский, это не для выпендрежа, а просто у меня DOS-кодировка и потому с кириллицей без необходимости предпочитаю не связываться. Могу, но это напряжно: перегон через самописные конверторы WINDOWS-DOS и обратно... Да ну её! И еще: уж если Вы вводите константу n, то будьте добры задать верхнюю границу диапазона массива записей, как n, а не 3.
Код:
Const
 n=5;

Type
 bag = record
        kol:byte;
        ves:real;
       end;

Var
 passagir:array[1..n] of bag;
 i,j,k,i_kol,i_ves,max_kol:byte;
 max_ves:real;
 b:boolean;

Begin
 For i:=1 to n do
  with passagir[i] do
   begin
    Writeln ('Enter the data for ', i,' passenger');
    Write('Number of places: ');
    Readln (kol);
    Write('Whole luggage weight: ');
    Readln (ves);
   end;

 k:=0; //First part beginning
 Writeln;
 Writeln('Pairs of passengers with coinciding luggage:');
 For i:=1 to (n-1) do
  for j:=i+1 to n do
   if (passagir[j].kol=passagir[i].kol) and (Abs(passagir[j].ves-passagir[i].ves)<=0.5) then
    begin
     k:=k+1;
     Writeln(i:3,' and',j:3);
    end;
  if k>0 then
   Writeln('In all there are ',k,' pairs of passengers with coinciding luggage')
  else
   Writeln ('No passengers with coinciding luggage');

 max_kol:=0; //Second part beginning
 max_ves:=0;
 For i:=1 to n do
  if passagir[i].kol>max_kol then
   begin
    i_kol:=i;
    max_kol:=passagir[i].kol;
   end;
 For i:=1 to n do
  if passagir[i].ves>max_ves then
   begin
    i_ves:=i;
    max_ves:=passagir[i].ves;
   end;

 Writeln;
 if i_kol=i_ves then
  begin
   b:=TRUE;
   for i:=1 to i_kol-1 do
    if (passagir[i].kol=passagir[i_kol].kol) and (passagir[i].ves=passagir[i_kol].ves) then b:=FALSE;
   for i:=i_kol+1 to n do
    if (passagir[i].kol=passagir[i_kol].kol) and (passagir[i].ves=passagir[i_kol].ves) then b:=FALSE;
   if b then
    begin
     Writeln('The luggage of passenger N',i_kol,' exceeds the others luggage:');
     Writeln('max_kol= ', max_kol, '  max_ves= ', max_ves:0:3);
    end;
  end;
 if (i_kol<>i_ves) or Not(b) then
  Writeln('No passengers with the luggage exceeding others');

 Readln
End.
По-моему, задача b) решается - проще некуда: находим номер пассажира с максимальным количеством мест, затем - номер пассажира с максимальным весом багажа, и если эти номера совпадают, то он и есть искомый. Но! Таких пассажиров может оказаться не один, что и проверяется, и если оказывается, что пассажиров с идентичными максимальными количеством и весом багажа больше одного, то выдается ответ, что искомого пассажира нет.
Vladimir_S вне форума   Ответить с цитированием
Старый 06.01.2016, 13:23   #3 (permalink)
hedgehod
Member
 
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию

Все отлично,вы правы оказалось все проще чем я думала, огромное спасибо)) Я поменяла немного выводы и поменяла язык))) Если нужно будет кому нить пишите.

И еще можно спросить? Мне нужно разобраться с С++, может вы ведете видео блоги (видео уроки), книги по которым вы разбирались , поделитесь ссылкой или названием книг. Спасибо .
hedgehod вне форума   Ответить с цитированием
Старый 06.01.2016, 16:33   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от hedgehod Посмотреть сообщение
И еще можно спросить? Мне нужно разобраться с С++, может вы ведете видео блоги (видео уроки), книги по которым вы разбирались , поделитесь ссылкой или названием книг. Спасибо .
Увы - должен Вас разочаровать: никаких блогов не веду, в СИ - ни бельмеса, да и в Паскале - самоучка.
Сожалею.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.01.2016, 02:57   #5 (permalink)
hedgehod
Member
 
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
По умолчанию

Жаль, но вы подумайте об этом на будущее, программы у вас гениальные и поясняете вы доступно)))Удачи ) Спасибо.
hedgehod вне форума   Ответить с цитированием
Ads

Яндекс

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

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 17:21.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.