Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program dz1p1;
- type rowyourboat=array[1..20] of pointer;
- matrica=record
- r,c:rowyourboat;
- m,n,v:integer;
- end;
- skup=set of 1..8;
- pointer=^element;
- element=record
- row,col,val:integer;
- down:pointer;
- right:pointer;
- end;
- var matrix,matrix1,matrix3:matrica;
- a:integer;
- s:skup;
- procedure insert(var mat:matrica; var i,j,k:integer);
- var p,q,mem:pointer;
- begin
- new(mem);
- mem^.row:=i;
- mem^.col:=j;
- mem^.val:=k;
- mem^.right:=nil;
- mem^.down:=nil;
- if mat.r[i]=nil then mat.r[i]:=mem
- else
- begin
- p:=mat.r[i];
- q:=nil;
- while (p<>nil) and (mem^.col>p^.col) do
- begin
- q:=p;
- p:=p^.right;
- end;
- mem^.right:=p;
- if q=nil then mat.r[i]:=mem else q^.right:=mem;
- end;
- if mat.c[j]=nil then mat.c[j]:=mem
- else
- begin
- p:=mat.c[j];
- q:=nil;
- while (p<>nil) and (mem^.row>p^.row) do
- begin
- q:=p;
- p:=p^.down;
- end;
- mem^.down:=p;
- if q=nil then mat.c[j]:=mem else q^.down:=mem;
- end;
- end;
- function get(var mat:matrica; var i,j:integer):integer;
- var p:pointer;
- begin
- if (0<i)and(i<=mat.m)and(0<j)and(j<=mat.n) then
- begin
- if mat.r[i]=nil then get:=mat.v else
- if mat.c[j]=nil then get:=mat.v else
- begin
- p:=mat.r[i];
- while p^.right<>nil do if p^.col<j then p:=p^.right else break;
- if p^.col=j then get:=p^.val
- else get:=mat.v;
- end;
- end
- else write('Pogresan unos koordinata!');
- end;
- procedure unos(var mat:matrica );
- var i,j,k:integer;
- begin
- writeln('Unesite broj redova matrice: ');
- readln(mat.m);
- writeln('Unesite broj kolona matrice: ');
- readln(mat.n);
- for i:=1 to mat.m do
- mat.r[i]:=nil;
- for i:=1 to mat.n do
- mat.c[i]:=nil;
- writeln('Unesite koordinate i vrednosti elemenata.');
- writeln('Prva koordinata elementa:');
- readln(i);
- writeln('Druga koordinata elementa:');
- readln(j);
- while (i>0)and(j>0)and(i<=mat.m)and(j<=mat.n) do
- begin
- writeln('Vrednost elementa:');
- readln(k);
- insert(mat,i,j,k);
- writeln('Ponovo unesite prvu koordinatu:');
- readln(i);
- writeln('Ponovo unesite drugu koordinatu:');
- readln(j);
- end;
- end;
- procedure def(var mat:matrica);
- begin
- writeln('Unesite novu podrazumevanu vrednost elemenata:');
- readln(mat.v);
- end;
- procedure ispis(var mat:matrica);
- var p:pointer;
- i,j:integer;
- begin
- for i:=1 to mat.m do
- begin
- p:=mat.r[i];
- j:=0;
- while (j<mat.n) do
- begin
- if p=nil then
- begin
- write(mat.v,' ');
- j:=j+1;
- if j=mat.n then writeln();
- end
- else
- if p^.col=j+1 then
- begin
- write(p^.val,' ');
- j:=j+1;
- if j=mat.n then writeln();
- if p<>nil then p:=p^.right;
- end
- else
- begin
- write(mat.v,' ');
- j:=j+1;
- if j=mat.n then writeln();
- end;
- end;
- end;
- end;
- procedure dohvati(var mat:matrica);
- var i,j:integer;
- begin
- writeln('Unesite prvu koordinatu trazenog elementa:');
- readln(i);
- writeln('Unesite drugu koordinatu trazenog elementa:');
- readln(j);
- writeln('Na trazenom mestu nalazi se element ',get(mat,i,j),'.');
- end;
- procedure howmany(var mat:matrica);
- var a,i:integer;
- p:pointer;
- begin
- a:=0;
- for i:=1 to mat.m do
- begin
- p:=mat.r[i];
- if p<>nil then
- while p<>nil do
- begin
- if p^.val<>mat.v then a:=a+1;
- p:=p^.right;
- end;
- end;
- writeln('Broj nepodrazumevanih elemenata je ',a,'.');
- end;
- procedure promeni(var mat:matrica);
- var i,j,k:integer;
- p:pointer;
- begin
- writeln('Unesite prvu koordinatu elementa koji menjate:');
- readln(i);
- writeln('Unesite drugu koordinatu elementa koji menjate:');
- readln(j);
- if (0<i)and(i<=mat.m)and(0<j)and(j<=mat.n) then
- begin
- if mat.r[i]=nil then insert(mat,i,j,k)
- else
- if mat.c[j]=nil then insert(mat,i,j,k)
- else
- begin
- p:=mat.r[i];
- if p^.col>j then insert(mat,i,j,k)
- else begin
- while p^.right<>nil do if p^.col<j then p:=p^.right else break;
- if p^.col<>j then insert(mat,i,j,k)
- else
- begin
- writeln('Unesite novu vrednost za ovaj element:');
- readln(p^.val);
- end;
- end;
- end;
- end else write('Loลก odabir koordinata!');
- end;
- procedure form(var mat,mat1,mat2:matrica);
- var i,j,k:integer;
- begin
- unos(mat);
- unos(mat1);
- if (mat.m<>mat1.m) or (mat.n<> mat1.n) then write('Nije moguce sabrati matrice razlicitog formata!')
- else
- mat2.m:=mat.m;
- mat2.n:=mat.n;
- for i:=1 to mat2.m do
- mat2.r[i]:=nil;
- for j:=1 to mat2.n do
- mat2.c[j]:=nil;
- begin
- i:=1;
- while i<=mat.m do
- begin
- j:=1;
- while j<=mat.n do
- begin
- k:= get(mat,i,j)+get(mat1,i,j);
- insert(mat2,i,j,k);
- j:=j+1;
- end;
- i:=i+1;
- end;
- ispis(mat2);
- end;
- end;
- procedure brisanje(var mat:matrica);
- var p,q:pointer;
- i:integer;
- begin
- for i:=1 to mat.m do
- begin
- p:=mat.r[i];
- while p<>nil do
- begin
- q:=p^.right;
- dispose(p);
- p:=q;
- end;
- end;
- for i:=1 to mat.n do
- mat.c[i]:=nil;
- end;
- begin
- s:=[1,2,3,4,5,6,7,8];
- writeln('Odaberite neku od sledecih funkcija:');
- writeln(' 1. stvaranje matrice ;');
- writeln(' 2. postavljanje podrazumevane vrednosti ;');
- writeln(' 3. dohvatanje elementa ;');
- writeln(' 4. menjanje elementa ;');
- writeln(' 5. dohvatanje broja nepodrazumevanih elemenata ;');
- writeln(' 6. ispis matrice ;');
- writeln(' 7. brisanje matrice ;');
- writeln(' 8. saberi dve matrice ;');
- writeln();
- read(a);
- while a in s do
- begin
- case a of
- 1: unos(matrix);
- 2: def(matrix);
- 3: dohvati(matrix);
- 4: promeni(matrix);
- 5: howmany(matrix);
- 6: ispis(matrix);
- 7: brisanje(matrix);
- 8: form(matrix,matrix1,matrix3);
- end;
- writeln('Ponovo odaberite:');
- read(a);
- end;
- writeln('Greska!');
- readln;
- readln
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement