eryx Geschrieben 28. Oktober 2008 Geschrieben 28. Oktober 2008 Huhu Leute so ich hab ma wieder ein Problemchen... mein Prof möchte ein Programm haben, dass: a) eine Zahlenfolge liest (Anzahl soll vorher abgefragt werden) von der Zahlenfolge den Mittelwert bildet c) das minimum der eingegebenen zahlen ausgibt so bei c) hänge ich fest... irgendwie liest der den Wert den ich ins array tippe nicht bzw ich hab noch nicht viel Erfahrung mit array's vielleicht hab ich ja sonst noch en groben Fehler gemacht oda so, keine ahnung... komme jedenfalls nicht weiter, wäre nett wenn ma einer drüber schaut. Bitte aber triviale Lösungsansätze/Vorschläge... hab bissel gegooglet und was von "pointer" und "vector" gelesen aber sowas haben wir noch nicht gemacht lg eryx (1 Semester Informatik) #include <iostream> #include <conio.h> using namespace std; double mittelwert(double x[],int anzahl) // Array x erstellen { int i; //feldgröße double m = 0.0; for(i=0;i<anzahl;i++) //Feldgröße erhöhen bis an Eingabe angepasst { m=m+x[i]; } // Summe bilden m=m/anzahl; // Mittelwert berechnen return m; } int main(void) { double werte[1000]; double min =0; int anzahl,i; double max = 0; cout<<endl<<"Anzahl der einzulesenden Werte: "; // Anzahl der werte cin>>anzahl; for(i=0;i<anzahl;i++) { cout<<endl<<"Wert Nr."<<(i+1)<<": "; cin>>werte[i]; if (min > werte[i]) { werte[i] = max; } } cout<<"Der Mittelwert der eingegeben Zahlen ist: "<<mittelwert(werte,anzahl); cout<<"\n\n"<<"Das Minimum lautet: "<< max; getch(); return 0; Zitieren
Bubble Geschrieben 28. Oktober 2008 Geschrieben 28. Oktober 2008 Der Programmteil mit der if-Abfrage (und die Ausgabe des Ergebnisses) verursacht die Probleme. Den Mittelwert und die kleinste eingegeben Zahl kann man auch ohne Verwendung eines Arrays ermitteln. Falls die eingegebenen Zahlen noch aus einem anderen Grund in einem Array abgelegt werden sollen, muss man darauf achten, dessen Grenzen nie zu überschreiten. Zitieren
Wodar Hospur Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 Okay, das oben geschrieben vergiss einfach mal! Der Fehler ist viel einfacher , stell dir vor jemand gibt 7 9 6 3 8 4 in dein Programm ein. Jetzt kommen wir zwar zu deinem: if (min > werte[i]) { werte[i] = max; } Dabei hasst du garnicht falsch früher ja min als: double min =0; eingeführt: Wie sieht jetzt der Vergleich aus: 0 > 7, 0 > 9, 0 > 6, 0 > 3, 0 > 8, 0 > 4 kann davon irgendwas zu treffen, okay, negative Zahlen können kleiner als 0 sein . Jetzt kannst du folgendes machen: a) min einem max. Startwert geben, was jedoch fehlschlägt wenn du den maximalwert eingibst. min mit dem ersten wert aus deinem array vorbelegen. Zitieren
eryx Geschrieben 29. Oktober 2008 Autor Geschrieben 29. Oktober 2008 ja möglichkeit b hab ich auch schon dran gedacht... aber da scheiterts an den Grundlagen ^^ weiß net wie ich das korrekt schreibe.... min = werte[1]; if (min > werte[i]) { werte[i] = max; } Funktioniert schonma irgendwie net... ^^ Zitieren
Wodar Hospur Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 ja möglichkeit b hab ich auch schon dran gedacht... aber da scheiterts an den Grundlagen ^^ weiß net wie ich das korrekt schreibe.... min = werte[1]; if (min > werte[i]) { werte[i] = max; } Funktioniert schonma irgendwie net... ^^ Hmm... hast du dir mal überlegt was du da schreibst min = werte; -> sprich in min ist der gleiche Wert wie in werte und dann machst du ein if(min > werte) -> also ein if(werte > werte).... was gibt das wohl... double werte[1000]; double min =0; int anzahl,i; double max = 0; cout<<endl<<"Anzahl der einzulesenden Werte: "; // Anzahl der werte cin>>anzahl; for(i=0;i<anzahl;i++) { cout<<endl<<"Wert Nr."<<(i+1)<<": "; cin>>werte[i]; [COLOR="Red"] // nicht schön, aber möglich // erster durchlauf der schleife, setze min und max auf aktuellen wert if(i == 0) { min = werte[i]; max = werte[i]; } else { // werte[i] ist kleiner als unsere aktuelles min und wird daher das neue min if(werte[i] < min) { min = werte[i]; } // werte[i] ist größer als uneres aktuelles max und wird daher das neue max if(werte[i] > max) { max = werte[i]; } } [/COLOR] } Btw. wenn du wirklich was cooles schreiben willst machst lieber ein: max = werte > max ? werte : max; else { // werte[i] ist kleiner als unsere aktuelles min und wird daher das neue min min = werte[i] < min ? werte[i] : min; // werte[i] ist größer als uneres aktuelles max und wird daher das neue max max = werte[i] > max ? werte[i] : max; } Zitieren
eryx Geschrieben 29. Oktober 2008 Autor Geschrieben 29. Oktober 2008 aufen ersten blick hab ich aber noch ne frage min = werte[i] < min ? werte[i] : min; was bedeutet das "?" ? ja meine grundgedanke war ja dass werte der aktuelle wert is den ich beim ersten cin eingebe und der dann wieder überschrieben wird und ich dannach wieder vergleiche... aber dem is wohl nicht so... ^^ mh okay werd ich mir heud abend ma in ruhe anschauen, hab jetzt en termin... schonma vielen dank für die mühe.... ! Zitieren
Wodar Hospur Geschrieben 29. Oktober 2008 Geschrieben 29. Oktober 2008 Soweit ich weiß macht diese tolle Syntax wert = bedingung ? wenn wahr dann x : sonst y vielleicht ist das ja einfacher min = zahl < min ? zahl : min Dabei wird der Ausdruck zahl < min ausgewertet, ist die Bedingung wahr, wird min = zahl, ist die Bedingung nicht wahr dann min = min, sprich es ändert sich nix. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.