Array und Funktionen
-
Hallo,
ich bin ziemlicher Anfänger in C++. Habe mir auch schon viele durchgelesen vonwegen Pointern und so. Aber ich bekomme es irgendwie nicht auf die Reihe. Wäre schön wenn jemand helfen könnte. Ich möchte eine Funktion zum auslesen von Daten aus einer Datei schreiben und die daten sollen als Array zurückgegeben werden. Das das nicht direkt geht hab ich schon rausgefunden. Aber ich weiss net wie mans macht. Hier ist mal der Code:
#include <iostream> #include <fstream> #include <string> #include <stdlib.h> using namespace std; typedef float Vektor[3]; typedef Vektor Matrix[3]; Matrix lies() { Matrix indata; ifstream in ("datei.txt"); while(!in.eof()); { for(int i=0; i <= 3; ++i) { for(int j=0; i <= 3; ++i) { in >> indata.a[i][j]; cout<<"i"<< endl; } } } return &indata; } int main() { Matrix newmatrix; newmatrix=lies(); for(int i = 0; i <= 3; ++i) { for(int j = 0; j <= 3; ++j) { cout<<newmatrix[i][j]; } } }
Wäre schön wenn mir jemand von euch helfen könnte
-
Also normalerweise übergibt man einen array indem man einen Zeiger auf sein 1. Element übergibt und falls erforderlich auch noch die länge des Arrays
Bsp:
float *function(float *array, int size);
Dann musst du dich halt mit dem Zeiger da durchhangeln, wenn du es komfortabler (aber auch langsamer) haben willst kannst du einen vector benutzen.
Bsp:
#include <vector> vector<float> function(vector<float> array);
-
Danke erstmal
Wie rufe ich dann die Funktion auf und wie gebe ich die werte zurück?
-
Die eingebauten Arrays sind ganz gruselig, was die Verwendung in Parametern oder Rückgabewerten verwendet. Ich wäre für zwei structs:
struct Vector { double rows[4] }; struct Matrix { Vector lines[4] }; Matrix funktion() { Matrix m; m.lines[1].rows[2] = 5; // etc. return m; }
Und wenn dir das '.lines' und '.rows' zuviel wird, gibt es boost::array, was die Vorteile von eingebauten Arrays mit der einfachen Handhabung aller Nicht-Array-Typen vereint: http://www.boost.org/.
-
Dadurch das du einen Zeiger übergeben hast musst du den Array nicht mehr zurück geben, da alle Veränderunger die du in der Funktion am Array machst, am "Original" Array gemacht wurden, wird das zurück geben hinfällig.
Hier mal ein Bsp. zum aufruf, ich hoffe es ist nicht allzu unverständlich.
void function(int *pArray, int size) { // Hier ein kleines Bsp um den Array auszugeben. for(int i = 0; i < size; i++) { cout << array[i] << " "; } } const int ARRAY_SIZE = 10; int array[ARRAY_SIZE] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // Hier jetzt der Aufruf: function(array, ARRAY_SIZE); // Oder was das selbe ist: function(&array[0], ARRAY_SIZE);
-
Erstmal vielen Dank, das mit dem einlesen klappt schonmal,
ich hätte noch eine Frage. Das PProgramm soll dazu da sein ein lineares Gleichungssystem mit einer 3x3 oder 4x4 Matrix zu lösen.Gibt es eine möglichkeit zu testen wie viele Elemente in einer Zeile stehen so das sich danach denn array mit den Daten der Matrix füllen kann?