Aufgabe:
Es geht um ein Programm in dem ich
1. Schritt.
v für Vektor eingebe
m für Matrix eingebe
2. Schritt (Je nach Wahl aus Schritt eins)
dimenson von v eingebe, zb 2 (also v hat zwei Elemente)
oder dimension von m eingebe, zb 2x2.
3. Schritt (Je nach Wahl aus Schritt 1 und Schritt 2)
die Elemente einlese.
Dann wiederholt sich der Schritt und ich kann ein Zweites Element "kreieren"
Und je nach dem was ich insgesamt (Also welche zwei ich) gewählt habe gibt das Programm mir raus :
(i) für Vektorprodukt: s "Zahl". Wobei s für scalar steht und Zahl das Vektorprodukt ist.
(ii) Matrixvektorprodukt: v "Zahlen" , wobei v für Vektor steht und Zahlen die Einträge dieses Vektors sind.
(iii) Matrixprodukt: m "Zahlen, wobei m für Matrix steht und Zahlen für Einträge stehen.
Was hat bisher geklappt ?
Bis vorgestern hatte ich
Vektoren einlesen können, und es gab mir korrekterweise das Richtige heraus.
Was klappt seit gestern nicht ?
Gestern konnte ich eine Matrix m "kreieren", indem ich zuerst ein m eintippte, dann die dimension zb 2 2 (für 2x2) dann
konnte ich alle Einträge eingeben (zb 100 010 001) und es gab mir das heraus. !!
Was klappt seit gestern nicht ?
Ich wollte mich dem Matrix-Vektor-Produkt widmen, dann konnte ich das Programm starten, und
dann konnte ich mittels m eine Matrix wählen, bestimme die Dimension und auch kann ich sie füllen mit einträgen.
Im zweiten Schritt wähle ich v für Vektor und kann die dimension wählen, wenn ich aber Einträge eintippe kann ich das zwar tun aber nachdem ich den letzten Eintrag eintippe und mit Enter bestätige kommt mir eine Fehlermeldung:
Fehlermeldung: program terminated by signal: Segmentation fault
In einem anderen Compiler der selbe fehler: exited, segmentation fault
Frage:
Kann mir jemand weiterhelfen ?
Der Code ist auf repl.it zu sehen: https://repl.it/@limonade1234/Vector-and-Matrix-operations
Ein Video meines Fehlers habe ich auf youtube geladen: https://www.youtube.com/watch?v=k8Hrr3n-l7o
Beschreibung des Programms und Auftrag ist auch in replit unter description.md als file hinterlegt.
Achtung: Wir dürfen für dieses Programm keine Klassen verwenden, auch dürfen wir matrix library nicht includen,
es geht darum dass man genau diese Operationen in Funktionen aufteilt und so zum laufen bringt.
Weiter ist alles was in diesem Code steht meine Arbeit, also ich habe mit einem leeren Dok angefangen und zuerst mal in Kommentaren geschrieben, was ich eigentlich tun will.
Code hier gepostet:
#include <iostream>
#include <vector>
//Create a Vector with this Method
void vector(std::vector<int>& vec){
int size_vec; // creates the variable for the size of a vector.
//std::cout << "Enter the Size of the Vector ? " << std::endl; // How many elements should the vectore have ?
std::cin >> size_vec; // store the number of elements (size) in the variable size_vec.
vec.resize(size_vec); // resize the vector with the resize method.
//std::cout << "Enter the " << size_vec << " Elements of the Vector ? " << std::endl; // Enter the elements into the vector.
for(int i = 0 ; i < size_vec ; ++i){ //Use a for loop for that.
std::cin >> vec[i];
}
/*
std::cout << "v " << vec.size() << std::endl; //Output the Vectors elements.
for(unsigned int k = 0 ; k < vec.size(); ++k){ // Use a for loop for that.
std::cout << vec[k] << " "; // Output the elements separated by an space.
}
*/
}
//TODO: Write method to create, size and fill Matrix.
void matrix(std::vector<std::vector<int>>& mat){
int m;
int n;
//std::cout << "Enter number of rows: " << std::endl;
std::cin >> m;
//std::cout << "Enter number of columns: " << std::endl;
std::cin >> n;
mat.resize(m, std::vector<int>(n)); // resize the matrix.
for(int i=0 ; i<m ; ++i){
for(int j=0; j<n ; ++j){
//std::cout << "Enter Elemnts of Matrix: " << std::endl;
std::cin>>mat[i][j];}
std::cout<<std::endl;}
/*
std::cout<<"m"<< m << n << std::endl;
for(int q=0;q<m;++q){
for(int w=0;w<n;++w){
std::cout<<mat[q][w]<<" ";}
std::cout<<std::endl;
}
*/
}
//------------------ Operation Methods ------------------//
//------------------------ below ------------------------//
//PRE: a and b are the same length.
//POST: Returns the dot product of a and b.
int dot_product(std::vector<int>& a, std::vector<int>& b){
int product = 0;
for(unsigned int k=0 ; k < b.size() ; ++k){
product += a[k]*b[k];
}
return product;
}
//TODO: Write function for Matrix vector product
//PRE: input is m and v.
//POST:
void mvp(std::vector<std::vector<int>>& c, std::vector<int>& d){
std::vector<int> mv_product;
for(unsigned int h = 0 ; h < d.size() ; ++h){
for(unsigned int g = 0 ; g < d.size() ; ++g){
mv_product[h] += c[h][g]*d[g];
}
}
}
//TODO: Write function for MATRIXPRODUCT
//PRE: input is m and m.
//POST:
//code here:
int main() {
char x1;
//std::cout << " Press m for matrix and v for vector: " << std::endl;
std::cin >> x1;
std::vector<int> a1;
std::vector<std::vector<int>> b1;
if(x1=='v'){
vector(a1);}
if(x1=='m'){
matrix(b1);}
char x2;
//std::cout << " Again, Press m for matrix and v for vector: " << std::endl;
std::cin >> x2;
std::vector<int> a2;
std::vector<std::vector<int>> b2;
if(x2=='v')
vector(a2);
if(x2=='m')
matrix(b2);
//std::cout << "\n" << "s" << dot_product(a,b) << std::endl;
//TODO: If vector vector check dimensoins, then call dot product function. And output letter and return value.
if(x1=='v' || x2 == 'v')
std::cout << "s " << dot_product(a1,a2) << std::endl;
//TODO: If matrix vector check dimensoins, call Matrix-vector product. And output letter and return value.
if(x1=='m' || x2 == 'v')
mvp(b1, a2);
//TODO: If matrix matrix call Matrix product. And output letter and return value.
//TODO: If vector matrix output error.
return 0;
}
: