![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
Client |
![]()
Сообщение
#1
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
не могу понять в зависимости от чего 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.
|
![]() ![]() |
volvo |
![]()
Сообщение
#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 |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 20:42 |