Другие языки программирования и технологии

Процедуры в Pascal

Надо решить задачу : Дано 4 числа : a,b,c,d из них надо выбрать большее , используя процедуру определения большего из двух чисел. Вот мой текст программы : program chisla; uses CRT; var a,b,c,e,f,k,d : integer; procedure pp1(x,y,z:integer); var e,f,k: integer; begin if x>y then z:=x else z:=y; writeln(z) end; begin ClrScr; write('a=');readln(a); write('b=');readln(b); write('c=');readln(c); write('d=');readln(d); pp1(a,b,e); pp1(c,d,f); pp1(e,f,k); end. Первые два раза процедура срабатывает корректно , то есть я для этого write туда и запихнул чтоб проверить , а вот в третий раз ...Я тока начал изучать процедуры и функции(вспомогательные алгоритмы) Так вот такой вопрос у меня возник : Обнуляются ли значения параметров , полученные в процедуре или нет ? Если да , то как сделать так , чтобы я мог использовать эти значения в остальной программе ?? Если нет , то подскажите - ка мою ошибку =)
var
a,b,c,d,max:integer;
procedure max(q,w:integer);
begin
if q>w then max:=q else max:=w;
end;
begin
readln(a,b,c,d);
max(a,b);
max(max,c);
max(max,d);
write(max);
end.
Mail Abduli
Mail Abduli
3 426
Лучший ответ
************ ************ бред какой-то ...как max может быть и процедурой и переменной ??
Камал Шахвалатов ну возьми функцию не макс а макс 1 например, вот эта программа больше похожа на истину=)
Mail Abduli var
a,b,c,d,max:integer;
procedure max1(q,w:integer);
begin
if q>w then max:=q else max:=w;
end;
begin
readln(a,b,c,d);
max1(a,b);
max1(max,c);
max1(max,d);
write(max);
end.

на компиляторе FPC при введенных данных 1 2 3 4 выдает 4)
Если не говорить об оптимальности программы.. .
Фактически, у вас единственная ошибка: перед параметрoм z процедуры pp1 следует поставить var :
procedure pp1( x,y : integer, var z : integer )
иначе, значение, присваиваемое z, теряется (не обнуляется, а просто "исчезает") при выходе из процедуры.

А лучше, конечно, (если задание требует написать свою) то – как советует Данила Богомолов сделать функцию (хотя в Паскале уже есть такая - Max).
function max2( x,y: integer ) : integer
begin
if x>y then max2 := x else max2 := y;
end

и тогда выбор максимального из четырех можно записать одним оператором:
m := max2( max2(a,b),max2(c,d) );

—————————
Относительно "начальной" версии программы: там, фактически, та же ошибка: перед параметрами следует поставить var. Но в этом случае процедура будет "портить" исходные числа, что не очень хорошо.. .
Степан Фролов
Степан Фролов
96 999
************ ************ спасибо конечно , но уже там в комментариях мне кинули ссылку на нечто подобное =) Очень информативно
> Обнуляются ли значения параметров, полученные в процедуре или нет ?

В ТВОЕМ случае точно не обнуляются.

> Если нет, то подскажите - ка мою ошибку

Твоя ошибка - в твоей несуразной логике.

ЧТО тебе мешало объявить и реализовать ФУНКЦИЮ, принимающую четыре (!) параметра и возвращающую результат ?) И вызвать потом эту функцию один (!) раз ?)
Камал Шахвалатов реально логика непонятная, ты эту задачу реши сначала на бумаге, а уж потом в программу пихай
************ ************ условие прочитай ...процедуру надо ипользовать , которая именно их двух определяет , такое задание
при чем тогда буквы e,f,k?
ответ в коммантарий
************ ************ эт , случайно скопировалось , просто это не конечный вариант , я там когда изменял , забыл удалить , и так скопировал =) Потом исправил , просто не заметил , их быть и не должно
Че за бред, определять ПРОЦЕДУРОЙ наибольшее? ? В школах смотрю все больше извращенцев

var max,a,b,c,d: integer;
procedure maxzn(a,b:integer);
begin
if a>b then max:=a else max:=b
end;

begin
write('vvedite a,b,c,d: ');readln(a,b,c,d);
maxzn(a,b);
maxzn(max,c);
maxzn(max,d);
writeln(max);readln
end.
Timurbek Ergashev
Timurbek Ergashev
1 049
************ ************ Такое задание , это типа домашнее задание , в школе изучаем ...