Hogyan oldjam meg Pascalban? (mátrixok)
A feladat az, hogy irassunk ki egy mátrixot a köv módon:
Tegyük fel a beolvasott mátrix:
123
456
789
Ez alapján a kiírt mátrix ilyen kell legyen:
124
753
689
Nekem sikerült megoldanom valahogy, de a középső sor fordítva van, itt a kód:
Ezzel tulajdonképpen csak feldarabolom a mátrixot átlós sorokkal.
Előre is köszönöm a segítséget.
Na jó, egyelőre nem gyötröm magam az algoritmusod megértésével, tehát azért nem felelek. A tördelésre kézenfekvő lenne, hogy a számokat az új sorrendben tedd be egy másik tömbbe, és azt írasd ki.
Itt egy másik megoldással kísérletezem, amely szándékaim szerint továbbra is közvetlenül írná képernyőre a megcélzott tömbelemet, és a tördelést egy számláló alapján intézné. Még egyszer hangsúlyozom, hogy még nem látom át, mit csinálsz pontosan, tehát lehet, hogy marhaság, amit művelek, leszel szíves tesztelni:
program asd;
var
a: array[1..10,1..10] of integer;
// b: array[1..20] of integer;
sum, maxSum, szamlalo, i, j, n:integer;
begin
Write('Oldalhosszamlalo (1-10): ');
ReadLn(n);
maxSum := 2 * n - 1;
WriteLn(#10#13'A mátrix tartalma:');
szamlalo := 0;
for i := 1 to n do begin
for j := 1 to n do begin
Inc(szamlalo);
a[i,j] := szamlalo;
Write(a[i,j]:4);
end;
WriteLn;
end;
WriteLn(#10#13'Bejárás:');
szamlalo := 1;
for sum :=1 to maxSum + 1 do
begin
for i := 1 to n do
for j := 1 to n do
if i + j - sum = 0 then
begin
if sum mod 2 = 1 then
Write(a[i,j]:4)
else
Write(a[j,i]:4);
Inc(szamlalo);
if szamlalo > n then
begin
szamlalo := 1;
WriteLn;
end;
end;
end;
ReadLn;
end.
Hoppá, benne hagytam két ronda helyzetű begint, az áttekinthetőség kedvéért inkább így ildomos írni:
WriteLn(#10#13'A mátrix tartalma:');
szamlalo := 0;
for i := 1 to n do
begin
for j := 1 to n do
begin
Inc(szamlalo);
a[i,j] := szamlalo;
Write(a[i,j]:4);
end;
WriteLn;
end;
Ezenkívül a beolvasáskor gondoskodni kéne róla, hogy csak megfelelő inputot fogadjon el, ezt rád bízom.
A fenébe, ez meg egy hülye szerkesztési balfogás:
Write('Oldalhosszamlalo (1-10): ');
Helyesen:
Write('Oldalhossz (1-10): ');
Ööö... és miért vonsz le maxSum-ból, ha ciklushatárként meg hozzáadsz?
maxSum := 2 * n - 1;
for sum := 1 to maxSum + 1 do
Így is ugyanaz:
maxSum := 2 * n;
for sum := 1 to maxSum do
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!