Dobrý den budu moc vděční za každou radu jsem uplny neználek pascalu a ve škole jsem dosal zadaní:
dvě matice 5x5 naplnit náhodnými čísly od 1-9,určete menší hodnotu z navzájem si odpovídající prvků z těchto matic a uložte ji do třetí matice,všechny matice zobrazit (pomocí podprogramu)
Je květen, co jsi do teď v tý škole dělal? Podle všeho ses flákal, protože tohle je totálně triviální.
Vytvoř si tři dvourozměrné pole (to budou ty matice), prvky můžou být třeba typu integer. Následně první dva procházej pomocí cyklu(ů) for a každému prvku přiřaď náhodnou hodnotu pomocí funkce random (nezapomeň na začátku inicializovat RNG pomocí Randomize). Až je budeš mít naplněné, tak je znova projdi, a vždy porovnej odpovídající prvky v prvním a druhém poli, a menší ulož na stejné místo (stejné indexy) ve třetím poli. No a pak to třetí pole vypiš pomocí Write(Ln) (zase procházej pole pomocí for a postupně to vypisuj).
PS - některé kroky kroky se dají spojit.
Až budeš něco mít, a budeš mít nějaké problémy, tak sem zase napiš. Ale nečekej, že ti někdo bude dělat úkoly.
neco malo jsem stořil ale dal si nevím rady
program matice;
var i,j,c:integer;
m1,m2,m3: array [1..5] of array [1..5] of integer;
begin
writeln('matice 5x5 naplnit náhodnými čísly od 1-9,určete menší hodnotu z navzájem si odpovídající prvků z těchto matic a uložte ji do třetí matice,všechny matice zobrazit ');
writeln;
randomize;
for i:=1 to 5 do
for j:=1 to 5 do
begin
c:= random(9);
m1[i,j]:=c
c:= random(9);
m2[i,j]:=c
m3[i.j]:=???
vůbec netuším jak na to nejde mi vypsat ani jedna matice prosím napsal bys mi kde dělám chybu děkuji
var i,j:integer;
m1,m2,m3: array [0..4] of array [0..4] of integer;
begin
writeln('matice 5x5 naplnit náhodnými čísly od 1-9... ');
writeln;
randomize;
for i:=0 to 4 do
for j:=0 to 4 do
begin
m1[i,j]:= random(9)+1;
m2[i,j]:= random(9)+1;
If m1[i,j] < m2[i,j] then
m3[i,j]:= m2[i,j];
end;
end;
procedure vypsanimat(i,j:integer);
var i,j:integer;
begin
for i:=0 to 4 do
begin
for j:=0 to 4 do write(m1[i,j],'');
writeln;
end;
end;
readln;
end.
Pokud chces matici vypsat, tak musis proceduru vypsanimat taky nekde zavolat. Bez toho je to tam jen takova "dekorace". A to zjisteni minima mas polovicate a pokud me zrak nesali taky opacne - cislo se vyplni do treti matice jen v pripade, ze je v prvni matici mensi nez v druhe; (a to se tam jeste vyplni cislo z te druhe matice, ne to mensi z prvni)
Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Jestli tohle není nějaký exotický dialekt pascalu, který neznám, tak proceduru (nebo obecně cokoli) je potřeba nejdřív definovat a pak teprve volat. Třeba takhle (na velikosti písmen samozřejmě nezáleží, píšu to tak jenom pro přehlednost):
program ...;
var ...;
procedure vypsanimat(...); {definice procedury}
var ...;
Begin
...
End;
BEGIN {začátek hlavního programu}
...
vypsanimat(...); {volání procedury}
...
vypsanimat(...); {a třeba ještě jednou}
...
END. {konec hlavního programu}
Jestli má procedura fungovat univerzálně a vypsat jakoukoli matici, kterou jí předhodíš, tak musí existovat možnost, jak jí tu matici předat. Třeba:
program ...;
type matice=array[1..5,1..5] of integer;
procedure vypsanimat(var ktere:matice);
var ...;
Begin
...
write(ktere[...,...]); {pracujeme s maticí předanou přes parametr}
...
End;
var m1,m2,m3:matice;
...
BEGIN
...
vypsanimat(m1); {vypíše matici m1}
vypsanimat(m3); {vypíše matici m3}
...
END;
Všechno ostatní už tu bylo řečeno, stačí z toho spíchnout program :-).
Nahlásit jako SPAM
IP: 94.113.255.–
Chceš-li lepší odpověď, polož lepší otázku. Moje stránka.
něco jsem vypotil ale když spustim program tak mi to vypiše pouze 4 cifry vedle sebe a netuším co dělam špatně
program repete;
type matice= array [0..4,0..4] of integer;
procedure vypsanimat1( var m1:matice);
var i,j:integer;
begin
for i:=0 to 4 do
begin
for j:=0 to 4 do
write(m1[i,j]);
writeln;
readln(m1[i,j]);
end;
end;
procedure vypsanimat2( var m2:matice);
var i,j:integer;
begin
for i:=0 to 4 do
begin
for j:=0 to 4 do
write(m2[i,j]);
writeln;
readln(m2[i,j]);
end;
end;
begin
writeln('matice 5x5 naplnit náhodnými čísly od 1-9... ');
writeln;
randomize;
for i:=0 to 4 do
for j:=0 to 4 do
begin
m1[i,j]:= random(9)+1;
m2[i,j]:= random(9)+1;
If m1[i,j] < m2[i,j] then begin
m3[i,j]:= m2[i,j];
end else begin
m3[i,j]:= m2[i,j];
end;
end;
vypsanimat1(m1);
vypsanimat2(m2);
Normalne to funguje... Jen cela pointa toho predavani matice jako parametr funkce byla v tom, aby to tam bylo jen jednou!
program repete;
type matice= array [0..4,0..4] of integer;
var
m1, m2, m3 : matice;
i, j : integer;
procedure vypsanimat( var m:matice);
var i,j:integer;
begin
for i:=0 to 4 do begin
for j:=0 to 4 do write(m[i,j],' ');
writeln;
end;
end;
begin
writeln('matice 5x5 naplnit náhodnými čísly od 1-9... ');
writeln;
randomize;
for i:=0 to 4 do
for j:=0 to 4 do begin
m1[i,j]:= random(9)+1;
m2[i,j]:= random(9)+1;
If m1[i,j] < m2[i,j] then begin
m3[i,j]:= m1[i,j];
end else begin
m3[i,j]:= m2[i,j];
end;
end;
writeln('Matice1: ');
vypsanimat(m1);
writeln('Matice2: ');
vypsanimat(m2);
writeln('Matice3: ');
vypsanimat(m3);
end.
Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
#13justinblack
Ty tenhle program, cos sem zkopíroval opravdu spustíš? Tak to mě zajímá v čem ho překládáš, protože tohle má kromě logických i syntaktické chyby, takže nejde ani přeložit, natož spustit... Pokud ti to opravdu něco vypisuje, tak zkus smazat to nesmyslné čtení ve výpisu:
write(m2[i,j]);
writeln; readln(m2[i,j]);
A ještě jednou si prosím přečti příspěvek od Microsoftu, snad pochopíš že až budeš chtít vypsat všechny tři matice, opravdu nebudeš muset přidělávat třetí proceduru na výpis, naopak jednu smažeš...
Až to všechno opravíš, zjistíš. že už to máš skoro hotový, jen opravit logické chyby...