Problem mit Arrays
-
Hallo zusammen,
meine Hausaufgabe lautet, ein Wetterprogramm zu erstellen, welches die Durchschnittstemperatur der vom user eingegebenen Werte für die gesamte Woche ermittelt und zwar mit Hilfe eines Arrays von 7 Elementen. Nun haben wir das Thema Arrays zwar in der Schule behandelt, aber nur mit Zuweisung von Zufallszahlen – wie bsw. Feld[1] = srand() % 49+1.
Ich hänge noch ziemlich am Anfang und mein Problem besteht darin, daß ich Zahlen über die Tastatur einlesen und Feldpositionen zuweisen will, um diese anschließend auf dem Bildschirm auszugeben. Statt der von mir eingegebenen Zahlenwerte erhalte ich aber völlig andere als Bildschirmausgabe zurück und weiß nicht, woran es liegt. Bei normalen Variablen würde ich vermuten, daß diese mit 0 initialisiert werden müssen, habe aber keine Ahnung, wie das bei Arrays funktioniert.
#include <iostream> using namespace std; int main() { int zahl1, zahl2; int feld[2];//Definition eines Feldes mit 2 Elementen feld[0] = zahl1, feld[1] = zahl2; //Zuweisung zu den Feldpositionen cout << "Bitte erste Zahl eingeben" << endl; cin >> zahl1; cout << "Bitte zweite Zahl eingeben" << endl; cin >> zahl2; cout << "Ausgabe: " << feld[0] <<" "<< feld[1] << endl; system ("pause"); return 0; }
-
denkfehler deinerseits, aber ich denke, das wusstest du schon ^^
#include <iostream> using namespace std; int main() { int zahl1, zahl2; int feld[2];//Definition eines Feldes mit 2 Elementen feld[0] = zahl1, feld[1] = zahl2; //Zuweisung zu den Feldpositionen // zahl1 und zahl2 sind uninitalisiert, haben also einen undefinierten Wert. Den schreibst du nun in das Array cout << "Bitte erste Zahl eingeben" << endl; cin >> zahl1; // zahl1 bekommt erst hier einen Wert cout << "Bitte zweite Zahl eingeben" << endl; cin >> zahl2; // zahl2 bekommt erst hier einen Wert cout << "Ausgabe: " << feld[0] <<" "<< feld[1] << endl; // das array hat sich nicht verändert und liefert undefinierte Werte zurück system ("pause"); // unschön return 0; }
du kannst Arrayfelder direkt wie Variablen verwenden. Also kannst du statt
cin >> zahl1;
auchcin >> feld[0];
schreibenDas ganze kann man dann schön innerhalb einer Schleife abarbeiten
for ( int i = 0; i < 7; ++i ) { cout << "Bitte " << i + 1 << ". Zahl eingeben" << endl; cin >> feld[i]; }
-
Danke für die schnelle Antwort. Stehe noch ganz am Anfang, was C++ betrifft und bin für jede Hilfe dankbar.
Also darf ich die Zuweisung feld[0]=zahl 1; erst nach der Initialisierung eingeben. Das war wohl der Denkfehler.
Das ganze kann man dann schön innerhalb einer Schleife abarbeiten.
for ( int i = 0; i < 7; ++i )Ich weiß, daß das mit Zahlen funktioniert, aber wollte im fertigen Programm dann ein string oder char array definieren. Also "Mo", "Di", ... statt Zahl1, Zahl2.
unschön
Wir arbeiten in der Schule mit VC++ 6, aber zuhause benutze ich Devcpp und wenn ich da keine Anweisung wie system ("pause") am Ende des Programms einfüge, dann schließt sich das Dos-Fenster sofort wieder.
-
Stryder schrieb:
...
Also darf ich die Zuweisung feld[0]=zahl1; erst nach der Initialisierung eingeben....
Ich glaube, Du hast das misverstanden.
Du brauchst die Variablen "zahl1" und "zahl2" gar nicht !!Ich verkürze hier mal Deinen Sourcecode so dass er funktioniert wie gewünscht:
#include <iostream> using namespace std; int main() { int feld[2];//Definition eines Feldes mit 2 Elementen cout << "Bitte erste Zahl eingeben" << endl; cin >> feld[0]; cout << "Bitte zweite Zahl eingeben" << endl; cin >> feld[1]; cout << "Ausgabe: " << feld[0] <<" "<< feld[1] << endl; system ("pause"); return 0; }
(das hat zwutz oben schon in eine Schleife verallgemeinert ... ich habe mal minimalst geändert, damit Dir evtl. auffällt, wo Dein Fehler war)
... und das funktioniert unabhängig vom Typen.
Also auch, wenn Du statt "int" da "string" oder irgendetwas Anderes angibst - solange es für das "Andere" einen operator>>() gibt (und wenn es bislang keinen gibt, kannst Du einfach selbst einen schreiben)Gruß,
Simon2.
-
Ok, unten mal ein Lösungsansatz, der zwar funktioniert, aber mir noch nicht gefällt. Deshalb zwei Fragen dazu:
1. läßt sich die Variable summe nicht kürzer darstellen, als:
summe = feld[0] + feld [1] ..+ feld[6]);
?
Ich habe es mit summe+=feld[i]; versucht. Das akzeptiert der compiler zwar ohne Fehlermeldung, aber das Programm stürzt bei der Ausführung ab.--------------------------
2. Die Schleife
for ( int i=0; i<7; ++i ) { cout << "Bitte Temperatur von Tag " << i+1 <<" eingeben" << endl; cin >> feld[i];
gibt mir die Tage von 1 bis 7 aus. Wie kann ich den Feldelementen neben ihrem Wert noch einen Namen zuweisen und anschließend beides in eine Schleife einbinden ? So daß ich als Ausgabe nicht mehr "Bitte Temperatur von Tag 1 eingeben", sondern "Bitte Temperatur von Mo eingeben", erhalte - also von Mo bis So hochgezählt wird.
------------------------
#include <iostream> using namespace std; int main() { int i; double summe, ergebnis; int feld[7]; //Definition des Feldes für 7 Tage for ( int i=0; i<7; ++i ) { cout << "bitte Temperatur von Tag " << i+1 <<" eingeben" << endl; cin >> feld[i]; } // Ermittlung der Durschnittstemperatur summe = (feld[0] + feld [1] + feld[2] + feld[3] + feld[4] + feld[5] + feld[6]); ergebnis = summe / 7; cout << "Die Durchschnittstemperatur der Woche betraegt :" << ergebnis << " Grad Celsius" << endl; system ("pause"); // wie kann man das besser machen ? return 0; }
-
Stryder schrieb:
system ("pause"); // wie kann man das besser machen ?
2 Foren weiter oben im Konsolen FAQ steht wie
http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html
-
#include <iostream> using namespace std; int main() { int i; double summe = 0, ergebnis; // <- summe auf 0 gesetzt int feld[7]; //Definition des Feldes für 7 Tage char* namen[7] = { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" }; for ( int i=0; i<7; ++i ) { cout << "bitte Temperatur von Tag " << namen[i] <<" eingeben" << endl; cin >> feld[i]; summe += feld[i]; } // Ermittlung der Durschnittstemperatur ergebnis = summe / 7; cout << "Die Durchschnittstemperatur der Woche betraegt :" << ergebnis << " Grad Celsius" << endl; char ch; cout << "Taste druecken um das programm zu beenden:" << endl; cin >> ch; return 0; }
-
Danke für die Hilfe.
Ich vermute mal, bei
char* namen[7] = { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" };
handelt es sich um Zeigervariablen ? Die haben wir bisher im Unterricht noch nicht behandelt.