IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Поиск числа по условию
freehold
сообщение 9.10.2011 15:38
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Надо написать программу которая при вводе числа X, нашла бы ближайшее число, которое меньше числа X, которое делится на 5 и 7 без остатка.

Сообщение отредактировано: freehold - 9.10.2011 15:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
Lapp
сообщение 10.10.2011 1:45
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(freehold @ 9.10.2011 16:38) *
ближайшее число, которое меньше числа X, которое делится на 5 и 7 без остатка.

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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.10.2011 2:18
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


А вот вариант совсем без циклов.. 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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
freehold
сообщение 10.10.2011 19:12
Сообщение #4





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Цитата(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 без остатка.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.10.2011 19:24
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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 без остатка.
Вроде так, да.. А что - не работатет, что ли?..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
freehold
сообщение 10.10.2011 19:43
Сообщение #6





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


я не догоняю зачем перемножать 5 и 7? )

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

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



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

большое спасибо за помощь smile.gif

Сообщение отредактировано: freehold - 10.10.2011 20:02
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 6:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"