Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Циклические алгоритмы

Автор: 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" smile.gif

Автор: andriano 18.12.2009 13:49

1. Предложенный вариант удовлетворяет исходному условию "циклическая задача".
2. Что касается именно учебных задач, то IMHO нужно с самого начала учить программировать правильно, а не сначала учить писать как попало, а потом переучивать. А "правильно" - это значит оптимальным при заданных условиях и ограничениях способом.