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

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

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

> Отрезок
Witaliy
сообщение 14.02.2009 18:54
Сообщение #1


Новичок
*

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

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


Даны координаты конца и начала отрезка (целочиселные координаты) Нужно найти количество точек с целочиселными координатами, что лежат на отрезке:
Пример: 0 0 3 3
Ответ: 4.

Две точки как минимуи должны быть.

Спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
klem4
сообщение 14.02.2009 19:32
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


По 2-м точкам можно получить уравнение прямой. Далее циклом от маньшего x к большему, вызываешь f(x) и проверяешь на целочисленность.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
amega
сообщение 14.02.2009 19:34
Сообщение #3


?
***

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

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



program _1_;
var
i:integer;
j:integer;
x1,x2,y1,y2,k,a,b:integer;
begin

{ сюда впихуеш ввод х1. х2 ...}

k:=0;
a:=x2-x1;
b:=y2-y1;
for i:=x1 to x2 do
for j:=y1 to y2 do
if (a*(j-y1)) = (b*(i-x1)) then k:=k+1;
writeln(k);
readln;
end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.02.2009 19:45
Сообщение #4


Гость






amega, и что? А я ввел (0, 0) - (6, 3), должны быть 3 точки, что печатает твоя программа?
 К началу страницы 
+ Ответить 
amega
сообщение 14.02.2009 19:50
Сообщение #5


?
***

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

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


Цитата
А я ввел (0, 0) - (6, 3), должны быть 3 точки, что печатает твоя программа?


0,0 2,1 4,2 6,3 - 4 точки

Добавлено через 4 мин.
я проверил перед тем как выкладивать


program _1_;
var
i:integer;
j:integer;
x1,x2,y1,y2,k,a,b:integer;
begin

x1:=0;
x2:=6;
y1:=0;
y2:=3;
k:=0;
a:=x2-x1;
b:=y2-y1;
for i:=x1 to x2 do
for j:=y1 to y2 do
if (a*(j-y1)) = (b*(i-x1)) then k:=k+1;
writeln(k);
readln;
end.



у меня выдает 4 можу скриншоты зделать если не вереш

Сообщение отредактировано: amega - 14.02.2009 19:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 14.02.2009 20:39
Сообщение #6


Злостный любитель
*****

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

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


amega, неоптимально очень...
klem4 предложил лучше
Но на самом деле там надо найти НОД алгоритмом Евклида и прибавить к нему единицу.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
amega
сообщение 14.02.2009 21:12
Сообщение #7


?
***

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

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


Цитата
Но на самом деле там надо найти НОД алгоритмом Евклида и прибавить к нему единицу.


мм а можно код глянуть или где про ето можно почитать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 16.02.2009 10:10
Сообщение #8


Гуру
*****

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

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


Наибольший общий делитель
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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