М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
albinatoleuhaa
albinatoleuhaa
18.03.2020 10:38 •  Информатика

Вася изучал сегодня на информатике тему "рекурсия". после урока на доске осталась такая функция (для условия на языке pascal — процедура): на языке python: def f(n): print('*') if n > 2: f(n - 1) f(n - 2) на языке pascal: procedure f(n: longint); begin writeln('*'); if n > 2 then begin f(n - 1); f(n - 2); end; end; на языке c++: int f(int n){ cout < < '*' < < endl; if (n > 2){ f(n - 1); f(n - 2); } } вася задумался над таким вопросом — а какое наименьшее натуральное число нужно поставить вместо n в вызов этой функции, чтобы было напечатано не меньше 5000 звездочек? ему узнать ответ на этот вопрос. в качестве ответа укажите одно натуральное число.

👇
Ответ:
Очевидно что звездочек
f(1) = 1
f(2) = 1
f(3) = 1 + f(2) + f(1)

f(n) = 1 + f(n-1) + f(n-2)

Посчитаем на хаскеле f(n) при n=[1,2..20]
--Код haskell
f(1) = 1
f(2) = 1
f(n) = 1 + f(n-1) + f(n-2)
main = print(show [(n, f(n)) | n <- [1,2..20]])

Вывод
(1,1),(2,1),(3,3),(4,5),(5,9),(6,15),(7,25),(8,41),(9,67),(10,109),(11,177),(12,287),(13,465),(14,753),(15,1219),(16,1973),(17,3193),(18,5167),(19,8361),(20,13529)

значит при f(18) = 5167  - т0 что надо

ответ 18
4,7(90 оценок)
Открыть все ответы
Ответ:
Aruna30
Aruna30
18.03.2020
Var
  ptr: integer;

function GetWord(s: string): string;
// Возвращает очередное слово из строки s или пустое значение,
// если в строке больше нет слов.
// Перед вызовом позиция начала слова указывается переменной ptr.
// Перед выходом ptr устаналивается на границу следующего слова
// ptr=0 означает, что вся строка просмотрена.
var
  n, p: integer;
begin
  n := Length(s);
  if (ptr >= n) or (ptr=0) then begin
    ptr := 0;
    Result := ''
  end
  else begin
    p := PosEx(' ', s, ptr);
    if p > 0 then begin
      Result := Copy(s, ptr, p - ptr);
      ptr := p + 1
    end
    else begin
      Result := Copy(s, ptr, n - ptr + 1);
      ptr := 0
    end
  end
end;

var
  s1, s2, s: string;
  n: integer;

begin
  writeln('Вводите строку');
  readln(s1);
  ptr := 1;
  s2 := '';
  repeat
    s := GetWord(s1);
    n := Length(s);
    if n > 0 then
      if (s[1] <> 'о') or (s[n] <> 'о') then
        s2 := s2 + s + ' '
  until n = 0;
  n := Length(s2);
  if s2[n] = ' ' then
    s2 := Copy(s2, 1, n - 1);
  writeln('Результирующая строка: ', s2)
end.

Тестовый прогон:

Вводите строку
В это окно отлично виден и прекрасный горный ландшафт, и одинокое облако, зацепившееся за покрытую снегом вершину.
Результирующая строка: В это виден и прекрасный горный ландшафт, и одинокое облако, зацепившееся за покрытую снегом вершину.
4,7(5 оценок)
Ответ:
irashmoylbwg
irashmoylbwg
18.03.2020
Var
  a,b,h,x,y:real;
begin
  writeln('Введите начальное значение, шаг, конечное значение');
  readln(a,h,b);
  x:=a;
  while x<=b do begin
    y:=0.5/tan(x/4)+4;
    writeln(x:7:3,y:10:5);
    x:=x+h
  end
end.

Тестовое решение:

Введите начальное значение, шаг, конечное значение
-5 0.5 5
 -5.000   3.83386
 -4.500   3.76106
 -4.000   3.67895
 -3.500   3.58244
 -3.000   3.46329
 -2.500   3.30698
 -2.000   3.08476
 -1.500   2.72976
 -1.000   2.04184
 -0.500   0.02086
  0.000  Infinity
  0.500   7.97914
  1.000   5.95816
  1.500   5.27024
  2.000   4.91524
  2.500   4.69302
  3.000   4.53671
  3.500   4.41756
  4.000   4.32105
  4.500   4.23894
  5.000   4.16614
4,8(80 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ