Array of array of array – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Array of array of array – Pascal – Fórum – Programujte.comArray of array of array – Pascal – Fórum – Programujte.com

 

Yuffie
~ Anonymní uživatel
4 příspěvky
1. 1. 2010   #1
-
0
-

Zdravím, porsímvás, mám problém s domácím úkolem do Pascalu. Měla jsem napsat program, který mi sečte a vynásobí dvě matice zapsané ale jako array of array, čili ne klasických stylem matice. Problém je v tom, že program nejde spustit a nahlásí mi to exitcode, jsem už zoufalá, mohl by mi někdo pomoctt?:(

program matice_pro;
uses crt;

type TMatice = array of array of integer;

procedure setUp(var m: TMatice; x:integer; y:integer);
var c:array of integer;
i,j:integer;
begin
SetLength(m,x);
for i:=1 to x do
begin
SetLength(c,y);
for j:=1 to y do
begin
c[j]:=random(10);
end;
m[i]:=c;
finalize(c);
end;
end;

procedure print2D(const m : TMatice);
var i,j:integer;
c:array of integer;
begin
for i:=1 to Length(m) do
begin
c:=m[i];
for j:=1 to Length(c) do
begin
write(c[j]:5);
end;
writeln();
end;
writeln('-----------------------------------');
end;


function multiply(const m1 : TMatice; const m2 : TMatice): TMatice;
var b1,b2,b3: array of integer;
o,x,y,j,m:integer;
vys:Tmatice;
begin
x:=length(m1);
y:=length(m2);
setUp(vys,x,x);
writeln('vysledna matice ',x,'x',x);
for o:=1 to x do
begin
b1:=m1[o];
b3:=vys[o];
for j:=1 to x do
begin
b3[j]:=0;
for m:=1 to y do
begin
b2:=m2[m];
b3[j]:=b3[j]+b1[m]*b2[j];
{write(b1[m],'x',b2[j],'+');}
end;
{write(' =',b3[j]);
writeln;}
end;
vys[o]:=b3;
end;
multiply:=vys;
end;




function add(const m1 : TMatice; const m2 : TMatice): TMatice;
var m0:TMatice;
c,c1,c2:array of integer;
i,j:integer;
begin
setUp(m0,Length(m1),Length(m1[1]));
for i:=1 to Length(m1) do
begin
c:=m0[i];
c1:=m1[i];
c2:=m2[i];
for j:=1 to Length(c1) do
begin
c[j]:=c1[j]+c2[j];
end;
end;
add := m0;
end;

procedure finalize2D(var m: TMatice);
var c:array of integer;
i,x:integer;
begin
x:=length(m);
for i:=1 to x do
begin
c:=m[x];
finalize(c);
end;
finalize(m);

end;


var x,y:integer;
mat1,mat2,o,k:TMatice;


begin
randomize;
{ soucet matic }
x:=2+random(4);
y:=x;
setUp(mat1,x,y);
setUp(mat2,y,x);
print2d(mat1);
print2d(mat2);
o := add(mat1,mat2);
print2d(o);
finalize2D(o);
finalize2D(mat1);
finalize2D(mat2);
{ nasobeni matic}
x:=3;
y:=2;
setUp(mat1,x,y);
setUp(mat2,y,x);
print2d(mat1);
print2d(mat2);
k:=multiply(mat1,mat2);
print2D(k);
finalize2D(k);
finalize2D(mat1);
finalize2D(mat2);

readln;
end.

Nahlásit jako SPAM
IP: 80.188.41.–
KIIV
~ Moderátor
+43
God of flame
1. 1. 2010   #2
-
0
-

nemusis nutne delat dvourozmerny pole... staci array of integer a set length na vyska*sirka
pak indexace klasicky pole[x + y*sirka]

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Yuffie
~ Anonymní uživatel
4 příspěvky
1. 1. 2010   #3
-
0
-

To KIIV : No, právěže úkol koncipován tak, že musíme použít přesně array of array of integer.:(

Nahlásit jako SPAM
IP: 80.188.41.–
KIIV
~ Moderátor
+43
God of flame
1. 1. 2010   #4
-
0
-

tak akorat nezapomen ze se indexuje od 0 do velikost-1 ... pascal to muze hlidat a kdyz pristoupis na pole[velikost] tak to spadne

tj vsude kde delas treba cykly tak predelat od 0 do length(...)-1

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Yuffie
~ Anonymní uživatel
4 příspěvky
2. 1. 2010   #5
-
0
-

Jéé, děkuju, už to nepadá, ale pořád ám problém s tím, že ten kód neplatí pro matice s jedním řádkem nebo jedním sloupcem. Dalo by se pojistit, aby se negenerovaly, ale cvičící to vyžaduje.:/

Nahlásit jako SPAM
IP: 80.188.41.–
KIIV
~ Moderátor
+43
God of flame
2. 1. 2010   #6
-
0
-

no nevim ted jak se chovaji cykly od 0 do 0 .. zkus vypisovat.. jestli se provedou aspon jednou

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Yuffie
~ Anonymní uživatel
4 příspěvky
3. 1. 2010   #7
-
0
-

Už jsme ten program s kamarádem nějak doštourali do zdárného konce, nicméně moc děluju za pomoc, opravdu mi Vaše rada moc pomohla.

Nahlásit jako SPAM
IP: 80.188.41.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

$a[], [], array[] — založil Rudolf

COM Array — založil Pawl

Array — založil Row

Array — založil Martin

Is the pointer to the array — založil Montezo

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý