Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pasсal] Процедура


Автор: MaximV 26.4.2012, 15:12
Даны 4 произвольных целых чисел.Вычислить  S=max(a,b,c)+max(a,c,d)+max(a,b,d)+max(b,c,d).Нахождение максимального трех чисел оформить в виде процедуры

Автор: Mirkes 26.4.2012, 17:29
Бред! Процедуры нельзя складывать. Только значения функций!

Автор: iff 26.4.2012, 18:31
Цитата(Mirkes @  26.4.2012,  17:29 Найти цитируемый пост)
Бред!

Процедура (как и функция) может изменять значения параметра, переданного по ссылке.
Цитата(Mirkes @  26.4.2012,  17:29 Найти цитируемый пост)
Процедуры нельзя складывать

Да. Но можно прибавлять значение параметра, которое было передано процедуре по ссылке, или вообще процедура сама может прибавлять к переменной то, что нужно.
Код

Procedure AddMax(Var X : Integer; A, B, C : Integer);
Var Result : Integer;
Begin
    Result := A;
    If B > Result Then Result := B;
    If C > Result Then Result := C;
    X := X + Result;
End;

Var A, B, C, D, S : Integer;
Begin
    ReadLn(A, B, C, D);
    AddMax(S, A, B, C);
    AddMax(S, A, C, D);
    AddMax(S, A, B, D);
    AddMax(S, B, C, D);
    WriteLn(S);
End.

Автор: Mirkes 27.4.2012, 03:08
Цитата(iff @ 26.4.2012,  18:31)
Цитата(Mirkes @  26.4.2012,  17:29 Найти цитируемый пост)
Бред!

Процедура (как и функция) может изменять значения параметра, переданного по ссылке.
Цитата(Mirkes @  26.4.2012,  17:29 Найти цитируемый пост)
Процедуры нельзя складывать

Да. Но можно прибавлять значение параметра, которое было передано процедуре по ссылке, или вообще процедура сама может прибавлять к переменной то, что нужно.
Код

Procedure AddMax(Var X : Integer; A, B, C : Integer);
Var Result : Integer;
Begin
    Result := A;
    If B > Result Then Result := B;
    If C > Result Then Result := C;
    X := X + Result;
End;

Var A, B, C, D, S : Integer;
Begin
    ReadLn(A, B, C, D);
    AddMax(S, A, B, C);
    AddMax(S, A, C, D);
    AddMax(S, A, B, D);
    AddMax(S, B, C, D);
    WriteLn(S);
End.

Я в курсе того, что могут процедуры. А в задаче было указано другое.
Теперь по поводу кода. 
В соседней ветке Вы поправили меня переходом из Дельфийского синтаксиса в Паскалевский, а в этом варианте не обнулили переменную суммирования. По конвенциям, стандартам и описаниям Паскаль никогда не задает гарантированных начальных значений каким бы то ни было переменным. Так что в начале тела программы следует добавить S:=0;

Автор: iff 27.4.2012, 10:45
Цитата(Mirkes @  27.4.2012,  03:08 Найти цитируемый пост)
Паскаль никогда не задает гарантированных начальных значений каким бы то ни было переменным

TurboPascal (а это наиболее часто применяемый компилятор Pascal, а другие можно считать его аналогами, например FreePascal) обнуляет все переменные, которые указаны в основном блоке программы.

Цитата(Mirkes @  27.4.2012,  03:08 Найти цитируемый пост)
Я в курсе того, что могут процедуры. А в задаче было указано другое.

Уверены?
Сказано:
1.
Цитата(MaximV @  26.4.2012,  15:12 Найти цитируемый пост)
Вычислить  S=max(a,b,c)+max(a,c,d)+max(a,b,d)+max(b,c,d).

2.
Цитата(MaximV @  26.4.2012,  15:12 Найти цитируемый пост)
Нахождение максимального трех чисел оформить в виде процедуры 


"Вычислить" - не тождественно тому, что-бы функция возвращала значение, и что-бы в программе содержалась строка "S:=max(a,b,c)+max(a,c,d)+max(a,b,d)+max(b,c,d);". Вычислить можно разными способами.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)