Keresés

Hirdetés

Új hozzászólás Aktív témák

  • Gergosz2

    veterán

    válasz sonar #20908 üzenetére

    xy[3][3]-vel a harmadik sor , harmadik elemébe akarsz egy 3*3as mátrixot berakni. Ez nyilván nem jó, mert oda egyszem int kéne.

    Ha ki akarod nullázni az egészet akkor vagy végig iterálsz rajta elemenként, vagy memset-tel kinullázod.

    [ Szerkesztve ]

    Nokia 6030 Hardcore User // I Panic Restaurant by Taito

  • Janos250

    őstag

    válasz sonar #20908 üzenetére

    Használd ekkold által írtakat. Az jó megoldás, én csak annyit fűznék hozzá, hogy ha az eredeti programhoz jobban passzoló neveket használsz, akkor talán kevésbé keveredsz bele.
    Azért ez a téma lehet, hogy megér egy bővebb kifejtést, ezért írtam egy kis tutorialszerű programot.
    #include <iostream>  // ha a std::cout-ot akarjuk hasznalni, egyebkent torlendo
    void setup() {
      delay(1000);
      Serial.begin(115200) ;
      delay(1000);
    /*
    A C++-ban a ("C tipusu") tomb neve constans pointer. 
    Ugyanugy hasznalhatjuk oket egymas helyett is, azzal a megkotessel,
    hogy a tomb neve konstans, nem valtoztathatjuk meg.
    Ezert nem lehet egyenlosegjel bal oldalan hasznalni.
    Viszont, ha helyette egy tenyleges pointert hasznalunk, az megvaltoztathato,
    azaz egy masik tomb nevet mint pointert adhatjuk neki.
    Mas modszereket is hasznalhatunk ennek megkerulesere, mint peldaul
    a std::array. Ez mar szereelhet erteekado utasitas bal oldalan. 
    Vagy a for each-csel valo ertekadas, esetleg a std::vector
    Mind kozul a leggyorsabb a sima tomb
    */
      Serial.println ("ha egy index van:");  
      int* xy  ; 
      int  xy_array[9] = {1,0,0,    0,1,0,    0,0,1};
      int xy2_array[9] = {11,12,13, 21,22,23, 31,32,33}; 
      Serial.println ("xy = xy_array:");  
      xy = xy_array;
      for (int i = 0; i <9 ; i++){
        Serial.print (xy[i]); Serial.print ("    ");    
      };
      Serial.println (); 
      Serial.println ("xy = xy2_array:");
      xy = xy2_array;
      for (int i = 0; i <9 ; i++){
        Serial.print (xy[i]); Serial.print ("   ");    
      };
      Serial.println (); 
    // nyomtatja:
    /*
    ha egy index van:
    xy = xy_array:
    1    0    0    0    1    0    0    0    1    
    xy = xy2_array:
    11   12   13   21   22   23   31   32   33 
    */

      //he több index van akkor typedef hasznalando 
      //typedef <data_type> <alias_name> [<size>]
      typedef int egyindexes_arr[3];  // ez egy 3 elemű vektor tipus
      egyindexes_arr* enMatrixom ; 
                    // harom elemu vektorra mutato pointer, 
                    // melynek az elemei szinten harom elemu vektorok
                    // Az alabbiak ugyanigy, csak tombok.
                    // Ne feledd tomb = pointer!
      egyindexes_arr enMatrixom1[3] = {{1,0,0},    {0,1,0},    {0,0,1}} ; 
      egyindexes_arr enMatrixom2[3] = {{11,12,13}, {21,22,23}, {31,32,33}} ; 
      Serial.println ("eredeti ketindexes:   "); 
      for (int i = 0; i <3 ; i++){
        for (int j = 0; j <3 ; j++){
           Serial.print (  enMatrixom1[i][j]    ); Serial.print ("   ");       
        };  // end j
        Serial.println (); 
      };  // end i    
      Serial.println (); 
    /*
    eredeti ketindexes:   
    1   0   0   
    0   1   0   
    0   0   1   
    */
      
      Serial.println ("enMatrixom = enMatrixom1 utan:"); 
      enMatrixom = enMatrixom1 ;
      for (int i = 0; i <3 ; i++){
        for (int j = 0; j <3 ; j++){
           Serial.print (  enMatrixom[i][j]    ); Serial.print ("   ");       
        };  // end j
        Serial.println (); 
      };  // end i    
      Serial.println (); 
    /*
    enMatrixom = enMatrixom1 utan:
    1   0   0   
    0   1   0   
    0   0   1   
    */
      Serial.println ("enMatrixom = enMatrixom2 utan:"); 
      enMatrixom = enMatrixom2 ;
      for (int i = 0; i <3 ; i++){
        for (int j = 0; j <3 ; j++){
           Serial.print (  enMatrixom[i][j]    ); Serial.print ("   ");       
        };  // end j
        Serial.println (); 
      };  // end i    
      Serial.println (); 
    /*
    enMatrixom = enMatrixom2 utan:
    11   12   13   
    21   22   23   
    31   32   33 
    */  

    // Hasznalhatunk mas megoldasokat is, de azok nem biztos, hogy a régi lapokon mennek, 
    // csak a korszerűbbeken, de ESP32-n biztosan(kipróbáltam)
    // peldaul a std::array, vagy a for each hasznalata
    // a std::cout helyett termeszetesen hasnalhatunk barmilyen mas nyomtato utasitast is
      std::array<int, 9> std_arr_1 = {1,0,0,    0,1,0,    0,0,1};
      std::array<int, 9> std_arr_2 = {11,12,13, 21,22,23, 31,32,33};
      Serial.println ("eredeti std_arr_1 :");  
      for (int i = 0; i <9 ; i++){
        Serial.print (std_arr_1[i]); Serial.print ("    ");    
      };
      Serial.println ();
     
      std_arr_1 = std_arr_2;  // igy hasznalhato az ertekadas, 
                      //egyebkent meg ugyanugy hasznalhatjuk, mint a C tipusu tombot.
      Serial.println ("std_arr_1 = std_arr_2 utan :");  
      for (int i = 0; i <9 ; i++){
        Serial.print (std_arr_1[i]); Serial.print ("    ");  
      };
      Serial.println ();
    /*
    eredeti std_arr_1 :
    1    0    0    0    1    0    0    0    1    
    std_arr_1 = std_arr_2 utan :
    11    12    13    21    22    23    31    32    33 
    */
      Serial.println (
          "a korabban megadott xy tomb elemeit lecserésljük a felsorolasban szereplokre :"); 
      Serial.println ("lecsereles elott:");
    // kinyomtatjuk
      for ( auto tombEgyEleme : xy_array )  {
            std::cout << tombEgyEleme << ' ';
      }
      std::cout << '\n';  
    // lecsereljuk:  
      uint8_t j = 0;
      for ( auto tombEgyEleme : {11,12,13, 21,22,23, 31,32,33} ) {
         xy_array[j++] = tombEgyEleme;
      }
      Serial.println ("lecsereles utan:");
    // kinyomtatjuk
      for ( auto tombEgyEleme : xy_array )  {
            std::cout << tombEgyEleme << ' ';
      }
      std::cout << '\n';
    /*
    a korabban megadott xy tomb elemeit lecserésljük a felsorolasban szereplokre :
    lecsereles elott:
    1 0 0 0 1 0 0 0 1 
    lecsereles utan:
    11 12 13 21 22 23 31 32 33 
    */
      
    } ;  // end setup
    void loop() {
      // put your main code here, to run repeatedly:
    }

    Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

Új hozzászólás Aktív témák