IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Глобальные переменные и процедуры
Дмитрий
сообщение 11.12.2005 13:33
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Извините за глупый вопрос, но просмотрев форум и FAQ я так и не нашел ответ dry.gif Как нужно задавать переменные, чтобы в процессе выполнения процедуры изменялись переменные? Причем необходимо именно через процедуры, а не через функции(это специально оговоренно в задании).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.12.2005 13:34
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Код

procedure p(var x : integer);
begin
   x := 100;
end;


Сообщение отредактировано: klem4 - 11.12.2005 13:35


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
APAL
сообщение 11.12.2005 13:42
Сообщение #3


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Или:
Код

Var
  a : byte;
...
Procedure Test;
Begin
...
   a:=200;
...
End;
...


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2005 13:42
Сообщение #4


Гость






klem4, заголовок посмотри blum.gif

Дмитрий, если тебе нужно именно использование глобальных переменных, то при таком описании:
Код
Var x: integer;

Procedure Y;
Begin
  X := 100;
End;

как раз глобальные переменные и используются... Вариант klem4 показывает, как использовать Var-параметры, но они не обязательно должны быть глобальными. Вот, например, локальные Var-параметры:

Код
procedure B(var x: integer);
begin
  x := 100;
end;

Procedure A;
Var x: integer;
begin
  procedure B(x);
end;


klem4 : 10.gif
 К началу страницы 
+ Ответить 
APAL
сообщение 11.12.2005 13:49
Сообщение #5


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


2Volvo: Так и я про то же... ;)

Сообщение отредактировано: APAL - 11.12.2005 13:50


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Дмитрий
сообщение 11.12.2005 14:45
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Возможно я неточно спросил, имелось ввиду следущее:
Код

var x:integer;
procedure 123( );
begin
x:=12;
end;
begin
x:=10;
123(x);
writeln(x);
end.

Что нужно написать в скобках procedure 123(); чтобы в результате работы программы вывелось 12, а не 10? (Насколько я понял в данном случае необходимо передать параметр по ссылке, но у меня не работала программа, когда в скобках я писал var x:integer;). ( Мне необходимо чтобы одна процедура например заполняла несколько массивов в зависимости от параметров, поэтому использование каких-либо конкретных глобальных переменных неприемлемо =(( )
Код

procedure enter (var arra:arr; n:integer);
var i:integer;
begin
writeln('Введите длину массива');
readln(n);
for i:=1 to n do begin
readln(arra[i]);
end;
end;

В результате работы такой процедуры у меня заполняется массив, но во второй переменной нету длины полученного массива. =(( ( вызов осуществляю вот так: enter(a,na);)

Сообщение отредактировано: Дмитрий - 11.12.2005 14:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
trminator
сообщение 11.12.2005 14:49
Сообщение #7


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Измени
Код
procedure enter (var arra:arr; n:integer);

на
Код
procedure enter (var arra:arr; var n:integer);

А то у тебя только первый параметр по ссылке передавался.

Но к глобальным переменным это имеет мало отношения.


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2005 14:50
Сообщение #8


Гость






Второй Var не забывай ... Перед каждой новой переменной нужно Var проставлять заново, иначе эта переменная будет считаться "переданной по значению", и ее изменение не передастся в вызывающий блок...
Код
procedure enter (var arra:arr; var n:integer);
var i:integer;
begin
  writeln('Введите длину массива'); readln(n);
  for i:=1 to n do begin
    readln(arra[i]);
  end;
end;
 К началу страницы 
+ Ответить 
Дмитрий
сообщение 11.12.2005 14:54
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Помогло! Спасибо за помощь. Ушел учить матчасть =)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"