Hilfe bei Programm
-
Guten Tag,
ich hoffe, ich poste hier richtig, da ich neu hier bin. Ich bin seit 2 Wochen dabei, C++ zu lernen und dachte mir, dass ich einfach mal ausprobiere, was ich denn so kann und zudem mal ein einigermaßen sinnvolles Programm programmieren wollte ^^
Nun, den Code findet ihr unten, aber nun meine eigentlichen Probleme:
1. Und natürlich am schlimmsten, dass Programm wird aufgrund einiger Fehler nicht kompiliert, wobei mein Compiler (Dev-C++) meint, die Fehler wären in den Zeilen 22, 23, 49 und 55 zu suchen, wobei ich nicht verstehe, was daran falsch ist...
2. Ist es möglich den Durchschnitt (durch) auf eine Kommastelle zu runden?
3. Wie werde ich das goto los, ich habe gehört goto wäre nicht hochgradig schönes c++ ^^
4. Sonst noch irgendwelche Hinweise von jmd. hier ?Danke im Voraus,
achja, wenn ihr keine Lust habt, einem Anfänger zu helfen, dann behaltet das einfach für euch ^^Have a nice day,
sargonnas// Programm zur Ermittlung eines Notendurchschnitts #include <cstdlib> #include <cstdio> #include <iostream> using namespace std; int main(int n, char* c[]) { char ch; int i = 1; int summe; int u; float durch; int Noten[20]; cout << "Willkommen im Notendurchschnittsrechner !" << endl; for(;;) { //Eingabe der Noten cout << "Geben Sie die " << i <<". Note an !"; cin >> Noten[i]; if(Noten[i] < 0 && Noten[i] > 6) { cout << "Ungültige Eingabe" ; i--; } i++; do { cout << "Zum Beenden der Eingabe druecken Sie e fuer die naechste Eingabe druecken Sie a (bitte Kleinschreiben !)"; cin >> ch; } while(ch != 'e' && ch !='a'); if(ch == 'e') { break; } if (i == 20) { cout << "Maximale Anzahl an Noten erreicht"; break; } } //Addition for(u = 1; u != i; u++) { summe = summe + Noten[u]; } durch = summe / i; cout << durch; // Auf eine Kommastelle runden?? system("PAUSE"); return 0; }
-
int* Noten[20];ich denke du willst ein array von int und nicht int pointern, dann sollten die fehler weiter unten auch weg sein
for(u = 1 , u != i, u++)strichpunkte
anstatt ne forschleife mit break zu beenden kannst du ne do while schleife nehmen, die bedinging da rein machen und das if mit goto weg lassen.
-
"goto" wirst du mit Schleifen los, "Wiederho(h)lte Ausführung"
Formatierte Ausgabe ist mit: "setprecision" möglich, musste mal bei google glubschen...
Poste doch mal die genaue Fehlermeldung! (Rechtsklick-Kopieren)
-
@Büchershop vielen Dank, war auch n bissl doof von mir ^^
auch das mit dem do-whie hab ich reingenommen, nur hier hab ich dann ne neue Frage:
Gibt es eine Möglichkeit in do-while, eine Ausgabe erst in der ersten Wiederholung (also dem 2. Durchlauf) anzuzeigen, sodass ich dort mein "Ungültige Eingabe" loswerden kann?Außerdem funktioniert die Ausgabe leider nicht

-
Mein Beitrag:
#include <iostream> using namespace std; int main() { int summe = 27, i = 20, durch; durch = (summe*10) / i; cout << durch/10 << "," << durch%10 << endl; // Auf eine Kommastelle runden! Ausgabe: 1,3! }
-
Und wirklich sehr schön klein...
-
Was du da tust, was du da verdammt nocheinmal tust, sargonnas...
ist weder Fisch noch Fleisch, nicht C, noch C++.
Beginnen wir unsere Kritik mit der Auswahl der Mittel:
sargonnas schrieb:
#include <cstdlib> #include <cstdio> #include <iostream>In C++ ist der gebrauch von Streams für den I/O üblich. Wozu die cstdlib!?
üner einen kurzen Blick auf deine Tippfaulheit:
sargonnas schrieb:
using namespace std;am Eintrittspunkt:
sargonnas schrieb:
int main(int n, char *c[]) {Wozu Parameter übernehmen, die man nicht benötigt? (... und ihnen dazu noch vielsagende nahmen zu geben!)
es folgt eine zensurbedürftige
sargonnas schrieb:
/* Declaration Orgy (tm) */die man in C99 schon nicht mehr haben muss, geschweige denn, in C++.
Der Rest ist zu kompliziert gedacht.
-
Hab's mal etwas zurechtgebogen.
Mein Vorschlag:#include <cstdlib> #include <cstdio> #include <iostream> using namespace std; int main(int n, char* c[]) { //char ch; int i = 1; int summe = 0;//<< //int u; int durch; //int an Stelle von float, wir bekommen das mit int gebacken int Noten[21]; // << wir beginnen mit 1 d.h. Noten[0] bleibt frei cout << "Willkommen im Notendurchschnittsrechner !" << endl; for(; i <= 20; i++) { //Eingabe der Noten cout << "Geben Sie die " << i <<". Note an !"; cin >> Noten[i]; if(Noten[i] < '0' && Noten[i] > '6')//<< { cout << "Ungültige Eingabe" ; i--; continue; } /* Diesen Code würde ich komplett rausschmeißen, er bringt nichts. do { cout << "Zum Beenden der Eingabe druecken Sie e fuer die naechste Eingabe druecken Sie a (bitte Kleinschreiben !)"; cin >> ch; } while(ch != 'e' && ch !='a')// wenn schon, dann if(ch == 'e') { break; } */ if (i == 20) { cout << "Maximale Anzahl an Noten erreicht" << endl; //break; Schleife wird automatisch beendet //siehe Bedingung im Schleifenkopf } } //Addition for(int u = 1; u < i; u++) //<< { summe = summe + Noten[u]; } durch = (summe*10) / (i-1); cout << "Durchschnitt = " << durch/10 << "," << durch%10 << endl; // Auf eine Kommastelle runden! Ausgabe: 1,3! system("PAUSE"); return 0; }

-
oh mann
if(Noten[i] < '0' || Noten[i] > '6')//<< muss logisch oder sein
-
if(Noten[i] < '1' || Noten[i] > '6')//<<die Note 0 gibts ja wohl auch nicht.

-
Die Hochkomma müssen weg, hattest du richtig.
if (Noten[i] < 1 || Noten[i] > 6)//<< { cout << "Ungültige Eingabe" << endl; i--; continue; }
-
kenner der dummköpfe schrieb:
Was du da tust, was du da verdammt nocheinmal tust, sargonnas...
ist weder Fisch noch Fleisch, nicht C, noch C++.
Beginnen wir unsere Kritik mit der Auswahl der Mittel:
sargonnas schrieb:
#include <cstdlib> #include <cstdio> #include <iostream>In C++ ist der Gebrauch von Streams für den I/O üblich. Wozu die cstdlib!?
üner einen kurzen Blick auf deine Tippfaulheit:
sargonnas schrieb:
using namespace std;am Eintrittspunkt:
sargonnas schrieb:
int main(int n, char *c[]) {Wozu Parameter übernehmen, die man nicht benötigt? (... und ihnen dazu noch vielsagende nahmen zu geben!)
es folgt eine zensurbedürftige
sargonnas schrieb:
/* Declaration Orgy (tm) */die man in C99 schon nicht mehr haben muss, geschweige denn, in C++.
Der Rest ist zu kompliziert gedacht.
wie schon gesagt, ich programmiere erst seit 2 Wochen,
zu den Includedateien: Mein tolles Buch (C++ für Dummies) sagt, man braucht die oft und soll die praktisch immer nehmen und da hab ich das halt gemacht, genauso
werden die Startparameter im Buch immer übernommen (wenn auch mit besseren Namen, das stimmt ^^)
Das mit der Declaration Orgy stimmt...@egon thx, aber wenn du oben
int u;rausnimmst darfst du u als variable auch net benutzen, aber ansonsten ist das wohl deutlich besser als meins

€dit: Das mit der Abfrage "Wann ist schluss?" ist durchaus sinnvoll, sonst muss man ya 20 Noten einfügen,
allerdings ist es auch Mist, wenn die Abfrage jedes mal aufs neue erscheint...