2014 dxdy logo

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

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




 
 Procedure (Pascal)
Сообщение17.05.2017, 21:53 
Написал процедуру, не хочет запускать, пишет что:
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 
Даже если бы он и не писал этого, заводить только глобальные переменные — это как бросать шкурки от бананов себе под ноги. :-) Определите переменные (которые нужны) в каждой функции отдельно, и оставьте глобальными только те, которые используются сразу несколькими. И ошибка должна будет уйти, и поддерживаемость кода увеличиться чуть-чуть.

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

 
 
 
 Re: Procedure (Pascal)
Сообщение17.05.2017, 22:32 
Спасибо, помогло. Можете подсказать как сделать программу красивее, а то при запуске всё в кашу превращается.

 
 
 
 Re: Procedure (Pascal)
Сообщение18.05.2017, 00:22 
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 
Проблема в том, что она должна чистить экран после начала каждой процедуры, но она это делает частично.
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group