(Pacal) Készítsünk programot, amely egy 10x10-es tömbbe beírja a számokat 1-től 100-ig?
Készítsünk programot, amely egy 10x10-es tömbbe beírja a számokat 1-től 100-ig a következő képpen:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
A kigenerált tömböt írjuk ki a képernyőre.
program sajt;
var
tomb : array [1..10,1..10] of integer;
i : integer;
begin
{tömb feltöltése}
for i := 1 to 100 do tomb[((i - 1) div 10 + 1),i mod 10 + (((i div 10) - ((i - 1) div 10)) * 10)] := i;
{tömb kiíratása}
for i := 1 to 100 do
begin
write(tomb[((i - 1) div 10 + 1),i mod 10 + (((i div 10) - ((i - 1) div 10)) * 10)]);
if i mod 10 = 0 then writeln else write(' ');
end;
readln;
end.
Na jó, az előzőt csak akkor használd, ha valami tanárt akarsz elkápráztatni az egysoros megoldással. Itt egy jóval egyszerűbb:
program sajtketto;
var
tomb : array[1..10,1..10] of integer;
i,j : integer;
begin
{tömb feltöltése}
for i := 1 to 10 do
for j := 1 to 10 do
tomb[i,j] := (i - 1) * 10 + j;
{tömb kiíratása}
for i := 1 to 10 do
begin
for j := 1 to 10 do
write(tomb[i,j],' ');
writeln;
end;
readln;
end.
Köszi szépen !
tomb[i,j] := (i - 1) * 10 + j;
tomb[i,j]:= i I j;
szoval igy is lehet értéket adni kulon kulon az oszlopnak és sornak. Idaig a pl.programokban csak pl.: tomb[i,j]:=0; ilyet lattam.
tomb[i,j] := (i - 1) * 10 + j;
ezt nem értem...hogyan jöttél rá?
A tömb i-dik elemét csökkentjük egyyel idáig lessz az i értéke ....majd * jellel elválasztva a 10 + j edik eleme...Idáig azért kb. kapizsgáltam,hogy mi is van..letudtam vezetni de ezt nem értem már.
Azt hiszem Te az alapokat nem látod még át, de ahogy ez meglesz majd rájössz, hogy egyszerű az egész.
tomb[i,j] := (i - 1) * 10 + j;
A tomb nevű változó most egy többdimenziós (jelenleg 2 dimenziós) tömb, amelyet így tekinthetünk kb egy táblázatnak, ha elképzeljük vizuálisan. Ekkor a tomb i-edik sorának j-edik elemét fogod átírni a (i - 1) * 10 + j értékre, ahol a * jel szorzást jelent (nem elválasztást, ha jól értettem amire céloztál). Tehát ha most pl. a 3. sor (i = 3) 2. értékét (j = 2) írod át az tomb[3,2] = (3 - 1) * 10 + 2 = 22 lesz. Remélem tudtam segíteni :)
Jól értetted hogy a * jel az elválasztó jel akart lenni,de visszaolvasva nagy marhaság lenne. Itt zavarodtam össze.
Azt értem már,hogy tom[sor,oszlop]:=érték; - egy sor oszlop kordinatanak csak egy erteke lehet {itt is mar csak a zavarodottsag gondolta belolem hogy meg kell adni 2 erteknek a i-nek és a j-nek valmivel elválasztva.}
Mivel így van felírva:
for i := 1 to 10 do
for j := 1 to 10 do
ezért ha jol gondolom,eloszor az elso sortol kezdi beolvasni a program az értékeket míg elnem jut az oszlopok végére vagyis nem addig amíg nem adott értéket az első sor tizedik oszlopának sem. Ezután jön a második sor és ezeknek az oszlopai {bár az oszlop szó most nem is annyira jó megnevezés most mint ahogy Te is írtad inkább érték. szoval akkor tomb[1,1],tomb[1,2],tomb[1,3]...igz tolti fel oket?}
de még mindig nem értem :S ezt:
tomb[i,j] := (i - 1) * 10 + j;
ez a szamitas hogy adhat 1 töl 100ig növekvő számsort?
(1 - 1) * 10 + 1 = 1
(1 - 1) * 10 + 2 = 2
(1 - 1) * 10 + 2 = 3
ez viszont jó...csak akkor a 0 zárójelben miben más(ha így tudunk vele szorzni anélkul hogy 0 értéket kapnánk) mint a 0 zárjel nélkul. Miért pont 10-t kell hozzáadni a j hez?
és az sem,hogy miért nem müködik pl. az Inc függvény?!
for i := 1 to 10 do
for j := 1 to 10 do
tomb[i,j] := Inc(1);
ennek az Inc nek növelni kéne az egyet minden egyes lefutásnál és akkor behelyettesítené tomb[1,1]..-be
Köszi szépen a segítséged!!(Y)
Na akkor még egyet egyszerűsítünk a programon:
program sajtharom;
var
tomb : array[1..10,1..10] of integer;
i,j,szamlalo : integer;
begin
szamlalo := 1;
{tömb feltöltése}
for i := 1 to 10 do
for j := 1 to 10 do
begin
tomb[i,j] := szamlalo;
szamlalo := szamlalo + 1;
end;
{tömb kiíratása}
for i := 1 to 10 do
begin
for j := 1 to 10 do
write(tomb[i,j],' ');
writeln;
end;
readln;
end.
Az Inc() pedig a következő képen működik (azt hiszem csak pascalban, ha delphiben írnál konzolos programot ott már nem biztos, hogy létezik):
var
valami : integer;
begin
valami := 1;
inc(valami);
write(valami); -> itt már a valami értéke 2 lesz.
inc(valami);
inc(valami);
write(valami); -> itt pedig már 4, ha jól számolok
...
Tehát a fenti programban is éppen ki lehet a
szamlalo := szamlalo + 1;
sort cserélni arra, hogy:
Inc(szamlalo);
Csak mivel ez nem mindenhol működik, ezért én nem szoktam használni az inc-et. :)
rosszul vagyok komolyan, ennél nehezebben már meg se tudtátok volna oldani :D
*****
* Automatikusan eltávolított tartalom.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!