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

Дан рекурсивный алгоритм: procedure f(n: integer); begin writeln('*'); if n > 0 then begin f(n-3); f(n-2); f(n div 2); f(n div 2); end end; сколько символов "звездочка" будет напечатано на экране при выполнении вызова f(6)?

👇
Ответ:
wrrrr
wrrrr
24.01.2021
Дурацкая по своей трудоемкости задача, если делать её вручную.
А если написать полную программу и вставить туда счетчик вызовов F(n), то окажется, что для вызова F(6) процедура будет вызвана 97 раз. При каждом вызове выводится звездочка, поэтому их будет выведено тоже 97.

Проверка выполнялась по следующей программе:
var
  k:integer;

procedure F(n: integer);
begin
  writeln('*');
  k:=k+1;
  if n > 0 then begin
    F(n - 3);
    F(n - 2);
    F(n div 2);
    F(n div 2);
  end
end;

begin
  k:=0;
  F(6);
  Writeln(k)
end.
4,4(38 оценок)
Открыть все ответы
Ответ:
akonya24
akonya24
24.01.2021
А еще можно без головной боли

// PascalABC.NET 3.0, сборка 1111
var
  a,b:BigInteger;
  sa,sb:string;
begin
  Write('Первое слагаемое: '); Readln(sa);
  if BigInteger.TryParse(sa,a)=False then Writeln('Это не целое число!')
  else begin
    Write('Второе слагаемое: '); Readln(sb);
    if BigInteger.TryParse(sb,b)=False then Writeln('Это не целое число!')
    else Writeln('Точный результат: ',a+b)
    end
end.

Тестовое решение:
Первое слагаемое: 5423323409523846095938445870434764308454095
Второе слагаемое: 7425543205430235436743455446541423534233
Точный результат: 5430748952729276331375189325881305731988328
4,5(39 оценок)
Ответ:
katyasvk
katyasvk
24.01.2021
Var
  s,s1:string;
  a,b:array[1..100]of integer;
  i,n,x,k:integer;
    begin
      readln(s);
      readln(s1);
      n:=1;
       if length(s)>length(s1) then
        x:=length(s)
        else x:=length(s1);
         for i:=1 to length(s) do
         begin
          val(copy(s,i,1),k,n);
          a[i+x-length(s)]:=k;
         end;
           for i:=1 to length(s1) do
         begin
          val(copy(s1,i,1),k,n);
          b[i+x-length(s1)]:=k;
         end;
      for i:=1 to length(s) do
        a[i]:=a[i]+b[i];
        for i:=length(s) downto 2 do
        begin
         a[i-1]:=a[i-1]+a[i]div 10;
         a[i]:=a[i]mod 10;
        end;
      for i:=1 to length(s) do
       write(a[i]);
        
        
      end.
         
4,6(81 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ