![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Игорь |
![]()
Сообщение
#1
|
Гость ![]() |
Помогите пожалуйста с задачей:
Определить, является ли заданное натуральное число совершенным, т.е. Равным сумме всех своих (положительных) делителей, кроме самого этого числа (напр. Число 6 совершенно: 6=1+2+3). |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Если "в лоб" -
Но может существует и другое решение. А вообще-то их не так уж много (я знаю всего 5 из тех, которые помещаются в LongInt). Может, имеет смысл проверять напрямую? |
Игорь |
![]()
Сообщение
#3
|
Гость ![]() |
Большое спасибо! А как по этому составить flow-схему и диаграмму Насси-Шнейдермана?
|
xds |
![]()
Сообщение
#4
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Решение "в лоб" для n = 33550336 уже немного задумывается. Слегка оптимизируем:
Код program PerfNum; label Cont; var n, l, r, d, s: LongInt; begin Write('n>'); Readln(n); l := 1; r := n div 2; s := 1; while l < r do begin for d := l + 1 to r - 1 do if n mod d = 0 then begin l := d; r := n div d; if l = r then Inc(s, l) else Inc(s, l + r); goto Cont; end; Break; Cont: end; if (n <> 1) and (s = n) then Writeln('Число ', n, ' - совершенное') else Writeln('Число ', n, ' не является совершенным'); end. Сообщение отредактировано: xds - 15.10.2004 17:03 -------------------- The idiots are winning.
|
xds |
![]() ![]()
Сообщение
#5
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Впрочем, если n типа LongInt, то почему бы не так:
program PerfNum2; :P -------------------- The idiots are winning.
|
Caries |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(xds @ 15.10.04 17:02) Решение "в лоб" для n = 33550336 уже немного задумывается. Слегка оптимизируем: Вопрос: вот в некоторых книгах пишут что goto использовать не рекомендуется, можно ли в данном случае обойтись без него? |
Флогримм |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 253 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Вопрос: вот в некоторых книгах пишут что goto использовать не рекомендуется, можно ли в данном случае обойтись без него? не рекомендуется использовать сложные, запутанные структуры с гоуту, а когда оно один-два раза в программе применяется, ИМХО, ничего страшного и ваапче енто есть мнение расхожее -------------------- Я не буду жить с этой злобой внутри / Я не буду частью смертельной цепи / Я не буду потребителем твоих идей / Я не буду никогда убивать зверей (Unconform)
|
Altair |
![]()
Сообщение
#8
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Нет, или мы пишем код на Паскале, по принципу структурного программирования, или мы берем тогда Бейсик
![]() Убрать GOTO на фиг! ![]() ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Caries |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Та же программа. Но с условием поиска совершенного числа меньше введенного юзверем.
Требуется при выводе совершенного числа вывести также его делители(т.е показать что в сумме они дают само число) Как это можно сделать? Я затрудняюсь. Вот код исходной программы котрую нужно модифицировать: Код Program semestr; var i,n,s,z:Integer; begin writeln('DANNAJA PROGRAMMA HAXODIT COBEPSHEHHIE CHISLA'); WRITELN('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'); writeln('vvedite chislo'); readln(n); if n<6 then writeln('sovversh chisel net') else writeln('Perfect Chisla menshie n'); for z:=6 to n do begin s:=1; for i:=2 to (z div 2) do if (z mod i) = 0 then inc(s,i); If s=z then writeln(z) end; readln; end. Заранее спасибо Сообщение отредактировано: Caries - 15.12.2004 21:51 |
Caries |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
неужели никто не знает?
|
FreeMan |
![]()
Сообщение
#11
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
В цикле дели на 10 и выводи остаток от деления
while x<>0 do begin -------------------- бб
|
Гость_Caries |
![]()
Сообщение
#12
|
Гость ![]() |
Можно поподробнее?
|
FreeMan |
![]()
Сообщение
#13
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
Program semestr; так вроде. -------------------- бб
|
Caies |
![]()
Сообщение
#14
|
Гость ![]() |
Закомпилил. Выдает чепуху при вводе напрример 8 выдаст 6 6. Вы сами компилили?
|
Гость_Caries |
![]()
Сообщение
#15
|
Гость ![]() |
Может я просто неграмотно описал то что требуется? сейчас выводит просто числа в ряд 6 , 28,
Требуется чтобы выводилось так 6=1+2+3 28=1+2+4+7+14 и тд. |
FreeMan |
![]()
Сообщение
#16
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: ![]() ![]() ![]() |
замени
while s<>0 do begin на while s<>1 do begin Цитата Закомпилил. Выдает чепуху при вводе напрример 8 выдаст 6 6. Вы сами компилили? Я код не проверяю... Но в данном случае сработала, как задумано, просто я не понял вопрос. З.Ы. Можно на "ты" -------------------- бб
|
Guest |
![]()
Сообщение
#17
|
Гость ![]() |
Млин. При 6 все нормально выдает 1 2 3
если вводим 9 то выдаст 1 2 3 1 7 1 2 |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Guest
Попробуй вот так:
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 19:44 |