matrix osztaly osszeadasra

Kezdőlap Fórumok Programozás matrix osztaly osszeadasra

10 bejegyzés megtekintése - 11-20 / 179
  • Szerző
    Bejegyzés
  • #2154629
    pointux
    Felhasználó
      zoltan22 wrote:
      jules wrote:
      valahogy ezeket a C matrixokat minden generalas utan el kellene tarolni…39.gif

      Ha mar C++, hasznalhatnad a vektor osztalyt: http://cppreference.com/cppvector/index.html

      ./off

      vizsla wrote:
      Valami hasonló(k) van(nak) az std libben is.

      Ott meg van egy nagy rakas preporecesszor dirketiva is kozte, hogy teljesen olvashatatlan legyen 🙂

      Meg viszonylag keveset tud (pl. műveletek), viszonylag rugalmatlan (pl. a több típusú argumentumok) és viszonylag (ill. nagyon) lassú (mivel speciális funkciókat tartalmaz és egyébként is „sebességoptimalizáltan” van megírva), de legalább szabványos. :))) (És jó példa, hogy hogy lehet valamit profi, jól átgondolt módon megcsinálni.)

      Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
      Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.

      Az elemeket mutató mutatójával is lehet tárolni, de a sorok/elemek így is kényelmesen elérhetőek egy maradékos osztással. És ezzel egy jelentős inicializálási időt és memóriát meg lehet takarítani a sorok számától függően.

      Persze a „mindenttudó” (több féle argumentum, mindenféle math.h és statisztikai műveletekkel megtűzdelt) mátrix/vektor osztály forrása, úgy egy 1,44-es floppy-nyi tárhelyen terül el. Nyílván neki ez is fölösleges, de az alapelv megfelelő.

      #2154630
      pointux
      Felhasználó
        zoltan22 wrote:
        jules wrote:
        valahogy ezeket a C matrixokat minden generalas utan el kellene tarolni…39.gif

        Ha mar C++, hasznalhatnad a vektor osztalyt: http://cppreference.com/cppvector/index.html

        ./off

        vizsla wrote:
        Valami hasonló(k) van(nak) az std libben is.

        Ott meg van egy nagy rakas preporecesszor dirketiva is kozte, hogy teljesen olvashatatlan legyen 🙂

        Meg viszonylag keveset tud (pl. műveletek), viszonylag rugalmatlan (pl. a több típusú argumentumok) és viszonylag (ill. nagyon) lassú (mivel speciális funkciókat tartalmaz és egyébként is „sebességoptimalizáltan” van megírva), de legalább szabványos. :))) (És jó példa, hogy hogy lehet valamit profi, jól átgondolt módon megcsinálni.)

        Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
        Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.

        Az elemeket mutató mutatójával is lehet tárolni, de a sorok/elemek így is kényelmesen elérhetőek egy maradékos osztással. És ezzel egy jelentős inicializálási időt és memóriát meg lehet takarítani a sorok számától függően.

        Persze a „mindenttudó” (több féle argumentum, mindenféle math.h és statisztikai műveletekkel megtűzdelt) mátrix/vektor osztály forrása, úgy egy 1,44-es floppy-nyi tárhelyen terül el. Nyílván neki ez is fölösleges, de az alapelv megfelelő.

        #2154631
        pointux
        Felhasználó

          Amit viszont imádok ebben a rendszerben, hogy még egy ilyen dolog is gond és megeröltetés nélkül működik:

          Code:
          // 1. mátrix
          Matrix strm_a ( 1, n );
          strm_a [ 0 ] = „strm_a 0”;

          strm_a [ n ] =  „strm_a n”;

          // Összefűzés kötőjellel
          strm_a += ” – „;

          // 2. mátrix
          Matrix strm_b ( 1, n );
          strm_b [ 0 ] = „strm_b 0”;

          strm_b [ n ] =  „strm_b n”;

          // Összefűzés, de most még teszünk egy új sor jelzőt is a végére
          strm_a = strm_b + „n”;

          // Kiíratás
          std::cout << strm_a << std::endl;
          [/CODE]

          [code]
          strm_a 0 – strm_b 0

          strm_a n – strm_b n

          A magyarázat pedig egyszerű: a sztringeknél széntén van értelme a +operátornak és az az összefűzés. 🙂
          Így, ha template argumentum helyére nem számot, hanem sztring típust írunk, akkor a mátrixunk egyenként összefűzi a sztringeket, anélkül, hogy bármit is módosítottunk volna a kódon. 🙂

          #2154632
          pointux
          Felhasználó

            Amit viszont imádok ebben a rendszerben, hogy még egy ilyen dolog is gond és megeröltetés nélkül működik:

            Code:
            // 1. mátrix
            Matrix strm_a ( 1, n );
            strm_a [ 0 ] = „strm_a 0”;

            strm_a [ n ] =  „strm_a n”;

            // Összefűzés kötőjellel
            strm_a += ” – „;

            // 2. mátrix
            Matrix strm_b ( 1, n );
            strm_b [ 0 ] = „strm_b 0”;

            strm_b [ n ] =  „strm_b n”;

            // Összefűzés, de most még teszünk egy új sor jelzőt is a végére
            strm_a = strm_b + „n”;

            // Kiíratás
            std::cout << strm_a << std::endl;
            [/CODE]

            [code]
            strm_a 0 – strm_b 0

            strm_a n – strm_b n

            A magyarázat pedig egyszerű: a sztringeknél széntén van értelme a +operátornak és az az összefűzés. 🙂
            Így, ha template argumentum helyére nem számot, hanem sztring típust írunk, akkor a mátrixunk egyenként összefűzi a sztringeket, anélkül, hogy bármit is módosítottunk volna a kódon. 🙂

            #2154633
            zoltan22
            Felhasználó
              vizsla wrote:
              Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
              Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.

              Nem a matrix implementalasara gondoltam, hanem tobb matrix tarolasara. 🙂

              Code:
              #include

              template
              class Matrix {
              // …..
              };

              int main(void){

              std::vector < Matrix > c; // c-ben tarthatunk tobb matrixot

              }

              #2154634
              zoltan22
              Felhasználó
                vizsla wrote:
                Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
                Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.

                Nem a matrix implementalasara gondoltam, hanem tobb matrix tarolasara. 🙂

                Code:
                #include

                template
                class Matrix {
                // …..
                };

                int main(void){

                std::vector < Matrix > c; // c-ben tarthatunk tobb matrixot

                }

                #2154635
                pointux
                Felhasználó

                  Ja! 🙂
                  Ha listában akarja tárolna, akkor megfelelő.
                  Ha nem akarja random elérni, akkor egy list is, ha közé sem akar szúrni, meg egy adott/dinamikus (viszonylag kis) számú mátrixot kell eltárolni, akkor a legegyszerűbb módszer new-val, malloc-cal, vagy (főként) statikusan tömbböt létrehozni. (Akkor nem kell a push_back… minden sz@r. :))

                  #2154636
                  pointux
                  Felhasználó

                    Ja! 🙂
                    Ha listában akarja tárolna, akkor megfelelő.
                    Ha nem akarja random elérni, akkor egy list is, ha közé sem akar szúrni, meg egy adott/dinamikus (viszonylag kis) számú mátrixot kell eltárolni, akkor a legegyszerűbb módszer new-val, malloc-cal, vagy (főként) statikusan tömbböt létrehozni. (Akkor nem kell a push_back… minden sz@r. :))

                    #2154637
                    jules
                    Felhasználó

                      Ez tok jo, de a gyakorlatbol jobban tanulok a peldamon keresztul…:)

                      Azt nem tudnatok leirni, hogy konkretan hogy nezne ki? Ezzel szivok…

                      Tehat ugye az van, hogy generaltam veletlen vektorokat, x,y,z komponensel. Na most egy ilyen vektorbol csinalok egy 3×3-as matrixot. A masodik vektorbol egy masodik matrixot, …stb. Ezeket a matrixokat adnam ossze es osztanam el a generalt matrixok elemszamaval.

                      A forrast iderakom ha kell, de az elozoekben valahol mar leirtam, asszem:)

                      #2154638
                      jules
                      Felhasználó

                        Ez tok jo, de a gyakorlatbol jobban tanulok a peldamon keresztul…:)

                        Azt nem tudnatok leirni, hogy konkretan hogy nezne ki? Ezzel szivok…

                        Tehat ugye az van, hogy generaltam veletlen vektorokat, x,y,z komponensel. Na most egy ilyen vektorbol csinalok egy 3×3-as matrixot. A masodik vektorbol egy masodik matrixot, …stb. Ezeket a matrixokat adnam ossze es osztanam el a generalt matrixok elemszamaval.

                        A forrast iderakom ha kell, de az elozoekben valahol mar leirtam, asszem:)

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