Помощь - Поиск - Пользователи - Календарь
Полная версия: Переделайте с процедурами.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
TreyOl
Готовая программа, только требуют с процедурами что бы были команды.

помогитею

Код

uses crt;
const n=4;

type city=record
name:string;
nar: byte;
kol: integer;
end;

var
temp:string;
arr :array[1..n] of city;
i,max,q:integer;
Ans,nam:string;
Tname:string;
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('Введите город');
readln(temp);
for i:=1 to n do
  if temp=arr[i].name then Tname:=arr[i].name;

  if (temp<> arr[1].name) and (temp <> arr[2].name) and (temp<> arr[3].name) and (temp<>arr[4].name) then writeln('Вы ввели неверный город');
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('Производить ввод данных?(y/n)');
readln(ans);
until ans<>'y';

for i:=1 to n do
begin
writeln(i,' ', arr[i].kol);
  if max < arr[i].kol  then begin max:=arr[i].kol;
q:=i;

       end;
       end;
       writeln('Максимальное количество наркоманов в городе ',arr[q].name,', их ', max);


end.
Krjuger
Ну не создавай ты новые темы,пиши в предыдущих,а по делу
Цитата
требуют с процедурами что бы были команды.

С процедурами это понятно,но вот обьясни, что за команды?футбольные чтоли? наркоманы на команды разбились?Пожалуйста,пиши болеее развернуто,что тебе нужно.Тогда тебе быстрее и правильнее ответят.Если вы все таки отказались от использования перечислимых типов,то ваш код можно изрядно сократить.Например надобность в переменной Tname вообще отпала, можно смело удалить все,где оно попадается.
if Tname=arr[i].name then станет if temp=arr[i].name then
TreyOl
Цитата(Krjuger @ 21.02.2012 21:13) *

Ну не создавай ты новые темы,пиши в предыдущих,а по делу



Нужно использовать модуль и соответственно + процедуры.

эта часть идет как отдельная процедура
writeln('Введите город');
readln(temp);
for i:=1 to n do
if temp=arr[i].name then Tname:=arr[i].name;

if (temp<> arr[1].name) and (temp <> arr[2].name) and (temp<> arr[3].name) and (temp<>arr[4].name) then writeln('Вы ввели неверный город');


потом эта
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('Производить ввод данных?(y/n)');
readln(ans);


и последняя
for i:=1 to n do
begin
writeln(i,' ', arr[i].kol);
if max < arr[i].kol then begin max:=arr[i].kol;
q:=i;

end;
end;


просьба использовать паскалевские теги (см. п.2 вверху этой страницы)
Krjuger
Ну тогда все будет вот так вот.Вот файл модуля.

Unit Help2;

interface
type
city=record
name:string;
nar: byte;
kol: integer;
end;

procedure MyCreate(var arr:array of city);
procedure MyInput(n:integer;var arr:array of city;temp:string);
function MySearch(n:integer;arr:array of city):integer;

implementation

procedure MyCreate;
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;
end;

procedure MyInput;
var
i:integer;
begin
if (temp<> arr[1].name) and (temp <> arr[2].name) and (temp<> arr[3].name) and (temp<>arr[4].name) then
writeln('Вы ввели неверный город');
for i:=1 to n do
if temp=arr[i].name then
begin
writeln('употребляешь нарктотики?');
readln(arr[i].nar);
if arr[i].nar=1 then
arr[i].kol:=arr[i].kol+1;
end;
end;

function MySearch;
var
i:integer;
max:integer;
begin
max:=0;
for i:=1 to n do
begin
writeln(i,' ', arr[i].kol);
if max < arr[i].kol then
begin
max:=arr[i].kol;
MySearch:=i;
end;
end;
end;
begin
end.


Ну а вот сам файл программы.

uses Help2;
const n=4;
Var
arr:array[1..4] of city;
numb:integer;
temp:string;
ans:string;
begin
MyCreate(arr);
repeat
writeln('Введите город');
readln(temp);
MyInput(n,arr,temp);
writeln('Производить ввод данных?(y/n)');
readln(ans);
until ans<>'y';

numb:=MySearch(n,arr);
writeln('Narikov bolshe v ',arr[numb+1].name,', ih ', arr[numb+1].kol);
readln;
end.


Пробуй проверяй,пиши результат и не пропадай,новую тему тоже создавать ненадо. smile.gif


P.s.Вопрос к более опытным.Поначалу, я хотел цикл Repeat until оставить внутри процедуры MyInput, но на строке readln(temp); он мне начал выдавать ошибку 104, что не может найти путь к файлу....Пришлось цикл вынести и передавать temp, как переменную,но почему такое произошло я не могу понять.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.