Помощь - Поиск - Пользователи - Календарь
Полная версия: простая но не рабочая программа задача
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
compiler
есть задача
Код
8.Вычислите сумму и среднее арифметическое всех четных делителей числа N: Longint.

моё решение
var
n, j,i,s:integer;
begin
s:=0;
i:=0;
ReadLn(n);
While n<>0 do begin
j:=n mod 10;
if j<>0 then begin
if (j mod 2 =0) and (n mod j =0) then begin
inc(i);
s:=s+j;
end;
end;
n :=n div 10;
end;
writeLn(i);
writeLn(s/i);

ReadLn(i);
end.



ошибка при запуске. как исправить?

добавлено позже
программа подправлена.
klem4
for j := 0 ... n mod j


остаток от деления на 0 ?!
compiler
я подправил, но появилась новая ошибка...
мисс_граффити
я чего-то не понимаю...
Цитата
8.Вычислите сумму и среднее арифметическое всех четных делителей числа N: Longint.


Цитата
var
n, j,i,s:integer;


считает неправильно.
по-моему, ты намудрил сильно...
и, по-моему, задача на длинную арифметику. сумма может быть значительно больше самого n, то есть в longint не влезет...
compiler
Цитата(мисс_граффити @ 29.04.2007 19:37) *
по-моему, ты намудрил сильно...
и, по-моему, задача на длинную арифметику.
та хотя бы с маленькими числами работала...
мисс_граффити
ну, с маленькими и простым перебором можно smile.gif
напишешь сам? просто перебираешь все четные числа меньше n/2 (и при необходимости приплюсовываешь само n). если делится - добавляешь к сумме.
compiler
Цитата(мисс_граффити @ 29.04.2007 20:53) *

ну, с маленькими и простым перебором можно smile.gif
напишешь сам? просто перебираешь все четные числа меньше n/2 (и при необходимости приплюсовываешь само n). если делится - добавляешь к сумме.

Прошу прощение. Поправка условия. делителя читать как цыифра числа.
мисс_граффити
то есть для числа 124598 это будет 2+4+8?
а для 22 получится 2+2?
compiler
Цитата(мисс_граффити @ 30.04.2007 16:43) *
то есть для числа 124598 это будет 2+4+8?
а для 22 получится 2+2?
Да! но для 22 прога работает правильно, а для 124598-нет.
klem4
Цитата
124598
В турбопаскалевский Integer не влезет.
compiler
Цитата(klem4 @ 30.04.2007 20:11) *

В турбопаскалевский Integer не влезет.
дело не в размере 11 -- тоже даёт ошибку..
volvo
Цитата
11 -- тоже даёт ошибку..
11 тебе будет давать ошибку только потому, что i = 0, а ты на i делишь!!!

P.S. И потом... Тебе надо сумму? Чего ты счетчик печатаешь? S зачем вычислял?
klem4

count := 0; s := 0;

while (n > 0) do begin
if not(odd(n mod 10)) then begin
inc(count); inc(s, n mod 10);
end;
n := n div 10;
end;

if count = 0 then writeln('no')
else writeln('s = ', s, #10#13, 'sr = ', (s / count):2:3);
compiler
Цитата(volvo @ 30.04.2007 20:30) *

11 тебе будет давать ошибку только потому, что i = 0, а ты на i делишь!!!
знаеш что обидно. только сам нашел ошибки как начались проблемы с телефоном

Цитата(volvo @ 30.04.2007 20:30) *
P.S. И потом... Тебе надо сумму? Чего ты счетчик печатаешь? S зачем вычислял?
та хотел отредактировать да срок истек...(к стате сколько он сейчас составляет)

Виноват кругом..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.