Hilfe bei einfacher Übung
-
Guten Abend, in einer Woche muss ich mit einem einfachen Programm fertig werden, welches wir mit Code::Blocks programmieren. Leider habe ich vorher nie mit C programmiert und blicke somit noch nicht wirklich durch. Bisher haben wir im Unterricht nur kleinere Programme geschrieben, durch welche ich einige Befehle kenne.
Die Aufgabenstellung lautet folgendermaßen:
Erstellen Sie ein C-Programm, das den Benutzer zum Einlesen von mehreren Zahlen auffordert und feststellt, wieviel positive Zahlen und wieviele gerade Zahlen eingegeben wurden und die Summe der eingegebenen Zahlen ermittelt. Die Eingabe der Zahlen soll beendet werden wenn der Nutzer die Zahl 0 eingibt. Beispielhafte Programmausgabe: Zahl 1: 2 Zahl 2: 5 Zahl 3: -4 Zahl 5: -2 Zahl 6: 9 Zahl 7: 0 Anzahl der eingegebenen Zahlen: 6 Anzahl der positiven Zahlen: 3 Anzahl der negativen Zahlen: 2 Summe aller Zahlen: 10 Folgende Sprachelemente sollen Anwendung finden: if-Anweisung, for-Anweisung
Zuerst steht also im Programm "Zahl1:" da, daraufhin gebe ich eine Zahl ein, danach muss sich ein Zähler um 1 erhöhen, dann steht in in der nächsten Zeile "Zahl2:", wobei ich wieder zur Eingabe einer Zahl aufgefordert werde etc. Natürlich habe ich auch darauf geachtet, dass dabei immer alle postiven und negativen Zahlen durch if-Befehle gezählt werden und die Gesamtsumme auch berücksichtigt wird.
Ich habe mir gedacht, ich schreibe alles so auf. Zumindest weiß ich, was ich theoretisch machen muss, doch seht selbst... (Ich hoffe, meine Vorkenntnisse in Delphi haben mir dabei zumindest etwas geholfen, anstatt dass es 100%iger Schwachsinn ist
):
#include <stdio.h> #include <stdlib.h> int main() { int i, zahl, pz, nz, summe; printf("Geben Sie immer pro Zeile eine Zahl ein. Sie darf positiv oder negativ sein. Geben Sie die 0 ein, um alle Zahlen auszuwerten."); i==1; zahl==0; pz==0; nz==0; summe==0; for(i = 1; i>100; i++) {printf("Zahl %d :", i); scanf("%d",&zahl); summe+=zahl; if(zahl<0){nz++;} if(zahl>0){pz++;} if(zahl=0){printf("Anzahl der eigegebenen Zahlen:%d ", i); printf("Anzahl der positiven Zahlen: %d ", pz); printf("Anzahl der negativen Zahlen: %d ", nz); printf("Summe aller Zahlen: %d ", summe); i==101;}; };
Es wäre sehr nett, wenn mir jemand sagen könnte, was ich falsch gemacht habe. Beim Start des Programmes taucht nur mein Text "Geben Sie immer pro Zeile eine Zahl ein. Sie darf positiv oder negativ sein. Geben Sie die 0 ein, um alle Zahlen auszuwerten." auf. Dann taucht leider nichts mehr auf und kann nur noch auf eine Taste drücken, damit sich das Programm schließt.
Vielen Dank im Voraus!
-
Mit deinen Vorkenntnissen in Delphi scheint's auch nicht sehr weit zu sein.
Aber fangen wir seicht an:
i==1; zahl==0; pz==0; nz==0; summe==0;
OK, da weißt du einfach nicht, dass man Zuweisung in C durch "=" macht, und Vergleiche durch "==". Kann man verzeihen, ist nicht schlimm.
Dann:
int main()
Auch nicht schlimm, weil es ständig Leute gibt, die C++ mit C verwechseln. Das sollte aber eigentlich
int main(void)
sein, wenn man keine Parameter haben will. Auch nicht schlimm.
Aber jetzt geht's los:
for(i = 1; i>100; i++) {printf("Zahl %d :", i); scanf("%d",&zahl); summe+=zahl; if(zahl<0){nz++;} if(zahl>0){pz++;} if(zahl=0){printf("Anzahl der eigegebenen Zahlen:%d ", i); printf("Anzahl der positiven Zahlen: %d ", pz); printf("Anzahl der negativen Zahlen: %d ", nz); printf("Summe aller Zahlen: %d ", summe); i==101;}; };
Sag mal, geht's noch? Nach welchen Regeln machst du denn deine Einrückungen? Oder lernt man bei euch, dass man Code eh nicht noch mal lesen muss?
for(i = 1;i > 100;i++) { printf("Zahl %d :", i); scanf("%d",&zahl); summe += zahl; if(zahl<0){nz++;} if(zahl>0){pz++;} if(zahl=0) { printf("Anzahl der eigegebenen Zahlen:%d ", i); printf("Anzahl der positiven Zahlen: %d ", pz); printf("Anzahl der negativen Zahlen: %d ", nz); printf("Summe aller Zahlen: %d ", summe); i==101; } }
So, jetzt ist das schon mal lesbarer. Aber dann sieht man doch direkt, dass du mit einem Ohr zugehört hast:
for(i = 1;i > 100;i++)
- also HIER machst du dann eine ordentliche Zuweisung. Aber das mit der Prüfung hast du verwechselt - du willst die Schleife so lange durchführen, wiei
KLEINER 100 ist.Wo wir schonmal dabei sind - mach doch einfach:
for(code) { /*cooooooooooooooode*/ if(zahl == 0) break; } printf("Anzahl der eigegebenen Zahlen:%d ", i); printf("Anzahl der positiven Zahlen: %d ", pz); printf("Anzahl der negativen Zahlen: %d ", nz); printf("Summe aller Zahlen: %d ", summe);
So kriegst du auch dann eine Ausgabe, wenn der Nutzer tatsächlich 100 Eingaben gemacht hat.
-
deine aufgabe war jetzt
- eine for-schleife zu entwickeln, die beendet wird, sobald eine 0 eingegeben wird. eine möglichkeit dazu wäre, es einfach oben im kopf der for-schleife abzufragen.
- eine if-verzweigung zu entwickeln, die abhängig davon, ob die eingabe positiv oder negativ war, eine bestimmte summe berechnet.
- die gesamtsumme zu berechnen
- alles auszugebendas hast du alles nicht vernünftig gemacht. guck dir diese sprachelemente nochmal an.
-
Eine kleine Ergänzung noch wie man "if" und was dazu gehört, benutzen kann:
int main(void) { for (;;) { // Leere For-Schleife (Dauerschleife) // Anfrage bitte Zahl eingeben // Wert einlesen, aber auf X, hier 5, Zeichen begrenzen ( scanf("%5d\n", &intZahl); ) // Ausgabe welche Zahl wurde eingegeben if (bedingung1) { // bedingung1 trifft zu // Was erhoehen } else if (bedingung2) { // bedingung2 trifft zu // Das andere erhoehen } else { //beides trifft nicht zu, was sollte hier zur Auswahl "uebrig" bleiben? break; // Beendet die for schleife } // Zur Summe addieren... // ...nachdem Bedingung1 oder Bedingung2 gegriffen haben, // der Fall "else" beendet die Schleife, also berechenen wir dann auch nicht // mehr. Greifen Bedingung 1 oder 2 wird die Berechnung zur Summe durchgefuehrt } // Ausgabe der Werte return 0; // Normale Beendigung des Programms }
Vielleicht hilft es dir ja noch...