Помощь - Поиск - Пользователи - Календарь
Полная версия: Поиск числа по условию
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
freehold
Надо написать программу которая при вводе числа X, нашла бы ближайшее число, которое меньше числа X, которое делится на 5 и 7 без остатка.
Lapp
Цитата(freehold @ 9.10.2011 16:38) *
ближайшее число, которое меньше числа X, которое делится на 5 и 7 без остатка.

Редкий случай, когда пригождается repeat / until smile.gif
repeat
dec(x)
until x mod (5*7)=0; // только в случае взаимно простых a и b

Надеюсь, вводимое число подразумевается целым.
Lapp
А вот вариант совсем без циклов.. smile.gif
const
a= 5;
b= 7;
ab= a*b; // только в случае взаимно простых a и b

var
x: integer;

begin
readln(x);
if x>0 then dec(x) else x:= x-ab;
writeln(x div ab*ab);
readln
end.
freehold
Цитата(Lapp @ 10.10.2011 1:45) *

Редкий случай, когда пригождается repeat / until smile.gif
repeat
dec(x)
until x mod (5*7)=0; // только в случае взаимно простых a и b

Надеюсь, вводимое число подразумевается целым.



я только начал изучать Pascal, но разве: until x mod (5*7)=0 , не означает until x mod 35=0?


ещё раз для ясности пример программы:

x=37 - число которое мы ввели.

тоесть программа должна вывести число 35 , так как оно ближайшее, меньшее число до 37, которое одновременно делится и на 5, и на 7 без остатка.
Lapp
Цитата(freehold @ 10.10.2011 20:12) *
я только начал изучать Pascal, но разве: until x mod (5*7)=0 , не означает until x mod 35=0?
Да, означает. Ты хочешь сам перемножить эти два числа? Я предпочитаю, чтоб машина за меня перемножила. Это лучше потому, что так меньше разнообразия чисел в программе. Если в коде будут присктствовать одновременно и 5, и 7, и 35 - проще запутаться. Ну, тут еще легко сообразить, что 35 - это произведение двух остальных, но могло быть и гораздо сложнее. Например, вместо 5 и 7 были бы 3789 и 211 - вот и ищи произведение.. Проще оставить, как они есть. А еще лучше - сделать именованные константы (как я сделал в решении без циклов).

Цитата
x=37 - число которое мы ввели.

тоесть программа должна вывести число 35 , так как оно ближайшее, меньшее число до 37, которое одновременно делится и на 5, и на 7 без остатка.
Вроде так, да.. А что - не работатет, что ли?..
freehold
я не догоняю зачем перемножать 5 и 7? )

тогда же получится until x mod 35=0;

а мне поидее надо
until (x mod 5=0) and (x mod 7=0)



Добавлено через 19 мин.
а всё догнал )) всё работает

большое спасибо за помощь smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.