задача 3 урок 16
Primary tabs
Вспомогательная задача (можно решить, просто используя одномерные массивы):
Пользователь вводит 4 целых числа, считаем все их координатами на прямой, а именно:
первые два числа - начало и конце отрезка 1
вторые два - начало и конец отрезка 2
Задача: напишите подпрограмму, которая определит какой отрезок является пересечением этих двух заданных отрезков (если это пересечение вообще есть).
Решение
program task3_lesson16;
type
arrTwo = array[1..2, 1..2] of integer;
procedure per(a: arrTwo);
begin
if ((a[1][2] <= a[2][1]) or (a[2][2] <= a[1][1])) then
write('pereseceniya net')
else
if ((a[1][2] > a[2][1]) and (a[1][2] <= a[2][2]) and (a[1][1] <= a[2][1])) then
write(a[2][1], ' ', a[1][2])
else
if ((a[2][2] > a[1][1]) and (a[2][2] <= a[1][2]) and (a[1][1] >= a[2][1])) then
write(a[1][1], ' ', a[2][2])
else
if ((a[1][1] >= a[2][1]) and (a[1][2] <= a[2][2])) then
write(a[1][1], ' ', a[1][2])
else
if ((a[1][1] <= a[2][1]) and (a[2][2] <= a[1][2])) then
write(a[2][1], ' ',a[2][2]);
end;
var a: arrTwo;
i, j, n: integer;
begin
for i := 1 to 2 do
begin
writeln('vvedite koordinati');
for j := 1 to 2 do
begin
readln(n);
a[i][j] := n;
end;
end;
per(a);
readln
end.Консоль
vvedite koordinati 5 10 vvedite koordinati -5 7 5 7
- Log in to post comments
- 3428 reads
vedro-compota
Sun, 10/31/2021 - 12:40
Permalink
if () then
_____________
матфак вгу и остальная классика =)
vedro-compota
Sun, 10/31/2021 - 12:41
Permalink
per(a: arrTwo);
-- переделать на 4 аргумента целого типа
_____________
матфак вгу и остальная классика =)
Gurgen
Mon, 11/01/2021 - 00:13
Permalink
Заменил процедуру на Функцию
Заменил процедуру на Функцию которая получает 4 аргумента и возвращает координаты отрезка
пересечения
program task3_lesson16; type koordinat = array[1..2] of integer; arrTwo = array[1..2, 1..2] of integer; function find(x1, y1, x2, y2: integer) : koordinat; var a: koordinat; begin if ((y1 <= x2) or (y2 <= x1)) then // когда перечение ТОЧКА НЕ рассматриваю! -по условию begin a[1] := 0; a[2] := 0; end else if ((x1 <= x2) and (x2 <= y1)) then begin if (y2 <= y1) then // --x1--(x2--y2)--y1-- begin a[1] := x2; a[2] := y2; end else // --x1--(x2--y1)--y2-- a[1] := x2; a[2] := y1; end else if ((x2 <= x1) and (x1 <= y2)) then begin if (y1 <= y2) then // --x2--(x1--y1)--y2-- begin a[1] := x1; a[2] := y1; end else // --x2--(x1--y2)--y1-- begin a[1] := x1; a[2] := y2; end; end; result := a; end; var a: arrTwo; // координаты 2-х отрезков b: koordinat; // координаты отрезка пересечения i, j, n: integer; begin for i := 1 to 2 do begin writeln('vvedite koordinati'); for j := 1 to 2 do begin readln(n); a[i][j] := n; end; end; b := find(a[1][1], a[1][2], a[2][1], a[2][2]); if (b[1] = 0) and (b[2] = 0) then write('Net pereseceniya ') else write(b[1], ' ', b[2]); readln end.Gurgen
Mon, 11/01/2021 - 00:17
Permalink
Можно ли result := 2 элемента
Можно ли result := 2 элемента массива сразу!, что-то вроде result := [1,2]; Возможно? и если да, то как это писать?
vedro-compota
Wed, 11/03/2021 - 18:58
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)