1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 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.