Помощь - Поиск - Пользователи - Календарь
Полная версия: Программа о статистике употребления наркотиков в разных городах
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
TreyOl
(начало тут: помогите.[двумерные массивы+записи] , Lapp )

В N городах провели обследование жителей на предмет употребления или не-употребления ими наркотиков (1 - употребляет, 0 - не употребляет). Результаты обсле-дования жителей поступают не упорядоченными по городам. Определить города с мак-симальной тенденцией к употреблению наркотиков.


uses crt;
const n=4;
type
town=(Magnitogorsk,Saratov,Moscow,Perm);
type city=record
name:town;
nar: byte;
kol: integer;
end;

var
temp:string;
arr :array[1..n] of city;
i:integer;
Ans:char;
Tname:town;
begin
arr[1].name:=Magnitogorsk;
arr[2].name:=Saratov;
arr[3].name:=Moscow;
arr[4].name:=Perm;
arr[1].kol:=0;
arr[2].kol:=0;
arr[3].kol:=0;
arr[4].kol:=0;
repeat
writeln('Vvedite gorod');
readln(temp);
if temp='Magnitogorsk' then
Tname:=Magnitogorsk
else
if temp='Saratov' then
Tname:=Saratov
else
if temp='Moscow' then
Tname:=Moscow
else
if temp='Perm' then
Tname:=Perm
else
writeln('Vi vveli neverniy gorod');

for i:=1 to n do
if Tname=arr[i].name then
begin
writeln('употребляешь нарктотики?');
readln(arr[i].nar);
if arr[i].nar=1 then
arr[i].kol:=arr[i].kol+1;
end;
writeln('prodolzit* vvod?(y/n)');
Ans:=readkey;
until ans<>'y';
for i:=1 to n do
writeln(i,' ', arr[i].kol);

readln;
end.
мисс_граффити
подредактировать чтобы получить какой результат? т.е. какова цель редактирования?
TreyOl
Цитата(мисс_граффити @ 16.02.2012 16:23) *

подредактировать чтобы получить какой результат? т.е. какова цель редактирования?

Да..
там немного не так с выводом города.
и нужно в конце вывести город с наибольшим результатом.
Krjuger
А попросить помощи в старой теме,где основа сего творенья была написана, религия не позволяет???
Для того,чтобы вывести город с максимальным результатом,его дня начала надо найти,что было вам сказано еще в прошлый раз...Более того, вариант, когда вместо одного из городов вы напишите какую-нибудь лабуду, работать не станет, угадайте почему smile.gif А сам вывод будет практически идентичным тому,как делался ввод.

if Res=Magnitogorsk then
writeln('Magnitogorsk')
else
if Res=Saratov then
writeln('Saratov')
else
if Res=Moscow then
writeln('Moscow')
else
writeln('Perm');


Ну а как найти максимум и присвоить значение соотв. города переменной Res, придумайте сами, кстати Res: town;
Lapp
Юля, Крюгер прав, лучше было бы продолжить старую тему. Я не стал объединять, но название именил (читай Правила!)

По теме..
Крюгер, а почему бы не употребить оператор case? Он как раз для таких случаев сделан.
case Res of
Magnitogorsk: writeln('Magnitogorsk');
Saratov: writeln('Saratov');
Moscow: writeln('Moscow');
Perm: writeln('Perm');
else writeln('town is not recognized');
end;


Но я бы посоветовал сделать не так, а вот так..
Вставь после описания типа town:
const
TownName: array[town] of string[20]= ('Magnitogorsk','Saratov','Moscow','Perm');

А при выводе результата поступай так:
writeln('Самый наркозависимый город: ',TownName[Res]);
Krjuger
Откуда я знаю, что знает ТС,а что нет,уж условие if она должна знать.Я и так только с 3 попытки более менее понял условие задачи,так вот человек обьясняет задачу.
Я вообще не понимаю, зачем нужны в этой задаче перечислимые типы,без них задача решается в разы короче и проще, всего 1 массивом из 4 целых чисел.
Lapp
Цитата(Krjuger @ 17.02.2012 16:07) *
Откуда я знаю, что знает ТС,а что нет
А какая тебе разница?.. blink.gif Решай, как считаешь нужным (то есть наилучшим способом). А на проблемы реагируй, когда они возникнут - зачем придумывать ограничения самому заранее?

Цитата
только с 3 попытки более менее понял условие задачи,так вот человек обьясняет задачу.
эээ.. ))) у тебя, извини, тоже бывают не совсем понятные посты.. ))
Это один из приятных моментов на форуме - учиться понимать других и ясно выражаться самому. Воспринимай это как бонусную задачу )).

Цитата
Я вообще не понимаю, зачем нужны в этой задаче перечислимые типы,без них задача решается в разы короче и проще, всего 1 массивом из 4 целых чисел.
В упражнениях часто так - можно проще решить иначе, но нужно использовать именно это. Что же касается именно перечислимых типов - oh boy, я с трудом припоминаю примеры, где они действительно уместны..
TarasBer
Кстати, меня бесит, когда между else и if ставят перенос строки и заводят новый блок.
Krjuger
На вкус и цвет товарищей нет,возможно у меня опыта в вычитывании кода маловато,но мне привычней так, и так меня учили, весомых причин,чтобы делать по другому я не вижу покачто.
TarasBer
Причина в том, чтобы не городить лесенку там, где условия по смыслу равноправны.
Во многих языках даже есть готовый оператор elseif. Зачастую это связано с тем, что операторные скобки в них обязательны и без elseif все были просто обязаны делать лесенки, и это не устраивало народ, вот и ввели этот оператор.
Krjuger
Не сталкивался, приму к сведениям.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.