Задача 4 урок 16
Primary tabs
Пользователь вводит N (N отрезков на прямой,сохраните их в двумерный массив.
Напишите подпрограмму, которая определит - есть ли у них общее пересечение,
и если есть - вычислит координаты отрезка-пересечения
type
segment = array[1..20]of integer;
var n,i:integer;
a,b,s:segment;
f:boolean;
Procedure intersection(n,a1,b1,a2,b2: integer; var s:segment; var f1:boolean);
var i,s1,s2: integer;
begin
a[1]:= a1;
b[1]:= b1;
a[2]:= a2;
b[2]:= b2;
s1:=a[1];
s2:=b[1];
for i:=1 to n do
begin
if a[i]>s1 then
s1:=a[i];
if b[i]<s2 then
s2:=b[i];
end;
f1:=true;
s[1]:=s1;
s[2]:=s2;
for i:=1 to n do
begin
if s1>b[i]then
f1:=false;
if s2<a[i]then
f1:=false;
end;
end;
begin
writeln('Enter the numbers of the segments < 20');
readln(n);
for i:=1 to n do
begin
writeln('Enter the ends of the segments');
readln(a[i],b[i]);
end;
intersection(n,a[1],b[1],a[2],b[2], s, f);
if f then
writeln('Yes intersection! Segment of this is: ',s[1],' - ',s[2])
else
writeln('No intersection');
readln();
end. - Log in to post comments
- 2637 reads
vedro-compota
Wed, 11/24/2021 - 18:42
Permalink
1) использовать двумерный
1) использовать двумерный массив
_____________
матфак вгу и остальная классика =)
nglag
Sun, 12/05/2021 - 13:16
Permalink
С двумерным массивом:
program project1; const n = 10; Type dublmass = array[1..n,1..2] of integer; var a: dublmass; i,j, start, finish: integer; f: boolean; function Crest(var start, finish: integer; var a: dublmass; var f: boolean):boolean; var i,j: integer; begin writeln('chislo:'); for i:= 1 to n do for j:= 1 to 2 do begin readln(a[i,j]); end; writeln('massiv:'); for i:= 1 to n do begin writeln(); for j:= 1 to 2 do write(a[i,j]:4); end; start:= a[i,1]; finish:= a[i,2]; writeln(); writeln('segment:'); for i:= 1 to n do begin if a[i,1] > start then start:= a[i,1]; if a[i,2] < finish then finish:= a[i,2]; end; f:= true; if (start > a[i,2]) or (finish < a[i,1]) then f:= false; writeln(); end; begin Crest(start, finish,a,f); if f then write(' Segment of the intersection is: ', start,', ',finish) else write('No intersection'); readln(); end.vedro-compota
Sun, 12/05/2021 - 13:55
Permalink
-- свести к вызову базовой
-- свести к вызову базовой функции, которая вычисляет пересечение 2 отрезков (если оно есть)
_____________
матфак вгу и остальная классика =)
nglag
Wed, 12/08/2021 - 18:06
Permalink
Исправил
program project1; Type dublmass = array[1..10,1..2] of integer; var a: dublmass; n,start, finish: integer; f: boolean; function CreatArr(): dublmass; var i, j: integer; begin writeln('vvedite koordinaty otrezkov:'); for i:= 1 to n do for j:= 1 to 2 do begin readln(a[i,j]); end; writeln('massiv:'); for i:= 1 to n do begin writeln(); for j:= 1 to 2 do write(a[i,j]:4); end; result := a; end; function Crest(var start, finish: integer; a: dublmass):boolean; var i: integer; begin f:= true; start:= a[n,1]; finish:= a[n,2]; writeln(); writeln('segment:'); for i:= 1 to n do begin if a[i,1] > start then start:= a[i,1]; if a[i,2] < finish then finish:= a[i,2]; end; if (start > a[i,2]) or (finish < a[i,1]) then f:= false; writeln(); result := f; end; begin writeln('vvedite kolichestvo otrezkov:'); writeln('n='); readln(n); //кол-во отрезков ( строк матрицы) CreatArr(); Crest(start, finish,a); if f then write(' Segment of the intersection is: ', start,', ',finish) else write('No intersection'); readln(); end.vedro-compota
Wed, 12/08/2021 - 18:45
Permalink
1) Уйти от использования
1) Уйти от использования глобальной f
1) Уйти от использования глобальной n
Проверить на наборе:
1 3 4 5 1 7 start:= a[n,1]; finish:= a[n,2]; writeln(); writeln('segment:'); for i:= 1 to n do begin if a[i,1] > start then start:= a[i,1]; if a[i,2] < finish then finish:= a[i,2]; end; if (start > a[i,2]) or (finish < a[i,1]) then f:= false; if (4 > 7) or (3 < 1) then f:= false;_____________
матфак вгу и остальная классика =)
vedro-compota
Wed, 12/08/2021 - 19:06
Permalink
#####
##### ############ ########### #### ###### ## // break ###########_____________
матфак вгу и остальная классика =)