Найти все натуральные числа, не превосходящие заданного m - Pascal
Формулировка задачи:
Пожалуйста, очень срочно надо написать программу на языке Pascal (Turbo или ABC).
Найти все натуральные числа, не превосходящие заданного m, двоичная запись которых представляет собой симметричную последовательность нулей и единиц (начинающуюся с единицы). Показать десятичную и двоичную записи этих чисел.
Решение задачи: «Найти все натуральные числа, не превосходящие заданного m»
textual
Листинг программы
uses crt; function DecToBin(n : word) : string; var s : string; begin s := ''; while n>0 do begin s := chr(n mod 2 + 48) + s; n := n div 2; end; DecToBin := s; end; function Sim(s : string) : boolean; var i : byte; begin Sim := false; for i := 1 to length(s) div 2 do if s[i]<>s[length(s)-i+1] then exit; Sim := true; end; var m, i: word; begin clrscr; Write('Введите m = '); ReadLn(m); for i := 1 to m do If Sim(DecToBin(i)) then writeln(i:5,DecToBin(i):10); end.
Объяснение кода листинга программы
- uses crt; — подключает модуль для работы с консолью
- function DecToBin(n : word) : string; — объявляет функцию для перевода числа в двоичное представление
- var s : string; — объявляет переменную для хранения строкового представления числа
- begin — начало блока кода функции
- s := ''; — инициализирует пустую строку для хранения результата
- while n>0 do begin — цикл, который выполняется, пока число больше нуля
- s := chr(n mod 2 + 48) + s; — добавляет в строку символ, соответствующий остатку от деления числа на 2 (в двоичной системе счисления), и текущую строку
- n := n div 2; — делит число на 2
- end; — конец цикла
- DecToBin := s; — присваивает результат функции переменной DecToBin
- function Sim(s : string) : boolean; — объявляет функцию для проверки четности/нечетности числа
- var i : byte; — объявляет переменную для хранения индекса символа в строке
- begin — начало блока кода функции
- Sim := false; — инициализирует функцию как нечетное число
- for i := 1 to length(s) div 2 do — цикл, который выполняется, пока индекс меньше половины длины строки
- if s[i]<>s[length(s)-i+1] then exit; — проверяет, равны ли текущий и обратный символы в строке, и если нет, то выходит из цикла
- Sim := true; — присваивает функции значение true, если цикл был выполнен до конца
- end; — конец блока кода функции
- var — объявляет переменные для хранения числа и его двоичного представления
- m, i: word; — m — для хранения числа, i — для хранения индексов символов в строке
- begin — начало блока кода программы
- clrscr; — очищает экран
- Write('Введите m = '); ReadLn(m); — запрашивает у пользователя число m и сохраняет его в переменной
- for i := 1 to m do — цикл, который выполняется, пока индекс меньше числа m
- If Sim(DecToBin(i)) then writeln(i:5,DecToBin(i):10); — проверяет, является ли число i нечетным, и если да, то выводит его и его двоичное представление
- end; — конец блока кода программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д