Anfänger; if - beding.& rücksprung+++



  • danke für die schnelle antwort moritz.

    3x3 brauche ich, weil 3 fragen mit 3 versch. antworten... wenn ich später eine grafik zu den abgegebenen antworten ausgeben will, soll er ja anzeigen, z.b.:

    frage1
    ja -------- 15%
    nein ------10%
    vllt --------------------------------- 75%

    bei 4000 abgebene stimmen

    frage2 ... etc.pp.

    ... reicht also z.b. "int auswert[8]" (also neun verschiedene werte) ?

    kann ich also auch den befehl setzen auswert[5]++, damit position 6 um 1 erhöht wird?

    - und wie würde ich die werte wieder auslesen können?

    gruss



  • Funk schrieb:

    ... reicht also z.b. "int auswert[8]" (also neun verschiedene werte) ?

    Das sind nur 8 Werte; wenn du 9 willst, mußt du auch neun verlangen.

    int auswert[9]
    

    reserviert 9 Elemente, die über die Indize 0 bis 8 ansprechbar sind.

    Funk schrieb:

    kann ich also auch den befehl setzen auswert[5]++, damit position 6 um 1 erhöht wird?

    Ja.

    Funk schrieb:

    und wie würde ich die werte wieder auslesen können?

    Wie meinst du das? Auslesen von wo?

    Moritz



  • also, ich habe nun folgende funktion:

    void umfrage0()
    {
    	int frage1[3]={0};
    	int frage2[3]={0};
    	int frage3[3]={0};
    	int antwort;
    
    	cout<<"------------------------------"<<endl; 
    	cout<<"Dies ist Umfrage Nr.0, von XXX"<<endl;
    	cout<<"------------------------------\n\n"<<endl;
    
    	cout<<"Frage1:...?\n\n"<<endl;
    	cout<<"(0)Ja  (1)Nein  (2)Vielleicht\n\n"<<endl;
    	cin>> antwort;
    
    	switch (antwort)
    	{
    
    		case 0: cout <<"Ja gespeichert\n\n"<<endl;
    		frage1[1]++;break;
    
    		case 1: cout <<"Nein gespeichert\n\n"<<endl;
    		frage1[2]++;break;
    
    		case 2: cout <<"Vielleicht gespeichert\n\n"<<endl;
    		frage1[3]++;break;
    
    		default: cout<<"Falsche Eingabe, bitte nochmal"<<endl;
    		break;
    	}
    
    	cout<<"Frage2:...?\n\n"<<endl;
    	cout<<"(0)Ja  (1)Nein  (2)Vielleicht\n\n"<<endl;
    	cin>> antwort;
    
    	switch (antwort)
    	{
    
    		case 0: cout <<"Ja gespeichert\n\n"<<endl;
    		frage2[1]++;break;
    
    		case 1: cout <<"Nein gespeichert\n\n"<<endl;
    		frage2[2]++;break;
    
    		case 2: cout <<"Vielleicht gespeichert\n\n"<<endl;
    		frage2[3]++;break;
    
    		default: cout<<"Falsche Eingabe, bitte nochmal"<<endl;
    		break;
    	}
    
    	cout<<"Frage3:...?\n\n"<<endl;
    	cout<<"(0)Ja  (1)Nein  (2)Vielleicht\n\n"<<endl;
    	cin>> antwort;
    
    	switch (antwort)
    	{
    
    		case 0: cout <<"Ja gespeichert\n\n"<<endl;
    		frage3[1]++;break;
    
    		case 1: cout <<"Nein gespeichert\n\n"<<endl;
    		frage3[2]++;break;
    
    		case 2: cout <<"Vielleicht gespeichert\n\n"<<endl;
    		frage3[3]++;break;
    
    		default: cout<<"Falsche Eingabe, bitte nochmal"<<endl;
    		break;
    	}
    
     getchar();
    
    }
    

    das soll nun noch mehrmals durch verschiedene benutzer durchlaufen werden können und die frage1-3 arrays sind dann ja gefüllt mit daten...
    - diese sollen in "5%-schritte"-balken grafisch dargestellt werden und dafür muss ich ja die arrays doch "auslesen".

    habe folgendes dazu gefunden/zugeschickt bekommen:

    for(i=0; I<= sizeof(array);i++)

    -einfach nur "int i; " und für array entsprechendes frage-array einsetzen?
    habs noch nicht ausprobiert, da ich den inhalt der for-schleife nicht ganz verstehe, also i=0 und i++... weiss nicht, was das dadrin zu suchen hat und wieso I<= sizeof ?
    geht auch einfach: for(sizeof(frage1)) { funktion } ?

    oh! - und wie ist das mit frage1[3]++ ? - muss es eigentlich frage1[2]++ sein, wenn ich den letzten indize erhöhen will?

    und noch eine frage: ich fände es gut, wenn die abgebenen stimmen gespeichert werden würden, bevor das programm endet, sodass nicht mit jedem programmstart bei null angefangen wird... geht das nur über datenbanken? weil ich nicht glaube, dass ich das bis zum 18.mai schaffen würde (muss auch nicht!), wäre aber schön.

    gruss und gn8 🙂



  • Kann erstmal nur kurz antworten (stress)!!!

    Also erstmal zu deinem code...bei einer fehleingabe wird nix wiederholt...

    for schleife:

    int array[10];
    for(int i=0;i<10;i++)
     {
     array[i]=i;
     }
    

    bedeutet, das die Schleife 10 mal durchläuft (von 0 bis 9)!
    array[i] bedeutet, das auf das Arrayelement zugegriffen wird, wo sich die schleife befindet (beim ersten durchlauf i=0, auf array[0], beim 2ten array[1]...somit kannst du auf die arrayelemente zugreifen...



  • cool - THX !!!

    warum schreiben die das in den tutorien nicht auch so?

    danke - gruss!



  • naja, liegt wohl daran weil schleifen ja für unendlich viele dinge verwendet werdem,und alles so zu erklären würde wohl den rahmen sprengen



  • hehe...

    habs wohl irgendwie falsch implementiert - lief nicht...

    habs nun so gemacht:

    switch (antwort)
    	{
    
    		case 0: cout <<"Statistik"<<endl;
    		cout <<"Auswertung Frage1\n"<<endl;
    		cout <<"Ja:        "<<	sizeof(frage1)/sizeof(frage1[0])<<"\n";
    		cout <<"Nein:      "<<	sizeof(frage1)/sizeof(frage1[1])<<"\n";
    	    cout <<"Vielleicht:"<<	sizeof(frage1)/sizeof(frage1[2])<<"\n";
    ...
    ...
    

    weisst du auch, wie ich ihm jetzt sage, dass er pro 5% der abgebenen stimmen ein "*" setzt, anstatt eine zahl zu schreiben?

    gruss

    edit: hhhmmmm... komisch - was ist denn nun falsch? die werte stimmen ja gar nicht, die ausgegeben werden... grml
    edit2:kommando zurück! - ich verstehe den fehler nun: ich lasse quasi nur die arraygrösse anzeigen, aber nicht die werte der indizes...aber wie komme ich denn doch noch zum ziel?



  • Funk schrieb:

    weisst du auch, wie ich ihm jetzt sage, dass er pro 5% der abgebenen stimmen ein "*" setzt, anstatt eine zahl zu schreiben?

    Prozentzahl durch 5 teilen und dann mit ner for-Schleife einen Stern pro durchlauf setzen.

    float stars = prozent / 5;
    for(int i = 0; i < stars; i++)
      cout << "*";
    

    so oder so ähnlich 😉



  • aha... mmmhhh...

    kann ich für i ich auch einen array-indize setzen?

    würds ja gerne ausprobieren, aber:
    das grössere problem ist noch, das die indizes nicht richtig ausgelesen werden...

    ist echt zum haare ausreissen 😞

    cout<<"Statistik/Auswertung anzeigen? (0)Ja  (1)Nein"<<endl,
     cin>>antwort;
    
    	switch (antwort)
    	{
    
    		case 0: cout <<"Statistik"<<endl;
    		cout <<"Auswertung Frage1\n"<<endl;
    		cout <<"Ja:        "<<	sizeof(frage1[0])<<"\n";
    		cout <<"Nein:      "<<	sizeof(frage1[1])<<"\n";
    	    cout <<"Vielleicht:"<<	sizeof(frage1[2])<<"\n";
    		/*cout <<"Auswertung Frage2\n"<<endl;
    		cout <<"Ja:        "<<	sizeof(frage2)/sizeof(frage2[0])<<"\n";
    		cout <<"Nein:      "<<	sizeof(frage2)/sizeof(frage2[1])<<"\n";
    	    cout <<"Vielleicht:"<<	sizeof(frage2)/sizeof(frage2[2])<<"\n";
    		cout <<"Auswertung Frage3\n"<<endl;
    		cout <<"Ja:        "<<	sizeof(frage3)/sizeof(frage3[0])<<"\n";
    		cout <<"Nein:      "<<	sizeof(frage3)/sizeof(frage3[1])<<"\n";
    	    cout <<"Vielleicht:"<<	sizeof(frage3)/sizeof(frage3[2])<<"\n";
    		*/	
    		break;
    
    		case 1: cout <<"Zurueck zum Hauptmenue"<<endl;
    		break;
    
    		default: cout<<"Falsche Eingabe, bitte nochmal"<<endl;
    		break;
    	}
    

    so teste ich gerade herum... 😡 ... 😉



  • hm...ich geb dir mal einen gut gemeinten rat, schau dir mal in nem Buch oder Tutorial bisschen was über arrays und schleifen an...



  • ja, bin die ganze zeit dabei... heut nacht bis um 4 und heute morgen seit 10 wieder... vielleicht fehlt mir einfach die begabung, weiss nicht...

    gruss



  • vielleicht solltest erstmal einfache sachen machen, und daran selber bisschen rumprobieren!



  • klingt gar nicht so verkehrt, also du meinst einfach nur eine kleine funktion mit array und testen? - gute idee 🙂

    und weiter gehts! 😉



  • ja, zum Beispiel ein programm, was die 2er reihe berechnet, und ausgibt..
    2...4....8...16....ist wunderschön mit einem array machbar!



  • Funk schrieb:

    würds ja gerne ausprobieren, aber:
    das grössere problem ist noch, das die indizes nicht richtig ausgelesen werden...

    Was erhälst du denn als Ausgabe?

    BTW: Es wäre logischer ein Array zu machen mit einer Stelle pro Frage und da dann den Wert 1, 2 oder 3 zu speicher, je nachdem ob "Ja", "Nein" oder "Vielleicht" eingegeben wurde.



  • the_alien schrieb:

    Was erhälst du denn als Ausgabe?

    jeweils für frage[0]-[2](ja , nein, vielleicht) den wert "4"
    - selbst wenn ich nur einmal antworte pro frage... z.b. sizeof(frage[0]) bekommt den wert "4"...warum auch immer...

    the_alien schrieb:

    BTW: Es wäre logischer ein Array zu machen mit einer Stelle pro Frage und da dann den Wert 1, 2 oder 3 zu speicher, je nachdem ob "Ja", "Nein" oder "Vielleicht" eingegeben wurde.

    oh mann... - stimmt !... *lach*...das probier ich mal aus, bevor ich mich an die grundprinzipien von arrays nochmal ranteste...

    edit: neee, probier ich doch nicht aus... -weil das ja öfter durchlaufen wird und dann ja überschrieben werden würde... aber ich könnte aufwand betreiben und definieren, dass gerade=ja, ungerade=nein, double=vllt oder so...hehe... ne danke 😉

    also manchmal sieht man echt den wald vor lauter bäumen nicht! und enorm, wieviel zeit dabei draufgeht !
    meine zeitplanung war in etwa (2x12h eigeneinschätzung x4, weil irgendwann mal gelernt, dass sich das potenziert...) wenn das so weitergeht verdoppelt sich das ganze nochmal... uff...



  • so hier mal ein einfaches beispiel, ohne schnickschnack, wo cih dir mal zeige wie man mit arrays "balken" machen kann!

    Geht sicher auch anders, aber ich finde das als anschauungsobjekt relatiuv gut

    int main(int argc, char* argv[])
    {
    int array[3]={0,0,0};        //array initialisieren
    int antwort;
    do
    {
    cin>>antwort;
    switch(antwort)
    {
    case 1: array[0]++;break;
    case 2: array[1]++;break;
    case 3: array[2]++;break;
    }
    }
    while(antwort!=4);         //schleife durchlaufen solange nicht 4 eingegeben wird
    int a=array[0];            //einer variable den inhalt der ersten arraypos zuweisen
    int b=array[1];
    int c=array[2];
    cout<<a<<endl;
    cout<<b<<endl;
    cout<<c<<endl;
    for(int i=0;i<a;i++)      //schleife solang durchlaufen,wie in a gespeichert
     cout<<"*";               //und jedes mal ein * malen =)
    cout<<endl;
    for(int i=0;i<b;i++)
     cout<<"*";
    cout<<endl;
    for(int i=0;i<c;i++)
     cout<<"*";
    
    getch();
            return 0;
    }
    

    weiß solangsam nicht mehr was dein problem ist 🙂



  • Funk schrieb:

    hehe...

    habs wohl irgendwie falsch implementiert - lief nicht...

    habs nun so gemacht:

    switch (antwort)
    	{
    		
    		case 0: cout <<"Statistik"<<endl;
    		cout <<"Auswertung Frage1\n"<<endl;
    		cout <<"Ja:        "<<	sizeof(frage1)/sizeof(frage1[0])<<"\n";
    		cout <<"Nein:      "<<	sizeof(frage1)/sizeof(frage1[1])<<"\n";
    	    cout <<"Vielleicht:"<<	sizeof(frage1)/sizeof(frage1[2])<<"\n";
    ...
    ...
    

    edit2:kommando zurück! - ich verstehe den fehler nun: ich lasse quasi nur die arraygrösse anzeigen, aber nicht die werte der indizes...aber wie komme ich denn doch noch zum ziel?

    😮 Nimm das sizeof da weg 😮
    Keine Ahnung was du ausrechnen willst, aber so gehts def. nicht.



  • the_alien schrieb:

    Keine Ahnung was du ausrechnen willst, aber so gehts def. nicht.

    ich weiß es langsam auch nicht mehr....



  • 5er1al schrieb:

    weiß solangsam nicht mehr was dein problem ist 🙂

    ja, vielen dank, mein problem ist einfach, dass wenn das ganze einmal durchlaufen ist, ich ja zurück zum anfang der funktion springe und die eingebeben werte dort durch int array[3]={0,0,0} wieder überschrieben werden...

    vielen dank, mit der balkenausgabe, aber wie gesagt, da bin ich noch gar nicht, weil entweder die werte überschrieben werden, oder ich initialisiere eben nicht mit ...{0,0,0} und es funktioniert nicht...-ist ja klar.

    es tut mir leid, wenn ich deine geduld so strapaziere.

    antworte doch am besten nicht so schnell 😉 😃 🤡

    fühl mich schon ganz klein 😢


Anmelden zum Antworten