2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Procedure (Pascal)
Сообщение21.10.2012, 16:48 


01/10/12
119
ННГУ
Написал процедуру, не хочет запускать, пишет что
Начало.pas(44) : Переменная цикла for должна описываться в том же блоке, что и цикл for
вот тут:
Используется синтаксис Pascal
for i:=1 to baza-left do


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

 Профиль  
                  
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 16:49 
Аватара пользователя


03/12/08
351
Букачача
Приведите весь текст процедуры.

 Профиль  
                  
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 16:51 


01/10/12
119
ННГУ
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Аватара пользователя


03/12/08
351
Букачача
Так и правильно, что компилятор ругается - у Вас же нигде i не определена. Сделайте так:
Используется синтаксис Pascal
procedure Razdel;
var i: Integer;
begin
...
 

 Профиль  
                  
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 16:58 


01/10/12
119
ННГУ
chessar спасибо, помогло, выходит, всегда так надо? если использовать переменную в цикле, то, не зависимо от предыдущих её объявлений, нужно объявлять в процедуре, где этот цикл присутствует с этой переменной?

 Профиль  
                  
 
 Re: Procedure (Pascal)
Сообщение21.10.2012, 17:00 
Аватара пользователя


03/12/08
351
Букачача
Все локальные переменные, которые нужны только в процедуре (такая как i; я так понимаю baza, right, left, ... определены раньше и являются глобальными) обязательно надо так объявлять (если конечно это не аргументы процедуры).

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


01/10/12
119
ННГУ
chessar
ок, спасибо!

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


11/05/08
32166
Вообще поимейте в виду, что использование в процедурах глобальных переменных -- это крайне дурной тон. Любая переменная должна быть или определена внутри самой процедуры, или явно задана как параметр обращения. Использовать же глобальные переменные можно лишь от отчаяния -- лишь тогда, когда без них код необоснованно загромождается.

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

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



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

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


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

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