Форум «Всё о Паскале» _ Задачи _ Циклические алгоритмы
Автор: Flatterer19 17.12.2009 6:19
Написать программу, которая подчитывает количество чисел кратных k, но некратных l, в диапазоне от m до n.
Автор: Lapp 17.12.2009 6:24
x:=0; for i:=m to n do if (i mod k=0)and(i mod l>0) then Inc(x);
Автор: Flatterer19 17.12.2009 6:26
Цитата(Lapp @ 17.12.2009 2:24)
x:=0; for i:=m to n do if (i mod k=0)and(i mod l>0) then Inc(x);
Можно поподробнее вместе с условием с началом программы, я вообще новичок в этом...
Автор: Lapp 17.12.2009 6:31
Цитата(Flatterer19 @ 17.12.2009 2:26)
Можно поподробнее вместе с условием с началом программы, я вообще новичок в этом...
... а я старичок на такое разводиться. Тебе написана вся функциональная часть программы. Добавь описания, ввод и вывод - и все. Не знаешь, как - бери учебник и вперед.
А если тебе нужно все к паре в ротик положить - тогда вали вообще из программирования, и без тебя дышать будет легче..
Автор: andriano 17.12.2009 12:51
А если так?
for i:=((m + k - 1) div k) to (n div k) do if (i*k mod l>0) then Inc(x);
Автор: Lapp 17.12.2009 13:22
Цитата(andriano @ 17.12.2009 8:51)
А если так?
for i:=((m + k - 1) div k) to (n div k) do if (i*k mod l>0) then Inc(x);
А зачем?
Автор: andriano 17.12.2009 23:22
Цитата(Lapp @ 17.12.2009 9:22)
А зачем?
Ну, если требуется работать в диапазоне от 0 до МахInt, причем k и l имеют порядок sqrt(MaxInt), то разница, думаю, будет хорошо заметна (по крайней мере, для 32-разрядного компилятора). В любом случае, компьютер хоть и железный, но вряд ли целесообразно заставлять его делать лишнюю работу.
Автор: Lapp 18.12.2009 6:25
Цитата(andriano @ 17.12.2009 19:22)
В любом случае, компьютер хоть и железный, но вряд ли целесообразно заставлять его делать лишнюю работу.
Гм. Эта "лишняя работа" делается исключительно согласно условию задачи (см. название темы). В противном случае все решается одной формулой вообще без циклов.
В этом ключе - любая учебная задача есть лишняя работа. Хотя, конечно, согласен, что условие лучше давать более разумное. Иначе скоро мы увидим что-нить типа "подсчитать в цикле количество натуральных чисел от одного до 100"
Автор: andriano 18.12.2009 13:49
1. Предложенный вариант удовлетворяет исходному условию "циклическая задача". 2. Что касается именно учебных задач, то IMHO нужно с самого начала учить программировать правильно, а не сначала учить писать как попало, а потом переучивать. А "правильно" - это значит оптимальным при заданных условиях и ограничениях способом.