Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pasсal] Процедура 
:(
    Опции темы
MaximV
Дата 26.4.2012, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.2.2012

Репутация: нет
Всего: нет



Даны 4 произвольных целых чисел.Вычислить  S=max(a,b,c)+max(a,c,d)+max(a,b,d)+max(b,c,d).Нахождение максимального трех чисел оформить в виде процедуры
PM MAIL   Вверх
Mirkes
Дата 26.4.2012, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 4
Всего: 17



Бред! Процедуры нельзя складывать. Только значения функций!


--------------------
Mirkes
PM MAIL   Вверх
iff
Дата 26.4.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 3
Всего: 16



Цитата(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.



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Mirkes
Дата 27.4.2012, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 4
Всего: 17



Цитата(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;


--------------------
Mirkes
PM MAIL   Вверх
iff
Дата 27.4.2012, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 3
Всего: 16



Цитата(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);". Вычислить можно разными способами.

Это сообщение отредактировал(а) iff - 27.4.2012, 11:07


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0916 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.