bitte helfen - komm nicht weiter....
-
hallo erstmal....
ich muss ein programm machen welches mir 20 messwerte so verarbeitet das am schluss 19 ableitungen dieser werte als tabelle rauskommen....
das hab ich alles gemacht. ansich ist das programm fertig... ABER mich stoert ne ganz dumme sache....
bei der eingabe der einzelnen messwerte duerfen ja keine buchstaben reinkommen... sonst kackt das ding ab... nur int zahlen sind erlaubt...
jetzt will ich das eine fehlermeldung kommt falls ein buchstabe oder ein anderes unzulaessiges zeichen eingegeben wurde.... und das der messwert nochmal eingegeben werden kann....sollte so aussehen
messwert1: 23123213
messwert2: 223324
messwert3: a23423
unzulaessiges zeichen, bitte wiederhole die eingabe!
messwert3: 2343
messwert4: ....
.
.
.hier der code:
#include <iostream.h> #include <iomanip.h> //Datenbank fuer Textformatierung void main()//Anfang Hauptprogramm { double m[20], deltaT, dmdt[20]; int i; char wh = 'J'; while (wh == 'J' || wh == 'j' )//eingabewiederholung fuer neuen durchgang { for (i=0; i<20; i++) { cout << setw(2) << i+1 << ". Messwert: "; //Messwertdeklarierung cin >> m[i]; //Eingabe der Messwerte 1-20 } // end for cout << endl << "Zeitschritt: "; cin >> deltaT; cout << endl; // Eingabe des gewuenschten Zeitschrittes cout << "*******************************************" << endl << endl; cout << setw(3) << "i" << setw(2) << "|" << setw(10) << "Messwert" << setw(3) << "|" << setw(10) << "Zeit" << setw(4) << "|" << setw(10) << "Ableitung" << endl; cout << setw(5) << "|" << setw(13) << "|" << setw(14) << "|" << endl; //tabellenkopf + Tabellenformatierung for (i=0; i<19; i++) { dmdt[i] = (m[i+1] - m[i]) / deltaT; //Ableitung cout << setw(3) << i+1 << setw(2) << "|" << setw(9) << m[i] << setw(4) << "|" << setw(10) << deltaT*(i+1) << setw(4) << "|" << setw(10) << dmdt[i] << endl;//Messwerteingabe in die Tabelle } // end for cout << endl << "Wiederholen [J/N] "; cin >> wh; cout << endl << endl; }//end while }// end mainhab auf http://mandrill.fuxx0r.net/c++/faq:cin was gefunden was mein problem beheben koennte.... aber ich kriegs nicht gebacken irgendwas von da so in meinen quellcode reinzutun das es passen koennte....
bitte helft mir, bin doch noch ein nub;D
was noch vlt wichtig waere.... ich benutz visual studio 6++
-
Hallo,
es heißt int main() und ganz unten kommt ein return 0; rein. Des Weiteren schreibt man statt #include <iostream.h> folgendes:
#include <iostream> #include <iomanip> //Keine Datenbank, das ist ne Header-Datei! using namespace std; double einlesen() { double d; do { //Solange eingeben lassen, bis die Pfeife nen double Werte eingibt cout<<"Bitte Messwert eingeben: "; cin>>d; }while(!cin.good()); //Fehlerüberprüfung return d; }; //Fragt den Benutzer nach einer weiteren Runde char menu() { char c; do { cout<<"Wiederholen (j/n)?"; cin>>c; }while (c != 'j' || c != 'n'); return c; }; int main(int argc, char **argv) { double m[20]; do { for (int i=0;i<20;++i) m[i] = einlesen(); //weiter mit dem restlichen Programm }while (menu() != 'n'); return 0; };Das sollte erst mal genug Futter sein

MfG
GPC
MfG
GPC
-
so... hab selber was gefunden.... keine ahnung ob das gut ist...
#include <iostream.h> #include <iomanip.h> //Datenbank fuer Textformatierung #include <stdlib.h> #include <string.h> void main()//Anfang Hauptprogramm { double m[20], deltaT, dmdt[20]; int i; char wh = 'J'; while (wh == 'J' || wh == 'j' )//eingabewiederholung fuer neuen durchgang { for (i=0; i<20; i++) { cout << setw(2) << i+1 << ". Messwert: "; //Messwertdeklarierung char temp[255]; cin >> temp; //cin >> m[i]; //Eingabe der Messwerte 1-20 m[i] = atof (temp); if (m[i] == 0 && !(strcmp (temp, "0") == 0) && !(strcmp (temp, "0.0") == 0)) { i--; cout << "bitte geben sie ne zahl ein\n"; continue; } } cout << endl << "Zeitschritt: "; cin >> deltaT; cout << endl; // Eingabe des gewuenschten Zeitschrittes cout << "*******************************************" << endl << endl; cout << setw(3) << "i" << setw(2) << "|" << setw(10) << "Messwert" << setw(3) << "|" << setw(10) << "Zeit" << setw(4) << "|" << setw(10) << "Ableitung" << endl; cout << setw(5) << "|" << setw(13) << "|" << setw(14) << "|" << endl; //tabellenkopf + Tabellenformatierung for (i=0; i<19; i++) { dmdt[i] = (m[i+1] - m[i]) / deltaT; //Ableitung cout << setw(3) << i+1 << setw(2) << "|" << setw(9) << m[i] << setw(4) << "|" << setw(10) << deltaT*(i+1) << setw(4) << "|" << setw(10) << dmdt[i] << endl;//Messwerteingabe in die Tabelle } // end for cout << endl << "Wiederholen [J/N] "; cin >> wh; cout << endl << endl; }//end while }// end maindas ding geht jetzt fast so wie ichs will... nur is dumm wenn der buchstabe mitten in der zahl oder am ende steht.... wenn er mitten drin steht dann nimmt sich das prog nur die zahl bis zum buchstaben... z.b. 34534j4435 = 34534 ....
oder wenn der buchstabe am ende steht.... kommt leider keine fehlermeldung..
-
Hallo
GPC schrieb:
es heißt int main() und ganz unten kommt ein return 0; rein. Des Weiteren schreibt man statt #include <iostream.h> folgendes:
Das solltest du trotzdem noch ändern.
chrische
-
Also ich hätte da auch ein kleines Problem!
Ich muss da für die Schule ein Programm erstellen, mit einer Würfelstatistik. Zum Glück hab ich von einem Kumpel da schon ein fertiges Programm bekommen, allerdings mussten wir noch ein Unterprogramm einbauen! Ok, so weit so gut, das Programm an sich funktioniert ja, hier is mal der Code:// Turbo, 28.4.2006, all rights reserved
#include <iostream.h> // für cin() und cout()
#include <iomanip.h> // für setw()...
#include <stdlib.h> // für rand() und srand()
#include <time.h> // für time()
#include <conio.h> // für getch()// globale Variablen
long int anz=0;
long int w[6]; // Array mit 6 Zahlen
int k; // für Zählschleifen
double p[6];
double j;void wuerfeln(void); // UP-Würfeln mit globalen Variablen
void auswerten(void); // UP-Auswerten mit globalen Variablen
void diagramm(void); // UP-Diagramm mit globalen Variablenint main()
{
int wurf;// Initialisieren
for(k=0;k<=5;k++)
{ w[k]=0;
p[k]=0;
}
srand( (unsigned)time( NULL ) ); //Zufallszahlen ermitteln
cout << "Statistische Auswertung zum Würfeln:" << endl << endl;
cout << "Wieviel mal würfeln = ";
cin >> anz;wuerfeln(); // Aufruf des UP-Würfeln
auswerten(); // Aufruf des UP-Auswerten
clrscr() ;
diagramm(); // Aufruf des UP-Diagramm
getchar();
return 0;
}
void wuerfeln(void) // UP-Würfeln beginnt
{for(k=1;k<=anz;k++)
{ w[random(6)]+=1;
}
}// Auswerten und Schreiben auf bs
void auswerten(void) // UP-Auswerten beginnt
{cout.setf(ios:: showpoint);
cout << endl;
for(k=0;k<=5;k++)
{ cout << "Die " << k+1 << " wurde " << w[k] << " mal gewürfelt" << endl;
}
cout << endl;
for(k=0;k<=5;k++)
{ cout << "Die " << k+1 << " wurde mit rel. Häufigkeit von ";
cout << setw(6)<< (double)w[k]/anz << " gewürfelt" << endl;
}
cout << endl;
for(k=0;k<=5;k++)
{ cout << "Die " << k+1 << " wurde mit proz. Häufigkeit von ";
cout << setw(6) << (double)w[k]/anz*100 << " % gewürfelt" << endl;
}
getch();
}// Versuch eines Balkendiagrammes für rel. Häufigkeiten
void diagramm(void) // UP-Diagramm beginnt
{for(k=0;k<=5;k++)
{ p[k]=(double)w[k]/anz;
}
cout.setf(ios:: fixed);
cout << "Grafische Darstellung der Verteilung:" << endl << endl;
for(j=0.5;j>=0.0;j-=0.05)
{ cout << setw(4) << j << " | ";
for(k=0;k<=5;k++)
{ if(p[k]>=j)
{ cout << "x ";
}
else
{ cout << " ";
}
}
cout << endl;
}
cout << " |____________" << endl;
cout << " 1 2 3 4 5 6" << endl;
}So, jetzt hätte ich da ein paar Fragen zu einigen Codes! Was bedeutet denn dieses "cout.setf(ios:: showpoint)" im Anfang des 2. UP? Genauso "cout.setf(ios:: fixed)" im 3. UP?
Und eine letzte Frage: Was bewirkt setw()?
-
msdn?
google?
rtfm!
-
GPC schrieb:
...und ganz unten kommt ein return 0; rein.
Das stimmt definitiv nicht.

-
Warum nicht?
-
return 0 wird in main standardmäßig angenommen:
C++ Final Draft schrieb:
-5- A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing
return 0;
-
sry jungs.... ich komm einfach nicht weiter.... und das was GPC mir geschrieben hat konnte ich in keinster form verarbeiten.... hat allein 2 tage gebraucht bis ich meine version fertig hatte

und jez geht nichtmal die perfekt
kann vllt einer meinen code mit dem vom gpc kombinieren so wie er gehen sollte? wuerd mich doch interessieren obs geht oder nicht.... nur bin ich zu nub fuer=(
-
Bissl googln hilft immer.

ztu setw: http://www.cplusplus.com/ref/iostream/iomanip/setw.htmlZm Eingabeproblem: Im Grunde musst du nur std::cin.good() überprüfen nach der Eingabe (also if...) und dann halt Fehler ausgeben, eingabe zurücksetzten und neu machen oder wie auch immer du es willst.
-
ju das muss ich.... aber beim besten willen steh ich grade mehr als auf dem schlauch.... hab mich die letzten tage durch millionen seiten und beitraege gewuehlt und so diese eingabe zusammengebastelt.... teilweise weiss ich garnicht was und warum ich das tue aber es funktioniert fast.....
das problem ist das ich meine fehler immer wieder wiederhole... ich dreh mich nur im kreis.... deswegen bin ich jetzt hier.... mit der hoffnung das mir jemand nen echt guten tip gibt den ICH verwerten kann mit meinen kenntnissen... oder das jemand eine mustereingabe bastelt...aber dann bitte mit erklaerung damit ichs versteh sonst hats kein sinn^^
-
Hallo!
Hilft Dir das weiter?
bool ErfrageMesswert( int i , double *pWert) { bool ZahlOk = true ; char input[80], *endptr ; double BufferWert = 0.0 ; cout << setw(2) << i+1 << ". Messwert: "; //Messwertdeklarierung cin >> input; BufferWert = strtod( input , &endptr ); // Rückgabe des Wertes nur, wenn Zahl ok if( *endptr == '\0' ) { // Es wurden keine ungültigen Zeichen im String input gefunden *pWert = BufferWert; } else { cout << "Keine Zahl!" ; ZahlOk = false ; } return ZahlOk ; } int main(int argc, char* argv[]) { int i = 0 ; double m[2] ; // Erfragen der einzelnen Messwerte. Ist eine Eingabe nicht ok, wird // sie erneut abgefragt. for( int i = 0 ; i < 2 ; ) { if( ErfrageMesswert( i, &m[i] ) ) { i++ ; } } getch(); return 0; }