1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Собственно задача такая. Дано 2 множества точек.Найти пересечение и разность этих множеств. Собственно вопрос возник, как задать эти множества.У меня множесто точек ассоциируется с координатами точки. И выглядеть дожно как то.
type TMnoz= set of 0..100; TToch=array[0..1] of TMoz;
Тут TToch это координаты х и у, а значение- множества, составленные из чисел от 1 до 100.Кстати следующий вопрос.Числа могут быть только целые или нет?
Это сугубо мое предположение.Я понял недостаток такого варианта,а жаль. Пока что наваял следующее.(к несчастью именно наваял )
код(Показать/Скрыть)
program kurs26; var mas1 : array[0..1,0..100] of real; mas2 : array[0..1,0..100] of real; peres : array[0..1,0..100] of real; razn1 : array[0..1,0..100] of real; razn2 : array[0..1,0..100] of real; n,p :integer; n1,n2 : integer; pos : integer; Ppos,Rpos1,Rpos2 : integer; begin writeln('Vvedite kol-vo tochek v pervom mnozestve'); read(n1); for n:=0 to n1-1 do begin writeln('Vvedite koordinati elementa pervvogo mnozestva'); read(mas1[0,n]); read(mas1[1,n]); end; writeln('Vvedite kol-vo tochek vo vtorom mnozestve'); read(n2); for n:=0 to n2-1 do begin writeln('Vvedite koordonati elementa vtorogo mnozestva'); read(mas2[0,n]); read(mas2[1,n]); end;
pos := 0; for n:=0 to n1-1 do begin for p:=0 to n2-1 do begin if ((mas1[0,n]=mas2[0,p]) and (mas1[1,n]=mas2[1,p])) then begin peres[0][pos]:=mas1[0][n]; peres[1][pos]:=mas1[1][n]; pos:=pos+1; end; end; end; Ppos:= pos-1;
pos:=0; for n:=0 to n1-1 do begin for p:=0 to Ppos-1 do begin if ((mas1[0,n]<>peres[0,p]) or (mas1[1,n]<>peres[1,p])) then begin razn1[0,pos]:=mas1[0,n]; razn1[1,pos]:=mas1[1,n]; pos:=pos+1; end; end; end; Rpos1:=pos-1;
pos:=0; for n:=0 to n2-1 do begin for p:=0 to Ppos-1 do begin if ((mas2[0,n]<>peres[0,p]) or (mas2[1,n]<>peres[1,p])) then begin razn2[0,pos]:=mas2[0,n]; razn2[1,pos]:=mas2[1,n]; pos:=pos+1; end; end; end;
writeln('Ishodnie mnozestva:'); writeln('Pervoe:'); for n:=0 to n1-1 do begin write('(',mas1[0,n],',',mas1[1,n],') '); writeln; end; writeln('Vtoroe:'); for n:=0 to n2-1 do begin write('(',mas2[0,n],',',mas2[1,n],') '); writeln; end;
writeln('Raznost* pervogo i vtorogo mnozestv'); for n:=0 to Rpos1 do begin write('(',razn1[0,n],',',razn1[1,n],') '); writeln; end; { writeln('Raznost* vtorogo i pervogo mnozestv'); for n:=0 to n2-1 do begin write('(',razn2[0,n],',',razn2[1,n],') '); writeln; end; } writeln('Peresechenie mnozestv'); for n:=0 to Ppos do begin write('(',peres[0,n],',',peres[1,n],') '); writeln; end; readln; end.
Добавлено через 15 мин. Немного изменил.Вроде работает.Но до конца не уверен,проверил всего на 3 тестах и с малыми размерностями.
код(Показать/Скрыть)
program kurs26; var mas1 : array[0..1,0..100] of real; mas2 : array[0..1,0..100] of real; peres : array[0..1,0..100] of real; razn1 : array[0..1,0..100] of real; razn2 : array[0..1,0..100] of real; n,p :integer; n1,n2 : integer; pos : integer; Ppos,Rpos1,Rpos2 : integer; begin writeln('Vvedite kol-vo tochek v pervom mnozestve'); read(n1); for n:=0 to n1-1 do begin writeln('Vvedite koordinati elementa pervvogo mnozestva'); read(mas1[0,n]); read(mas1[1,n]); end; writeln('Vvedite kol-vo tochek vo vtorom mnozestve'); read(n2); for n:=0 to n2-1 do begin writeln('Vvedite koordonati elementa vtorogo mnozestva'); read(mas2[0,n]); read(mas2[1,n]); end;
pos := 0; for n:=0 to n1-1 do begin for p:=0 to n2-1 do begin if ((mas1[0,n]=mas2[0,p]) and (mas1[1,n]=mas2[1,p])) then begin peres[0][pos]:=mas1[0][n]; peres[1][pos]:=mas1[1][n]; pos:=pos+1; end; end; end; Ppos:= pos-1;
pos:=0; for n:=0 to n1-1 do begin for p:=0 to Ppos do begin if (mas1[0,n]<>peres[0,p]) or (mas1[1,n]<>peres[1,p]) then begin razn1[0,pos]:=mas1[0,n]; razn1[1,pos]:=mas1[1,n]; pos:=pos+1; end; end; end; Rpos1:=pos-1;
pos:=0; for n:=0 to n2-1 do begin for p:=0 to Ppos do begin if ((mas2[0,n]<>peres[0,p]) or (mas2[1,n]<>peres[1,p])) then begin razn2[0,pos]:=mas2[0,n]; razn2[1,pos]:=mas2[1,n]; pos:=pos+1; end; end; end; Rpos2:= pos-1;
writeln('Ishodnie mnozestva:'); writeln('Pervoe:'); for n:=0 to n1-1 do begin write('(',mas1[0,n],',',mas1[1,n],') '); writeln; end; writeln('Vtoroe:'); for n:=0 to n2-1 do begin write('(',mas2[0,n],',',mas2[1,n],') '); writeln; end;
writeln('Raznost* pervogo i vtorogo mnozestv');
for n:=0 to Rpos1 do begin write('(',razn1[0,n],',',razn1[1,n],') '); writeln; end;
writeln('Raznost* vtorogo i pervogo mnozestv'); for n:=0 to Rpos2 do begin write('(',razn2[0,n],',',razn2[1,n],') '); writeln; end;
writeln('Peresechenie mnozestv'); for n:=0 to Ppos do begin write('(',peres[0,n],',',peres[1,n],') '); writeln; end; readln; end.
Еще по какой то причине последний readln банально игнорируется,возможно из-за dos boxa.