Задача 4 Урок 16
Primary tabs
Вспомогательная задача (можно решить, просто используя одномерные массивы):
Пользователь вводит 4 целых числа, считаем все их координатами на прямой, а именно:
первые два числа - начало и конце отрезка 1
вторые два - начало и конец отрезка 2
Задача: напишите подпрограмму, которая определит какой отрезок является пересечением этих двух заданных отрезков (если это пересечение вообще есть).Примечание: оформить поиск пересечения в виде процедуры, которая получает на вход 4 аргумента целого типа (4 координаты - по две для каждого отрезка) и ещё 2 параметра по ссылке:
одномерный массив из 2 элементов, куда будет записано пересечение (если оно будет найдено)
булево значение, которое показывает найдено ли пересечение
program u16z4; type ar = array[1..2, 1..2] of integer; br = array[1..2] of integer; var a: ar; b: br; q: boolean; i: integer; procedure f1(a_1, a_2 :integer; var b :br; var q :boolean); //поиск пересечения begin if (a_1 <= b[1]) and (a_2 <= b[2]) or (a_1 <= b[2]) and (a_2 >= b[1]) then q := true else q := false; if q then begin if a_1 > b[1] then b[1] := a_1; if a_2 < b[2] then b[2] := a_2; end; end; procedure r1(a :ar; var b :br; var q :boolean); //запись результата var i, a_1, a_2 :integer; begin b[1] := a[1, 1]; b[2] := a[1, 2]; for i := 2 to high(a) do begin a_1 := a[i, 1]; a_2 := a[i, 2]; f1(a_1, a_2, b, q); if not q then break; end; end; procedure r2(b :br; q :boolean); //процедура вывода begin if not q then writeln('He peresek') else writeln('Peresek : ', b[1], ' ', b[2]); end; begin q := false; for i := 1 to high(a) do begin writeln('Vvedite tochky 1'); readln(a[i, 1]); writeln('Vvedite tochky 2'); readln(a[i, 2]); end; writeln(); writeln('Otrezku'); for i := 1 to high(a) do begin writeln(a[i, 1], ' ', a[i, 2]); end; r1(a, b, q); r2(b, q); readln(); end.
- Log in to post comments
- 372 reads