Надеюсь что всё правильно написал и ничего не попутал.
Ещё пару задачек подкиньте...

Модератор: Модераторы
Ещё пару задачек подкиньте...
Paster Fob писал(а):informat
...
формальные параметры e и f имеют ссылку на одну и ту же переменную.е соответствует х5,в результате работы процедуры (е:=е+1=>9+1=10) через ссылку на переменную в x5 попадает 10.фактический параметр х5 используется дважды.Формальный параметр f соответствует х5,а т.к.х5 теперь равна 10,то в процедуре посчитается f:=f+1,т.е. 10+1=11.
...
procedure Plus_2(var a, b: integer; c: integer; var d: integer);
begin
a:=a+1; b:=b+1; d:=c
end;
program Proc_3;
var
x5,Y : integer;
procedure Plus_3(var a, b: integer; var c: integer);
begin
a:=a+1;
b:=b+1;
c:=a;
end;
begin
x5:=1;
Plus_3(X5, X5, Y);
writeln(Y);
end.
informat писал(а):Ответ, действительно хороший, обстоятельный, но только на 5-.
Поясню.Paster Fob писал(а):informat
...
формальные параметры e и f имеют ссылку на одну и ту же переменную.е соответствует х5,в результате работы процедуры (е:=е+1=>9+1=10) через ссылку на переменную в x5 попадает 10.фактический параметр х5 используется дважды.Формальный параметр f соответствует х5,а т.к.х5 теперь равна 10,то в процедуре посчитается f:=f+1,т.е. 10+1=11.
...
Получается, что программа как бы "возвращается" за каждым параметром.
По вашему, если описать процедуру:
- Код: Выделить всё
procedure Plus_2(var a, b: integer; c: integer; var d: integer);
begin
a:=a+1; b:=b+1; d:=c
end;
x5:=1;
то после вызова
Plus_2(X5, X5, X5+1, Y)
Y примет значение 4.
А на самом деле 2.
informat писал(а):Не запуская нужно сказать что выдаст эта программа.
- Код: Выделить всё
program Proc_3;
var
x5,Y : integer;
procedure Plus_3(var a, b: integer; var c: integer);
begin
a:=a+1;
b:=b+1;
c:=a;
end;
begin
x5:=1;
Plus_3(X5, X5, Y);
writeln(Y);
end.
Проверьте запуском.
Procedure P1(var a:Integer);
////
var A1:Integer;
begin
A1:=12;
P1(A1);
end;
procedure Plus_3(var a, b: integer; var c: integer);
begin
a:=a+1;
b:=b+1;
c:=a;
end;
x5:=1;
Plus_3(X5, X5, Y);
writeln(Y);
x5:=1;
Plus_3(X5, X5, Y);
procedure Plus_3(var a, b: integer; var c: integer);
begin
a:=a+1;
b:=b+1;
c:=a;
end;
a:=a+1;
b:=b+1;
c:=a;
Maxizar писал(а):Вот запутали поцана, зачем....
program Proc_3;
var x5,Y : integer;
procedure Plus_3(var a, b: integer; var c: integer);
begin
a:=a+1; b:=b+1; c:=a;
end;
begin
x5:=1;
Plus_3(X5, X5, Y);
writeln(Y);
end.
Oleg_D писал(а):Maxizar писал(а):Вот запутали поцана, зачем....
И запутали еще больше![]()
По сути Вы правы, но парень до адресов не добрался еще.
Попробую проще объяснить. Дело в том, что согласно вызову Plus_3(X5, X5, Y) параметры процедуры A и B ссылаются на одну и ту же переменную X5. После операторов a:=a+1; b:=b+1; она становится равной 3, а затем копируется в переменную Y оператором c:=a.
Поблагодарим автора за эти полезные примерчики!
Maxizar писал(а):Ну тогда вот:
Задача:
Даны два целых числа a и b. Если a делится на b (без остатка) или b делится на a (без остатка), то вывести 1, иначе - любое другое число. Условные операторы и операторы циклов не использовать.
Oleg_D писал(а):Вы про эту задачку? Ну так она вроде не по теме передачи параметров в процедуры. Вы тогда сами намекните парнишке, из какой это оперы. А мы помолчим, конечно
Maxizar писал(а):Так как вы дошли до подпрограмм, значит вы простые типы уже изучили. А целое число - это простой тип....
Paster Fob писал(а):Но в скором времени постараюсь,а вы не подсказывайте.
Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3