C Gesamtsumme & Durchschnitt mit while schleife programmieren, wie?

Status
Für weitere Antworten geschlossen.

Jinjay95

Cadet 2nd Year
Registriert
Jan. 2015
Beiträge
20
Hallo

Momentan stecke ich etwas beim Programmieren fest, wir haben eine "Spaß Aufgabe" bekommen die wir machen können wenn wir daran interessiert sind und da ich sehr an Programmierung interessiert bin habe ich diese kleine "Herausforderung" angenommen.

Jedoch habe ich entweder gerade eine Denkblockade oder ich weiß einfach nicht mehr weiter.

Unten steht der Aufgabentext als Bilddatei.

Code:
#include <stdio.h>
#include <stdlib.h>

main()
{
	
	system("CLS");
	float zahl, gesamt, anzahl, dschnitt;
	
while(zahl!=0){
	printf("Dieses Programm berechnet den Durchschnitt, geben Sie Zahlen ein:\n");
	printf("\tIhre Zahl = \n");
	scanf("%f", &zahl);
	

	gesamt = zahl * anzahl;
	printf("Der Durchschnitt von ihnen beträgt: %f\n", dschnitt = gesamt / anzahl);
}
	
	
	
	
	
system("pause");
return

so sieht momentan mein Quellcode aus, ich habe schon vieles probiert aber ich bekomme es einfach nicht hin.
Man muss noch sagen dass ich erst seit einem halben Jahr programmiere und das leider eher momentan im Schneckentempo voran geht.

Ich habe einfach momentan ein Problem dass der "Anweder" mehrere Zahlen einlesen soll, so viele wie er möchte und dann soll ja der Durchschnitt davon berechnet werden, ich weiß nicht wie ich da vorgehen sollte..


Ich hoffe auf ein wenig Unterstützung,

Liebe Grüße Unbenannt.png
 
Du legst die Variable zahl an, initialisierst sie aber nicht. Das kann in der while-Schleife zu Problemen führen.
Zudem fehlt dir eine Ausgabe für Anzahl und dein Gesamt wird falsch berechnet, wenn ich die Aufgabe richtig verstanden habe.
 
Du hast Logikprobleme:

Du liest eine Zahl ein. Die willst du auf Gesamt aufaddieren, also brauchst du

gesamt+=zahl

du siehst richtig, dass du die Anzahl der Zahlen zählst. Also vor der Schleife anzahl=0 setzten
und in der schleife nach jedem einlesen anzahl++ machen, damit du richtig zählst.
dann klappt das auch mit dem Durchschnitt.

LG
 
Ich denke eher es liegt daran dass, das Programm nicht die ganzen Zahlen die man im "scanf" eingibt summiert sondern man hat eigentlich nur die Möglichkeit eine Zahl einzugeben, ich habe schon meine Vorstellung wie das Programm funktionieren könnte aber ich weiß nicht wie der Anwender beliebig viele Zahlen eingeben kann und sobald man auf "return" drückt die Gesamtanzahl und der Durchschnitt berechnet wird.
 
Warum liest Du Dich nicht, wie jeder andere normale Mensch, erst mal richtig ein. :rolleyes: Sonst lernst Du weder programmieren geschweige den Probleme zu lösen.

Tipp, es ist immer hilfreich am Anfang, das Programm am Anfang auf dem Papier schrittweise durchzurechnen. Dann wirst Du schnell erkennen, woran das liegt.

Das Stichwort heißt Zwischensumme. 😉
 
Zuletzt bearbeitet:
Du gibst eine Zahl ein, dann wird alles Berechnet und ausgegeben, soweit ist doch alles wie in der Aufgabe vorgegeben.
Im nächsten Schritt passiert wieder genau das gleiche, solange bis du eine 0 eingibst.
 
Es gibt da so was wie \0, was Ende der Eingabe sein sollte. Stichwort EOF. Erst einmal sehe ich gerade, was der erste Antwortende meinte - zahl ist nicht initialisiert, und damit kannst du nicht in der while-schleife zahl!=0 abprüfen. Setzte Zahl erst einmal auf einen Wert. Und prüfe in der Schleife einfach while(zahl!=\0) oder so ähnlich. Und wenn du dann noch die Durchschnittsberechnung hinter die SChleife stellst, dann kommt dann der Durchschnitt, wenn die Whileschleife, also die Eingabe, fertig ist.

Und um es noch einmal zu betonen. Ich bin mir nicht sicher, ob ich das mit \0 richtig geschrieben habe, aber das überlasse ich dir dann zu googln. In der Richtung sollte es aber gehen.

LG

PS: Man muss while(zahl!='\0') schreibe, wenn ich es richtig sehe.
 
Zuletzt bearbeitet: (Ergänzung)
Also die Antwort von Modin hat mir auf jeden Fall schonmal weiter geholfen.

Code:
#include <stdio.h>
#include <stdlib.h>

main()
{
	
	system("CLS");
	float zahl, gesamt, dschnitt;
	float anzahl = 0;
	

	printf("Dieses Programm berechnet den Durchschnitt, geben Sie Zahlen ein:\n");
	while(zahl!=0){
	printf("\tIhre Zahl = ");
	scanf("%f", &zahl, anzahl++);
	gesamt+=zahl;
	
}

	printf("Der Durchschnitt von ihnen betraegt: %f\n", dschnitt = gesamt / anzahl);

	
	
	
	
	
system("pause");
return 0;
}

So sieht jetzt mein Quellcode aus, die ganzen Zahlen werden addiert, jedoch liegt wie man auf dem Bild sehen kann noch ein Problem mit der Rechnung vor...

Unbenannt.png
 
1. Wie Modin schon sagt, Zeile 16 muss sein:
gesamt += zahl;
2. Hinter Zeile 16 einfügen:
anzahl++;
(Du musst ja mitzählen wie viele zahlen eingegeben wurden, aber dann bitte anzahl als "int anzahl = 0;" initialisieren, in der berechnung von dschnitt kannst du es ja per narrow cast wieder zu float konvertieren)
3. Der Benutzer kann natürlich nur eine Zahl auf einmal eingeben, aber das ist ja nicht schlimm, du berechnest halt nach jeder Zahl den Durchschnitt, falls ich das nicht überlesen habe, ist ja nichts anderes gefordert?
4. Zeile 10 & 11 tauschen ;)
 
Du hast vier Zahlen eingegeben mit Summe=15, was als Durchschnitt 15/4=3.75 ergibt. Also ist das richtig. Wenn du die Null, die du als Abbruch nutzt, nicht mitzählen willst, initialisierst du anzahl nicht mit Null sonder mit -1. Dann zählst du einen, also die Null, weniger. Et voilà.

LG
 
Modin666 schrieb:
Du hast vier Zahlen eingegeben mit Summe=15, was als Durchschnitt 15/4=3.75 ergibt. Also ist das richtig. Wenn du die Null, die du als Abbruch nutzt, nicht mitzählen willst, initialisierst du anzahl nicht mit Null sonder mit -1. Dann zählst du einen, also die Null, weniger. Et voilà.

LG

Jaa es hat geklappt, vielen Dank @ Modin :)

Jedoch verunsichert mich bis jetzt eine Sache und zwar haben wir das in dieser Art noch nie gelernt bzw. beigebracht bekommen, ich denke nicht dass der Lehrer das in der Art von uns verlangt hätte, wahrscheinlich eher auf einen anderen Weg aber das ist nicht schlimm.

Er meinte sowieso egal wie das Programm strukturiert ist vom Code her, Hauptsache es macht das was es soll.
 
Immer doch. In der Informatik führen viele Wege nach Rom. Nur weil du einen noch nicht kennst, heißt es nicht, dass er falsch ist.

Aber dein Lehrer ist ein wenig übermütig. Nicht alles, was geht, sollte man auch so machen. Zum Beispiel finde ich das anzahl++ im scanf gruselig. Ich würde das in die nächste Zeile schreiben. Aber so habe ich noch was neues gesehen, was auch funktioniert.

LG und viel Erfolg im ABI (wenn ich deinem Namen folgend dich richtig einschätze)
 
in deinem eingangspost war der ablauf noch richtig, in deinem zweiten code post falsch.

laut aufgabe soll das programm die zahl einlesen und gleich im anschluss anzahl, gesamtsumme und durchschnitt ausgeben.
solange bis eine 0 eingegeben wird.

und nicht die berechnung nur nach eingabe der 0.

der code ist tatsächlich egal (es gibt millionen lösungen), solange die anforderungen genauestens erfüllt werden.
 
Sry, hatte die Aufgabe nicht gelesen, sonder nur die Posts. Dann einfach die printfs wieder in die Schleife rein. Und eine Abschluss-Printf-Ausgabe hinter die Schleife.
 
Bitte mach deine Hausaufgaben alleine, wir sind kein Schülerhilfe-Forum.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben