Другие языки программирования и технологии
Процедуры в 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.
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.
Если не говорить об оптимальности программы.. .
Фактически, у вас единственная ошибка: перед параметр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. Но в этом случае процедура будет "портить" исходные числа, что не очень хорошо.. .
Фактически, у вас единственная ошибка: перед параметр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. Но в этом случае процедура будет "портить" исходные числа, что не очень хорошо.. .
************ ************
спасибо конечно , но уже там в комментариях мне кинули ссылку на нечто подобное =) Очень информативно
> Обнуляются ли значения параметров, полученные в процедуре или нет ?
В ТВОЕМ случае точно не обнуляются.
> Если нет, то подскажите - ка мою ошибку
Твоя ошибка - в твоей несуразной логике.
ЧТО тебе мешало объявить и реализовать ФУНКЦИЮ, принимающую четыре (!) параметра и возвращающую результат ?) И вызвать потом эту функцию один (!) раз ?)
В ТВОЕМ случае точно не обнуляются.
> Если нет, то подскажите - ка мою ошибку
Твоя ошибка - в твоей несуразной логике.
ЧТО тебе мешало объявить и реализовать ФУНКЦИЮ, принимающую четыре (!) параметра и возвращающую результат ?) И вызвать потом эту функцию один (!) раз ?)
Камал Шахвалатов
реально логика непонятная, ты эту задачу реши сначала на бумаге, а уж потом в программу пихай
************ ************
условие прочитай ...процедуру надо ипользовать , которая именно их двух определяет , такое задание
при чем тогда буквы 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.
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.
************ ************
Такое задание , это типа домашнее задание , в школе изучаем ...
Похожие вопросы
- Turbo Pascal. 2 задачи на процедуры и функции
- PASCAL. В чем отличие процедур от функций. И любую ли задачу можно решить с помощью функции?
- Процедуры и функции!!! Pascal!!!
- Помогите пожалуйста подправить процедуру Pascal
- Кто знает как передаются параметры в процедуру ? (Pascal/Delphi)
- Pascal Процедуры.Хелп.
- Pascal (процедуры и функции)
- Помогите решить задачу через процедуры PASCAL
- Задача на Pascal. Процедуры.
- pascal or delphi
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)