Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Решение. Введем обозначения: k - число лет племянника, p - количество денег, которые дает дядя на каждом дне рождения






Введем обозначения: k - число лет племянника, p - количество денег, которые дает дядя на каждом дне рождения, s - общая сумма денег, полученных племянником за все годы, n - счетчик числа дней рождения, который считает в обратном порядке от n (введенного пользователем) до 1.

Задаются первоначальные значения формальным параметрам процедуры: n - вводится пользователем из основной программы (вы обратили внимание, что в этой, как и в предыдущей процедуре нет выходных параметров и нет переменных в самой процедуре, хотя возможны и другие варианты).

Увеличивается число лет: k: = k + 1; вычисляется подарок к k -тому дню рождения: p: = 2*p + k; вызывается процедура, в которой увеличивается на p общая сумма полученных денег s и уменьшается на 1 число дней рождения:

uncle(k, p, s + p, n - 1)

Далее весь процесс повторяется, до тех пор, пока n не станет равным 1.

 

Program Rich _ man1; { richman - богатый }

uses WinCrt;

var

n: integer;

{---------------------------------------------------------------------------------------}

Procedure uncle(k, p, s, n: longint); {uncle - дядя}

begin

if n = 1 then write(s)

else

begin

k: = k + 1;

p: = 2*p + k;

uncle(k, p, s + p, n - 1)

end

end;

{---------------------------------------------------------------------------------------}

begin

write('Введите число лет племянника '); readln(n);

write('Я получу к ', n, '-ому дню рождения ');

uncle(1, 1, 1, n);

writeln(' долларов')

end.

 

Во второй части условия требуется определить число лет, когда сумма полученных денег будет равна или превысит 100 долларов. Для этого в процедуре меняется опорное условие: if s > = 100 then write(n), а все остальное остается без изменений.

 

Program Rich _ man2;

uses WinCrt;

var

n: integer;

{----------------------------------------------------------------------------------------}

Procedure uncle1(k, p, s, n: longint);

begin

if s > = 100 then write(n)

else

begin

k: = k + 1;

p: = 2*p + k;

uncle1(k, p, s + p, n + 1)

end

end;

{--------------------------------------------------------------------------------------}

begin

write('Сумма подарка превысит 100 долларов к ');

uncle1(1, 1, 1, 1);

writeln(' -ому дню рождения')

end.

 

Задача 4. Перемножая большие числа, можно быстро получить переполнение. Поэтому, для того чтобы напечатать произведение, превышающее наибольшее допустимое для данного целого типа (integer или longint) числа, надо применить искусственные средства.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.