Найти m-й член последовательности - Turbo Pascal
Формулировка задачи:
Найти m-й член последовательности {an}, если известно, что a1=k (натуральное число), ai+1=2ai-1 , где i=1,2,3,... , и определить, встречается ли в записи результата, хотя бы один раз, цифра 7.
Решение задачи: «Найти m-й член последовательности»
textual
Листинг программы
procedure rd(s: string; var x: longint); {процедура ввода числа с проверкой} begin repeat write(s, ' > 0; ', s, ' = '); readln(x) until x > 0 end; var k, m, a: longint; f: boolean; begin rd('k', k); {ввод k с проверкой} rd('m', m); {ввод m с проверкой} if (k > 1) and (m > 30 - trunc(ln(k) / ln(2))) {проверяем, поместится ли в longint} then write('Integer overflow') {не помещается} else begin {помещается} if k = 1 {если k = 1} then a := 1 {то a(m) = 1 при любом m} else a := (k - 1) shl (m - 1) + 1; {иначе вычисляем a} writeln('a(', m, ') = ', a); {печатаем a} while a > 0 do {выясняем, есть ли цифра 7} begin f := a mod 10 = 7; {проверяем младший разряд} if f then break; {если равен 7, то досрочно выходим из цикла} a := a div 10 {укорачиваем число на один разряд} end; writeln('Digit "7" on number: ', f) {печатаем, есть ли 7} end; readln end.
Объяснение кода листинга программы
- В процедуре rd введен код для чтения числа с проверкой. Число считывается с консоли и записывается в переменную x. Если число меньше или равно нулю, то цикл повторяется, пока x не станет больше нуля.
- Далее объявлены три переменные: k, m и a. Переменная k содержит значение, введенное пользователем, а переменная m содержит значение, которое может быть хранено в longint без переполнения. Переменная a используется для хранения результата вычисления a(m).
- Затем выполняется проверка на переполнение при использовании k и m. Если k больше 1 и m больше 30 - trunc(ln(k) / ln(2)), то выводится сообщение об ошибке
Integer overflow
, что означает переполнение целого числа. - Если условие проверки не выполняется, то вычисляется значение a(m). Если k равно 1, то a(m) равно 1. В противном случае вычисляется a(m) как (k - 1) shl (m - 1) + 1.
- Затем выводится значение a(m) с помощью функции writeln.
- После этого выполняется цикл while, который продолжается, пока a(m) не станет равным нулю. В каждой итерации цикла проверяется, является ли последний разряд числа a(m) равным 7 с помощью оператора mod 10 = 7. Если это так, то выполняется команда break, чтобы выйти из цикла.
- Если в конце цикла значение a(m) все еще больше нуля, то выводится сообщение
Digit
7on number:
, указывающее, что в числе была цифра 7. - Наконец, вызывается функция readln, чтобы прочитать введенные пользователем данные и завершить программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д