|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
05.01.2016, 23:46 | #1 (permalink) |
Member
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
|
Тема: записи; Pascal ABC; Нахождение максимального багажа
Задача: Багаж пассажира характеризуется количеством вещей и общим весом вещей. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно - действительное (вес в килограммах). 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. |
05.01.2016, 23:46 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Эти обсуждения очень схожи с вашей темой Создание программы. Тема: типизированные файлы. Pascal ABC Pascal, задачи на записи и графические построения Тема записи. Паскаль Задача. Записи Pascal Pascal ABC. Массивы. Нахождение значения переменной Y Pascal ABC, записи, нужен вывод отсортированной строки |
06.01.2016, 11:39 | #2 (permalink) |
Специалист
Регистрация: 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. |
06.01.2016, 13:23 | #3 (permalink) |
Member
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
|
Все отлично,вы правы оказалось все проще чем я думала, огромное спасибо)) Я поменяла немного выводы и поменяла язык))) Если нужно будет кому нить пишите.
И еще можно спросить? Мне нужно разобраться с С++, может вы ведете видео блоги (видео уроки), книги по которым вы разбирались , поделитесь ссылкой или названием книг. Спасибо . |
06.01.2016, 16:33 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Сожалею. |
|
07.01.2016, 02:57 | #5 (permalink) |
Member
Регистрация: 05.01.2016
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 60
|
Жаль, но вы подумайте об этом на будущее, программы у вас гениальные и поясняете вы доступно)))Удачи ) Спасибо.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|