Форум «Всё о Паскале» _ Задачи _ простая но не рабочая программа задача
Автор: compiler 29.04.2007 18:33
есть задача
Код
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 29.04.2007 18:36
for j := 0 ... n mod j
остаток от деления на 0 ?!
Автор: compiler 29.04.2007 18:54
я подправил, но появилась новая ошибка...
Автор: мисс_граффити 29.04.2007 19:37
я чего-то не понимаю...
Цитата
8.Вычислите сумму и среднее арифметическое всех четных делителей числа N: Longint.
Цитата
var n, j,i,s:integer;
считает неправильно. по-моему, ты намудрил сильно... и, по-моему, задача на длинную арифметику. сумма может быть значительно больше самого n, то есть в longint не влезет...
Автор: compiler 29.04.2007 20:18
Цитата(мисс_граффити @ 29.04.2007 19:37)
по-моему, ты намудрил сильно... и, по-моему, задача на длинную арифметику.
та хотя бы с маленькими числами работала...
Автор: мисс_граффити 29.04.2007 20:53
ну, с маленькими и простым перебором можно напишешь сам? просто перебираешь все четные числа меньше n/2 (и при необходимости приплюсовываешь само n). если делится - добавляешь к сумме.
Автор: compiler 30.04.2007 16:12
Цитата(мисс_граффити @ 29.04.2007 20:53)
ну, с маленькими и простым перебором можно напишешь сам? просто перебираешь все четные числа меньше n/2 (и при необходимости приплюсовываешь само n). если делится - добавляешь к сумме.
Прошу прощение. Поправка условия. делителя читать как цыифра числа.
Автор: мисс_граффити 30.04.2007 16:43
то есть для числа 124598 это будет 2+4+8? а для 22 получится 2+2?
Автор: compiler 30.04.2007 20:10
Цитата(мисс_граффити @ 30.04.2007 16:43)
то есть для числа 124598 это будет 2+4+8? а для 22 получится 2+2?
Да! но для 22 прога работает правильно, а для 124598-нет.
Автор: klem4 30.04.2007 20:11
Цитата
124598
В турбопаскалевский Integer не влезет.
Автор: compiler 30.04.2007 20:24
Цитата(klem4 @ 30.04.2007 20:11)
В турбопаскалевский Integer не влезет.
дело не в размере 11 -- тоже даёт ошибку..
Автор: volvo 30.04.2007 20:30
Цитата
11 -- тоже даёт ошибку..
11 тебе будет давать ошибку только потому, что i = 0, а ты на i делишь!!!
P.S. И потом... Тебе надо сумму? Чего ты счетчик печатаешь? S зачем вычислял?
Автор: klem4 30.04.2007 20:32
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 1.05.2007 20:38
Цитата(volvo @ 30.04.2007 20:30)
11 тебе будет давать ошибку только потому, что i = 0, а ты на i делишь!!!
знаеш что обидно. только сам нашел ошибки как начались проблемы с телефоном
Цитата(volvo @ 30.04.2007 20:30)
P.S. И потом... Тебе надо сумму? Чего ты счетчик печатаешь? S зачем вычислял?
та хотел отредактировать да срок истек...(к стате сколько он сейчас составляет)