Форум «Всё о Паскале» _ Задачи _ Поиск числа по условию
Автор: freehold 9.10.2011 19:38
Надо написать программу которая при вводе числа X, нашла бы ближайшее число, которое меньше числа X, которое делится на 5 и 7 без остатка.
Автор: Lapp 10.10.2011 5:45
Цитата(freehold @ 9.10.2011 16:38)
ближайшее число, которое меньше числа X, которое делится на 5 и 7 без остатка.
Редкий случай, когда пригождается repeat / until
repeat dec(x) until x mod (5*7)=0; // только в случае взаимно простых a и b
Надеюсь, вводимое число подразумевается целым.
Автор: Lapp 10.10.2011 6:18
А вот вариант совсем без циклов..
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 10.10.2011 23:12
Цитата(Lapp @ 10.10.2011 1:45)
Редкий случай, когда пригождается repeat / until
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 10.10.2011 23:24
Цитата(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 10.10.2011 23:43
я не догоняю зачем перемножать 5 и 7? )
тогда же получится until x mod 35=0;
а мне поидее надо until (x mod 5=0) and (x mod 7=0)
Добавлено через 19 мин. а всё догнал )) всё работает