Ich habe ein kleines C-Programm geschrieben.
Es fragt nach einer Anzahl, anschließend kann man die Werte eingeben und bekommt die Summe und den Mittelwert dargestellt.
#include<stdio.h>
main()
{
int x, anzahl;
float zahl, summe=0, mittel=0;
printf("\nWieviele Werte? \n");
scanf("%i",&anzahl);
printf("\n");
for(x=1; x<=anzahl; x=x+1){
printf(" %i. Zahl eingeben : ",x);
scanf("%f",&zahl);
summe=summe+zahl;
}
mittel=summe/anzahl;
printf("\n\nSumme der Zahlen = %0.2f", summe);
printf("\nMittelwert der Zahlen = %0.2f\n", mittel);
system("Pause");
}
Was ich jetzt gerne noch darstellen würde, wäre den minimalen und maximalen Wert der eingegeben Zahlen.
Jetzt kommen wir zu meinem Anliegen. Ich habe keine Ahnung wie ich das realisieren soll.
Normalerweise habe ich vorher Variablen festgelegt x1,....,xn.
Anschließend mit einer "if else" Anweisung geprüft.
if(x1>x2 && x1>x3){
printf("\n x1=%i ist die groesste Zahl\n",x1);
}
else if(x2>x1 && x2>x3){
printf("\n x2=%i ist die groesste Zahl\n",x2);
}
else if(x3>x1 && x3>x2){
printf("\n x3=%i ist die groesste Zahl\n",x3);
}
else
printf("\nEine, zwei oder alle Zahlen sind gleich gross\n");
system("Pause");
}
Nur bei dem neuen Programm habe keine feste Anzahl von Variablen die ich vorher definiert habe.
Ist im Forum ein wenig doof dargestellt. Im Dev C++ ist es überschaubarer.
Meine Programmierkenntnisse halten sich in Grenzen, daher seit lieb
Ich erwarte jetzt keine komplette Lsg, ein Wink mit dem Zaunpfahl würde schon reichen
Wäre aber natürlich einer grobfertigen Lsg nicht abgeneigt
THX
__________________
Es ist leichter einen Atomkern zu zertrümmern als ein Vorurteil!!!
geh mit ner for schleife alle elemente durch und speicher die höchste bzw kleinste zahl zwischen. also erstes element is 1 also geht die eins nach min und nach max, dann guckst du im zweiten element ob das größer ist, ist es zb. 2 dann schreibst du 2 nach max und lässt min auf 1.
die einfachste Lösung : speicher jeden eingehenden Wort in einer temporären Variable, vergleiche diese mit einer zweiten, unabhängigen Variable die mit 0 initialisiert wurde und tausche ggf. aus. Am Ende der Eingabe hast du garantiert die grösste Zahl in der nichttemporären Variable - das ist bedeutend sinnvoller als eine Schleife bzw. zumindest effizienter.
die einfachste Lösung : speicher jeden eingehenden Wort in einer temporären Variable, vergleiche diese mit einer zweiten, unabhängigen Variable die mit 0 initialisiert wurde und tausche ggf. aus. Am Ende der Eingabe hast du garantiert die grösste Zahl in der nichttemporären Variable - das ist bedeutend sinnvoller als eine Schleife bzw. zumindest effizienter.
Thread gelesen?
Lösung steht schon in der ersten Antwort!
Stimmt schon, man braucht da keine zweite for schleife dafür. ABer mit nen bisschen Überlegen kommt der OP da auch selber drauf das er das in der eingabeschleife machen kann.
(Und ich hatte mir den Code nich angeschaut, deswegen hab ich die Eingabeschleife nicht beachtet )
Nochmal danke für die Tipps!
Habe es auch hinbekommen. Allerdings nur mit zwei for-Schleifen!
Die Version mit der einen Schleife war auch mein Urgedanke, nur liefert diese nur bei Zahlenreihen richtige Werte, also 1234 4321 9652 sobald man nicht aufeinanderfolgende Zahlen verwendet, zB.: 2958 5978 ist das Minima oder Maxima falsch.
#include<stdio.h>
main()
{
int i, anzahl; //Zählvariablen
float zahl[i], summe=0.0, mittel=0.0,max=0.0,min=0.0; //Werte =0 setzen
while(anzahl != 0){ //Wiederholungen
for(i=1; i<=anzahl; i++){ //Wieviele Zahlen eingeben?
printf(" %i. Zahl eingeben : ",i); //Anweisung 2
scanf("%f",&zahl[i]); //Zahlen eingeben bis Schleife zu Ende
summe=summe+zahl[i]; //Summe aller Zahlen
max=min=zahl[1]; //Maxima und Minima einen Wert zuweisen
if( zahl[i] < min) //Wenn eingegeben Zahl < gespeicherte Zahl,
min = zahl[i]; //dann neues Minimum
if( zahl[i] > max) //Wenn eingegeben Zahl > gespeicherte Zahl,
max = zahl[i]; //dann neues Maximum
mittel=summe/anzahl; //Mittelwert aller Zahlen
} //Zählschleife zu Ende
printf("\n\nSumme der Zahlen = %0.2f", summe); //Gesamtsumme aller Zahlen
printf("\nMittelwert der Zahlen = %0.2f\n", mittel); //Mittelwert der Zahlen
printf("Maximum %0.0f\n",max); //Maximum
printf("Minimum %0.0f\n",min); //Minimum
summe=mittel=max=min=0.0; //Alle Werte =0 setzen sonst Fehler bei Wdh.
}
for(i=1; i<=anzahl; i++){ //Wieviele Zahlen eingeben?
printf(" %i. Zahl eingeben : ",i); //Anweisung 2
scanf("%f",&zahl[i]); //Zahlen eingeben bis Schleife zu Ende
summe=summe+zahl[i]; //Summe aller Zahlen
mittel=summe/anzahl; //Mittelwert aller Zahlen
} //Erste Zählschleife zu Ende
max=min=zahl[1]; //Maxima und Minima einen Wert geben
for(i=1; i<=anzahl; i++){ //Zählschleife für Minima und Maxima
if( zahl[i] < min) //Wenn eingegeben Zahl < gespeicherte Zahl
min = zahl[i]; //dann neues Minimum
if( zahl[i] > max) //Wenn eingegeben Zahl > gespeicherte Zahl
max = zahl[i]; //dann neues Maximum
} //Zweite Zählschleife zu Ende
printf("\n\nSumme der Zahlen = %0.2f", summe); //Gesamtsumme aller Zahlen
printf("\nMittelwert der Zahlen = %0.2f\n", mittel); //Mittelwert der Zahlen
printf("Maximum %0.0f\n",max); //Maximum
printf("Minimum %0.0f\n",min); //Minimum
summe=mittel=max=min=0.0; //Alle Werte =0 setzen, sonst Fehler bei Wdh.
}
for(i=1; i<=anzahl; i++){
if( zahl[i] < min)
min = zahl[i];
if( zahl[i] > max)
max = zahl[i];
}
printf("\n\nSumme der Zahlen = %0.2f", summe);
printf("\nMittelwert der Zahlen = %0.2f\n", mittel);
printf("Maximum %0.0f\n",max);
printf("Minimum %0.0f\n",min);
summe=mittel=max=min=0.0;
}
system("Pause");
}
Diese Lsg funktioniert zwar, aber ich finde sie unschön,
eine Schleife wäre mir lieber
Habe die Progs mal mit und ohne Kommentare eingefügt, sonst ist es doch etwas unüberschaubar
EDIT.: Habe noch eine while-Schleife eingefügt, damit man das Programm mehrmals anwenden kann.
Mit 0 wird das Programm dann geschlossen!
__________________
Es ist leichter einen Atomkern zu zertrümmern als ein Vorurteil!!!
das geht so nicht, da i nicht initialisiert ist und damit dein zahlenarray eine unvorhersehbare größe bekommt. Schau dir mal malloc() an. (Dein Zahlenproblem wird wohl eher logischer natur sein, ich schau später nochmal drüber)