Anfänger; if - beding.& rücksprung+++
-
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
-
Nimm dir nen Stück papier und überleg nochmal genau was du machen willst und dann überleg dir Klassen und oder Funktionen dafür. Falls du mit dem Begriff nichts anfangen kannst solltest du nochmal ein Buch deiner Wahl zur Hand nehmen
-
the_alien schrieb:
Nimm dir nen Stück papier und überleg nochmal genau was du machen willst und dann überleg dir Klassen und oder Funktionen dafür. Falls du mit dem Begriff nichts anfangen kannst solltest du nochmal ein Buch deiner Wahl zur Hand nehmen
ahhhh ich glaube nciht das er schon so weit ist....
@ Funk, zeig einfach mal deinen bisherigen code (bitte gut fomatiert und mit nen paar schönen kommentaren)
-
Nicht?
Als wir in der Schule Pascal gelernt haben, war mit das erste was wir gelernt haben, wie man oft benötigtes in funktionen auslagert.
-
the_alien schrieb:
Nicht?
Als wir in der Schule Pascal gelernt haben, war mit das erste was wir gelernt haben, wie man oft benötigtes in funktionen auslagert.oops sorry, habe nur bis klassen gelesen....
Hast natürlich recht, funktionen klar
-
... danke für die blumen...
grundsätzlich lese und lese und lese ich ja die ganze zeit; vllt mach ich mir auch zuviel stress dabei...
#include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; void umfrage0(); //void umfrage1(); //erstmal weggelassen, um anhand einer umfrage zum ziel zu kommen //void umfrage2(); //void umfrage3(); int main(int argc, char* argv[]) { int eingabe; cout <<"*************\n"; cout <<"** Umfrage **\n"; cout <<"*************\n\n\n\n"; cout <<"--------------------------------------------------------------------\n"; cout <<"Waehlen Sie eine Person aus, an deren Umfrage Sie teilnehmen wollen:\n"; cout <<"--------------------------------------------------------------------\n\n"; cout <<"-------------------------------------------------------\n"; cout <<"Von folgenden Personen stehen Umfragen zur Verfuegung: \n\n (0) Ich\n\n"; //(1) Du\n\n (2) Er\n\n (3) Sie cout <<"waehlen Sie durch druecken der entsprechenden Nummer...\n"; cout <<"-------------------------------------------------------\n\n"; do { cout <<"Ihre Eingabe:", cin >>eingabe; switch (eingabe) { case 0: cout<<"Umfrage Null, ok\n"<<endl; //hier das menue um nachher auf versch. umfragen zu gelangen umfrage0(); break; //case 1: cout<<"Umfrage Eins, ok\n"<<endl; //umfrage1(); //break; //case 2: cout<<"Umfrage Zwei, ok\n"<<endl; //umfrage2(); //break; //case 3: cout<<"Umfrage Drei, ok\n"<<endl; //umfrage3(); //break; default: cout<<"Falsche Eingabe, bitte nochmal"<<endl; break; } } while(eingabe<0 || eingabe>3); return 0; } void umfrage0() // die erste umfrage { int frage1[3]={0}; //wenn mit "0" initialisiert, dann werden abgegebene stimmen überschrieben => nicht gut !!! int frage2[3]; // so gehts natürlich auch nicht :( int frage3[3]={0}; int antwort; //antworten zu frage1 int aja=frage1[0]; //erstmal so benannt, um zwischen den ja's nein's etc. der versch. fragen unterscheiden zu können int anein=frage1[1]; int avielleicht=frage1[2]; //antworten zu frage2 int bja=frage2[0]; int bnein=frage2[1]; int bvielleicht=frage2[2]; //antworten zu frage3 int cja=frage3[0]; int cnein=frage3[1]; int cvielleicht=frage3[2]; cout<<"------------------------------"<<endl; cout<<"Dies ist Umfrage Nr.0, von XXX"<<endl; cout<<"------------------------------\n\n"<<endl; //frage 1 cout<<"Frage1:...?\n\n"<<endl; cout<<"(0)Ja (1)Nein (2)Vielleicht\n\n"<<endl; cin>> antwort; switch (antwort) // antworten für frage 1 { case 0: cout <<"Ja gespeichert\n\n"<<endl; frage1[0]++;break; // frage 1 , stelle 0 um eins erhöhen case 1: cout <<"Nein gespeichert\n\n"<<endl; frage1[1]++;break; case 2: cout <<"Vielleicht gespeichert\n\n"<<endl; frage1[2]++;break; default: cout<<"Falsche Eingabe, bitte nochmal"<<endl; break; } //frage 2 cout<<"Frage2:...?\n\n"<<endl; cout<<"(0)Ja (1)Nein (2)Vielleicht\n\n"<<endl; cin>> antwort; switch (antwort) //antworten für frage 2 { case 0: cout <<"Ja gespeichert\n\n"<<endl; frage2[0]++;break; case 1: cout <<"Nein gespeichert\n\n"<<endl; frage2[1]++;break; case 2: cout <<"Vielleicht gespeichert\n\n"<<endl; frage2[2]++;break; default: cout<<"Falsche Eingabe, bitte nochmal"<<endl; break; } //frage 3 cout<<"Frage3:...?\n\n"<<endl; cout<<"(0)Ja (1)Nein (2)Vielleicht\n\n"<<endl; cin>> antwort; switch (antwort) //antworten für frage 3 { case 0: cout <<"Ja gespeichert\n\n"<<endl; frage3[0]++;break; case 1: cout <<"Nein gespeichert\n\n"<<endl; frage3[1]++;break; case 2: cout <<"Vielleicht gespeichert\n\n"<<endl; frage3[2]++;break; default: cout<<"Falsche Eingabe, bitte nochmal"<<endl; break; } // auch aufgaben-stellung: es soll noch jemand seine stimmen abgeben können cout<<"Eine weitere Person teilnehmen? (0)Ja (1)Nein"<<endl, cin>>antwort; switch (antwort) // umfrage nochmal? (z.b. durch eine andere person - ist aufgabenstellung) { case 0: cout <<"Beginn der Umfrage"<<endl; umfrage0(); // hier wird wieder zum anfang gesprungen und damit leider auch bestehende werte überschrieben break; case 1: cout <<"Ende der Umfrage"<<endl; break; default: cout<<"Falsche Eingabe, bitte nochmal"<<endl; break; } // zur auswertung - funktioniert soweit, aber leider eben immer nur für die letzte person // es sollen aber ALLE abgegebenen stimmen angezeigt werden cout<<"Statistik/Auswertung anzeigen? (0)Ja (1)Zurueck zum Hauptmenue"<<endl; cin>>antwort; switch (antwort) { case 0: cout <<"Statistik"<<endl; //frage 1 cout <<"Auswertung Frage1\n"<<endl; cout <<"Ja: "<<aja<<endl; cout <<"Nein: "<<anein<<endl; cout <<"Vielleicht:"<<avielleicht<<endl; //frage 2 cout <<"Auswertung Frage2\n"<<endl; cout <<"Ja: "<<bja<<endl; cout <<"Nein: "<<bnein<<endl; cout <<"Vielleicht:"<<bvielleicht<<endl; //frage 3 cout <<"Auswertung Frage3\n"<<endl; cout <<"Ja: "<<cja<<endl; cout <<"Nein: "<<cnein<<endl; cout <<"Vielleicht:"<<cvielleicht<<endl; break; case 1: cout <<"Zurueck zum Hauptmenue"<<endl; break; default: cout<<"Falsche Eingabe, bitte nochmal"<<endl; break; } getchar(); }
... hmmmm... ist das so in ordnung dokumentiert?
die wichtigsten stellen sind diese hier:
int frage1[3]={0}; //wenn mit "0" initialisiert, dann werden abgegebene stimmen überschrieben => nicht gut !!! int frage2[3]; // so gehts natürlich auch nicht :( int frage3[3]={0}; ... ... ... umfrage0(); // hier wird wieder zum anfang gesprungen und damit leider auch bestehende werte überschrieben
weiss gar nicht, wie ich eure hilfe wieder gut machen kann !
-
#include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; int frage1[3]={0,0,0}; //global, damit du deine Werte nicht immer überschreibst int frage2[3]={0,0,0}; int frage3[3]={0,0,0}; void umfrage0(); int frage(string fragestellung); //void umfrage1(); //erstmal weggelassen, um anhand einer umfrage zum ziel zu kommen //void umfrage2(); //void umfrage3(); int main(int argc, char* argv[]) { int eingabe; cout <<"*************\n"; cout <<"** Umfrage **\n"; cout <<"*************\n\n\n\n"; cout <<"--------------------------------------------------------------------\n"; cout <<"Waehlen Sie eine Person aus, an deren Umfrage Sie teilnehmen wollen:\n"; cout <<"--------------------------------------------------------------------\n\n"; cout <<"-------------------------------------------------------\n"; cout <<"Von folgenden Personen stehen Umfragen zur Verfuegung: \n\n (0) Ich\n\n"; //(1) Du\n\n (2) Er\n\n (3) Sie cout <<"waehlen Sie durch druecken der entsprechenden Nummer...\n"; cout <<"-------------------------------------------------------\n\n"; do { cout <<"Ihre Eingabe:", cin >>eingabe; switch (eingabe) { case 0: cout<<"Umfrage Null, ok\n"<<endl; //hier das menue um nachher auf versch. umfragen zu gelangen umfrage0(); break; //case 1: cout<<"Umfrage Eins, ok\n"<<endl; //umfrage1(); //break; //case 2: cout<<"Umfrage Zwei, ok\n"<<endl; //umfrage2(); //break; //case 3: cout<<"Umfrage Drei, ok\n"<<endl; //umfrage3(); //break; default: cout<<"Falsche Eingabe, bitte nochmal"<<endl; break; } } while(eingabe<0 || eingabe>3); return 0; } int frage(string fragestellung){ int antwort; cout<< fragestellung << "\n\n"<<endl; cout<<"(0)Ja (1)Nein (2)Vielleicht\n\n"<<endl; do{ cin>> antwort; }while(antwort < 0 && antwort >2); switch (antwort){ case 0: cout <<"Ja gespeichert\n\n"<<endl; break; case 1: cout <<"Nein gespeichert\n\n"<<endl; break; case 2: cout <<"Vielleicht gespeichert\n\n"<<endl; break; } return antwort; } void umfrage0() // die erste umfrage { int antwort; cout<<"------------------------------"<<endl; cout<<"Dies ist Umfrage Nr.0, von XXX"<<endl; cout<<"------------------------------\n\n"<<endl; //frage 1 antwort = frage("Frage1:...?"); frage1[antwort]++; //frage 2 antwort = frage("Frage2:...?"); frage1[antwort]++; //frage 3 antwort = frage("Frage3:...?"); frage1[antwort]++; } void statistik(){ cout<<"Statistik/Auswertung anzeigen? (0)Ja (1)Zurueck zum Hauptmenue"<<endl; cin>>antwort; switch (antwort) { case 0: cout <<"Statistik"<<endl; //frage 1 cout <<"Auswertung Frage1\n"<<endl; cout <<"Ja: "<<frage1[0]<<endl; cout <<"Nein: "<<frage1[1]<<endl; cout <<"Vielleicht:"<<frage1[2]<<endl; //frage 2 cout <<"Auswertung Frage2\n"<<endl; cout <<"Ja: "<<frage2[0]<<endl; cout <<"Nein: "<<frage2[1]<<endl; cout <<"Vielleicht:"<<frage2[2]<<endl; //frage 3 cout <<"Auswertung Frage3\n"<<endl; cout <<"Ja: "<<frage3[0]<<endl; cout <<"Nein: "<<frage3[1]<<endl; cout <<"Vielleicht:"<<frage3[2]<<endl; break; case 1: cout <<"Zurueck zum Hauptmenue"<<endl; break; default: cout<<"Falsche Eingabe, bitte nochmal"<<endl; break; } getchar(); }
Ohne Gewähr auf Vollständigkeit
-
ich würde auf global verzcihten und das array an funktion übergeben!
so ein Beispiel mal noch:
Mach doch array in main, und lass es einfach deine Funktionen verändern:
void Func1(int *a) //hier bekommt funktion dein array { a[0]++; a[1]++; //hier macht es was mit array(funktion musst dann eben anpassen) a[2]++; } int main(int argc, char* argv[]) { int zahl[3]={0,0,0}; //dein array int eingabe=1; do { cin>>eingabe; switch(eingabe) { case 1: Func1(zahl);break; //funktionsaufruf } } while(eingabe!=0); int a=zahl[0]; int b=zahl[1]; int c=zahl[2]; for(int i=0;i<a;i++) //ausgabe der sternchenbalken cout<<"*"; cout<<endl; for(int i=0;i<b;i++) cout<<"*"; cout<<endl; for(int i=0;i<c;i++) cout<<"*"; getch(); return 0; }
so und da hast dann deine werte so wie du sie willst, da wird dann nix mehr zurückgesetzt!