IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача на подпрограмму, составить задачу
eldar219
сообщение 5.04.2010 20:24
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 34
Пол: Мужской
Реальное имя: eldar

Репутация: -  0  +


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



Плизз помогите как начать решать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 5.04.2010 20:51
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Можно так:


Procedure divz(n:integer);
var i:byte;
begin
for i:=1 to n do if (n mod i=0) then writeln(i);
end;

var n:integer;
begin
writeln('Vvedite N');
readln(n);
divz(n);
readln;
end.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 6.04.2010 4:18
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Unconnected @ 5.04.2010 21:51) *
  for i:=1 to n do if (n mod i=0) then writeln(i);

Вопрос: нужно ли делать цикл аж до n? ))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 6.04.2010 12:37
Сообщение #4


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


А почему бы и нет?) n тоже является делителем самого себя...


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.04.2010 12:50
Сообщение #5


Гость






Цитата
n тоже является делителем самого себя...
Для того, чтобы это показать - совсем не обязательно цикл продолжать до N. Все проще гораздо...
 К началу страницы 
+ Ответить 
Unconnected
сообщение 6.04.2010 19:27
Сообщение #6


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Вот так:

Procedure divz(n:integer);
var i:byte;
begin
writeln(n);
for i:=1 to (n div 2) do if (n mod i=0) then begin
writeln(i);
end;
end;

var n:integer;
begin
writeln('Vvedite N');
readln(n);
divz(n);
readln;
end.


Т.к. из двух множителей один не может быть меньше двух в нашем случае.

Сообщение отредактировано: Unconnected - 6.04.2010 19:29


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 7.04.2010 7:27
Сообщение #7


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Unconnected @ 6.04.2010 20:27) *
Вот так:
  for i:=1 to (n div 2) do if (n mod i=0) then begin ...

Т.к. из двух множителей один не может быть меньше двух в нашем случае.
Гм. Тогда, может быть, и начинать не с 1? smile.gif

Unconnected, думай дальше. Ты прошел некоторую часть пути, но не до конца )).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 7.04.2010 11:23
Сообщение #8


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Можно даже до половины не идти.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 8.04.2010 6:21
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(TarasBer @ 7.04.2010 12:23) *
Можно даже до половины не идти.
Именно так yes2.gif . Но уважаемый Un отмалчивается.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 8.04.2010 12:58
Сообщение #10


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ммм ну не знаю, я с циклом for ничего больше не придумал, кроме как:

Procedure divz(n:integer);
var i,i2:byte;
begin
writeln(n);
i2:=1;
for i:=n div 2 downto i2 do if (n mod i=0) then begin
writeln(i);
inc(i2,n div i);
end;
end;

var n:integer;
begin
writeln('Vvedite N');
readln(n);
divz(n);
readln;
end.



Но тут количество итераций то же самое вроде. Есть подозрение, что там можно делать допустим n div 5 и потом что-то домножать, но не додумался до конца)


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 8.04.2010 13:04
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


lol.gif
думаю, имелось в виду после цикла сделать
writeln(n);

И можно идти до значения корня из числа smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 8.04.2010 13:10
Сообщение #12


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Цитата

И можно идти до значения корня из числа smile.gif


И как ты себе это представляешь?smile.gif


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 8.04.2010 13:13
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


for i:=2 to round (sqrt(n) )


Сообщение отредактировано: Client - 8.04.2010 13:13
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 8.04.2010 13:40
Сообщение #14


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Client @ 8.04.2010 14:13) *
for i:=2 to round (sqrt(n) )
Угу )). Только можно даже не Round, а Trunс.
И есть еще одна вещь, которую следует упомянуть..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 8.04.2010 13:59
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


тут возможно:
1) можно включить и единицу
2) возможно есть делитель n/2
3) ну и само число n
smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 8.04.2010 14:13
Сообщение #16


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Народ, автор же ещё даже ни одного ответа не сделал. А то так всё и раскроем.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 17:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"