Как найти все цифры числа паскаль

October 16 2015, 22:46

Алгоритм выделения цифр в числе

Задача.

Выделите все цифры целого числа..

Например, в числе 1234657 содержатся цифры: 1, 2, 3, 4, 6, 5, 7

Решение:

Пусть сhislo – данное число, а cifra – очередная цифра этого числа.

Если бы мы знали, сколько цифр содержится в числе, то достаточно было бы воспользоваться циклом с параметром, задающим количество выполнений тела цикла. Тело цикла представляет собой отделение крайней правой цифры и получение нового оттиска числа, отличающегося от предыдущего отсутствием этой выделенной цифры. Так в нашем случае:

Оттиск числа

Цифра

1234567

123456

12345

1234

123

12

1

0

7

6

5

4

3

2

1

Что значит «отделить последнюю цифру числа»? Это означает, найти остаток от деления на 10 оттиска числа. Что представляет собой новый оттиск числа? Он представляет собой результат целочисленного деления оттиска числа на 10. Таким образом, тело цикла выглядит так:

cifra:=chislo MOD 10

chislo:=chislo DIV 10

Но так как мы не знаем количества цифр в числе, то попробуем использовать цикл с условием. Попробуем ответить на вопрос: знаем ли мы, когда следует прекратить выполнять тело цикла? Конечно, знаем! Посмотрите внимательно в нашу таблицу—какое бы число не было первоначально, конечный оттиск числа будет равен 0. Таким образом, воспользуемся циклом с условием UNTIL chislo=0. Осталось определиться еще с некоторыми вопросами:

1) какой цикл использовать ( с предусловием или с постусловием)? Так как в введенном числе наверняка есть хотя бы одна цифра—возможно использование цикла с постусловием.

2) Какого типа должно быть вводимое число? По условию задачи число должно быть целым, однако лучше воспользоваться длинными целыми.

Итак, наша программа:

PROGRAM cIFR_chISLA;

VAR cifra: integer;

       chislo: LongiNt;

begin

WRITE (‘Введите целое число’);

READLN(chislo);

REPEAT

        cifra:=chislo MOD 10;

        Writeln (cifra);

        Chislo:=chislo DIV 10;

UNTIL chislo=0;

   END.

В паскале часто встречаются программы, где необходимо выделить цифры из n-значного числа. Эти задачи являются составными частями более сложных, например, посчитать сумму цифр n-значного числа.

Программа для выделения цифр из числа

var sum: integer;
     number: longint;
begin
 sum := 0;
 write('Введите число: ');
 readln(number);

 while number <> 0 do
  begin
   sum := 0;
    {Делим число на 10 и получаем остаток от деления т.е. крайнюю правую цифру числа}
    sum := sum + (number mod 10); 
    writeln(sum);
    {Делим число на 10 и получаем целую часть числа т.е. отбрасываем крайнюю правую цифру от числа}
    number := (number div 10);
  end;

 readln;
end.

Еще пример программы, которая определяет число и сумму цифр для любого натурального числа, также выводит запись числа в обратном порядке.

var k,s,n:integer;
  a:longint;

begin
  writeln('введите целое число');
  readln( n ); 
  k:=0; s:=0; a:=0;
  repeat
     k:=k+1;
     s:=s+n mod 10;
     a:=a*10+n mod 10;
     n:= n div 10;   
  until n=0;
  
   writeln( 'Запись числа в обратном порядке  n= ', a );
    writeln( 'Число цифр ', k );
     writeln( 'Сумма цифр ', s );
  
end.

Добавить комментарий

type ts = 0..9; //тип цифры
chislo=array[1..nmax] of ts;//массивы-числа
procedure nul(var a:chislo); //обнуление числа
var i:integer;
begin
for i:=1 to nmax do
a[i]:=0;
end;
function kol(const a: chislo):integer;//определение длины числа
var i:integer;
begin
i:=nmax;
while(a[i]=0)and(i>1) do
i:=i-1;
kol:=i;
end;
procedure mult(var a,c:chislo);//собственно умножение
var i,m:integer;
    p:0..9;
    v:byte;
begin
nul(c);
m:=kol(a);
for i:=1 to m do
 begin
  p:=0; //перенос
  v:=a[i]*3+p+c[i];//текущее число
  c[i]:=v mod 10;//пишем остаток
  p:=v div 10;//новый перенос
 end;
c[i+1]:=p;//последний перенос
for i:=1 to nmax do
a[i]:=c[i]; //запомним полученное число
end;
procedure print(var a : chislo); //печать длинного числа
var i:integer;
begin
for i:=kol(a) downto 1 do
write(a[i]);
end;
var a,b,c:chislo;i,k:integer;
begin
a[1]:=3;
b[1]:=3;
for i:=2 to 512 do
 begin
  mult(a,c);
  for k:=1 to nmax do
  a[k]:=c[k];
 end;
print(c);
end.

Чтобы обработать отдельные цифры числа можно использовать операции mod (получения остатка от деления) и div (целочисленное деление).

Например, дано число 4087.
Остаток от деления этого числа на 10 равен 7 (это младшая цифра числа).
Чтобы получить следующую цифру сначала выполним целочисленное деление числа на 10, получим 408.
Остаток от деления 408 на 10 равен 8 (это вторая цифра).

Чтобы перебрать все цифры этот процесс можно продолжать пока при целочисленном делении не получится ноль.

1 Программа вычисляет произведение цифр, заданного пользователем трёхзначного числа

Решение:

program line_6;
uses crt;
var
  a, pr: integer;
begin
  clrscr;
  write('a = '); readln(a);
  pr:=1;
  pr:=pr*(a div 100);
  pr:=pr*(a mod 10); a:=a div 10;
  pr:=pr*(a mod 10);
  write('Произведение цифр = ', pr);
  readkey;
end.

2 Дано целое число 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.

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

var
  N, c, Sum, Q: integer;

begin
  write('N = ');
  readln(N);
  writeln;

  Q := 0; { <== сначала количество цифр равно 0 }
  Sum := 0; { <== сумма цифр тоже равна 0 }

  while N > 0 do
  begin
    c := N mod 10; 
    inc(Q); { <== увеличиваем количество на 1 }
    Sum := Sum + c; { <== увеличиваем сумму цифр }
    N := N div 10
  end;

  writeln(' количество цифр: ', Q);
  writeln(' сумма цифр: ', Sum);
  readln
end.

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

var
  N, M: integer;

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

Вывод цифр числа.

var x: integer;
 
begin
  write('Введите x: ');
  readln(x);
  write('Цифры числа x в обратном порядке: ');
  while x<>0 do
  begin
    write(x mod 10,' ');
    x := x div 10;
  end;
end.



Просмотров: 3305

10.02.2015, 09:54 —

Категория: Статьи » Программирование » Pascal

Похожее

    Вывод последовательностей 1 2 3 4 5 и 5 4 3 2 1 на Pascal
    Проверка числа на двузначность на Pascal
    Состоит ли двузначное число из одинаковых цифр на Pascal
    Определение четности числа на Pascal
    Выделение цифр из двузначного числа на Pascal

Коментарии к Вывод цифр числа на Pascal:

А ты уже подписался?





PC игры

Аркады Экшены Приключения
Стратегии RPG Гонки
Квесты Симуляторы Шутеры
Файтинги

GameDev!

Конструкторы игр Игровые движки
Статьи о создании игр Программирование
Статьи о моддинге игр

Зайди или страшно?!

Grand Theft Auto: San Andreas
Counter-Strike: Source
Half-Life
Half-Life 2
Minecraft
Counter-Strike 1.6
TrackMania Nations Forever
The Simpsons Hit & Run
Sonic Adventure DX
Sonic Heroes
Alice: Madness Returns
Sonic Generations
BlitzSonic
Ricochet
Counter-Strike: Global Offensive
Day of Defeat: Source
Naruto: Naiteki Kensei
Team Fortress 2
Grand Theft Auto 4
Grand Theft Auto 5

Каталог программ

Браузеры E-Mail клиенты
Плееры Аудио конвертеры
Видео конвертеры Аудио редакторы
Видео редакторы Дисковые утилиты
Файловые Менеджеры Архиваторы
Графические редакторы Офисные программы
Графические конвертеры Другие программы

Новое сайте

  • GTA SA Menu Editor v1.0c…
  • Borderlands 2 Third Person Mode…
  • Cheat Engine v6.3…
  • 35hp_aztecdagger…
  • Moxxi from Borderlands 2…
  • deathrun_waterlevel_final…
  • deathrun_waterlevel_prefinal2…
  • deathrun_waterlevel_fix9…
  • deathrun_waterlevel_fix8…
  • deathrun_waterlevel_fix7…
  • deathrun_spl_prefinal…
  • deathrun_spl_beta3…
  • deathrun_alienlab_prefinal2…
  • deathrun_alienlab_prefinal…
  • deathrun_alienlab_beta2…

Игровые сервера

Чистый сервер CS:S v34 SAMP
Half-Life Dedicated Server Liberty Unleashed

Остальные игры

Tomb Raider: Underworld
Garry’s Mod
Counter-Strike: Condition Zero
Grand Theft Auto: Vice City
Grand Theft Auto 3
FlatOut 1 & 2

Медиа

  • [Скриншоты с игр] Скриншоты игры Grand Theft…

  • [Скриншоты с игр] Скриншоты игры Sam & Max…

  • [Скриншоты с игр] Скриншоты игры Sam & Max…

Календарь

    «    Май 2023    »
    Пн Вт Ср Чт Пт Сб Вс
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30 31  

Архив

    * Архив за 2016 год
    * Архив за 2015 год
    * Архив за 2014 год
    * Архив за 2013 год

Игры для других платформ

Игры для Android
Игры для Sega Mega Drive
Игры для Nintendo 64
База ромхак-файлов

Опросы

Как вам новый дизайн сайта?

Отлично

Удобный

Главное юзабилити

Ужасно

Голову сломать можно

Остальное…

Журналы и книги
Шрифты
Web-скрипты
Трейнеры

Понравилась статья? Поделить с друзьями:
  • Как мне найти музыку через тебя
  • Как найти закладки в контакте с телефона
  • Как найти скорость оборота колеса
  • Как найти нужный цвет в иллюстраторе
  • Как найти картинку по картинке через онлайн