minimum maximalwert ermitteln ?
-
ghey leute
wir lernen grad in der schule c++ programierung
und ich habe ein programm geschrieben zur mittelwertsberechnung
und wir sollten noch features reinbauen der den maximalwert und minimalwert ausrechnet
wie geht sowas und wie kann man es realisieren ?
wäre echt nett wenn ihr antwortet ist für euch bestimmt kinderkackehier is mein quellcode:
#include <stdio.h>
void main()
{
float wert, summe, mw;
int anzahl, ilauf;
char wiederholung = 'n';do
{
printf("\nBitte geben Sie die Anzahl der Messwerte ein: ");
scanf("%i",&anzahl);
summe = 0;for (ilauf = 1; ilauf <= anzahl; ilauf++)
{
printf("\nGeben Sie den %i Messwert ein: ",ilauf);
scanf("%f",&wert);
summe = summe + wert;
}
mw = summe / anzahl;
printf("\nDer Mittelwert betraegt: %f", mw);
printf("\nWiederholen? (j/n) ");
scanf("%s",&wiederholung);
}
while (wiederholung == 'j' || wiederholung == 'J');
}MfG gentleman
-
Das ist kein C++, das ist reinstes C, folglich bist du im falschen Forum. Und auf den größten bzw. kleinsten Wert solltest du kommen, wenn du immer zwei Werte vergleichst, welcher größer/kleiner ist und den dann wieder vergleichst usw.
-
#include <stdio.h> void main() { float wert, summe, mw, min, max; int anzahl, ilauf; char wiederholung = 'n'; do { printf("\nBitte geben Sie die Anzahl der Messwerte ein: "); scanf("%i",&anzahl); summe = 0; for (ilauf = 1; ilauf <= anzahl; ilauf++) { printf("\nGeben Sie den %i Messwert ein: ",ilauf); scanf("%f",&wert); if(ilauf == 1) // Beim ersten Durchlauf ist min und max nich // initialisiert, also würde ein Vergleich fehlschlagen { min = wert; max = wert; } else { if(wert < min) // Ist der aktuelle Wert kleiner? { min = wert; // Dann muss er der kleinste Wert sein // und das bleibt er, bis einer noch // kleiner ist. } if(wert > max) // Das gleiche für den Maximalwert { max = wert; } } summe = summe + wert; } mw = summe / anzahl; printf("\nDer Mittelwert betraegt: %f\nDer Minimalwert beträgt: %f\nDer Maximalwert beträgt: %f\n", mw, min, max); printf("\nWiederholen? (j/n) "); scanf("%s",&wiederholung); } while (wiederholung == 'j' || wiederholung == 'J'); }
mfg.
-
dankeschön joomoo
aber versteh es nicht ganz aber funktioniert ganz toll
bin noch ein anfänger würdest du mir vllt erklären kurz beiicq wenn du willst ?
MfG gentleman
-
Er vergleicht einfach die eingegebenen Werte mit den Variablen "min" und "max" und wenn der Wert größer ist als "max" dann erhält die Variable "max" den eingegebenen Wert.
Genauso verhält es sich auch,wenn der eingegebene Wert kleiner als "min" ist.
-
joomoo schrieb:
if(ilauf == 1) // Beim ersten Durchlauf ist min und max nich // initialisiert, also würde ein Vergleich fehlschlagen { min = wert; max = wert; }
aslo setzt man einfach beim start min auf was riesengrosses und max auf was ganz kleines, dann braucht man nicht diese ständige abfrage...
-
net schrieb:
aslo setzt man einfach beim start min auf was riesengrosses und max auf was ganz kleines, dann braucht man nicht diese ständige abfrage...
nein, man setzt max und min auf das erste element
das war also schon richtig, nur die abfrage unnötig.bye, λ
-
lamb'ada schrieb:
net schrieb:
aslo setzt man einfach beim start min auf was riesengrosses und max auf was ganz kleines, dann braucht man nicht diese ständige abfrage...
nein, man setzt max und min auf das erste element
das war also schon richtig, nur die abfrage unnötig.bye, λ
hä? Wenn ich die abfrage wegnehme, setzt es min und max immer auf den aktuellen wert?!?
noch ne Möglichkeit:
#include <stdio.h> #include <math.h> #define NaN sqrt(-1) void main() { float wert, summe, mw, min = NaN, max = NaN; int anzahl, ilauf; char wiederholung = 'n'; do { printf("\nBitte geben Sie die Anzahl der Messwerte ein: "); scanf("%i",&anzahl); summe = 0; for (ilauf = 1; ilauf <= anzahl; ilauf++) { printf("\nGeben Sie den %i Messwert ein: ",ilauf); scanf("%f",&wert); if(!(wert > min)) { min = wert; } if(!(wert < max)) { max = wert; } summe = summe + wert; } mw = summe / anzahl; printf("\nDer Mittelwert betraegt: %f\nDer Minimalwert beträgt: %f\nDer Maximalwert beträgt: %f\n", mw, min, max); printf("\nWiederholen? (j/n) "); scanf("%s",&wiederholung); } while (wiederholung == 'j' || wiederholung == 'J'); }
mfg.
-
joomoo schrieb:
[cpp]
#define NaN sqrt(-1)na, das wird ja immer schlimmer...
-
net schrieb:
joomoo schrieb:
[cpp]
#define NaN sqrt(-1)na, das wird ja immer schlimmer...
Ehrlich gesagt find ich die Methode mit dem "sehr großen" und "ganz kleinen" werden auch nicht toll.
mfg.
-
Weise den minmax-Variablen doch einfach das erste Element zu.
Ist dies schon das kleinste/größte, hast Du kein Problem, wenn nicht werden sie doch sowieso ersetzt. Wieso soll man da irgendwelche fantastischen Defaultwerte einsetzen?
-
LordJaxom schrieb:
Weise den minmax-Variablen doch einfach das erste Element zu.
Ist dies schon das kleinste/größte, hast Du kein Problem, wenn nicht werden sie doch sowieso ersetzt. Wieso soll man da irgendwelche fantastischen Defaultwerte einsetzen?
Aber genau das wird doch mit meiner If-Abfrage gemacht?!?
mfg.
-
Was passiert, wenn man bei Anzahl oder Wert 0, negative Zahl, Kommazahl, Buchstaben usw. eingibt?
-
Wie es im C++ den <algorithm>
gibt gibt es im C <cstdlib> bzw. <stdlib.h>Und dort gibt es einen qsort. Wobei vielleicht ein
binarysearch besser waehre.Wie man den braucht (qsort):
http://www.openbsd.org/cgi-bin/man.cgi?query=qsort&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html
-
joomoo schrieb:
Aber genau das wird doch mit meiner If-Abfrage gemacht?!?
Ja, im ersten Schleifendurchlauf. Ich meinte eher bei der Initialisierung
Spart die Verwendung von NaN oder winzigkleiner bzw. riesengroßer Werte als Startwert.
-
LordJaxom schrieb:
joomoo schrieb:
Aber genau das wird doch mit meiner If-Abfrage gemacht?!?
Ja, im ersten Schleifendurchlauf. Ich meinte eher bei der Initialisierung
Spart die Verwendung von NaN oder winzigkleiner bzw. riesengroßer Werte als Startwert.Aber bei der Initialisierung weißt du den Startwert doch noch gar nicht oder versteh ich dich falsch?
mfg.
-
Nee, ist schon ok. Ich hab Dich falsch verstanden, nicht umgekehrt, sorry
Was besseres (ausser nen bool isInitialized oder das Einlesen des ersten Wertes noch vor der Schleife) fällt mir momentan auch nicht ein.
-
LordJaxom schrieb:
Nee, ist schon ok. Ich hab Dich falsch verstanden, nicht umgekehrt, sorry
Was besseres (ausser nen bool isInitialized oder das Einlesen des ersten Wertes noch vor der Schleife) fällt mir momentan auch nicht ein.
die erste abfrage außerhalb der schleife wäre zumindest genau so gut. vorteile: es wird garantiert, dass mindestens ein wert eingelesen wird, denn sonst ist max und min nicht definiert, und es repräsentiert die logische struktur besser (ansichtssache). nachteil: zweimal die abfrage im quelltext.
-
jez versteh ichs ja
thx für hilfe
-
Hi... Hab auch so ein ähnliches Problem. Lese meine analogen Werte(0-5V) (0-255) in 10ms Takt von einer Velleman Karte aus. Und aus diesen sich ständig ändernden Werten möchte ich den Maximalwert bestimmen. Das was schon geschrieben wurde passt leider eher auf eine geringe Anzahl von Werten die schon feststehen.
Hat jemand ne Idee wie ich das Umstezen könnte?!
Danke falls das noch jemand ließt nach 7 Jahren