Witam, mam problem z programem i już nie wiem jak to rozwiązać.
Otóż program tworzy graf, wypisuje do pliku następniki i dodatkowo muszę zrobić żeby porównywał dane, w sensie ile jest oryginalnych następników.
Po ludzku: program w 5 próbach generuje przykładowo takie następniki (dane):
4 5 2 5 3 4
1 5 1 3 4 5
2 3 2 5 1 2
1 3 2 3 4 5
4 5 3 5 2 3
Dane są traktowane jako pary cyfr/liczb (zależy jak podamy) i np. para "1 3" występuje 2 razy, "2 3" nawet 3 razy. Muszę dopisać kod, żeby program liczył ile jest unikalnych par, bez powtórzeń. Nie jest ważne jakie to są pary ale ile ich jest na ile wszystkich wygenerowanych (wszystkie wygenerowane to krep, czyli liczba_krawędziilość powtórzeń).
program Projekt;
uses dos;
const nmax=100; kmax=nmax*(nmax-1) div 2;
type ind=1..nmax; ind1=1..kmax;
Tpomiar=array[ind] of integer;
t=array[ind] of integer;
r=record a,b:integer end;
t1=array[ind1] of r; { E }
t2=array[ind,ind] of Boolean; { A }
alfa=string[15];
var Tpor:Tpomiar; E:t1; A:t2; n,rep,i,k,total:integer; p:real;
key, wariant:integer; h1,m1,s1,ms1:word;
out:text; dev:alfa;
procedure czyt1(var n,k,rep:integer);
begin
write('n, k, rep ='); read(n, k, rep);
end; { czyt1 }
procedure init(n:integer; var E:t1; var total:integer);
var i,j,h:integer;
begin
h:=0;
for i:=1 to n - 1 do
for j:=i + 1 to n do
begin
h:=h + 1;
with E[h] do begin a:=i; b:=j end;
end;
total:=h;
end; { init }
procedure Gnk(n,k,total:integer; var E:t1);
var i,l,z:integer; x:r;
begin
l:=total;
for i:=1 to k do
begin
z:=random(l) + 1;
x:=E[z];
E[z]:=E[l];
E[l]:=x;
l:=l-1;
end;
end; { Gnk }
procedure druk1a(n,k,rep:integer);
begin
writeln(out);
writeln(out, 'Gnk, n =', n:3, ', k =', k:4, ', rep =', rep:5);
end; { druk1a }
procedure drukE(n,total:integer; var E:t1);
var i,h,l:integer;
begin
write(out, 'Nastepniki:');
h:=0;
for l:=total downto total - k + 1 do
with E[l] do
begin
h:=h + 1; write(out, a:4, b:3);
if h mod 10 = 0 then writeln(out)
end;
writeln(out);
end; { drukE }
procedure pomiar(h1,m1,s1,ms1:word);
var h2,m2,s2,ms2,sek,msek:word;
begin
gettime(h2, m2, s2, ms2);
sek:=(h2 - h1)*3600 + (m2 - m1)*60 + s2 - s1;
if (ms2 >= ms1) then msek:=ms2 - ms1
else begin sek:=sek - 1; msek:=100 + ms2 - ms1; end;
writeln('Czas wykonywania: ', sek, ' [s] + ', msek, '/100');
write(chr(7));
end; { pomiar}
begin
writeln('Plikiem z wynikami jest plik: wynik.txt');
assign(out, 'wynik.txt'); rewrite(out);
randomize;
repeat
begin { Gnk, transEA }
czyt1(n, k, rep);
druk1a(n, k, rep);
gettime(h1, m1, s1, ms1); {zaczynam mierzyc czas}
init(n, E, total);
for i:=1 to rep do
begin
Gnk(n, k, total, E);
drukE(n, total, E);
end;
end;
pomiar(h1,m1,s1,ms1);
writeln('end? 0/1'); readln(key);
until key=1;
close(out)
end.