-
-
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!
Конструкторы игр | Игровые движки |
Статьи о создании игр | Программирование |
Статьи о моддинге игр |
Зайди или страшно?!
Каталог программ
Браузеры | 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-скрипты
Трейнеры