2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки





Начать новую тему Ответить на тему
 
 Procedure (Pascal)
Сообщение17.05.2017, 21:53 


17/05/17
3
Написал процедуру, не хочет запускать, пишет что:
slonim.pas(26) : Переменная цикла for должна описываться в том же блоке, что и цикл for.

uses
crt, graphABC;

var
n, m, i, j, max1, max2, n1, n2: integer;
a: array[1..3, 1..25] of integer;
z: char;

procedure menu(var w: char);
begin
clrscr;
writeln('выберите пункт меню:');
writeln('Y - условие');
writeln('V - ввод данных');
writeln('R - вывод данных');
writeln('Q - выход');
readln(w);
end;

procedure yslovie;
begin
HideCursor;
write('Приводится рост учеников 3 параллельных классов, где колличество n<=25 в каждом классе. Определить номера двух самых высоких учеников в каждом классе.');writeln;
writeln;
writeln('Автор работы : ');
for i := 1 to 18 do writeln;
writeln(' Для выхода в меню нажмите Enter');
readln;
end;





procedure vvod;
begin
randomize;
n := random(25 - 15) + 14; //ввод
for i := 1 to 3 do
for j := 1 to n do
a[i, j] := random(195 - 141) + 140;


for i := 1 to 3 do //вывод
begin
for j := 1 to n do
write(a[i, j]:4);
write(' - класс №', i);
writeln;
end;
for i := 1 to 17 do writeln;
writeln(' Для выхода в меню нажмите Enter');
readln;
end;





procedure vivod;
begin
if a[1, 1] = 0 then writeln('Что ты как не человек. Данные введи сначало :)')
else begin
for i := 1 to 3 do //вывод
begin
for j := 1 to n do
write(a[i, j]:4);
write(' - класс №', i);
writeln;
end;

max1 := a[1, 1];
for i := 1 to 3 do
begin
max1 := 0;
n1 := 0;
n2 := 0;
for j := 1 to n do
if max1 < a[i, j] then begin
n2 := n1;
max2 := max1;
n1 := j;
max1 := a[i, j];
end
else if max2 < a[i, j] then begin
max2 := a[i, j];
n2 := j;
end;
writeln('В ', i, ' классе, ученики под номером ', n1:2, ' и ', n2:2, ' самые высокие');
end;
end;
for i := 1 to 14 do writeln;
writeln(' Для выхода в меню нажмите Enter');
readln;
end;




var
w: char;

begin
repeat
clrscr;
menu(w);
case upcase(w) of
'Y':
begin
clrscr;
yslovie;
end;
'V':
begin
clrscr;
vvod;
end;
'R':
begin
clrscr;
vivod;
end;
'Q': closewindow;
end;
until upcase(w) = 'Q';
end.

 Профиль  
                  
 
 Re: Procedure (Pascal)
Сообщение17.05.2017, 22:10 
Заслуженный участник
Аватара пользователя


27/04/09
21250
Уфа
Даже если бы он и не писал этого, заводить только глобальные переменные — это как бросать шкурки от бананов себе под ноги. :-) Определите переменные (которые нужны) в каждой функции отдельно, и оставьте глобальными только те, которые используются сразу несколькими. И ошибка должна будет уйти, и поддерживаемость кода увеличиться чуть-чуть.

Чтобы отступы в коде не пропадали (надеюсь, они были? а то вряд ли кто-то станет приглядываться к нему внимательно, если предыдущих мер окажется всё-таки недостаточно), вставьте его заново внутри [syntax lang="pascal"]…[/syntax], пока можете редактировать пост.

 Профиль  
                  
 
 Re: Procedure (Pascal)
Сообщение17.05.2017, 22:32 


17/05/17
3
Спасибо, помогло. Можете подсказать как сделать программу красивее, а то при запуске всё в кашу превращается.

 Профиль  
                  
 
 Re: Procedure (Pascal)
Сообщение18.05.2017, 00:22 
Заслуженный участник


06/07/11
4015
Subnes в сообщении #1217040 писал(а):
Можете подсказать как сделать программу красивее, а то при запуске всё в кашу превращается.
Вы о чем? Как сделать так:
Используется синтаксис Pascal
procedure menu(var w: char);
begin
  clrscr;
  writeln('выберите пункт меню:');
  writeln('Y - условие');
  writeln('V - ввод данных');
  writeln('R - вывод данных');
  writeln('Q - выход');
  readln(w);
end;
 

?

Это делается вот так:

Код:
[syntax lang="pascal"]
procedure menu(var w: char);
begin
  clrscr;
  writeln('выберите пункт меню:');
  writeln('Y - условие');
  writeln('V - ввод данных');
  writeln('R - вывод данных');
  writeln('Q - выход');
  readln(w);
end;
[/syntax]

 Профиль  
                  
 
 Re: Procedure (Pascal)
Сообщение18.05.2017, 01:22 


17/05/17
3
Проблема в том, что она должна чистить экран после начала каждой процедуры, но она это делает частично.
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
uses
  crt, graphABC;

var
  n, m, max1, max2, n1, n2: integer;
  a: array[1..3, 1..25] of integer;
  z: char;

procedure menu(var w: char);

begin
  clrscr;
  writeln('выберите пункт меню:');
  writeln('Y - условие');
  writeln('V - ввод данных');
  writeln('R - вывод данных');
  writeln('Q - выход');
  readln(w);
end;

procedure yslovie;
var
i: integer;
begin
  HideCursor;
  write('Приводится рост учеников 3 параллельных классов, где колличество n<=25 в каждом классе. Определить номера двух самых высоких учеников в каждом классе.');writeln;
  writeln;
  writeln('Автор работы : ');
  for i := 1 to 18 do writeln;
  writeln('                         Для выхода в меню нажмите Enter');
  readln;
end;





procedure vvod;
var
i,j: integer;
begin
clrscr;
  randomize;
  n := random(25 - 15) + 14; //ввод
  for i := 1 to 3 do
    for j := 1 to n do
      a[i, j] := random(195 - 141) + 140;
 
 
  for i := 1 to 3 do    //вывод
  begin
    for j := 1 to n do
      write(a[i, j]:4);
    write(' - класс №', i);
    writeln;
  end;
  for i := 1 to 17 do writeln;
  writeln('                         Для выхода в меню нажмите Enter');
  readln;
end;





procedure vivod;var
i,j: integer;
begin
clrscr;
  if a[1, 1] = 0 then writeln('Что ты как не человек. Данные введи сначало :)')
  else begin
    for i := 1 to 3 do    //вывод
    begin
      for j := 1 to n do
        write(a[i, j]:4);
      write(' - класс №', i);
      writeln;
    end;
   
    max1 := a[1, 1];
    for i := 1 to 3 do
    begin
      max1 := 0;
      n1 := 0;
      n2 := 0;
      for j := 1 to n do
        if max1 < a[i, j] then begin
          n2 := n1;
          max2 := max1;
          n1 := j;
          max1 := a[i, j];
        end
        else if max2 < a[i, j] then begin
          max2 := a[i, j];
          n2 := j;
        end;
      writeln('В ', i, ' классе, ученики под номером ', n1:2, ' и ', n2:2, ' самые высокие');
    end;
  end;
  for i := 1 to 14 do writeln;
  writeln('                         Для выхода в меню нажмите Enter');
  readln;
end;




var
  w: char;

begin
  repeat
    clrscr;
    menu(w);
    case upcase(w) of
      'Y':
        begin
          clrscr;
          yslovie;
        end;
      'V':
        begin
          clrscr;
          vvod;
        end;
      'R':
        begin
          clrscr;
          vivod;
        end;
      'Q': closewindow;
    end;
  until upcase(w) = 'Q';
end.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: maxal, Karan, Toucan, PAV, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group