Есть задача по программированию
На клетчатой бумаге Петя нарисовал отрезок из точки с координатами (a,b) в точку с координатами (c,d). Через сколько клеток проходит этот отрезок (считается, что отрезок проходит через клетку, если он проходит через ее внутренность, если же он проходит только через вершину или по границе клетки, считается, что он не проходит через клетку).
Я нашёл решение.
var
a, b, c, d, s, m, n, t: integer;
begin
writeln('koordinaty 1 tochki:');
readln(a, b);
writeln('koordinaty 2 tochki:');
readln(c, d);
m := abs(a - c);
n := abs(b - d);
s := m + n;
while (n <> 0) and (m <> 0) do
begin
if n > m then n := n mod m else m := m mod n;
writeln('M=', m, ' N=', n);
end;
t := m + n;
s := s - t;
writeln('kletok=', s);
readln;
end.
Но я не могу понять, как так получилось?
Другие языки программирования и технологии
Объясните задачу (математика/программирование).
Первое: Нашли решение не вы!
Второе:
var
a, b, c, d, s, m, n, t: integer;
begin
writeln('koordinaty 1 tochki:');
readln(a, b);
writeln('koordinaty 2 tochki:');
readln(c, d);
m := abs(a - c);
n := abs(b - d);
s := m + n;
while (n <> 0) and (m <> 0) do вот этот цикл находит наибольший общий делитель для чисел m и n
begin алгоритм Евклида который
if n > m then n := n mod m else m := m mod n;
writeln('M=', m, ' N=', n); А вот это вы для себя вывели что бы понять что же все таки здесь происходит, но так и не поняли
end;
t := m + n; Тут складывают НОД с последним числом деленным на него
s := s - t; А тут чистая математика. Из суммы m+n вычитают t, надо бы нарисовать на бумажке и понять как туда НОД впихнули и вообще действует ли такой подход. Но лень.
writeln('kletok=', s);
readln;
end.
Второе:
var
a, b, c, d, s, m, n, t: integer;
begin
writeln('koordinaty 1 tochki:');
readln(a, b);
writeln('koordinaty 2 tochki:');
readln(c, d);
m := abs(a - c);
n := abs(b - d);
s := m + n;
while (n <> 0) and (m <> 0) do вот этот цикл находит наибольший общий делитель для чисел m и n
begin алгоритм Евклида который
if n > m then n := n mod m else m := m mod n;
writeln('M=', m, ' N=', n); А вот это вы для себя вывели что бы понять что же все таки здесь происходит, но так и не поняли
end;
t := m + n; Тут складывают НОД с последним числом деленным на него
s := s - t; А тут чистая математика. Из суммы m+n вычитают t, надо бы нарисовать на бумажке и понять как туда НОД впихнули и вообще действует ли такой подход. Но лень.
writeln('kletok=', s);
readln;
end.
Нурлан Букенбаев
Я нашёл решение в интернете. Я бы не смог решить задачу, не понимая как это делать)))
берете конкретные числа и ведете расчет. думаю увидите смысл, если с математикой не беда
Нурлан Букенбаев
В том-то и дело. Я программу полностью понимаю. С этим нет проблем, а вот как расчёт делается (почему так с математической точки зрения) я не понимаю. Буду благодарен хоть за тему по математики, которая связана с этим.
Нурлан Букенбаев
Да хрен знаю. Затупа у меня.
Нурлан Букенбаев
Ну так объяснишь?
Роман Горбунов
лень писать прогу... суть:
если а-с* или б-д* =0 то 0
если а-с=б-д то а-с*
в противном случае (а-с) +(б-д) -1
*разницу в координатах брать по модулю
если а-с* или б-д* =0 то 0
если а-с=б-д то а-с*
в противном случае (а-с) +(б-д) -1
*разницу в координатах брать по модулю
лень писать прогу... суть:
если а-с* или б-д* =0 то 0
если а-с=б-д то а-с*
в противном случае (а-с) +(б-д) -1
*разницу в координатах брать по модулю
в твоей проге на нечетных затык получается... допустим m=5 и n=2 клеток по проге 4, а в реале 6... мой вариант правильней
если а-с* или б-д* =0 то 0
если а-с=б-д то а-с*
в противном случае (а-с) +(б-д) -1
*разницу в координатах брать по модулю
в твоей проге на нечетных затык получается... допустим m=5 и n=2 клеток по проге 4, а в реале 6... мой вариант правильней
Алесандр Варавко
если а-с* или б-д* =0 то 0
А если линия горизонтальная или вертикальная то у нее одно из этих значений a-c или b-d будет нулем, но при этом отрезок будет равен b-d или a-c соответственно.
А если линия горизонтальная или вертикальная то у нее одно из этих значений a-c или b-d будет нулем, но при этом отрезок будет равен b-d или a-c соответственно.
Нурлан Букенбаев
Если брать значения m=6, n=4, то по алгоритму получиться 9. Так?
Похожие вопросы
- Как научиться решать задачи по программированию?
- Сборник/задачник реальных задач по программированию
- Помогите решить задачу на программирование!
- Хватит ли знаний школьной математики для решения большинства задач по программированию?
- Помогите пожалуйста решить задачу по программированию. В чем я ошибаюсь?
- Задача по программированию
- Зачем нужен решение математические задачи в программировании
- Решить графически задачу нелинейного программирования
- Как простым языком объяснить что такое программирование, и что оно делает?
- Порекомендуйте учебники по математике :) + программирование + а можно и совет по жизни :)