Brauch mal Eure Hilfe
-
Hallo alle zusammen.
Wir machen gerade in der Schule ein Semester c++.
Nun sollen wir ein Programm schreiben wo wir Kräfte berechnen können.Ich habe unten mal den Code gepostet.
Bei der Eingabe wieviele Kräfte komme ich nicht weiter.
Es können ja 2,3,4,5 oder 6 Kräfte sein, die dann über eine bestimmte Formel berechnet werden.Mein 2tes Problem ist das, wenn ich es im cmd ausführe das prog sofort wieder beendet wird.
Das dritte Problen ist, das ich in der Menüauswahl, wenn ich Buchstabe eingebe die ganze zeit die Schleife durchläuft.
Wie kann ich das am Besten machen.
Da ich dan nicht so die Ahnung von habe wende ich mich nun an Euch.#include <iostream>
#include <conio.h>
#include <stdio.h>using namespace std;
int main(int main(int argc, char *args[]))
{
int menüauswahl;
menüauswahl=0;setlocale(LC_ALL,"GERMAN");
cout << "Dieses Programm ist zum berechnen von Kräften an Trägern" << endl;
cout << "Bitte geben Sie an, was Sie berechnen möchten!\n\n" << endl;printf("------Menü------\n\n");
printf("-1- Eine einzelne Kraft ( Summe aller Kräfte )\n");
printf("-2- Eine fehlende Länge zwischen den Kräften\n");
printf("-3- Die Lagerkräfte\n");
printf("-4- Maximale Biegemoment und wo es auftritt\n");
printf("-5- Die Länge des Trägers\n\n");while (menüauswahl < 1 || menüauswahl > 6 )
{
cin >> menüauswahl;
if ( menüauswahl < 1 || menüauswahl > 6 )
{
printf("Falsche Eingabe,erneut versuchen\n");
}
}switch(menüauswahl)
case 1:printf("Nun berechnen wir eine von außen einwirkende Kraft\n");
printf("Wieviel Kräfte wirken von aussen ein?\n");getchar();
return 0;
}
-
rellik schrieb:
Wir machen gerade in der Schule ein Semester c++.
ja dann bleib doch auch bei c++ und mach die "printf" raus.
bring mal dein switch in ordnung und poste dann das teil nochmal in [cpp][/cpp] tags
-
So besser?
#include <iostream> #include <conio.h> #include <stdio.h> using namespace std; int main(int main(int argc, char *args[])) { int menüauswahl; menüauswahl=0; setlocale(LC_ALL,"GERMAN"); cout << "Dieses Programm ist zum berechnen von Kräften an Trägern" << endl; cout << "Bitte geben Sie an, was Sie berechnen möchten!\n\n" << endl; cout << "------Menü------\n\n"; cout << "-1- Eine einzelne Kraft ( Summe aller Kräfte )\n"; cout << "-2- Eine fehlende Länge zwischen den Kräften\n"; cout << "-3- Die Lagerkräfte\n"; cout << "-4- Maximale Biegemoment und wo es auftritt\n"; cout << "-5- Die Länge des Trägers\n\n"; while (menüauswahl < 1 || menüauswahl > 6 ) { cin >> menüauswahl; if ( menüauswahl < 1 || menüauswahl > 6 ) { cout << "Falsche Eingabe, bitte erneut versuchen\n"; } } switch(menüauswahl) { case 1: cout << "Nun berechnen wir eine von außen einwirkende Kraft\n\n\n"; cout << "Wieviel Kräfte wirken von aussen ein?\n"; // 2,3,4,5 usw.......je nachdem mit wievielen er rechnen möchte } getch(); return 0; }
-
Problem 1.: Ich sehe da kein Problem eine neue Variable für eine weitere cin-eingabe zu machen, das schaffst du sicher! und eine Formel für die Berechnung musst du dir auch mal ausdenken, ausarbeiten! (Am einfachsten für mehrere Kräfte, Tipp Schleife)
Problem 2.: Das Programm wartet so wie du es hast am Ende auf die Eingabe einer Taste und funktioniert somit wie gewollt.
Problem 3.: Wäre schlimmer, wenn das Programm abstürzt oder ähnliches macht. So wie du kann man das durchaus machen, mann soll ja nur Zahlen zwischen 1->6 angeben können.
Summa summarum hast du kein Problem. Einfach weiter machen.
Edit: zu problem 3. Ergänze das in der If-Abfrage:
cin.clear(); cin.ignore(cin.rdbuf()->in_avail());cin befindet sich in einem Fehlerzustand. Die Eingabe muss geleert werden und cin wieder für die Eingabe freigegeben werden.
Edit2: Und bitte korrigiere das "int main(int main(int argc, char *args[]))" zu "int main(int argc, char *args[])".
-
Guten Morgen.
Die Formel für die Berechnung ist nicht das Problem.
Die cin Eingabe auch nicht, Nur weiß ichnicht wie ich es speichern lassen soll, da es ja einmal 3 Kräfte sein könne und das nächste mal 6 Kräfte.
Das variiert ja. Die Formel muß sich dem ja auch anpassen!
-
zum Abspeichern von x Werten, nimmt man am besten ein dynamisches array.
zB vector<>
http://www.cplusplus.com/reference/stl/vector/hier hat es ein Beispiel:
http://www.cplusplus.com/reference/stl/vector/operator[]/
-
Hallo,
so, das mit dem Array hat funktioniert.
Bevor ich das Prog weiterschreibe brauche ich nochmal Eure Hilfe.Wie stelle ich bei der Menüauswahl ein das nur zahlen eigegeben werden dürfen.
Wenn ich nun ein Buchstaben eingebe, läuft die ganze Zeit "Falsche Eingabe, bitte........"Da ich mir das alles aus dem Internet zusammengesucht habe, weiß ich nicht was manches bedeutet.
float *kraefte = new float[anzahlkraefte];
das * zb vor dem Kraefte. Könnt Ihr mir da helfen?Danke
#include <iostream> #include <conio.h> #include <stdio.h> using namespace std; int main(int argc, char *args[]) { setlocale(LC_ALL,"GERMAN"); int menueauswahl = 0; int abbruch = 0; int anzahlkraefte = 0; int i = 0; float lagerKraft1 = 0; float lagerKraft2 = 0; float ergebnis = 0; cout << "Dieses Programm ist zum berechnen von Kräften an Trägern" << endl; cout << "Bitte geben Sie an, was Sie berechnen möchten!\n\n" << endl; cout << "------Menüe------\n\n"; cout << "-1- Eine einzelne Kraft ( Summe aller Kräfte )\n"; cout << "-2- Eine fehlende Länge zwischen den Kräften\n"; cout << "-3- Die Lagerkräfte\n"; cout << "-4- Maximale Biegemoment und wo es auftritt\n"; cout << "-5- Die Länge des Trägers\n\n"; while (menueauswahl < 1 || menueauswahl > 5) { cin >> menueauswahl; if ( menueauswahl < 1 || menueauswahl > 5 ) { cout << "Falsche Eingabe, bitte erneut versuchen\n"; } } switch(menueauswahl) { { case 1: cout << "Mit wievielen Kräften soll ich rechnen? "; cin >> anzahlkraefte; float *kraefte = new float[anzahlkraefte]; cout << "Geben Sie die Kräfte mit dem Vorzeichen ein:\n"; for(i = 0; i < anzahlkraefte; i++) { cout <<"Geben Sie Kraft Nummer " << i + 1 << " ein:"; cin >> kraefte[i]; } cout << "Geben Sie Lagerkraft A ein: "; cin >> lagerKraft1; cout << "Geben Sie Lagerkraft B ein: "; cin >> lagerKraft2; for(i = 0; i < anzahlkraefte; i++) { //zusammenrechnen ergebnis = ergebnis + kraefte[i]; } ergebnis = ergebnis + lagerKraft1; ergebnis = ergebnis + lagerKraft2; ergebnis = ergebnis * -1; cout << "Die fehlende Kraft betraegt: " << ergebnis << " kN"; } case 2: { int kraft_laenge; float *kraefte_2 = new float[anzahlkraefte]; float *laenge_2 = new float[anzahlkraefte]; cout << "Eine fehlende Länge soll berechnet werden:" << endl; cout << "Wieviele Kräfte habe Sie?" << endl; cin >> anzahlkraefte; cout << "Geben Sie nun die Kräfte und die längen ein. Die Kraft mit der fehlenden länge bitte bei der aufforderung!" << endl; for(i = 1; i < anzahlkraefte; i++) { cout <<"Geben Sie Kraft Nummer " << i << " ein: " ; cin >> kraefte_2[i]; cout <<" " << endl; cout <<"Geben Sie die Länge " << i << " ein " ; cin >> laenge_2[i]; cout <<" " << endl; } cout << "Geben Sie nun die Kraft " << i << " ein, zuder Sie die Länge berechnen möchten"; cin >> kraft_laenge; } } cin >> abbruch; return 0; }
-
Das * sind Zeiger. Diese zeigen auf eine Adresse im Speicher.
float *kraefte = new float[anzahlkraefte];bedeutet, dass Speicher für einen dynamischen Array angelegt werden soll. Dieser muss aber auch wieder mit delete[] kraefte; gelöscht werden (wenn Fertig mit allem)!
Typischerweie hast du mit float bla = 5; den Speicher auf dem Stack gelegt. Mit float *bla = new float[anzahl]; liegt der Speicher auf dem Heap. New muss immer in Verbindung mit delete verwendet werden. Bitte genauer informieren, sonst gibt es Speicherlecks die zum Absturz und undefinierten Verhalten führen.
Das Problem mit der wiederholten Eingabe wurde glaube ich schon weiter oben von jemanden geschildert.
-
Das mit der Schleife bei der Auswahl bekomme ich nicht hin.
Bei Zahlen funktioniert es, aber wenn ich versehentlich ein Buchstabe eingebe kommt noch immer falsche eingabe und füllt das ganze Fenster
-
lese dir folgenden Beitrag durch:
http://home.fhtw-berlin.de/~junghans/cref/SYNTAX/switch.htmlund versuche den zu verstehen und umzusetzen.
MfG f.-th.