22.05.2013, 17:50 | #1 (permalink) |
Member
Регистрация: 06.01.2012
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль, задача на записи
(для лиц старце 18 лет): род занятий(учеба, работа, пенсия), место учебы, работы, (для пенсионеров год выхода на пенсию). - Найти квартиры с максимальным числом жильцов. - Найти самого юного и самого пожилого жильца; - Найти студентов, пенсионеров. Помогите пожалуйста, программа работает, но не правильно и не полностью. Нужно что бы еще выводило (например, когда находим самого юного жильца, то должно вывести "Самому юному жителю дома 15 лет. это Иванов Петр из 5 квартиры". Не могу ничего придумать, помогите. Код:
Program Dom; Uses crt; Const n=4; {Кол-во Квартир} Type Kvartira = record NomKv: integer; {Номер квартиры} Famil: string; {Фамилия} Imya: string; {Имя} Vozrast: integer; {Возраст} RodZan: string; {Род занятий(учеба, работа, пенсия)} Mesto: string; {Место работы, учебы, либо год выхода на пенсию} end; Var x: array [1..n] of Kvartira; max, MaxKv,SU,SP, i, k: integer; MaxKolJilKv: integer; {Максимальное кол-во жителей в квартире} SamUnn: integer; {Самый юный житель} SamPoj: integer; {Самый пожилой житель} Stud: integer; {Студент} Pension: integer; {Пенсионер} Begin clrscr; For i:= 1 to n do {Вводим данные о квартирах} with x[i] do begin Writeln('Введите номер квартиры: '); Readln(NomKv); Writeln('Введите фамилию: '); Readln(Famil); Writeln('Введите имя: '); Readln(Imya); Writeln('Введите возраст: '); Readln(Vozrast); Writeln('Введите род деятельности(учеба, работа, пенсия): '); Readln(RodZan); Writeln('Место(учебы, работы) либо год выхода на пенсию: '); Readln(Mesto); end; Writeln(' '); For i:= 1 to n do {Выводим данные на экран} with x[i] do begin Writeln('Номер квартиры: ',NomKv:2,' Фамилия: ',Famil:10,' Имя: ',Imya:10,' Возраст: ',Vozrast:2,' Род занятий: ',RodZan:8,' Место: ',Mesto:15); end; For i:= 1 to n do begin for k:= i+1 to n do begin if x[i].NomKv=x[k].NomKv then inc(MaxKolJilKv); {Номер квартиры с максимальным кол-вом жильцов } if max < x[i].NomKv then {Максимальное кол-во жильцов в квартире} begin max:=x[i].NomKv; MaxKv:=i; if SU > x[i].Vozrast then {Самый юный житель дома} begin SU:=x[i].Vozrast; SamUnn:=i; if SP < x[i].Vozrast then {Самый пожилой житель дома} begin SP:=x[i].Vozrast; SamPoj:=i; end; end; end; end; end; { выводим результат} writeln('В квартире '+IntToStr(MaxKolJilKv)+'максимальное кол-во жильцов ('+IntToStr(MaxKv)+')'); writeln(''); writeln('Самому юному жителю дома '+IntToStr(SamUnn)+' лет '); writeln(''); writeln('Самому пожилому жителю дома '+IntToStr(SamPoj)+' лет '); writeln(''); Readln; end. |
22.05.2013, 17:50 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Обычно первым делом эффективнее всего прочитать похожие темы Задача, Паскаль Задача, Паскаль Задача. Записи Pascal Паскаль. Проверить наличие цифр в записи числа Задача. Паскаль Паскаль и записи |
22.05.2013, 21:45 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Знаете... попытался отладить - запутался. Много ошибок, но дело не в этом. Я бы на Вашем месте переработал программу, создав массив записей именно по КВАРТИРАМ. Сейчас же у Вас, несмотря на комментарии, массив идет по ЖИТЕЛЯМ. Но если создавать массив по КВАРТИРАМ, то каждое поле такой записи должно стать массивом уже по жильцам квартир. Иначе совсем кошмар.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|