file beolvasás c++

Kezdőlap Fórumok Programozás file beolvasás c++

10 bejegyzés megtekintése - 81-90 / 155
  • Szerző
    Bejegyzés
  • #2174431
    jules
    Felhasználó

      Egyszerubb, ha csatolom a forraskodot es a matrix.dat file-t. Egyszeruseg kedveert csak 5 db. matrixot tartalmaz a .dat, de ez a lenyegen nem valtoztat.

      A matrix.dat ertelmezese (a matrix elemei valos es kepzetes reszre vannak bontva az alabbi modon):

      Code:
      2 <— 2×2-es matrix, N=2
      1 0 0 0 <— Re=1 Im=0 Re=0 Im=0
      0 0 1 0 <— Re=0 Im=0 Re=1 Im=0
      #2174432
      jules
      Felhasználó

        Egyszerubb, ha csatolom a forraskodot es a matrix.dat file-t. Egyszeruseg kedveert csak 5 db. matrixot tartalmaz a .dat, de ez a lenyegen nem valtoztat.

        A matrix.dat ertelmezese (a matrix elemei valos es kepzetes reszre vannak bontva az alabbi modon):

        Code:
        2 <— 2×2-es matrix, N=2
        1 0 0 0 <— Re=1 Im=0 Re=0 Im=0
        0 0 1 0 <— Re=0 Im=0 Re=1 Im=0
        #2174433
        kisbetu
        Felhasználó

          Jól agyonkommentezted…

          #2174434
          kisbetu
          Felhasználó

            Jól agyonkommentezted…

            #2174435
            kisbetu
            Felhasználó

              Gyűlölöm a C-t.

              Semmi kedvem végigrágni a progidat, amit te magad sem értesz.

              Szeretnék inkább továbbra is kérdezni…

              Tehát: mik a terveid az ezer darab mátrixszal?
              (Ledefiniáltad az A-t 50×50-re, aztán használod 2×2-re!)

              Legszívesebben létrehoznék egy 1000 x 2 x 2-es tömböt, és az olvasódat – a már javasolt – 1000-es cilkussal hívnám.

              Code:
              fálylnyitás
                ciklus m 1… 1000
                  ciklus i 1..2
                    ciklus j 1..2
                      olvas A(m,i,j).R .I
                    j vége
                  i vége
                m vége
              fálylzárás
              #2174436
              kisbetu
              Felhasználó

                Gyűlölöm a C-t.

                Semmi kedvem végigrágni a progidat, amit te magad sem értesz.

                Szeretnék inkább továbbra is kérdezni…

                Tehát: mik a terveid az ezer darab mátrixszal?
                (Ledefiniáltad az A-t 50×50-re, aztán használod 2×2-re!)

                Legszívesebben létrehoznék egy 1000 x 2 x 2-es tömböt, és az olvasódat – a már javasolt – 1000-es cilkussal hívnám.

                Code:
                fálylnyitás
                  ciklus m 1… 1000
                    ciklus i 1..2
                      ciklus j 1..2
                        olvas A(m,i,j).R .I
                      j vége
                    i vége
                  m vége
                fálylzárás
                #2174437
                gabaman
                Felhasználó

                  Azt hiszem kezdem érteni mit szeretnél. Van egy C++ mátrix feldolgozó gyűjteményed és ahhoz szeretnél beolvasó részt készíteni.

                  jules wrote:
                  Kiprobaltam 1000 helyett csak 2-re, de igy csak a 2. matrixot olvassa be 🙁

                  Code:
                  void BEO() {

                    int i, j;
                    FILE *fp;
                    fp=fopen(„matrix.dat”,”r”);

                    for(int k=0; k<2; k++){
                    fscanf(fp,"%d", &N);
                    for (i=1; i<=N; i++)
                      for (j=1; j<=N; j++)
                        fscanf(fp,"%lf %lf", &A[i][j].R, &A[i][j].I);
                    }
                    fclose(fp);

                  };

                  Valami ilyesmit szeretnél: (nem kommentezem, mert ha nem érted úgyis reménytelen)

                  Code:
                  typedef COMPLEX ** MATRIX;

                  MATRIX matrix_letrehozas (int N)
                  {
                    MATRIX A;
                    A = new (COMPLEX*)[N];
                    for (int  i=0;i<N;i++)
                      A[i] = new COMPLEX[N];
                    return A;
                  }

                  bool matrix_beolvasas (FILE *fp, MATRIX A)
                  {
                    int N;
                    if (fscanf(fp,"%dn", &N) != 1)
                      return false;

                    A = matrix_letrehozas (N);

                    for (i=1; i<=N; i++)
                      for (j=1; j<=N; j++)
                        if (fscanf(fp,"%lf %lfn", &A[i][j].R, &A[i][j].I) != 2)
                          return false;

                    return true;
                  }

                  void BEO() {

                    int i, j;
                    FILE *fp;
                    MATRIX M[2];

                    fp=fopen("matrix.dat","r");

                    for(int k=0; k<2; k++)
                      if (matrix_beolvasas (fp, M[k]) != true) {
                        std::cerr << "Hibaüzenet" << std::endl;
                        exit (-1);
                      }
                    fclose(fp);

                    (…) // Ide jön a mátrix feldolgozás
                  };

                  Alapvető hibák:
                  – mindig ugyanabba a változóba olvasd be a mátrixot, ezért tudod az utolsót elérni
                  – nem teszed külön függvénybe a logikailag különálló részeket
                  – nincs alapvető hibakezelés sem, ezért nem tudod mi jó és mi nem
                  – fogalmad sincs mi a tömb adatszerkezet
                  – erősen kevered a C és C++ gondolkodásmódot (=> káosz)

                  #2174438
                  gabaman
                  Felhasználó

                    Azt hiszem kezdem érteni mit szeretnél. Van egy C++ mátrix feldolgozó gyűjteményed és ahhoz szeretnél beolvasó részt készíteni.

                    jules wrote:
                    Kiprobaltam 1000 helyett csak 2-re, de igy csak a 2. matrixot olvassa be 🙁

                    Code:
                    void BEO() {

                      int i, j;
                      FILE *fp;
                      fp=fopen(„matrix.dat”,”r”);

                      for(int k=0; k<2; k++){
                      fscanf(fp,"%d", &N);
                      for (i=1; i<=N; i++)
                        for (j=1; j<=N; j++)
                          fscanf(fp,"%lf %lf", &A[i][j].R, &A[i][j].I);
                      }
                      fclose(fp);

                    };

                    Valami ilyesmit szeretnél: (nem kommentezem, mert ha nem érted úgyis reménytelen)

                    Code:
                    typedef COMPLEX ** MATRIX;

                    MATRIX matrix_letrehozas (int N)
                    {
                      MATRIX A;
                      A = new (COMPLEX*)[N];
                      for (int  i=0;i<N;i++)
                        A[i] = new COMPLEX[N];
                      return A;
                    }

                    bool matrix_beolvasas (FILE *fp, MATRIX A)
                    {
                      int N;
                      if (fscanf(fp,"%dn", &N) != 1)
                        return false;

                      A = matrix_letrehozas (N);

                      for (i=1; i<=N; i++)
                        for (j=1; j<=N; j++)
                          if (fscanf(fp,"%lf %lfn", &A[i][j].R, &A[i][j].I) != 2)
                            return false;

                      return true;
                    }

                    void BEO() {

                      int i, j;
                      FILE *fp;
                      MATRIX M[2];

                      fp=fopen("matrix.dat","r");

                      for(int k=0; k<2; k++)
                        if (matrix_beolvasas (fp, M[k]) != true) {
                          std::cerr << "Hibaüzenet" << std::endl;
                          exit (-1);
                        }
                      fclose(fp);

                      (…) // Ide jön a mátrix feldolgozás
                    };

                    Alapvető hibák:
                    – mindig ugyanabba a változóba olvasd be a mátrixot, ezért tudod az utolsót elérni
                    – nem teszed külön függvénybe a logikailag különálló részeket
                    – nincs alapvető hibakezelés sem, ezért nem tudod mi jó és mi nem
                    – fogalmad sincs mi a tömb adatszerkezet
                    – erősen kevered a C és C++ gondolkodásmódot (=> káosz)

                    #2174439
                    gabaman
                    Felhasználó

                      Mellesleg ez egy ultra gagyi hányinger (általában agy nélküli matematikusok és fizikusok csinálnak ilyet):

                      Code:
                      #define SIZE  50
                      #define REAL  double
                      #define SQRT  sqrt
                      #define ABS   fabs

                        typedef  struct {
                          REAL R,I; 
                        } COMPLEX;

                        typedef COMPLEX CMat[SIZE][SIZE];

                      #2174440
                      gabaman
                      Felhasználó

                        Mellesleg ez egy ultra gagyi hányinger (általában agy nélküli matematikusok és fizikusok csinálnak ilyet):

                        Code:
                        #define SIZE  50
                        #define REAL  double
                        #define SQRT  sqrt
                        #define ABS   fabs

                          typedef  struct {
                            REAL R,I; 
                          } COMPLEX;

                          typedef COMPLEX CMat[SIZE][SIZE];

                      10 bejegyzés megtekintése - 81-90 / 155
                      • Be kell jelentkezni a hozzászóláshoz.