Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ нахождение суммы M последний чисел числа N.

Автор: Andrewshkovskii 25.10.2006 21:40

Задание :
Дано натуральное число n.найди сумму m последних чисел числа n.
Тоесть
допустим вводим число n 1234
вводим число m 2
Программа должна считать сумму 3 + 4 .
ТОесть m кол-во чифр с конца.
Пример 2
{n = 12345
m = 3
3+4+5=12.}
Вот так.

я не могу понять,как программу будет распозвовать последние числа..у меня есть намеки на div и mod .

Код
const
y=10;
C:=a mod y;
writeln ('C= ',c:4:4);
readkey;

так он находит последнюю чифру числа а...а вот как сделать так,что бы он искал столько чифр,сколько я захочу(переменная m).

Автор: volvo 25.10.2006 22:43

Цитата
у меня есть намеки на div и mod .
Правильные намеки... Именно так и делай...

  s := 0;
while (n > 0) and (m > 0) do begin
s := s + (n mod 10);
n := n div 10;

dec(m); { <--- Обработал еще одну цифру - уменьшаешь счетчик }
end;
writeln('s = ', s);

Автор: Andrewshkovskii 25.10.2006 23:17

Цикл конечно работает,за что спасибо..
НО я хочу не просто сдать..а понять как это работает..для чего dec(m) нужно??ведь m - это кол-во цифр с коца числа...я пробывал её убирать,ответ получаеться на 1 больше..в описании процедуры написано что это уменьшение значение переменной ..гмм =/ потом ешё не понятно что

0 + (n mod 10); 
; а далее следует n div 10 ...эх=/

Автор: volvo 25.10.2006 23:28

Смотри:

  m := {сколько_цифр_числа_обрабатывать};
s := 0; { вначале сумма цифр = 0 }

{
Пока само число не станет равным 0 (почему это произойдет, смотри ниже)
или пока не обработано достаточное количество цифр (условие m > 0)
делать:
}
while (n > 0) and (m > 0) do begin
{
Сумму увеличиваем на последнюю цифру числа N
(так как число в десятичной системе счисления, его последнюю цифру
получаем как остаток (mod) от деления числа на 10)
}
s := s + (n mod 10);

{
Само число нужно разделить на 10 без остатка, тогда его предпоследняя цифра
станет последней: было 1234, поделили на 10 нацело - стало 123, бывшая
предпоследняя цифра стала последней... Когда поделишь на 10 число, состоящее из одной
цифры, оно станет равным 0, и цикл закончится...
}
n := n div 10;

{
Еще одну цифру обработал, значит, счетчик цифр, которые ЕЩЕ нужно посчитать,
уменьшаешь на 1, Dec(m) аналогично m := m - 1;
}
dec(m); { <--- Обработал еще одну цифру - уменьшаешь счетчик }
end;

{ Ну, и распечатываешь сумму... }
writeln('s = ', s);

Автор: Andrewshkovskii 26.10.2006 0:10

во спасибо!все понял!=)ишу кнопку как тебе репутацию поднять..чето не нашел=/

Автор: volvo 26.10.2006 0:17

smile.gif Не все так просто...

Тебе надо для этого набрать как минимум 100 постов (ну, или обратиться к кому-нибудь из модеров) ... blum.gif

Автор: юра 17.11.2012 0:17

Не могу решать помогите
сост программу нахождения произведения чисел от 5 до 25