Zahlen eines Arrays in einen anderen Array speichern/Übergeben
-
Hallo,
ich lerne fleißig c++ und beschäftige mich gerade mit arrays.
Bisher habe ich es geschafft Zahlen mit einer for Schleife in meinen ersten Array einzulesen. Anschließend gibt mein Programm alles auch wieder aus. Aber wie kann ich denn z.b. meine zahlen vom 1. array an einen 2. array übergeben ? Bin für Tipps, Ratschläge und sonstige Hilfe sehr dankbar
Hier mein Programm:
#include<iostream> using namespace std; int main() { int feld1[10],z, feld2[10]; for (z=0;z<10;z++) { feld1[z]=z+1; } for (z=0;z<10;z++) { cout << feld1[z] << " "; } //system("Pause") return 0; }frohe Weihnachten
moni
-
Wie, "übergeben"? Meinst du sowas wie std::copy?
-
Bin auch Anfänger und ich hatte es so gemacht.
#include<iostream> using namespace std; int main() { int feld1[10],z, feld2[10]; for (z=0;z<10;z++) { feld1[z]=z+1; } for (z=0;z<10;z++) { cout << feld1[z] << " "; } for (z=0;z<10;z++) { feld2[z] = feld1[z]; } for (z=0;z<10;z++) { cout << feld2[z] << " "; } //system("Pause") return 0; }
-
hallo.
ein konsistenter einrückungsstil macht das ganze wesentlich leserlicher!
hier meine kommentare:
#include<iostream> using namespace std; int main() { int feld1[10], z, feld2[10]; // Wieso definierst du z und feld2 hier? Brauchst du sie schon hier? Kaum... for(z=0; z<10; z++) // Hier wäre der geeignete Ort, Z zu definieren { feld1[z]=z+1; } for(z=0; z<10; z++) // Und hier das zweite Mal falls du es lokal machst (was man eigentlich macht, alles andere wäre C-Stil) { cout << feld1[z] << " "; } return 0; // "return 0" ist unnötig, wenn man bei der main-funktion kein return hinschreibt wird automatisch 0 zurückgegeben }und die eigentliche frage kann man auf zwei arten lösen:
1.for(std::size_t i = 0; i < std::min(sizeof(feld1) / sizeof(*feld1), sizeof(feld2) / sizeof(*feld2); ++i) { feld2[i] = feld1[i]; }std::copy(feld1, feld1 + sizeof(feld1) / sizeof(*feld1), feld2);frohe weihnachten.
-
CraftPlorer schrieb:
Bin auch Anfänger und ich hatte es so gemacht.
...
Für Anfängercode und Verständnis von for-schleifen und arrays ist das richtig, aber ein bisschen fortgeschrittener, also in produktivem C++-Code würde man das nie machen. Man verwendet entweder std::copy oder nutzt gleich std::array.
-
Viele Dank für die Hilfe von jedem. Ich bin selber ein Anfänger und mit der for Schleife aus dem 1. Beitrag hat es schon geklappt

Mein Ziel war es Zahlen von 1-10 in array1 einzulesen, diese sollten dann vom programm ausgegeben werden. Anschließend sollten die Zahlen in umgekehrter Reihenfolge in Array2 gespeichert werden und ausgegeben werden.
Hier mein Programm:#include<iostream> using namespace std; int main() { int feld1[10],z, feld2[10]; for (z=0;z<10;z++) { feld1[z]=z+1; } for (z=0;z<10;z++) { cout << feld1[z] << " "; } cout << endl; for (z=10;z>0;z--) { feld2[z] = feld1[z]; } cout << endl; for (z=10;z>0;z--) { cout << feld2[z] << " "; } //system("Pause") return 0; }Mir ist zwar noch schleierhaft warum ich in meiner 2. cout-Geschichte immer die 0 und keine 1 habe, obwohl ich mich echt lange mit for Schleifen auseinadergesetzt habe(!). Aber das kommt der Lösung schon verdammt nahe!
Vielen Dank für eure Hilfe

-
moni89 schrieb:
for (z=10;z>0;z--) { feld2[z] = feld1[z]; }Denkst Du, dass das richtig ist?
(Vorsicht: Fangfrage!)
-
moni89 schrieb:
Mir ist zwar noch schleierhaft warum ich in meiner 2. cout-Geschichte immer die 0 und keine 1 habe, obwohl ich mich echt lange mit for Schleifen auseinadergesetzt habe(!). Aber das kommt der Lösung schon verdammt nahe!
Dann lass dir doch mal z ausgeben (in jeder Schleife).
Deine erste Schleife fängt mit z = 0 an und hört bei z = 10 auf.
Dabei wird die Schleife für z = 10 aber nicht mehr durchlaufen, weil die Bedingung dafür unwahr ist ( z < 10 ist unwahr). Der letzte Durchlauf ist also mit z = 9Bei den anderen Schleifen fängst du mit z = 10 an und der letzte Durchlauf ist mit z = 1
Das bringt noch ein anderes (gefährliches) Problem mit sich. Du willst auf die Elemente feld2[10] und feld1[10] zugreifen. Diese existieren aber nicht.Die Arrays haben nur 10 Elemente. Durchnummeriert von 0 bis 9.
Die Daten von feld1 sind auch nicht in umgekehrter Reihenfolge in feld2 gespeichert. Du gibst sie nur von hinten aus.
Du brauchst etwas in der Art
feld2[z] = feld1[offset-z];Den Wert für
offsetmusst du dir überlegen und dann einsetzen.
Nochmal zur Erinnerungfeld2[0] = feld1[9]; feld2[9] = feld1[0];
-
Geniale Hile/ideen/Ratschläge !!!
richtig super!!Ich habe nochmal drüber nachgedacht dank eurer Anregung. Dabei ist mir bewusst geworden dass auf der Position 0 die Zahl 1 gespeichert ist bzw bei feld2 ist auf der Position 0 ist die Zahl 10 gespeichert. Außerdem habe ich die Positionen von 0-9

Nochmal vielen Dank an Dirk für die Idee mit dem offset
Hier mein korrigierter Code://Übung4Aufgabe2) #include<iostream> using namespace std; int main() { int feld1[10],z, feld2[10]; for (z=0;z<10;z++) { feld1[z]=z+1; } for (z=0;z<10;z++) { cout << feld1[z] << " "; } cout << endl; for (z=9;z>=0;z--) { feld2[z] = feld1[9-z]; } cout << endl; for (z=0;z<10;z++) { cout << feld2[z] << " "; } //system("Pause") return 0; }
-
Nur zur Info:
Für die Kopierschleife (Zeile 16 bis 19) spielt es keine Rolle, ob sie von 9 bis 0 läuft oder von 0 bis 9 wie die anderen auch.Und richtig einrücken (Zeile bis 28) hilft ungemein beim lesen.
Auf den ersten Blick denkt man, main wäre in Zeile 10 zu Ende.
-
okay
