Erster Versuch Mehrdimensionales Array
-
Kompilieren tut es, aber die Ausgabe stimmt noch nicht
bitte um Tips
lg
markus#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++; } } }
-
- Ordentlich Einrücken üben
- Nicht Abstände sparen
- std::vector nehmen
-
314159265358979 schrieb:
- Ordentlich Einrücken üben
- Nicht Abstände sparen
- std::vector nehmenmuss array lernen für eine Prüfung, aber danke für den Tip mit den Vectoren...
lg
-
314159265358979 schrieb:
- std::vector nehmen
Was soll der Quatsch?
-
volkard schrieb:
314159265358979 schrieb:
- std::vector nehmen
Was soll der Quatsch?
Was soll der Quatsch?
-
markuswenczel schrieb:
Kompilieren tut es, aber die Ausgabe stimmt noch nicht
bitte um TipsDu 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.
-
314159265358979 schrieb:
volkard schrieb:
314159265358979 schrieb:
- std::vector nehmen
Was soll der Quatsch?
Was soll der Quatsch?
vector ist hier nicht angemessen. Man kann über array<> nachdenken, kann es aber auch lassen. Nur vector paßt eben nicht. Die Funktionalität des Wachsens und Schrumpfens paßt nicht. Der Freispeicher paß nicht.
Begründe, warum Du vector empfiehlst.
-
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 TipsDu 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 SchattenLG
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 arraygrenzen2d-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)