programozás Pascalban

Kezdőlap Fórumok Programozás programozás Pascalban

6 bejegyzés megtekintése - 11-16 / 16
  • Szerző
    Bejegyzés
  • #1980515
    razoli
    Felhasználó

      Közben gondolkoztam és a következõ megoldásra(?) jutottam:

      Ugye minden lépés után meg kell vizsgálni, hogy az aki lépett nem teljesítette e a nyerés feltételét. A feltétel itt jelen esetben az, hogy valamilyen irányban egymást követi N db egyforma jel (itt O vagy X).
      Tehát, amikor valaki lép, elõször meg kell vizsgálni, hogy van-e körülötte azonos jel. Ezt lehet ciklussal is, meg rekurzívan (talán ez átláthatóbb). kijelölünk egy részt, ahonnan elkezdjük vizsgálni (pld. mindig az aktuális alatt kezdjük és az óramutató járásának megfelelõen addig vizsgáljuk, amég körbe nem érünk).
      Nos három lehetséges értéket találhatunk. Egyik, hogy ellentétes jel, ekkor tovább lépünk, a másik, hogy a tábla határa, ebben az esetben is tovább lépünk, a harmadik, hogy azonos jellel találkozunk. Innen egyszerûsödik a dolog, mert csak az adott irányban (pld. a jel az aktuálishoz képest balra helyezkedik el, akkor innentõl csak balra kell lépkedni) egy ciklussal vagy egy rekurzióval kell lépkedni, ami addig fut, amíg
      – elérjük az N db egyforma jelet -> ekkor ugye nyerés van
      – Nem lesz N db jel, mert ellentétesbe ütközünk, vagy kifutunk a tábláról. -> ekkor folytatni kell az aktuális jel körbejárását, addig, amíg mind a nyolc irányt meg nem vizsgáltuk.

      #1980516
      hop
      Felhasználó

        Közben gondolkoztam és a következõ megoldásra(?) jutottam:

        Ugye minden lépés után meg kell vizsgálni, hogy az aki lépett nem teljesítette e a nyerés feltételét. A feltétel itt jelen esetben az, hogy valamilyen irányban egymást követi N db egyforma jel (itt O vagy X).
        Tehát, amikor valaki lép, elõször meg kell vizsgálni, hogy van-e körülötte azonos jel. Ezt lehet ciklussal is, meg rekurzívan (talán ez átláthatóbb). kijelölünk egy részt, ahonnan elkezdjük vizsgálni (pld. mindig az aktuális alatt kezdjük és az óramutató járásának megfelelõen addig vizsgáljuk, amég körbe nem érünk).
        Nos három lehetséges értéket találhatunk. Egyik, hogy ellentétes jel, ekkor tovább lépünk, a másik, hogy a tábla határa, ebben az esetben is tovább lépünk, a harmadik, hogy azonos jellel találkozunk. Innen egyszerûsödik a dolog, mert csak az adott irányban (pld. a jel az aktuálishoz képest balra helyezkedik el, akkor innentõl csak balra kell lépkedni) egy ciklussal vagy egy rekurzióval kell lépkedni, ami addig fut, amíg
        – elérjük az N db  egyforma jelet -> ekkor ugye nyerés van
        – Nem lesz N db jel, mert ellentétesbe ütközünk, vagy kifutunk a tábláról. -> ekkor folytatni kell az aktuális jel körbejárását, addig, amíg mind a nyolc irányt meg nem vizsgáltuk.
        [align=right][snapback]95466[/snapback][/align]

        Továbbfejleszthetõ úgy, hogy egy táblába gyûjtöd, hogy melyik mezõt melyik irányba csekkoltad már, a tábla elõre kitölthetõ, ugye a sarki mezóket eleve csak 3 irányba kell ellenõrizni.

        #1980517
        hop
        Felhasználó

          Továbbfejleszthetõ úgy, hogy egy táblába gyûjtöd, hogy melyik mezõt melyik irányba csekkoltad már, a tábla elõre kitölthetõ, ugye a sarki mezóket eleve csak 3 irányba kell ellenõrizni.
          [align=right][snapback]95471[/snapback][/align]

          A táblát így definiáld:
          Type
          CheckTable = Array[n,m] of byte;

          mivel nyolc ellenõrzendõ irány van mezõnként, így a byte egy-egy bitje kinevezhetõ egy egy iránynak, amiket megfelelõen átbillenthetsz.Ha 12 órától indulun akkor a bal felsõ sarok induláskor így nézhet ki: 00111000

          #1980518
          admin
          Adminisztrátor

            Hhm..
            Eddig jó csakhogy én egy egydimenziós rekordos tömben tárolom a lépéseket
            lepesek:array[1…4000] of tomb
            tomb=record
            x:integer
            y:integer

            Kezdjem elõlrõl?????????
            Az irányokat ebbõl a kordinátákból ellenõrizni és egyezés esetén tárolni nagy szívás.
            Mondjuk ha lerajzolom magamnak akkor +-1-esekkel meg lehet csinálni.
            De már nem fogom újra kezdeni.
            A gond az hogy nem a lépést (X,O) tároltam hanem a kordinátátkat és minden páros az X-et lépet.
            De asszem menni fog:
            Köszönök mindent.

            #1980519
            hop
            Felhasználó

              Hhm..
              Eddig jó csakhogy én egy egydimenziós rekordos tömben tárolom a lépéseket
              lepesek:array[1…4000] of tomb
              tomb=record
              x:integer
              y:integer

              Kezdjem elõlrõl?????????
              Az irányokat ebbõl a kordinátákból ellenõrizni és egyezés esetén tárolni nagy szívás.
              Mondjuk ha lerajzolom magamnak akkor +-1-esekkel meg lehet csinálni.
              De már nem fogom újra kezdeni.
              A gond az hogy nem a lépést (X,O) tároltam hanem a kordinátátkat és minden páros az X-et lépet.
              De asszem menni fog:
              Köszönök mindent.
              [align=right][snapback]95653[/snapback][/align]

              Szerintem ez alapvetõen rossz megközelítés, megoldható így is, de szerintem legalább annyi, ha nem több munka, mintha újrakezdenéd.
              Ha lesz egy kis idõm összedobok vmit.

              #1876707
              csaba
              Felhasználó

                Sziasztok! Segítséget szeretnék kérni a kötelezõ programom megírásához. A probléma a következõ:
                NxM -es (N és M maximum Nmax) amõba játék szimulálása két játékos
                között. A tábla méreteit, és a koordinátákat a standard inputról kell
                olvasni. Minden lépés után újra ki kell rajzolni a táblát a standard
                outputra (nem az elõzõt kell átrajzolni). A táblán az egyik játékos ‘O’, a
                másik ‘X’, az üres mezõk ‘.’-tal vannak jelölve. A program jelezze, ha
                valamelyik játékos nyert, vagy a döntetlent ha betelt a tábla.

                Ha valaki rendelkezik ezzel a programmal, vagy van valami ötlete, szívesen venném, ha segítene vele.
                emailcímem: ildi000@freemail.hu

              6 bejegyzés megtekintése - 11-16 / 16
              • Be kell jelentkezni a hozzászóláshoz.