Erster Versuch Mehrdimensionales Array



  • volkard schrieb:

    314159265358979 schrieb:

    - std::vector nehmen

    Was soll der Quatsch?

    Sollte die Anzahl der richtigen LottoSechser ausgeben nach Überprüfung der eingegeben Tips

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      int LottoTip[50][6];  
      int LottoSechser[6];
      int anzahl=0;
      int zahla,zahlb;
    
        for(int i=0,j=0;zahla!=0;i++,j++)
        {
          cout<<"Bitte Lotto Tip eingeben ENDE = 0 "<<endl;
          cin>>zahla;
          LottoTip[i][j]=zahla;        
        }
    
            for(int m=0;LottoSechser[m]!='\0';m++)
            {
              cout<<"Die Sechs Richtigen bitte eingeben"<<endl;
              cin>>zahlb;
              LottoSechser[m]=zahlb;
            }    
    
              for(int j=0,k=0,l=0;LottoTip[j]!='\0';)
              {
                if(LottoTip[j][k]==LottoSechser[l])
                {
                  k++;
                  l++;
                  {
                    anzahl+=1;
                    k=0;
                    l=0;
                  }
                }
                    else
                    {
                      k=0;
                      l=0;    
                      j++;
                    }
                }
                      cout<<"Es sind "<<anzahl<<" richtige Tips abgegeben worden"<<endl; 
    
    }
    


  • Da magst du wohl Recht haben. An std::array habe ich diesmal nicht gedacht.



  • volkard schrieb:

    markuswenczel schrieb:

    Kompilieren tut es, aber die Ausgabe stimmt noch nicht
    bitte um Tips

    Du brauchst für EVA zwei eindimenionale Arrays und kein zweidimensionales.

    Und nichttriviale for-Schleifen wie

    for(int i=0,j=0;zahla!=0;i++,j++)
    

    sind wirklich zu meiden. Und hier auch völlig unnötig.

    Ich soll 50 Lotto Tips einlesen, ich habe gelesen
    wenn man [50][6]definiert sind das 50 Arrays mit 6 Integer ?



  • Es gibt zwei Haupt-Wege.
    Der üblicher fängt so an:

    int main()
    {
      int LottoTip[6];  
      int LottoSechser[6];
    

    und benötigt je eine Schleife für Tip-Lesen und Ziehung-Lesen und dann zwei verschachtelte Schleifen zum Zählen der Richtigen.

    Der andere fängt so an:

    int main()
    {
      int LottoTip[50];  
      int LottoSechser[50];
    

    und benötigt je eine Schleife für Tip-Lesen und Ziehung-Lesen und dann nur eine Schleifen zum Zählen der Richtigen.



  • 314159265358979 schrieb:

    Da magst du wohl Recht haben. An std::array habe ich diesmal nicht gedacht.

    Selbst als es array noch nicht gab, war ein rohes Array dafür angemessener als vector.



  • volkard schrieb:

    314159265358979 schrieb:

    Da magst du wohl Recht haben. An std::array habe ich diesmal nicht gedacht.

    Selbst als es array noch nicht gab, war ein rohes Array dafür angemessener als vector.

    Damals konnte ich noch nicht C++, insofern macht die Diskussion darüber keinen Sinn :p



  • Auf die Gefahr hin, dich zu nerven...

    Einrückung ist wichtig (das Thema hatten wir ja letztens schon mal), aber so bringt sie dir nichts. Rücke 4 Zeichen (oder wieviele du willst, hauptsache konsistent) ein, wenn eine öffnende geschweifte Klammer kommt, und gehe wieder 4 Zeichen zurück, wenn die schließende kommt. Und jetzt kommt der Trick: nach der schließenden Klammer nicht einrücken! Es gibt keinen Grund dafür, du befindest dich noch auf derselben "Ebene".

    falsch:

    for(int i=0,j=0;zahla!=0;i++,j++)
        {
          cout<<"Bitte Lotto Tip eingeben ENDE = 0 "<<endl;
          cin>>zahla;
          LottoTip[i][j]=zahla;        
        }
        //wieso das Einrücken hier? Macht keinen Sinn...   
            for(int m=0;LottoSechser[m]!='\0';m++)
            {
              cout<<"Die Sechs Richtigen bitte eingeben"<<endl;
              cin>>zahlb;
              LottoSechser[m]=zahlb;
            }
    

    richtig:

    for(int i=0,j=0;zahla!=0;i++,j++)
        {
          cout<<"Bitte Lotto Tip eingeben ENDE = 0 "<<endl;
          cin>>zahla;
          LottoTip[i][j]=zahla;        
        }
    
        for(int m=0;LottoSechser[m]!='\0';m++)
        {
          cout<<"Die Sechs Richtigen bitte eingeben"<<endl;
          cin>>zahlb;
          LottoSechser[m]=zahlb;
        }
    


  • volkard schrieb:

    Es gibt zwei Haupt-Wege.
    Der üblicher fängt so an:

    int main()
    {
      int LottoTip[6];  
      int LottoSechser[6];
    

    und benötigt je eine Schleife für Tip-Lesen und Ziehung-Lesen und dann zwei verschachtelte Schleifen zum Zählen der Richtigen.

    Der andere fängt so an:

    int main()
    {
      int LottoTip[50];  
      int LottoSechser[50];
    

    und benötigt je eine Schleife für Tip-Lesen und Ziehung-Lesen und dann nur eine Schleifen zum Zählen der Richtigen.

    Danke sehr
    Fange ich das Beispiel nochmal bei Null an, dachte ich wäre am richtigen Weg,
    bei der Hitze fällt das nachdenken auch etwas schwer wir haben in Wien derzeit
    33 Grad im Schatten

    LG
    Markus



  • Ich bin zwar auch in Wien, aber in unserem Büro hat es angenehme 22 Grad 😃



  • Überprüfe mal deine eingabe:

    for(int i=0,j=0;zahla!=0;i++,j++)
        {
          cout<<"Bitte Lotto Tip eingeben ENDE = 0 "<<endl;
          cin>>zahla;
          LottoTip[i][j]=zahla;        
        }
    

    probleme dabei:
    - i ist immer j, d.h.z.b. in LottoTip[1][2] wird nie geschrieben.
    - wenn du vergisst 0 einzugeben übertritt man irgendwann die arraygrenzen

    2d-array brauchen dannn auch doppelschleifen:

    for(int i=0;zahla!=0&&i<50;i++)
        {
          cout<<"Bitte Lotto Tip eingeben ENDE = 0 "<<endl;
          for (int j=0;j<6;j++)
          {
          cin>>zahla;
          LottoTip[i][j]=zahla;        
          }
        }
    

    vielleicht gehts so besser (die eingabe zumindestens)


Anmelden zum Antworten