Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
moc vás prosím o algoritmus, nesmí se tam vyskytovat nelokální promenne. jazyk prog. je pascal, delphi. moc dekuju
Zjistěte kolikrát se v celočíselné matici A(m,n) vyskytují jednotlivá čísla z vektoru B(k). Výsledek uložte do vektoru četnosti C(k).
Vstup: m, n, k, matice A, vektor B
Výstup: vektory B, C
Offline
↑ kubahosi: Proc se ptas jiz potreti na to same? Jinak jake je tvoje reseni? Nejaky napad?
Offline
↑ kubahosi:
Postup:
1. Pomocí for cyklů + přečtených rozměrů matice načítat matici A a její jednotlivá čísla ukládat do spojového seznamu. (Doporučuji si naprogramovat pár procedur a funkcí pro práci s ním, budou se tady hodit.)
2. Načíst vektor B taktéž do LSS; pro každé jeho číslo projít celý seznam prvků matice A a pomocí počítadla napočítat počet výskytů daného čísla. Z výsledků je pak možno rovnou poskládat LSS, který bude tvořit výsledný vektor C.
3. Vypsat B a C.
Teď už to stačí jen zapsat v jazyce. A pokud chceš, aby tam nebyly globální proměnné, tak celý kód zapiš do jedné procedury, která oba vektory vypíše uvnitř svého těla rovnou na výstup. Takto používáš jen lokální proměnné.
V.
Offline
mrkněte jestli to mám dobře, kdyžtak mi to prosím poupravte:-)
{$APPTYPE CONSOLE}
uses
SysUtils;
type
matice = Array[1..50,1..50] of Integer;
vektor = Array[1..50] of Integer;
procedure nactiMatici(m: Integer; n: Integer; var A: matice);
var
i,j,c: Integer;
begin
for i := 1 to m do
begin
for j := 1 to n do
begin
write('A[',i,',',j,']= ');
readln(c);
A[i,j] := c;
end;
end;
end;
procedure vypisMatici(m: Integer; n: Integer; A: matice);
var
i,j: Integer;
begin
for i := 1 to m do
begin
for j := 1 to n do
begin
if j <> n then write(A[i,j],' ');
if j = n then writeln(A[i,j]);
end;
end;
end;
procedure nactiVektor(k: Integer; var B: vektor);
var
i,c: Integer;
begin
for i := 1 to k do
begin
write('B(',i,')= ');
readln(c);
B[i] := c;
end;
end;
procedure vypisVektor(k: Integer; B: vektor);
var
i: Integer;
begin
write('(');
for i := 1 to k do
begin
if i <> k then write(B[i],', ');
if i = k then writeln(B[i],')');
end;
end;
procedure porovnani(m: Integer;
n: Integer;
k: Integer;
A: matice;
B: vektor;
var C: vektor);
var
i,j,l,p: Integer;
begin
for i := 1 to k do
begin
p := 0;
for j := 1 to m do
begin
for l := 1 to n do
begin
if B[i] = A[j,l] then p := p + 1;
end;
end;
C[i] := p;
end;
end;
var
m,n,k: Integer;
A: matice;
B,C: vektor;
begin
writeln('Zadej sloupce a radky matice A(m,n)!');
write('m= ');
readln(m);
write('n= ');
readln(n);
writeln('Zadej velikost vektoru B(k)!');
write('k= ');
readln(k);
writeln('Vypln matici A');
nactiMatici(m,n,A);
writeln('Matice A:');
vypisMatici(m,n,A);
writeln('Vypln vektor B');
nactiVektor(k,B);
writeln('Vektor B:');
vypisVektor(k,B);
porovnani(m,n,k,A,B,C);
writeln('Vektor C:');
vypisVektor(k,C);
readln;
end.
Offline