Anonymní profil Redwizara – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Redwizara – Programujte.comAnonymní profil Redwizara – Programujte.com

 

Příspěvky odeslané z IP adresy 85.207.248.–

Redwizara
Pascal › Násobení matic
28. 3. 2009   #98073

Už jsem na to přišla, tak to prosím smažte :-)

Redwizara
Pascal › Násobení matic
28. 3. 2009   #98069

Zdravím, napsala jsem si prográmek pro násobení matic a někde tam mám asi logickou chybu. Přemýšlím nad tím už hodinu a stále na to nemůžu přijít. Problém je, že když násobím nečtvercové matice, algoritmus vypíše všechny prvky posledního sloupce výsledné matice jako nulové. Neví prosím někdo, co s tím? Tady je kód:

program nas_matic;


uses
crt;

const
a=1;
c=2;
b=3;

var
matice_1: array[1..a, 1..c] of integer;
matice_2: array[1..c, 1..b] of integer;
vysledna_matice: array[1..a, 1..b] of integer;
m,n,i,j,k: integer; {promenne pro pruchody cyklem: m,n pro nacteni a vypsani; matic, i,j,k pro nasobeni matic}

begin

writeln;
writeln('===================== NASOBENI MATIC ======================');

writeln;
writeln('pozn. c.1: velikost matice A a matice B je nutno definovat v konstantach pred kompilaci programu');
writeln('pozn. c.2: nasobeni matic NENI komutativni! (A*B != B*A)');
writeln;
writeln('===========================================================');
writeln;
writeln('Zadejte hodnoty matice A:');
writeln;

for m:=1 to a do begin {nacteni prvni matice}
for n:=1 to c do begin
write('a',m,',',n,' = ');
readln(matice_1[m,n]);
end;
writeln;
end;

m:=0;
n:=0;

writeln('===========================================================');
writeln;
writeln('Zadejte hodnoty matice B:');
writeln;

m:=0;
n:=0;

for m:=1 to c do begin {nacteni druhe matice}
for n:=1 to b do begin
write('b',m,',',n,' = ');
readln(matice_2[m,n]);
end;
writeln;
end;

i:=0;
j:=0;
k:=0;

for i:=1 to a do begin {vynasobeni matic}
for j:=1 to c do begin
vysledna_matice[i,j]:=0;
for k:=1 to b do begin
vysledna_matice[i,j]:=vysledna_matice[i,j]+matice_1[i,k]*matice_2[k,j];
end;
end;
end;

m:=0;
n:=0;

writeln('===========================================================');
writeln;
writeln('Hodnoty vysledne matice C po vynasobeni A*B jsou:');
writeln;

for m:=1 to a do begin {vypsani vysledne matice}
for n:=1 to b do begin
writeln('c',m,',',n,' = ',vysledna_matice[m,n]);
end;
writeln;
end;

writeln('=================== PROGRAM BYL UKONCEN ===================');
writeln;

end.


Předem děkuji za odpověď :-)

 

 

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