Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Задачка


Зацени ©   (2006-10-02 17:08:00) 

Числа, равные сумме своих делителей (кроме себя самого), называются совершенными. Например, число 28 является совершенным: 28 = 1 + 2 + 4 + 7 + 14. Найти все совершенные числа от 1 до 10000
Вот подкинули мне такую задачу и я не знаю как её решать, помогите пожалуйста.Полного кода мне не нужно, а вот примерный алгоритм не помешает.


Германн   (2006-10-02 18:57:00) [1]

1. sum нужно присваивать не 0, а 1 как в [6]
2. это нужно делать внутри цикла по а
3. проверку sum=a вынести за границу цикла по i


Слил   (2006-10-02 18:51:00) [2]

Не знаю так или не так
sum:=0;
for a:=1 to 1000 do begin
for i:=2 to a div 2 do
if (a mod i)=0 then begin
sum:=sum+i;
if sum=a then
Write(sum:4);
end;
end;
но по другому не могу придумать.Плиз, если не правильно то подскажите где именно, и что я делаю не так.


Ketmar   (2006-10-02 18:24:00) [3]

а там -- нормальный код. в девятом классе уже можно язык знать. у тебя -- явное непонимание именно языка. советую просто от хорошего настроения: дальше ничего не спрашивай. подумай сам. один раз разбершься -- на всю жизнь будешь рад. в крайнем случае -- пиши. пробуй.

хинт: алгоритм неверен.


Слил   (2006-10-02 18:19:00) [4]

а что там?
я вроде сумму проверяю


Ketmar   (2006-10-02 18:15:00) [5]

см. [6]


Слил   (2006-10-02 18:10:00) [6]

В данный момент нет паскаля под рукой но мне кажется что прога будет выглядить примерно так

nd:=0;
sum:=0;
for j:=1 to 1000 do begin
for i:=2 to a div 2 do
if a mod i=0 then
begin
sum:=sum+i
writeln;
if sum:=j then
Write(j:4);
end;
если что не так то обьясните почему, а то я только в 9 классе и мне надо ущнавать по больше


Ketmar   (2006-10-02 17:59:00) [7]

>[6] MBo(c) 2-Oct-2006, 17:58
зачем воспитательный процесс нарушаешь? %-)


MBo   (2006-10-02 17:58:00) [8]

sum:=1;
for i:=2 to a div 2 do
if (a mod i) = 0 then
 sum := sum + i;


Ketmar   (2006-10-02 17:57:00) [9]

думай. в начале сумма, натурально, равна нулю. нашёл очередной делитель -- сразу прибавил его к искомой сумме. и так для всех. на выходе получаешь именно то, что хотел. больше разжёвывать не буду -- и так нарушил традицию "отсылки за метлой". %-)


Слил   (2006-10-02 17:54:00) [10]

Видишь в чем проблема у меня все делители выраженны одной переменной, и как посчитать их сумму я не знаю.


Ketmar   (2006-10-02 17:52:00) [11]

ну и? посчитать сумму делителей и проверить, равна ли она исследуюмому числу. ы?


Слил   (2006-10-02 17:46:00) [12]

Я имею в виду алгоритм программы.Я знаю как найти делители:
Write;
Readln(a);
nd:=0;
for i:=2 to a div 2 do
if a mod i=0 then
begin
writeln;
Write(i:4);
nd:=nd+1;
end;
но что делать далбше не знаю вот и прошу помощи.


Ketmar   (2006-10-02 17:13:00) [13]

в школу. быстро. и попросить математичку, чтобы поставила побольше двоек. потому что алгоритм ты сам только что описал.


Наверх

Титульная страница Поиск, карта сайта Написать письмо