IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> функция
Client
сообщение 10.11.2007 22:12
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


не могу понять в зависимости от чего Z получает значение в тексте программы.
подскажите почему

uses crt;
label 0;   {описываем метку}
var
rez:real;
m,n:longint; {описали глобальные переменные, используемые в программе}
function fact(z: longint): real; {заголовок функции с формальным параметром-
значением, типом}
var
y: real; {описали локальную переменную}
begin
y:=1; {для получения результата необходимо присвоить  у  значение  1.  также
при помощи этого реализуется вычисление 0!  и 1!}
while z>1 do {запускаем цикл  в  обратную  сторону,  для  упрощения  опустим
множитель 1}
begin
y:=y*z;
z:=z-1
end;
fact:=y{вычисляем факториал, присваиваем его значение функции}
end; {конец функции}
begin{начало тела программы}
writeln('введите неотрицательные числа'); {для удобства пользователя  просим
ввести числа}
0:readln(m,n); {в память вводятся числа}
if m or n <0 then begin
writeln(‘вы ошиблись, вводите неотрицательные числа’);
goto 0 {при ошибке пользователя предотвращаем выдачу неверного результата}
end;
rez:=(fact(m)+fact(n))/fact(m+n); {вычисляется значение данного выражения}
writeln('результат: ',rez)  {выводим на экран результаты счета}
readkey
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 22.01.2008 20:23
Сообщение #2


Гость






Я так и не понял, зачем тебе внутри функции ее же значение понадобилось несколько раз? Ну, ладно...

var i: integer;

function f(value: integer): integer;
var result: integer;
begin
  result := value + 30; { <--- Предварительный результат функции }
  { ... }
  i := result; { <--- Запоминаем }

  { ... }
  result := result * 3; { пришлось еще ДОвычислить }
  f := result; { <--- окончательный результат }
end;

begin
  writeln('function = ', f(12)); { <--- Печатаем окончательный результат }
  writeln('i = ', i) { <--- А это - промежуточный }
end.

Хотя опять же - я бы так делать не стал: во-первый, глобальные переменные не люблю, а во вторых - не могу представить, КАК это может понадобиться. Пример (конкретный, а не "допустим, нам понадобится") - в студию... Что именно понадобится, для чего надо сохранять значение ЭТОЙ же функции???

Цитата
Например, есть рекурсия по нахождению факториала и мне надо вывести промежуточные значения этого факториала
Я, кажется, уже написал, что если у тебя рекурсия по нахождению факториалов - то она должна их находить, а не печатать. Это не ее задача, понимаешь? А понадобилось печатать - оберни эту функцию еще одной, или напиши новую, тебе же будет проще потом отлаживать...

Сообщение отредактировано: volvo - 22.01.2008 20:23
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Client   функция   10.11.2007 22:12
volvo   Z - это формальный параметр, с которым работает по...   10.11.2007 22:38
Client   так я же ни где z н присваиваю значение. А Z здесь...   10.11.2007 23:12
2ral   если хочешь что бы функция не давала никакого знач...   10.11.2007 23:23
volvo   Просто параметр... Был бы параметр-переменная, его...   11.11.2007 0:01
Client   спасибо за помощь У меня еще вопрос Почему эти 2 ...   11.11.2007 7:17
Lapp   Почему эти 2 примера работают одинаковоПотому что...   11.11.2007 7:46
Client   вот здесь опять вызывается функция? или нет   11.11.2007 8:20
Lapp   вот здесь опять вызывается функция? или нет Да. ...   11.11.2007 8:24
Client   я вот понимаю функцию так: в теле функции пишем оп...   11.11.2007 8:40
volvo   В основном... Только надо бы еще функции передать ...   11.11.2007 9:37
Client   function visgod:longint{хотя можно integer}; begin...   11.11.2007 14:51
volvo   Я вот тут: помогите плиз тебе уже показывал, КАК И...   11.11.2007 16:53
Client   всегда прокалываюся здесь еще в тетради записывал,...   11.11.2007 18:44
Client   у меня еще вопрос Function f(a:'a'..'z...   23.12.2007 12:52
volvo   Потому что Паскаль (Турбо и Object, помнится, что ...   23.12.2007 12:56
Client   не позволяет конструировать типы в заголовках подп...   23.12.2007 13:01
volvo   А вот здесь - ты не конструируешь новый тип, ты ис...   23.12.2007 13:18
Client   Спасибо volvo помог как всегда :)   23.12.2007 15:21
Client   Можно еще вопрос? Вот в основной программе можно с...   22.01.2008 19:45
volvo   Если имя функции написано справа от знака присваив...   22.01.2008 20:00
Client   А можно пример, если не трудно? Например, есть рек...   22.01.2008 20:11
volvo   Я так и не понял, зачем тебе внутри функции ее же ...   22.01.2008 20:23
Client   function f(n:integer):byte; var k:byte; begin ...   22.01.2008 20:56
volvo   элементарно переписывается вообще без этой самой д...   22.01.2008 21:01
Client   А так куда лучше :yes2: Еще раз СПАСИБО!   23.01.2008 7:22


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 29.07.2025 20:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"