В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
amikayilova
amikayilova
30.01.2021 04:04 •  Информатика

Язык: Паскаль
Напишите рекурсивную процедуру, которая
переводит число в восьмеричную систему.
Пример:
Введите число: 66
В восьмеричной: 102

Показать ответ
Ответ:
анютка6780
анютка6780
01.09.2021 21:02
Var
a,str:string;
k,n,i,z,m,j,c,S,x,y,l:integer;
    begin     
            writeln('введите число');
            readln(str);     
                writeln('a ?');     
                readln(a);     
                writeln('z ?');     
                readln(z);   
                writeln('x & y');     
                readln(x,y);     
                n:=length(str);     
                     for i:=1 to n do     
                         begin       
                             if str[i]=a then           
                                   k:=k+1;           
                                   val(str[i],m,j);               
                                        if m mod z=0 then                   
                                           c:=c+1;                   
                                               if str[i]>a then                       
                                                   begin                           
                                                          val(str[i],m,j);                           
                                                          s:=s+m;                       
                                                   end;                     
                                      val(str[i],m,j);                     
                                          if (m=x)or(m=y)then                       
                                               l:=l+1;
                           end;
writeln('k: ',k,'кратное z: ',c,' s: ',s,'  кол-во x,y: ',l);
end.
0,0(0 оценок)
Ответ:
ОляКatschanjukolaola
ОляКatschanjukolaola
14.07.2020 03:36
Это задача совсем не "за ".
Количество чисел k2, которые делятся на два, равно целой части от n/2. Аналогично, k3=n/3 и k5/n/5. Вычтем все эти количества из общего количества чисел, равного n: k=n-(k2+k3+k5) и это даст примерное количество чисел, которые не делятся на 2, 3 и 5. Примерно оно потому, что мы не учли числа, которые одновременно делятся на 2 и 3, на 2 и 5, на 3 и 5. Т.е. числа, которые делятся на 6, 10 и 15 мы вычли дважды. Поэтому надо найти количество этих чисел и отнять их. k6=n/6, k10=n/10, k15=n/15 - по-прежнему делим нацело. И теперь за исправленное значение k принимаем k+(k6+k10+k15).
И последнее. Есть еще числа, которые делятся одновременно на 2, 3 и 5, т.е. на 2*3*5=30. Таких чисел k30=n/30. И мы их дважды прибавили. Теперь делаем последнюю коррекцию k, получая : k-k30.

Окончательно формула расчета:
k=n-(k/2+k/3+k/5)+(k/6+k/10+k/15)-k/30 при условии целочисленного деления.

То что мы проделали выше, носит название операции включения-исключения множеств.
Программа получается совсем простой.

Sub abc()
    Dim n As Long
    n = InputBox("Введите натуральное N")
    If n < 0 Then n = Abs(n) 'Защита от дурака
    MsgBox n - (n \ 2 + n \ 3 + n \ 5) + (n \ 6 + n \ 10 + n \ 15) - n \ 30
End Sub
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота