Kezdőoldal » Számítástechnika » Programozás » Hogy oldjam meg Pascalban?...

Hogy oldjam meg Pascalban? (kétdimenziós tömbök)

Figyelt kérdés

Adott egy n szám. Töltsünk fel egy tömböt a megadott módon:


1 2 3

8 9 4

7 6 5.


Próbáltam végigmenni jópár for-ral, de sehogysem sikerül megfelelő sorrendbe rakni. Előre is köszi!



2015. szept. 27. 14:14
 1/10 anonim ***** válasza:

for

{

for

{

}

}

G.

2015. szept. 27. 14:19
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:
Azt tudom, hogy nagyjából hogy kell kinéznie. Azért köszi.
2015. szept. 27. 14:30
 3/10 anonim ***** válasza:

Ez nem az, hogy hogyan kell kinéznie, hanem a lényeg, a kb. a megoldás. De akkor itt van még egy kis segítség: Két ciklusváltozó kell, és azzal a kettővel indexelsz.

G.

2015. szept. 27. 16:44
Hasznos számodra ez a válasz?
 4/10 SimkoL ***** válasza:
Itt ugye csigavonalról van szó. A négy oldalhoz kell egy-egy ciklus. Kell egy 'általános' ciklusváltozó és még négy változó minX, maxX, minY, maxY amik meghatározzák, hogy a ciklusok mettől-meddig fussanak - értelemszerűen növelve, csökkentve az értéküket. - a négy ciklusból kettő visszafelé számol - A hatodik változó lesz az érték, lépésenként eggyel növelve az értékét. Az egészet egy repeat-until-ba közrefogod. Végül is nem olyan bonyolult, próbáld először papíron lerajzolni, mikor kell x vagy y értékét csökkenteni. Logika az egész.
2015. szept. 27. 19:42
Hasznos számodra ez a válasz?
 5/10 SimkoL ***** válasza:
100%

Érdekes, hogy most igen kevés hozzászóló volt :)


program Csiga;


{$APPTYPE CONSOLE}


const MERET = 5;


var i, minX, maxX, minY, maxY, szam, x, y : integer;

    tomb : array[1..MERET, 1..MERET] of integer;

begin

  minX := 1;

  minY := 1;

  maxX := MERET;

  maxY := MERET;

  szam := 1;

  repeat

    //felső sor

    for i := minY to maxY do

    begin

      tomb[minX, i] := szam;

      Inc(szam);

    end;

    Inc(minX);

    //jobb oldali oszlop

    for i := minX to maxX do

    begin

      tomb[i, maxY] := szam;

      Inc(szam);

    end;

    Dec(maxY);

    //alsó sor

    for i := maxY downto minY do

    begin

      tomb[maxX, i] := szam;

      Inc(szam);

    end;

    Dec(maxX);

    //bal oldali oszlop

    for i := maxX downto minX do

    begin

      tomb[i, minY] := szam;

      Inc(szam);

    end;

    Inc(minY);

  until szam > MERET * MERET;

  for x := 1 to MERET do

  begin

    for y := 1 to MERET do

    Write(tomb[x, y]:4);

    WriteLn;

  end;

  ReadLn;

end.


Az '{$APPTYPE CONSOLE}' csak a Delphi miatt van, Pascal alatt töröld ki.

2015. szept. 28. 08:43
Hasznos számodra ez a válasz?
 6/10 SimkoL ***** válasza:
100%

Érdekességképpen megírtam egy kicsit látványosabbra is, Delphi-ben és Lazarusban, számokkal, színekkel és nyilakkal bemutatva. Ha érdekel valakit a forráskód is letölthető. - Ma nem kellett szüretelnem :) -


[link]

2015. szept. 28. 14:41
Hasznos számodra ez a válasz?
 7/10 tabaki ***** válasza:

Klassz lett, a Lazarus-változat linuxon is simán lefordult:

[link]

Igaz, nem sikerült 1.2 mega alá vinnem, majdnem kétszer akkora, mint a windowsos exe :(

2015. okt. 2. 01:00
Hasznos számodra ez a válasz?
 8/10 SimkoL ***** válasza:
100%

A Delphi-s exe, UPX-el összetolva 154.112 byte :) Érdekes, esetleg hasznos lehet az algoritmus később 'kisipari' grafikai megoldásokhoz, ezért is próbáltam a színátmeneteket belevinni. A Delphi-s és Lazarus-os megoldás között egyedül a színezés az eltérő, mivel a Lazarus nem eszi meg az RGB függvényt.

De a 'nyilas' változat mutatja leginkább hogyan is változnak a ciklusok tól-ig értékei.

Remélem 'bóklászik' erre valami informatika tanár is aki esetleg hasznát veszi :)


Viszont azt sajnálattal tapasztaltam, hogy Geniuseus-en kívül senki sem szólt hozzá a témához, holott máskor 'osztják az észt'.

2015. okt. 2. 07:44
Hasznos számodra ez a válasz?
 9/10 A kérdező kommentje:
Azota nekem is sikerult megoldanom, de ez a megoldas sokkal jobban tetszik. Koszi szepen!
2015. okt. 10. 14:21
 10/10 SimkoL ***** válasza:
Volt időm, kicsit 'szórakoztam', azért is tettem közzé hátha valakinek érdekes lehet. Színekkel kicsit látványosabb :)
2015. okt. 10. 16:09
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!