2014 dxdy logo

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

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




 
 Procedure (Pascal)
Сообщение21.10.2012, 16:48 
Написал процедуру, не хочет запускать, пишет что
Начало.pas(44) : Переменная цикла for должна описываться в том же блоке, что и цикл for
вот тут:
Используется синтаксис Pascal
for i:=1 to baza-left do


чего он хочет? и зачем вообще проверяет процедуру мою до того, как я начал вбивать эти данные? не должен ли он сначала делать саму программу и приходить к процедуре только тогда, когда я её вызову? мб я не так оформил? вроде бы поставил всё перед основным begin'ом...а так это моя первая работа с процедурами, подскажите, на что стоит обратиться внимание, а то ищу в сети литературу и нет ничего целикового и для тех кто первый раз использует procedure

 
 
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 16:49 
Аватара пользователя
Приведите весь текст процедуры.

 
 
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 16:51 
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
procedure Razdel;
          begin
          baza:=(right-left) div 2+1;
          mesto_bazu:=baza;
            repeat
              repeat
                if left=baza-1 then break;
                if filelens[left]>filelens[baza] then break; {ищем элемент слева от базы, большие базы}
                left:=left+1;
              until left=baza-1;
              repeat
                if right=baza+1 then break;
                if filelens[baza]>filelens[right] then break; {ищем элемент справа от базы, меньший базы}
                right:=right-1;
              until right=baza+1;
            if (filelens[left]>filelens[right])and (filelens[left]>filelens[baza]) and (filelens [right]< filelens[baza]) then {меняем найденные, помещая меньший базы влево от неё, больший в право}
              begin
              temp:=filelens[right];
              filelens[right]:=filelens[left];
              filelens[left]:=temp;
              left:=left+1;
              right:=right-1;
              end;
            until (left=baza-1) or (right=baza+1);
            if left<baza then
                for i:=1 to baza-left do
                  if filelens[baza-i]>filelens[baza] then
                  begin
                  temp:=filelens[baza-i];
                  filelens[baza-i]:=filelens[baza-1];
                  filelens[baza-1]:=temp;
                  temp:=filelens[baza];
                  filelens[baza]:=filelens[baza-1];
                  filelens[baza-1]:=temp;
                  mesto_bazu:=mesto_bazu-1;
                  end;
            if right>baza then
            for i:=1 to right-baza do
                  begin
                  if filelens[baza+i]<filelens[baza] then
                  begin
                  temp:=filelens[baza+i];
                  filelens[baza+i]:=filelens[baza+1];
                  filelens[baza+1]:=temp;
                  temp:=filelens[baza];
                  filelens[baza]:=filelens[baza+1];
                  filelens[baza+1]:=temp;
                  mesto_bazu:=mesto_bazu+1;
                  end;
                  if baza+i=right then break;
                  end;
           end;

 
 
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 16:53 
Аватара пользователя
Так и правильно, что компилятор ругается - у Вас же нигде i не определена. Сделайте так:
Используется синтаксис Pascal
procedure Razdel;
var i: Integer;
begin
...
 

 
 
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 16:58 
chessar спасибо, помогло, выходит, всегда так надо? если использовать переменную в цикле, то, не зависимо от предыдущих её объявлений, нужно объявлять в процедуре, где этот цикл присутствует с этой переменной?

 
 
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 17:00 
Аватара пользователя
Все локальные переменные, которые нужны только в процедуре (такая как i; я так понимаю baza, right, left, ... определены раньше и являются глобальными) обязательно надо так объявлять (если конечно это не аргументы процедуры).

 
 
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 17:01 
chessar
ок, спасибо!

 
 
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 22:55 
Вообще поимейте в виду, что использование в процедурах глобальных переменных -- это крайне дурной тон. Любая переменная должна быть или определена внутри самой процедуры, или явно задана как параметр обращения. Использовать же глобальные переменные можно лишь от отчаяния -- лишь тогда, когда без них код необоснованно загромождается.

 
 
 [ Сообщений: 8 ] 


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