![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Решение. Алгоритм решения. Берется наименьшее натуральное число - единица и находятся остатки от деления его на 2
Алгоритм решения. Б ерется наименьшее натуральное число - единица и находятся остатки от деления его на 2, 3, 4, 5 и 6; если остатки будут равны 1, 2, 3, 4 и 5, тогда это число является искомым, его надо выдать на экран и закончить программу, в противном случае, надо брать следующее натуральное число - 2 и проверять его, и так далее. Program Problem6; uses WinCrt; var n: integer; begin n: = 0; repeat n: = n + 1; until (n mod 2 = 1) and (n mod 3 = 2) and (n mod 4 = 3) and (n mod 5 = 4) and (n mod 6 = 5); writeln('Искомое целое число ', n) end. Задача 7. Числа, одинаково читающиеся и слева направо, и справа налево, называются палиндромами. Например, числа 42324 или 1331 - палиндромы. Составьте программу, которая будет находить числа - палиндромы из заданного промежутка Решение Алгоритм решения. Переставить цифры в числе и сравнить полученное число с заданным. Пусть заданное число a, тогда введем еще одну переменную b, которой будет присвоено значение переменной a (для чего это делается вы узнаете позже): b: = a; Заведем еще одну переменную a1 для нового числа, в котором цифры уже будут переставлены. Первоначальное значение этой переменной - ноль: a1: = 0; Почему значение этой переменной равно нулю станет ясно из программы. Далее организуем цикл repeat, в котором будет происходить перестановка цифр числа b: Repeat a1: = a1*10 + b mod 10; b: = b div 10 until b = 0;
Итак, в цикле, также как и в цикле while... do..., отделяется последняя цифра: b mod 10; (например, 343 mod 10 = 3); переменной a1 присваивается значение: a1: = a1*10 + b mod 10; 0 * 10 + 3 =3; " отбрасывается " последняя цифра заданного числа с помощью операции целочисленного деления: b: = b div 10; 343 div 10 = 34; проверяется условие: b = 0, 34 = 0, условие не выполняется, значит цикл продолжается. Отделяется последняя цифра уже нового числа: b mod 10 = 34 mod 10; новое число a1, уже равное 3, умножается на 10 и к результату прибавляется следующая цифра - 4: a1: = a1*10 + b mod 10; " отбрасывается " последняя цифра числа b: b: = b div 10; 34 div 10 = 3; проверяется условие: b = 0, 3 = 0; условие не выполняется, значит цикл продолжается. Отделяется последняя цифра числа: b mod 10; 3 mod 10 = 3; формируется новое число: a1: = a1*10 + b mod 10; 34 * 10 + 3 = 343; " отбрасывается " последняя цифра числа и получается новое число: b: = b div 10; 3 div 10 = 0; проверяется условие: b = 0, 0 = 0; условие выполняется, значит цикл заканчивается. Теперь становится ясно, почему введена другая переменная b для заданного числа, ее значение в цикле меняется от начального до нуля и, чтобы сохранить заданное число в переменной a, и вводится, так сказать, " рабочая " переменная - b. После окончания цикла перестановки цифр числа, сравнивается первоначальное число, которое " сохранилось " в переменной a и число, которое получилось после перестановки цифр и " накопилось " в переменной a1. Если a = a1, тогда значение a выдается на экран, так как это число является палиндромом. Далее, значение a увеличивается на 1, т. е. берется для рассмотрения следующее по порядку натуральное число и снова продолжается внешний цикл. Цифры числа переставляются, полученное новое число после перестановки цифр - a1, сравнивается с первоначальным a и так далее. Внешний цикл заканчивается, когда значение a становится равным правой границе интервала - n. Program Problem7; uses Crt; var m, n, a, b, a1: longint; begin write('Введите левую границу промежутка '); readln(m); write('Введите правую границу промежутка '); readln(n); a: = m; writeln('Числа палиндромы из [', m, '; ', n, ']'); repeat b: = a; a1: = 0; repeat a1: = a1*10 + b mod 10; b: = b div 10 until b=0; if a1 = a then write(a, ' '); a: = a + 1 until a > n; end.
|