Root /ArchiveAbout
()

Вывести все цифры числа

Вывести все цифры числа

На странице While17-21 решаем задачи о цифрах числа, точнее, вопросом об отделении цифр целого числа, пользуясь только операциями деления нацело **div** и взятия остатка от деления **mod**. Посмотрим, как это делается.

Для примера возмем целое число N=1234, имеющее четыре цифры. Если разделить это число на 10, то получим 123 целых и в остатке 4. Поэтому цифру 4 (остаток при делении на 10) можно вывести на экран, а в новое значение N записать 123. Потом эту процедуру повторяем еще столько раз, сколько цифр имеем (в данном случае 3). Для целочисленного деления используем функцию div, а для взятия остатка mod.

Важное замечание: сначала вычисляем последнюю цифру числа (остаток), а уже потом изменяем число (делим нацело на 10). Как только мы дойдем до последней цифры (выведем её на экран), тогда на следующем шаге целая часть превратится в 0. Смотрим на данном примере:

Как видно, на четвертом этапе (4 – количество цифр) число N = 0, поэтому делать вычисления следует до тех пор, пока N ≠ 0.

While17. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).

var
  N: integer;

begin
  write('N = ');
  readln(N);
  writeln;
  writeln('Цифры числа (справа налево):');
  while N > 0 do { <-- Выполняем цикл, пока число больше 0 }
  begin
    write(' ', N mod 10); { <-- выводим остаток деления на 10 }
    N := N div 10 { <== находим целую часть от деления на 10 }
  end;
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 A **mod** B - остаток при целочисленном делении А на В A **div** B - целочисленное деление А на В Задача While17 с помощью цикла с постусловием repeat-until:

var
  N: integer;

begin
  write('N = ');
  readln(N);
  writeln;
  writeln('Цифры числа (справа налево):');
  repeat
    write(' ', N mod 10); { <-- остаток деления на 10 }
    N := N div 10 { <== целая часть от деления на 10 }
  until N = 0; { <-- признак завершения цикла }
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 A **mod** B - остаток при целочисленном делении А на В A **div** B - целочисленное деление А на В While18. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, найти количество и сумму его цифр.

В этой задаче не нужно выводить цифры числа, но зато нужно их считать и суммировать. Поэтому для цифры вводим переменную c, тогда Q – количество, Sum – сумма цифр.

var
  N, c, Sum, Q: integer;

begin
  write('N = ');
  readln(N);
  writeln;
  Q := 0; { <== сначала количество цифр равно 0 }
  Sum := 0; { <== сумма цифр тоже равна 0 }
  while N > 0 do { <-- Выполняем цикл, пока число больше 0 }
  begin
    c := N mod 10; { <== последняя цифра числа }
    inc(Q); { <== увеличиваем количество на 1 }
    Sum := Sum + c; { <== увеличиваем сумму цифр }
    N := N div 10 { <== удаляем последнюю цифру числа }
  end;
  { Выводим полученные результаты: } 
  writeln(' количество цифр: ', Q);
  writeln(' сумма цифр: ', Sum);
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 A **mod** B - остаток при целочисленном делении А на В **procedure** Inc(**var** i: integer);: Увеличивает значение переменной i на 1 A **div** B - целочисленное деление А на В Но как видно из программы, здесь спокойно можно обойтись и без переменной с – просто сразу вычислять сумму. Поэтому строку 12 можете удалить, а вместо 14 строки поставить Sum := Sum + N **mod** 10.

While19. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, найти число, полученное при прочтении числа N справа налево.

А это очень интересная задача – составить из данного числа новое "число-перевертыш", как его иногда ещё в шутку называют. Помотрим, как это сделать на конкретном примере вышеупомянутого числа N = 1234. Естественно, что мы хотим получить новое число M = 4321.

Делается это методом сдвига (как его можно назвать) цифр справа налево: каждый раз число M умножаем на 10 и прибавляем к нему последнюю цифру числа N (остаток от деления на 10), а само N после этого делим нацело на 10 (удаляем последнюю цифру). Заканчиваем тогда, когда N = 0.

var
  N, M: integer;

begin
  write('N = ');
  readln(N);
  M := 0; { <== начальное значение нового числа }
  while N > 0 do { <-- Выполняем цикл, пока число больше 0 }
  begin
    M := 10 * M + N mod 10; { <== изменяем новое число }
    N := N div 10 { <== удаляем последнюю цифру исходного числа }
  end;
  writeln;
  writeln(' число справа налево: ', M);
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 A **mod** B - остаток при целочисленном делении А на В A **div** B - целочисленное деление А на В While20. Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести true, если нет — вывести false.

Здесь все просто: находим последнюю цифру числа (остаток от деления на 10), а потом удаляем её (деление нацело на 10). Выполняем цикл до тех пор, пока одновременно найденная цифра не равна 2, а число не равно 0.

var
  N, r: integer;

begin
  write('N = ');
  readln(N);
  writeln; 
  while (N > 0) and (r <> 2) do
  begin
    r := N mod 10; { <== последняя цифра числа }
    N := N div 10 { <== удаляем последнюю цифру }
  end;
  writeln(r = 2); { <-- выводим значение выражения (r=2) }
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 A **mod** B - остаток при целочисленном делении А на В A **div** B - целочисленное деление А на В While21. Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеются ли в записи числа N нечетные цифры. Если имеются, то вывести true, если нет — вывести false.

Как и в предыдущем примере, находим цифры числа, но проверяем на нечетность с помощью логической функции odd(N). Вместо этого можно использовать проверку на истинность выражения (N mod 2 = 1), возвращающее True, если N нечетно, и False в противном случае.

var
  N, r: integer;

begin
  write('N = ');
  readln(N);
  writeln;
  while (N <> 0) and odd(r+1) do
  begin
    r := N mod 10; { <== последняя цифра числа }
    N := N div 10 { <== удаляем последнюю цифру }
  end;
  writeln(odd(r));
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **function** Odd(i: integer): boolean;: Возвращает True, если i нечетно A **mod** B - остаток при целочисленном делении А на В A **div** B - целочисленное деление А на В **function** Odd(i: integer): boolean;: Возвращает True, если i нечетно Второй вариант решения задачи while21 отличается использованием логической переменной:

var
  N, r: integer;
  f: boolean; { <-- Если число N содержит нечетную цифру, 
  то f=True, в противном случае f=False }

begin
  write('N = ');
  readln(N);
  writeln;
  f := false;
  while (N <> 0) and (f=false) do
  begin
    r := N mod 10; { <== последняя цифра числа }
    N := N div 10; { <== удаляем последнюю цифру }
    f := odd(r) { <== определяем, является ли r нечетным }
  end;
  writeln(f);
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **type** boolean;: Представляет логическое значение. **const** false = False;: Представляет логическое значение. **const** false = False;: Представляет логическое значение. A **mod** B - остаток при целочисленном делении А на В A **div** B - целочисленное деление А на В **function** Odd(i: integer): boolean;: Возвращает True, если i нечетно А вот решение той же задачи с использованием цикла с послеусловием repeat - until:

var
  N, r: integer;

begin
  write('N = ');
  readln(N);
  writeln;
  repeat
    r := N mod 10; { <== последняя цифра числа }
    N := N div 10 { <== удаляем последнюю цифру }
  until (N = 0) or odd(r);
  { Если в цикле мы дошли до последней цифры и 
  она четная, то функция odd(r) возвратит False, 
  в противном случае мы увидим True: }
  writeln(odd(r));
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 A **mod** B - остаток при целочисленном делении А на В A **div** B - целочисленное деление А на В **function** Odd(i: integer): boolean;: Возвращает True, если i нечетно **function** Odd(i: integer): boolean;: Возвращает True, если i нечетно