Форум «Всё о Паскале» _ Задачи _ Задача на подпрограмму
Автор: eldar219 6.04.2010 0:24
Составить программу для нахождения делителей некоторого числа
Плизз помогите как начать решать
Автор: Unconnected 6.04.2010 0:51
Можно так:
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.
Автор: Lapp 6.04.2010 8:18
Цитата(Unconnected @ 5.04.2010 21:51)
for i:=1 to n do if (n mod i=0) then writeln(i);
Вопрос: нужно ли делать цикл аж до n? ))
Автор: Unconnected 6.04.2010 16:37
А почему бы и нет?) n тоже является делителем самого себя...
Автор: volvo 6.04.2010 16:50
Цитата
n тоже является делителем самого себя...
Для того, чтобы это показать - совсем не обязательно цикл продолжать до N. Все проще гораздо...
Автор: Unconnected 6.04.2010 23:27
Вот так:
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.
Т.к. из двух множителей один не может быть меньше двух в нашем случае.
Автор: Lapp 7.04.2010 11:27
Цитата(Unconnected @ 6.04.2010 20:27)
Вот так:
for i:=1 to (n div 2) do if (n mod i=0) then begin ...
Т.к. из двух множителей один не может быть меньше двух в нашем случае.
Гм. Тогда, может быть, и начинать не с 1?
Unconnected, думай дальше. Ты прошел некоторую часть пути, но не до конца )).
Автор: TarasBer 7.04.2010 15:23
Можно даже до половины не идти.
Автор: Lapp 8.04.2010 10:21
Цитата(TarasBer @ 7.04.2010 12:23)
Можно даже до половины не идти.
Именно так . Но уважаемый Un отмалчивается..
Автор: Unconnected 8.04.2010 16:58
Ммм ну не знаю, я с циклом 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 и потом что-то домножать, но не додумался до конца)
Автор: Client 8.04.2010 17:04
думаю, имелось в виду после цикла сделать
writeln(n);
И можно идти до значения корня из числа
Автор: Unconnected 8.04.2010 17:10
Цитата
И можно идти до значения корня из числа smile.gif
И как ты себе это представляешь?
Автор: Client 8.04.2010 17:13
for i:=2 to round (sqrt(n) )
Автор: Lapp 8.04.2010 17:40
Цитата(Client @ 8.04.2010 14:13)
for i:=2 to round (sqrt(n) )
Угу )). Только можно даже не Round, а Trunс. И есть еще одна вещь, которую следует упомянуть..
Автор: Client 8.04.2010 17:59
тут возможно: 1) можно включить и единицу 2) возможно есть делитель n/2 3) ну и само число n
Автор: TarasBer 8.04.2010 18:13
Народ, автор же ещё даже ни одного ответа не сделал. А то так всё и раскроем.