Fejtörő – „csak guruknak”…

Kezdőlap Fórumok Programozás Fejtörő – „csak guruknak”…

10 bejegyzés megtekintése - 91-100 / 121
  • Szerző
    Bejegyzés
  • #2104395
    pointux
    Felhasználó
      uzsolt wrote:
      Hm. Ilyenekben nem vagyok jártas, de gondolom nem az a megoldás, hogy a fentebb leírt kódo(ka)t bemásolom, hogy azt írja ki egy fájlba 🙂

      Pedig valami ilyesmiről van szó… az más kérdés, hogy milyen finomságokra gondolt.
      Úgyhogy csináltam poénból egy univerzális változatot, melyet ki-ki alakíthat, hogy többet tudjon. 🙂

      #2104396
      pointux
      Felhasználó
        uzsolt wrote:
        Hm. Ilyenekben nem vagyok jártas, de gondolom nem az a megoldás, hogy a fentebb leírt kódo(ka)t bemásolom, hogy azt írja ki egy fájlba 🙂

        Pedig valami ilyesmiről van szó… az más kérdés, hogy milyen finomságokra gondolt.
        Úgyhogy csináltam poénból egy univerzális változatot, melyet ki-ki alakíthat, hogy többet tudjon. 🙂

        #2104397
        gabaman
        Felhasználó

          „Pedig valami ilyesmiről van szó… az más kérdés, hogy milyen finomságokra gondolt.”

          Mindkét ötlet jó, és kielégíti a nagyon rövid feladatmegadást. Szándékosan nem akartam korlátokat állítani. Az első ötlet is metaprogram, de így is meg lehet valósítani:

          Code:
          #!/bin/sh

          KOD=””

          `$KOD`

          Ez esetben a metaprogram a változó és a külső programfutást lehetővé tevő operátor („), a metaprogram példányosítása a változó tartalma, a generált kód meg a változó értékének behelyettesítése.

          Vizsla megoldása még jobb, bár az nem bash metaprogram, hanem inkább meta-bash program (bash nyelven írt bash metaprogram), és az implementációs szintet viszi „meta fellegekbe”.

          Azért jutott az eszembe ez a feladat, mert három független logikai részre lehet leboltani az általam megvalósított progit:
          – halmaz operátorok (metszet, únió, különbség)
          – normál és numerikus rendezés
          – forrásfájl kódolása (karakterlánc vagy új sorral elválasztott felsorolás).

          De egy valami hasolnó mindegyikben, hogy a megvalósító funkciók, a segítség szövege és a paraméterek feldolgozása logikailag összefüggőek. Azaz ha megadok egy binér halmaz operátor definíciót így (a három pont (…) a kihagyás jele):

          Code:
          név „leírás” {kód}

          pl:
          kivon „Két halmaz különbsége” {$RENDEZ $1 $TMP1; $RENDEZ $2 $TMP2; diff (…)>$TMP3; $RENDEZ $TMP3 $3;}

          akkor meglehetősen könnyen lehet új operátorokkal bővíteni a programot, és az mindig érvényes és jól definált lesz a progi (az összes összefüggő rész egyszerre módosul, csökken a programozási hiba lehetősége).

          A következő három sablonnal:

          Code:
          function {

          }

          function segitseg {
          (…)
          echo ” —  ”
          (…)
          }

          for i in $*
          (…)
                                –) MUVELET=
                                          if test „$BEVITEL” != 2
                                          then
                                              segitseg
                                          fi ;;
          (…)

          viszonylag könnyen lehet előállítani pl. ezeket a kódrészeket:

          Code:
          function kivon {
          $RENDEZ $1 $TMP1
          $RENDEZ $2 $TMP2
          diff (…)>$3;
          $RENDEZ $TMP3 $3;
          }

          function segitseg {
          (…)
          echo ” –kivon  Két halmaz különbsége”
          (…)
          }

          for i in $*
          (…)
                                –kivon) MUVELET=kivon
                                          if test „$BEVITEL” != 2
                                          then
                                              segitseg
                                          fi ;;
          (…)

          Ugyanígy a rendezést is és a fájlok kódolását (formátumát) is végig lehetne zongorázni. Ez a megközelítés a feladatleírás oldaláról történik, és szintén metaprogram. Egy kicsit (vagy nagyon, izlés dolga) loptam a webes technikák közül. Kissé hosszú lett, remélem érthető a lényeg.

          #2104398
          gabaman
          Felhasználó

            „Pedig valami ilyesmiről van szó… az más kérdés, hogy milyen finomságokra gondolt.”

            Mindkét ötlet jó, és kielégíti a nagyon rövid feladatmegadást. Szándékosan nem akartam korlátokat állítani. Az első ötlet is metaprogram, de így is meg lehet valósítani:

            Code:
            #!/bin/sh

            KOD=””

            `$KOD`

            Ez esetben a metaprogram a változó és a külső programfutást lehetővé tevő operátor („), a metaprogram példányosítása a változó tartalma, a generált kód meg a változó értékének behelyettesítése.

            Vizsla megoldása még jobb, bár az nem bash metaprogram, hanem inkább meta-bash program (bash nyelven írt bash metaprogram), és az implementációs szintet viszi „meta fellegekbe”.

            Azért jutott az eszembe ez a feladat, mert három független logikai részre lehet leboltani az általam megvalósított progit:
            – halmaz operátorok (metszet, únió, különbség)
            – normál és numerikus rendezés
            – forrásfájl kódolása (karakterlánc vagy új sorral elválasztott felsorolás).

            De egy valami hasolnó mindegyikben, hogy a megvalósító funkciók, a segítség szövege és a paraméterek feldolgozása logikailag összefüggőek. Azaz ha megadok egy binér halmaz operátor definíciót így (a három pont (…) a kihagyás jele):

            Code:
            név „leírás” {kód}

            pl:
            kivon „Két halmaz különbsége” {$RENDEZ $1 $TMP1; $RENDEZ $2 $TMP2; diff (…)>$TMP3; $RENDEZ $TMP3 $3;}

            akkor meglehetősen könnyen lehet új operátorokkal bővíteni a programot, és az mindig érvényes és jól definált lesz a progi (az összes összefüggő rész egyszerre módosul, csökken a programozási hiba lehetősége).

            A következő három sablonnal:

            Code:
            function {

            }

            function segitseg {
            (…)
            echo ” —  ”
            (…)
            }

            for i in $*
            (…)
                                  –) MUVELET=
                                            if test „$BEVITEL” != 2
                                            then
                                                segitseg
                                            fi ;;
            (…)

            viszonylag könnyen lehet előállítani pl. ezeket a kódrészeket:

            Code:
            function kivon {
            $RENDEZ $1 $TMP1
            $RENDEZ $2 $TMP2
            diff (…)>$3;
            $RENDEZ $TMP3 $3;
            }

            function segitseg {
            (…)
            echo ” –kivon  Két halmaz különbsége”
            (…)
            }

            for i in $*
            (…)
                                  –kivon) MUVELET=kivon
                                            if test „$BEVITEL” != 2
                                            then
                                                segitseg
                                            fi ;;
            (…)

            Ugyanígy a rendezést is és a fájlok kódolását (formátumát) is végig lehetne zongorázni. Ez a megközelítés a feladatleírás oldaláról történik, és szintén metaprogram. Egy kicsit (vagy nagyon, izlés dolga) loptam a webes technikák közül. Kissé hosszú lett, remélem érthető a lényeg.

            #2104399
            pointux
            Felhasználó

              „Vizsla megoldása még jobb, bár az nem bash metaprogram, hanem inkább meta-bash program (bash nyelven írt bash metaprogram), és az implementációs szintet viszi „meta fellegekbe”.”
              Gondoltam, hogy nem erre gondoltál, de ezzel a szöveggel a ” fellegekbe küldtél”. :))))
              Az ötlet – tulajdonképpen – a gnuplotból ered, a bash meg azért, mert mostanában erről szólt leginkább a topic.
              De lehetne az újabb feladat egy bash nyelven megírt assembler. Na jó nem szívatom a jónépet… :))))
              Mondjuk, ami nekem hiányzik, az egy gobject c kód generátor. Noha van pl. a gob, de az elég rugalmatlan.
              Maga az preprocesszor nem enged meg bizonyos dolgokat, amelyeket ugyan a c kódba be lehet tenni, de ha felülírja az ember a kinduló kódot, és „frissíti” c kódot eltűnnek a változások. (Elsőre – nekem – elég lehetetlen vállalkozás végleges formában eltalálni egy objektumot, úgyhogy…)

              #2104400
              pointux
              Felhasználó

                „Vizsla megoldása még jobb, bár az nem bash metaprogram, hanem inkább meta-bash program (bash nyelven írt bash metaprogram), és az implementációs szintet viszi „meta fellegekbe”.”
                Gondoltam, hogy nem erre gondoltál, de ezzel a szöveggel a ” fellegekbe küldtél”. :))))
                Az ötlet – tulajdonképpen – a gnuplotból ered, a bash meg azért, mert mostanában erről szólt leginkább a topic.
                De lehetne az újabb feladat egy bash nyelven megírt assembler. Na jó nem szívatom a jónépet… :))))
                Mondjuk, ami nekem hiányzik, az egy gobject c kód generátor. Noha van pl. a gob, de az elég rugalmatlan.
                Maga az preprocesszor nem enged meg bizonyos dolgokat, amelyeket ugyan a c kódba be lehet tenni, de ha felülírja az ember a kinduló kódot, és „frissíti” c kódot eltűnnek a változások. (Elsőre – nekem – elég lehetetlen vállalkozás végleges formában eltalálni egy objektumot, úgyhogy…)

                #2104401
                gabaman
                Felhasználó
                  vizsla wrote:
                  Mondjuk, ami nekem hiányzik, az egy gobject c kód generátor. Noha van pl. a gob, de az elég rugalmatlan.
                  Maga az preprocesszor nem enged meg bizonyos dolgokat, amelyeket ugyan a c kódba be lehet tenni, de ha felülírja az ember a kinduló kódot, és „frissíti” c kódot eltűnnek a változások.

                  „GObject Builder (GOB) is a simple preprocessor for easily creating GObjects (glib objects).”

                  Ez mindent elmond a korlátokról. Arra épít, hogy aki nem profi, azt megkímélje a sok gépeléstől. Ha az exit_on_error változó értékét kivezeted a paraméterezéshez (mint a –no-exit-on-warn kapcsoló esetén), akkor ugyan továbbra is sírni fog, de legalább a kódot ki fogja írni.

                  #2104402
                  gabaman
                  Felhasználó
                    vizsla wrote:
                    Mondjuk, ami nekem hiányzik, az egy gobject c kód generátor. Noha van pl. a gob, de az elég rugalmatlan.
                    Maga az preprocesszor nem enged meg bizonyos dolgokat, amelyeket ugyan a c kódba be lehet tenni, de ha felülírja az ember a kinduló kódot, és „frissíti” c kódot eltűnnek a változások.

                    „GObject Builder (GOB) is a simple preprocessor for easily creating GObjects (glib objects).”

                    Ez mindent elmond a korlátokról. Arra épít, hogy aki nem profi, azt megkímélje a sok gépeléstől. Ha az exit_on_error változó értékét kivezeted a paraméterezéshez (mint a –no-exit-on-warn kapcsoló esetén), akkor ugyan továbbra is sírni fog, de legalább a kódot ki fogja írni.

                    #2104403
                    pointux
                    Felhasználó

                      „Arra épít, hogy aki nem profi, azt megkímélje a sok gépeléstől.”
                      Ha úgy nézzük, hogy gobject, akkor úgymond nem „profi” hozzá sem kezd…
                      Amúgy meg pont nem…, mert a nem „profi” valami olyat szerezne mint pl. a netbeans… (mármint technikai oldalról gondoltam, nem funkcionalitásról – mint pl.: netbeans vs. glade)
                      Egyszer gondoltam is rá, hogy kéne fejleszteni egyet, de ez ugye nem két perc… ötlet meg annyi van. :))))

                      #2104404
                      pointux
                      Felhasználó

                        „Arra épít, hogy aki nem profi, azt megkímélje a sok gépeléstől.”
                        Ha úgy nézzük, hogy gobject, akkor úgymond nem „profi” hozzá sem kezd…
                        Amúgy meg pont nem…, mert a nem „profi” valami olyat szerezne mint pl. a netbeans… (mármint technikai oldalról gondoltam, nem funkcionalitásról – mint pl.: netbeans vs. glade)
                        Egyszer gondoltam is rá, hogy kéne fejleszteni egyet, de ez ugye nem két perc… ötlet meg annyi van. :))))

                      10 bejegyzés megtekintése - 91-100 / 121
                      • Be kell jelentkezni a hozzászóláshoz.