Ahoj, mám takovýto rébus, generuji matici s náhodnými čísly o počtu prvků 4x4. Tuto matici převedu do pole o počtu 16 prvků. Z toho pole vypíši prostřední 2 hodnoty na obrazovku, program ale potřebuji upravit tak, aby po těch dvouch číslech, se VYPSALY I POZICE TĚCHTO DVOU ČÍSEL V MATICI, díky za cenné rady.
uses
SysUtils;
var a:array[1..4,1..4] of integer;
p:array[1..16] of integer;
i,j,k,dd : integer;
begin
randomize;
for i:=1 to 4 do
for j:=1 to 4 do
a[i,j]:=random(99)+1;
for i:=1 to 4 do
begin
for j:=1 to 4 do
write(a[i,j]: 4);
writeln;
end;
k:=0;
for i:=1 to 4 do
for j:=1 to 4 do
begin
k:=k+1;
p[k]:=a[i,j];
end;
writeln;
for k:=1 to 16 do write (p[k]:3);
for k:=1 to 1 do
writeln;
writeln;
write(p[8],' ',p[9]);
readln;
end.
Fórum › Delphi
Určení pozice v matici nebo poli
kdybys to mel cislovane 0..15 tak je to snadnejsi.. radek := k div 4; sloupec := k mod 4;
protoze ale mas cislovano od 1 tak musis udelat mensi upravu: radek := ((k-1) div 4)+1; sloupec :=(( k-1) mod 4)+1;
pripadne se da vynechat +1 pokud staci pozice od 0
To xy3000
Proč tak složitě? (mám na mysli tolik cyklů, např poslední for k := 1 to 1 je úplně zbytečný)
Zkus to takhle:
uses
SysUtils;
var a:array[1..4,1..4] of integer;
p:array[1..16] of integer;
i,j,k:integer;
s:array[1..2] of string;
begin
randomize;
writeln;
for i := 1 to 4 do
begin
for j := 1 to 4 do
begin
a[i,j] := random(99)+1;
write(a[i,j]:4);
end;
writeln;
end;
writeln;
k := 0;
for i := 1 to 4 do
for j := 1 to 4 do
begin
k := k+1;
p[k] := a[i,j];
write(p[k]:4);
if k=8 then
s[1] := ' p[8]=a['+inttostr(i)+','+inttostr(j)+'] =';
if k=9 then
s[2] := ' p[9]=a['+inttostr(i)+','+inttostr(j)+'] =';
end;
writeln;
writeln;
writeln(s[1],p[8]:3,', ',s[2],p[9]:3);
readln;
end.
Díky Honzc, skutečně to funguje, akorát nechápu toto
s:array[1..2] of string;
a tohle
if k=8 then
s[1] := ' p[8]=a['+inttostr(i)+','+inttostr(j)+'] =';
if k=9 then
s[2] := ' p[9]=a['+inttostr(i)+','+inttostr(j)+'] =';
To xy3000
s:array[1..2] of string; je dvou prvkové pole textů (podobně jako tvoje pole p je 16-ti prvkové
pole celých čísel), slouží k "uložení" těch dvou indexů matice
if k=8 then
s[1] := ' p[8]=a['+inttostr(i)+','+inttostr(j)+'] =';
Tady se zjistí, kdy je to osmý člen posloupnosti (k=8) a právě do s[1] se zapíše (jako text), že se jedná
o p[8] a to je v matici a i-tý řádek (inttostr(i) totiž převede číslo i na textovou podobu) a j-tý
sloupec.
To samé pro k=9
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Generování náhodných čísel v poli a matici — založil xy3000
Přesné předání pozice v streamreaderu (nebo filestreamu) — založil kocourek
Určení klíče tabulky, normalizace — založil jar
Program na určení matematické posloupnosti — založil Lukáš