нахождение полных чисел, написание программы |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
нахождение полных чисел, написание программы |
-Artur- |
Сообщение
#1
|
Гость |
Доброго времени суток !
Срочно нужна помощь. Задача: Полные числа - это такие числа которые равны всем своим делителям (за исключением самого себя). Пример: 6=3+2+1 (6 делится на 3, 2 и 1). Найти все полные числа от 1 до 10000. Ответы даны: 6, 28, 496, 8128. Не имею представления как написать такую программу в паскале, что бы она нашла эти числа. Помогите пожалуйста, буду очень благодарен. Заранее спасибо ! |
volvo |
Сообщение
#2
|
Гость |
Вообще-то эти числа называются "Совершенные": Замечательные числа
|
-Artur- |
Сообщение
#3
|
Гость |
Спасибо volvo, очень помогло.
использовал эту программу: Var I,N,Summa: LongInt; Delitel: Integer; Begin For I := 1 To 10000 Do Begin Summa := 1; For Delitel := 2 To Trunc(Sqrt(I)) Do Begin N := (I Div Delitel); If N * Delitel = I Then Summa := Summa + Delitel + (I Div Delitel); End; If Int(Sqrt(I)) = Sqrt(I) Then Summa := Summa - Trunc(Sqrt(I)); If I = Summa Then WriteLn(I, ' - ', Summa); End; End. Программа показывает числа так: 6 - 6 28 - 28 496 - 496 8128 - 8128 Можно ли сделать что бы эти числа писались 1 раз, а не 2 раза через дефиз ? (А то учитель может придраться :D ) И после этого выйти из программы нельзя. Прописал в конце readln; не помогло. И последнее, к программе мне нужно написать описание каждой строчки, тоесть что каждая строчка выпоняет (описать эти команды). Ну строки var, begin, и end я описать могу :D А вот во всех формулах и кодах которые тут присутствуют я не шарю. Может кто - то поможет? А то без описания строк работу не примут. :/ P.S volvo пробывал использовать твою программу (то что добавлено), там и строки описаны, но она у меня не работает. Хотя я просто скопировал всю программу от начала до конца, может чего лишнего взял (так как не понимаю толком ) |
-Artur- |
Сообщение
#4
|
Гость |
Извеняюсь, добавление в конце readln; помогло.
отсалось только 2 вопроса6 можно ли сделать что бы числа псиались 1 раз без дефиса, и описание строк очень нужно :/ |
Michael_Rybak |
Сообщение
#5
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
прочитай хоть что-нибудь сам по паскалю. про структуру программы вообще, про арифметические операции, про if-then-else, for-do и writeln. и сам напиши комментарии.
|
-Artur- |
Сообщение
#6
|
Гость |
да согласен, прочитать мне не помешает, но на это время нужно, а мне к понедельнику сделать надо.
Впочем мне нужно всего несколько описаний: I,N,Summa: LongInt; - вот эта строчка нужна, не понимаю что она означает. И соответственно исходя из этой строчки что значит For I := Ещё не знаю N := (I Div Delitel); - что такое div не знаю. If Int(Sqrt(I)) = Sqrt(I) - и вот это неопнтяно. Всего несколько строк, очень нужно :/ И как сделать что бы числа писались 1 раз через запятую или в столбик неважно, но 1 раз, а не повторно через тире. |
Michael_Rybak |
Сообщение
#7
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Что такое "I,N,Summa: LongInt;" ты узнаешь, потратив 5 полезных минут на ознакомление со структурой программ на паскале. Так и напиши в гугле - "паскаль. структура программы".
Что такое for ты узнаешь, ознакомившись с конструкцией for-do. Что такое div ты узнаешь, ознакомившись с арифметическими операциями. If Int(Sqrt(I)) = Sqrt(I) - эта строчка означает - "Если I является полным квадратом, то...". Более конкретно - Sqrt(I) вычисляет квадратный корень из I. Int(Sqrt(I)) берет от квадратного корня целую часть. Таким образом, вся строка означает дословно - "Если целая часть квадратного корня из I равна квадратному корню из I, то ...". Другими словами, "Если квадратный корень из I - целое число, то...". До понедельника времени - море. Удачи. |
-Artur- |
Сообщение
#8
|
Гость |
Спасибо
|
Текстовая версия | 23.12.2024 20:40 |