Matrix
-
Ich soll eine methode schreiben die aus einer textdatei eine matrix einliest , die sieht ungefähr so aus:
3
324
123
256die erste zahl gibt dabei(3) , die zeile und spaltengröße an.
#include <iostream> #include <fstream> using namespace std; int main() { ifstream file( "Dateieinlesen.txt") ; if (!file) { cerr << "Datei existiert nicht\n" << endl; exit(-1); } // wie lese ich die datei so ein , dass ich die Matrix ins Array bekomme? double matrix [n][n]; return 0; }wie lese ich die datei so ein , dass ich die Matrix ins Array bekomme?
-
#include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; int main() { ifstream file("Dateieinlesen.txt"); if (!file) { cerr << "Datei existiert nicht\n" << endl; return -1; // Wo hast du denn exit(-1) her? } int size; file >> size; // Matrixgröße einlesen // Matrix vorbereiten vector< vector<int> > matrix(3, vector<int>(3)); // Einlesen int row = 0, col = 0; while (col != size) { while (row != size) { file >> matrix[col][row]; ++row; } row = 0; ++col; } }Das sollte funktionieren.
bnz
-
Ach komm, etwas Grundlagen solltest du doch schon mal gelernt haben.
#include <fstream> #include <stdexcept> int main() { std::ifstream ifs("Dateieinlesen.txt", ios_base::binary); if(!ifs) throw std::runtime_error("Konnte die Datei nicht öffnen!"); std::string line; std::size_t size = ifs.get() - 0x30; // Zahlenwert = ASCII-Code - ASCII-Code von 0 int** matrix; std::size_t n; try { // Matrix erstellen matrix = new int*[size]; for(n = 0; n < size; n++) { matrix[n] = new int; } } catch(const std::bad_alloc& e) { // Nicht genug Speicher vorhanden std::cerr << e.what() << '\n'; for(std::size_t i = 0; i < n; i++) delete [] matrix[i]; // Bis jetzt erzeugte Array löschen delete [] matrix; // Matrix löschen } unsigned count = 0; while(std::getline(ifs, line)) { for(n = 0; n < line.length(); n++) matrix[count][n] = line[n] - 0x30; ++count; } for(n = 0; n < size; n++) delete [] matrix[n]; delete [] matrix; }Hier würde sich auch viel bequemer mit der Standardlibrary arbeiten. (vector etc.)
-
danke ich werds mal ausprobieren

-
ich hätte noch eine Frage. die nächste aufgabe ist die determinate nach dem
emtwicklungsatz von Laplace zu erreichenen. Die Matrix ist eine R n*n matrix3
123
145
555#include <fstream> #include <iostream> using namespace std; int main(void) { int s; cout <<"Wir lesen jetzt dein Matrix ein" << endl;// endl = Zeilenumbruch ifstream datei("Dateieinlesen.txt"); datei >> s; // nur das erste Int in datei // springt in die nächste Zeile int m[s][s]; // liest Matrix ein for( int i=0; i<s; i++) { for(int j=0; j<s; j++){ datei >> m[i][j];} } datei.close(); // gibt Matrix aus for( int i=0; i<s; i++){ for(int j=0; j<s; j++){ cout << m[i][j] << " "; // << wie + in Java } cout << endl; // damit die Ausgabe stimmt } ofstream dateiausgeben("Datei");// gibt datei aus for(int i=0 ; i<s; i++){ for( int j=0; j<s; j++){ dateiausgeben << m[i][j]<< " " ;// ausgabe schön } dateiausgeben << endl; // ausgabe schön } }ich habe mir Überlegt das ich mir die Werte der 1. >Spalte in der Matix in ein extra array zu schreiben.
jetzt muss ich für die brechenung immer verschiebenden zeilen der matrix verwenden. wie kann ich das umsetzen?
und wie beachte ich die passenden vorzeichen?
-
also soweit bin ich
ich hab den Fall spalten und zeilen = 2 extra gemacht
int det(int m[][]){ // rekursiv berechnen???? int antwort; if(s==2) { antwort=m[0][0]*m[1][1]-m[0][1]*m[1][0]; //deterimate berechenen for(int i=0; i<s; i++) m[i][0] // rekursiv berechnen????? } return det(m[][]) ; // rekursiv } return antwort; } }hier fehlt jez noch das den werte der 1. spalte mal die determinate und das vorzeichen. außerdem ist mir der rekurive weg nicht ganz klar
-
Das hier macht dein Compiler vielleicht mit, aber das ist kein gültiges C++:
int m[s][s];Mach das lieber so wie Ad aCTa es vormacht, dann bist du auf der ganz sicheren Seite.
Außerdem hilft es, etwas Eigeninitiative zu zeigen, dann bekommt man auch nützliche Antworten.
-
Nimm diesen Code:
#include <fstream> #include <stdexcept> #include <vector> #include <sstream> int main() { std::ifstream ifs("Dateieinlesen.txt", std::ios_base::binary); if(!ifs) throw std::runtime_error("Fehler: Konnte Dateieinlesen.txt nicht oeffnen!"); std::size_t size = 0, count = 0; ifs >> size; ifs.ignore(2); std::vector<std::vector<int> > matrix(size, std::vector<int>(size)); std::string temp; while(std::getline(ifs, temp)) { std::stringstream ss(temp); for(std::size_t n = 0; n < size; n++) ss >> matrix[count][n]; ++count; } }Damit hast du dann die Zahlen bequem in deinem vector und kannst wie auf ein Array darauf zugreifen.