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

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

Форум «Всё о Паскале» _ Задачи _ простая но не рабочая программа задача

Автор: 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

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

Автор: compiler 30.04.2007 16:12

Цитата(мисс_граффити @ 29.04.2007 20:53) *

ну, с маленькими и простым перебором можно smile.gif
напишешь сам? просто перебираешь все четные числа меньше 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 зачем вычислял?
та хотел отредактировать да срок истек...(к стате сколько он сейчас составляет)

Виноват кругом..