Ich steh auf der Leitung , benötige bitte einen Lösungsansatz.
-
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;int main(int argc, char *argv[])
{do
{
cout << "Bitte geben Sie einen Messwert ein.\n";
cin >> m;if ((m<=80) && (m>=90))
{cout << "Der Messwert liegt nicht im Toleranzbereich.\n";
cout << " Bitte geben Sie erneut einen Wert ein.\n";else
{cout << " Bitte geben sie einen weiteren Messwert ein:\n;
}while // hier müssten irgend wie die 10 Wiederholungen rein????
system("PAUSE");
return EXIT_SUCCESS;
}Wäre nett wenn jemand noch ein paar Verbesserungsvorschläge liefern könnte.
Vielen Dank......
-
PauliBär schrieb:
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;int main(int argc, char *argv[])
{do
{
cout << "Bitte geben Sie einen Messwert ein.\n";
cin >> m;if ((m<=80) && (m>=90))
{cout << "Der Messwert liegt nicht im Toleranzbereich.\n";
cout << " Bitte geben Sie erneut einen Wert ein.\n";else
{cout << " Bitte geben sie einen weiteren Messwert ein:\n;
}while // hier müssten irgend wie die 10 Wiederholungen rein????
system("PAUSE");
return EXIT_SUCCESS;
}Wäre nett wenn jemand noch ein paar Verbesserungsvorschläge liefern könnte.
Vielen Dank......
Also ich würde keine do-while Schleife benutzen, sondern eine while:
(ungetestet)#include <iostream> #include <vector> int main() { int input; std::vector<int> values; //Container für die 10 Werte while(values.size() <= 10) //Prüfen, ob im Container mehr als 10 Werte sind { std::cin>>input; //Wert eingeben if(input >= 80 && input <= 90) //Prüfen, ob Wert zwischen 80 und 90 liegt values.push_back(input); //Wenn Wert im Wertebereich liegt, einfach in den Container fügen } return 0; }
-
Bitte CPP-Tags benutzen, um den Code lesbar zu machen.
Noch ein paar Anmerkungen am Rand:
#include <cstdlib> #include <iostream> #include <math.h> // veraltet, nimm stattdessen <cmath> using namespace std; int main(int argc, char *argv[]) // Du kannst auch int main() schreiben (deine Version ist auch erlaubt) { // ... system("PAUSE"); // hat gewisse Nachteile (siehe FAQ) return EXIT_SUCCESS; // überflüssig, am Ende von main() wird automatisch 0 zurückgegeben }Ansonsten kann ich Speedy_92s Version zustimmen. Von den Headern brauchst du wie bei ihm im Code nur <iostream> und <vector>. Eventuell solltest du dir auch einen Umstieg von
using namespace std;nachstd::cout,std::endletc. überlegen, dann hast du später sicher keine Probleme mit Namensräumen (z.B. in Headern).Bei der Eingabe (
std::cin) solltest du noch eine Überprüfung auf Fehleingaben (z.B. Buchstaben) einbauen.
-
Puhhh, kann man das ganze auch ohne vectoren lösen? So weit sind wir noch nicht.
Dieses Programm kommt schon nah dran aber die min max begrenzung fehlt mir noch.
P.s. wie kann ich mein c++ programm so schön farbig hochladen wie ihr?
Test:
[cpp]
#include <cstdlib>
#include <iostream>
#include <math.h>using namespace std;
int main(int argc, char *argv[])
{
int i, n;
double wert[n], maxi, mini, summe, x, s, zaehler, b, term[n];summe = 0; zaehler = 0; n=10; s=0;
cout << "Bitte geben sie 10 Messwerte ein: \n\n ";
for (i=1; i<(n+1); i++)
{
cout << "Geben Sie den Messwert ";
cout << i;
cout << " ein ";
cin >> wert[n];// Mittelwertberechnung
summe = summe + wert[n];
x = summe / n;// Maximum
if (i==1)
maxi = wert[n];
if (wert[n] > maxi)
maxi = wert[n];
// Minimum
if (i==1)
mini = wert[n];
if (wert[n] < mini)
mini = wert[n];term[n] = (wert[n]-x)*(wert[n]-x);
zaehler = zaehler + term[n];
}
s = sqrt(zaehler/(n-1));cout << "\n";
cout << "Die Gesamtsumme beträgt:";
cout << summe;
cout << "\n";
cout << "Der groesste Messwert ist: ";
cout << maxi;
cout << "\n";
cout << "Der kleinste Messwert ist: ";
cout << mini;
cout << "\n";
cout << "Der Mittelwert ist: ";
cout << x;
cout << "\n";
cout << "Die Standardabweichung betraegt: ";
cout << s;
cout << "\n";
cout << "\n";cout << "Wollen sie einen neuen Karton Packen? ja = 1, nein = 0: \n";
cin >> b;if (b==0)
{cout << "Sie wollen das Programm beenden!\n";
cout << "\n";
system("PAUSE");
return EXIT_SUCCESS;}
-
PauliBär schrieb:
P.s. wie kann ich mein c++ programm so schön farbig hochladen wie ihr?
Eben dafür wären die CPP-Tags. Am Anfang des Codes [ cpp ] und am Schluss [ /cpp ] (ohne die Leerzeichen) schreiben (oder erste weisse Schaltfläche benutzen).
Ausserdem hab ich dir im oberen Post noch einige Tipps bezüglich Headern und so gegeben...
#include <cstdlib> #include <iostream> #include <math.h> using namespace std; int main(int argc, char *argv[]) { int i, n; double wert[n], maxi, mini, summe, x, s, zaehler, b, term[n]; // verteil das auf mehrere Zeilen summe = 0; zaehler = 0; n=10; s=0; // das auch cout << "Bitte geben sie 10 Messwerte ein: \n\n "; for (i=1; i<(n+1); i++) // Fehler: Array beginnt bei 0 und hört bei n-1 auf!! { cout << "Geben Sie den Messwert "; cout << i; // hier evtl. i+1 schreiben, da erster Messwert Index 0 hat cout << " ein "; cin >> wert[n]; // Mittelwertberechnung summe = summe + wert[n]; // einfacher: summe += wert[n]; x = summe / n; // Maximum // die folgenden Abfragen könntest du mit OR (operator ||) zu einer zusammenhängen if (i==1) maxi = wert[n]; if (wert[n] > maxi) maxi = wert[n]; // Minimum if (i==1) mini = wert[n]; if (wert[n] < mini) mini = wert[n]; term[n] = (wert[n]-x)*(wert[n]-x); // da gibt es die Funktion pow() zaehler = zaehler + term[n]; // wieder mit += } s = sqrt(zaehler/(n-1)); cout << "\n"; cout << "Die Gesamtsumme beträgt:"; cout << summe; cout << "\n"; cout << "Der groesste Messwert ist: "; cout << maxi; cout << "\n"; cout << "Der kleinste Messwert ist: "; cout << mini; cout << "\n"; cout << "Der Mittelwert ist: "; cout << x; cout << "\n"; cout << "Die Standardabweichung betraegt: "; cout << s; cout << "\n"; cout << "\n"; cout << "Wollen sie einen neuen Karton Packen? ja = 1, nein = 0: \n"; cin >> b; if (b==0) {cout << "Sie wollen das Programm beenden!\n"; cout << "\n"; system("PAUSE"); return EXIT_SUCCESS;}PauliBär schrieb:
Dieses Programm kommt schon nah dran aber die min max begrenzung fehlt mir noch.
Du könntest es mit einer If-Abfrage machen, d.h. wenn die Messwerte nicht okay sind, wiederholst du den Schleifendurchgang mit
continue;(nicht vergessen, die Zählvariable zu dekrementieren) und fragst nochmals ab.
-
int i, n; double wert[n], maxi, mini, summe, x, s, zaehler, b, term[n]; summe = 0; zaehler = 0; n=10; s=0;Dieser Teil dürfte doch eigentlich nicht so funktionieren, wie er soll...
Erst den Variablen einen Vert zuweisen, und dann die Arrays deklarieren.Also so:
int i; int n = 10; // Erst nach n = 10; darfst du die Arrays deklarieren: double wert[n]; double term[n]; double maxi; double mini; double summe = 0; double x; double s = 0; double zaehler = 0; double b;Wenn du das Array vor der Initialisierung von "n" deklariert hättest, dann hätte der Kompiler meines Wissens nach ein undefiniertes Verhalten vergerufen (ist das richtig so?) weil "n" irgendeinen Wert zugewiesen bekommt.
-
Schöne Liste der Initialisierungen, das würde ich dir in Zukunft auch raten, PauliBär. Generell solltest du nur in Ausnahmefällen mehr als eine Anweisung pro Zeile haben. Ausserdem brauchst du die Variablen eigentlich nicht lange bevor du sie brauchst zu deklarieren (besser so spät wie möglich, am besten gleich eine Initialisierung machen wo es möglich ist). Auch Zählvariablen in Schleifen sollten erst im Schleifenkopf deklariert sein.
Schade, dass ich um diese Zeit nicht mehr ganz fähig bin, Logikfehler zu finden, das mit dem
nhabe ich z.B. komplett übersehen
Speedy_92 schrieb:
Wenn du das Array vor der Initialisierung von "n" deklariert hättest, dann hätte der Kompiler meines Wissens nach ein undefiniertes Verhalten vergerufen (ist das richtig so?) weil "n" irgendeinen Wert zugewiesen bekommt.
Mir fällt gerade auf, dass das in dieser Form eh nicht geht, da für die Dimension ein konstanter Wert erwartet wird. Das heisst, es muss so stehen (was eine Initialisierung erfordert, von daher kann
ngar nicht undefiniert sein):const int n = 100;Aber für normale Variablen gilt das natürlich, was du gesagt hast. Bei keiner Initialisierung oder Zuweisung steht ein willkürlicher Wert in der Variable, was oft zu Abstürzen führt.
-
Super vielen lieben Dank euch.
Und das zu so später Stunde Danke an Nexus und Speedy_92
Macht langsam riesig Spass mit C++ zu arbeiten.
Habe gerade mein erstes richtiges Programm zum laufen bekommen....
Der ein oder andere wird sicher schmunzeln wenn er das sieht.....Ein Problem hätte ich noch: Ich würde gerne am ende eine Frage ausgeben : Wollen sie erneut einen Karton packen? Diese soll dann mit ja / nein beantwortet werden.
Kann ich z.b. ja=1 und nein=0 zuordnen und das mit einer if/else Anweisung abarbeiten?
Wie komme ich dann an den Anfang vom Programm zurück.
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int Messwert, Wert, Summe; Messwert=0; while(Messwert<10) { cout<<"Bitte geben Sie einen Messwert ein:\n"; Messwert++; cin>>Wert; if(Wert<5) {cout<<"Messwert ist zu klein.\n"; Messwert--;} if(Wert>10) {cout<<"Messwert ist zu gross.\n"; Messwert--;} } Summe= Summe+Wert; cout<<"Die Summe beträgt:\n"; cout<< Summe; system("PAUSE"); return EXIT_SUCCESS; }
-
Ups da hat ein bisschen was gefehlt. Sorry
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int Messwert, Wert, Summe, Mittelwert, b; Messwert=0; Summe=0; b=0; while(Messwert<10) { cout<<"Bitte geben Sie einen Messwert ein:\n"; Messwert++; cin>>Wert; if(Wert<80) {cout<<"Messwert ist zu klein.\n"; Messwert--;} if(Wert>90) {cout<<"Messwert ist zu gross.\n"; Messwert--;} } Summe=Summe+Wert+Wert+Wert+Wert+Wert+Wert+Wert+Wert+Wert+Wert; cout<<"\n"; cout<<"Die Gesamtsumme betraegt:\n"; cout<< Summe; cout<<"\n"; Mittelwert=Summe/10; cout<<"Der Mittelwert betraegt:\n"; cout<<Mittelwert; cout<<"\n"; system("PAUSE"); return EXIT_SUCCESS; }
-
Summe=Summe+Wert+Wert+Wert+Wert+Wert+Wert+Wert+Wert+Wert+Wert;Was? Weisst aber schon,dass 'Wert' immer den selben Wert hat (nämlich den zuletzt eingegebenen)?
-
PauliBär schrieb:
Puhhh, kann man das ganze auch ohne vectoren lösen? So weit sind wir noch nicht.
Das ist egal. Vektoren sind wirklich wahnsinnig praktische Dinger. Vereinfachen viele Dinge. Und sie sind leicht zu bedienen. Klar die Syntax sieht am Anfang schwierig aus (im Vergleich zu new und delete), aber es ist wirklich total easy

OnTopic:
deine Summe solltest du überdenken:
summe += 10 * wert(hab jetzt nicht gezählt wie oft du Wert addieren willst)
-
PauliBär schrieb:
Ein Problem hätte ich noch: Ich würde gerne am ende eine Frage ausgeben : Wollen sie erneut einen Karton packen? Diese soll dann mit ja / nein beantwortet werden.
Kann ich z.b. ja=1 und nein=0 zuordnen und das mit einer if/else Anweisung abarbeiten?
Wie komme ich dann an den Anfang vom Programm zurück.
Also...
Erstmal benutze hierfür NIEMALS gotos... Am besten NIEMALS gotos verwenden, da sie den Code so unleserlich machen, wie nur möglich
Für das Problem kannst du eine while-Schleife mit einem bool-Wert benutzen (wieder ungetestet):
#include <iostream> #include <vector> int main() { bool again = true; //Wahrheitswert zum Überprüfen, ob noch einmal while(bool) // entspricht while(bool == true) { int input; std::vector<int> values; //Container für die 10 Werte while(values.size() <= 10) //Prüfen, ob im Container mehr als 10 Werte sind { std::cin>>input; //Wert eingeben if(input >= 80 && input <= 90) //Prüfen, ob Wert zwischen 80 und 90 liegt values.push_back(input); //Wenn Wert im Wertebereich liegt, einfach in den Container fügen } std::cout"Noch einmal? (J/N)"<<std::endl; char c; std::cin>>c; if(c == 'N' || c == 'n') //Wenn Benutzer 'N' oder 'n' eingegeben hat: again = false; und somit wird die Schleife nicht wiederholt again = false; } return 0; } }PS: Einrückungen sind nicht gerade perfekt, da es direkt hier in den Browser getippt wurde

-
Nexus schrieb:
Schöne Liste der Initialisierungen, das würde ich dir in Zukunft auch raten, PauliBär. Generell solltest du nur in Ausnahmefällen mehr als eine Anweisung pro Zeile haben. Ausserdem brauchst du die Variablen eigentlich nicht lange bevor du sie brauchst zu deklarieren (besser so spät wie möglich, am besten gleich eine Initialisierung machen wo es möglich ist). Auch Zählvariablen in Schleifen sollten erst im Schleifenkopf deklariert sein.
Schade, dass ich um diese Zeit nicht mehr ganz fähig bin, Logikfehler zu finden, das mit dem
nhabe ich z.B. komplett übersehen
Speedy_92 schrieb:
Wenn du das Array vor der Initialisierung von "n" deklariert hättest, dann hätte der Kompiler meines Wissens nach ein undefiniertes Verhalten vergerufen (ist das richtig so?) weil "n" irgendeinen Wert zugewiesen bekommt.
Mir fällt gerade auf, dass das in dieser Form eh nicht geht, da für die Dimension ein konstanter Wert erwartet wird. Das heisst, es muss so stehen (was eine Initialisierung erfordert, von daher kann
ngar nicht undefiniert sein):const int n = 100;Aber für normale Variablen gilt das natürlich, was du gesagt hast. Bei keiner Initialisierung oder Zuweisung steht ein willkürlicher Wert in der Variable, was oft zu Abstürzen führt.
Ich hätte eine Frage bezüglich des willkürlichen Wertes:
Wenn man jetzt die Variable global macht (z.B. außerhalb der main()), dann wird doch der int-Wert mit NULL initialisiert oder?
-
Hallo,
Wenn man jetzt die Variable global macht (z.B. außerhalb der main()), dann wird doch der int-Wert mit NULL initialisiert oder?Ja, so ist es im Standard gefordert. Aber wenn man sich bei allen Compilern sicher sein will, dann sollte man es trotzdem tun, gerne auch sonst...
MfG,
Probe-Nutzer
-
Puhhh,...... ich denke eine while schleife mit bool- Wert haben wir auch noch nicht gelernt.

Wäre es denn auch möglich die Aufforderung "Wollen Sie einen neuen Karton packen ja/nein:" mit einer do-while Schleife am Anfang ( die sich um den kompletten Term zieht) zu lösen?????????
Das mit der Summe ist quatsch da habt ihr recht

Wie kann ich das lösen das er nicht immer den letzten Wert für meine Gesamtsumme benutzt sondern die tatsächlich eingegebenen Werte berechnet????
Also Messwert 1, 2, 3, 4,......... und daraus die Summe berechnet??
( Bitte keine Vektoren das sprengt mein Gehirn
)
Vielen Dank
-
Hab mal zwei Möglichkeiten aufgeschrieben wie du jeweils den richtigen Messwert summierst, ich hoffe das sollte so in etwa klappen:
#include <iostream> using namespace std; int main() { int item[10]; int summe = 0; //das wäre eine Möglichkeit for (int i = 0 ; i < 10; i++){ int temp; cout << "Zahl " << i+1 << " eingeben: "; cin >> temp; summe += temp; } cout << "Summe: " << summe << endl; //oder so: summe = 0; for (int i = 0 ; i < 10; i++){ cout << "Zahl " << i+1 << " eingeben: "; cin >> item[i]; } for (int i = 0; i < 10; i++){ summe += item[i]; } cout << "Summe: " << summe; //und es gibt noch einige Andere }aber It0101 hat dir diese Variante ja schon gesagt

MfG
Jasc
-
Sodala, habe gerade versucht die Summe mit dem Beispiel vom Jasc zu überarbeiten .
Allerdings kommt jetzt eine Summe mit einer 0 zu viel raus?????
Wo habe ich den diesmal einen Fehler??
Irgend etwas wird da wohl multipliziert?Kann es sein das die geschweifte Klammer nicht stimmt?
Wenn ich sie zu mache nach der for-Anweisung bekomme ich einen Fehlercode??#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int Messwert, Wert, Summe, Mittelwert, b; Messwert = 0; Summe = 0; b = 0; while(Messwert<10) { cout<<"Bitte geben Sie einen Messwert ein:\n"; Messwert++; cin>>Wert; if(Wert<80) {cout<<"Messwert ist zu klein.\n"; Messwert--;} if(Wert>90) {cout<<"Messwert ist zu gross.\n"; Messwert--;} for (int Messwert = 0; Messwert < 10; Messwert++) Summe += Wert; } cout<<"\n"; cout<<"Die Gesamtsumme betraegt:\n"; cout<< Summe; cout<<"\n"; Mittelwert=Summe/10; cout<<"Der Mittelwert betraegt:\n"; cout<<Mittelwert; cout<<"\n"; system("PAUSE"); return EXIT_SUCCESS; }
-
PauliBär schrieb:
Sodala, habe gerade versucht die Summe mit dem Beispiel vom Jasc zu überarbeiten .
Allerdings kommt jetzt eine Summe mit einer 0 zu viel raus?????
Wo habe ich den diesmal einen Fehler??
Irgend etwas wird da wohl multipliziert?Kann es sein das die geschweifte Klammer nicht stimmt?
Wenn ich sie zu mache nach der for-Anweisung bekomme ich einen Fehlercode??#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int Messwert, Wert, Summe, Mittelwert, b; Messwert = 0; Summe = 0; b = 0; while(Messwert<10) { cout<<"Bitte geben Sie einen Messwert ein:\n"; Messwert++; cin>>Wert; if(Wert<80) {cout<<"Messwert ist zu klein.\n"; Messwert--;} if(Wert>90) {cout<<"Messwert ist zu gross.\n"; Messwert--;} for (int Messwert = 0; Messwert < 10; Messwert++) Summe += Wert; } cout<<"\n"; cout<<"Die Gesamtsumme betraegt:\n"; cout<< Summe; cout<<"\n"; Mittelwert=Summe/10; cout<<"Der Mittelwert betraegt:\n"; cout<<Mittelwert; cout<<"\n"; system("PAUSE"); return EXIT_SUCCESS; }Was soll denn dies bitte bringen?:
for (int Messwert = 0; Messwert < 10; Messwert++) Summe += Wert; }Weil ich sehe hier keine öffnende geschweifte Klammer... Oder bin ich heut etwa blind?
Oder fehlt dort ein Teil, der beim kopieren verloren gegangen ist?
Und dann streich die for-Schleife einfach mal!
Probier es mal so:if(Wert<80) {cout<<"Messwert ist zu klein.\n"; Messwert--;} else if(Wert>90) {cout<<"Messwert ist zu gross.\n"; Messwert--;} else Summe += Wert;Sollte funktionieren.
Und PS: Lern mal deinen Code vernünftig einzurücken.
-
Juhuuuu, es klappt .... vielen Dank Speedy92,

Bin so froh das mein Programm läuft.
Gibt es irgendwie die Möglichkeit die eingegebenen Werte in einem Array abzuspeichern?
Danke PauliBär
-
Ja, die gibt es... Ich gebe dir nur einen kleinen Denkanstoß:
Die Variable Messwert kannst du als Index benutzen.
Den Rest musst du selbst erledigen