Matrize aus mehreren Vektoren erzeugen

chebsam

Grünschnabel
Hallo,

möchte gerne wissen, wie ich aus 5 Vektoren spaltenweise eine Matrize erzeuge.

also ich hab folgende Vektoren a=(1,2) b=(3,4) c=(17, 4) d=(9,0) e=(3,8) und am Ende soll eine 5x2-Matrix ausgegeben werden.

Hat jemand vielleicht eine Lösung. Hab einen Matlab-Code, den ich in C umprogrammieren soll...C hab ich lange nicht mehr gemacht

Danke.
 
möchte gerne wissen, wie ich aus 5 Vektoren spaltenweise eine Matrize erzeuge.

also ich hab folgende Vektoren a=(1,2) b=(3,4) c=(17, 4) d=(9,0) e=(3,8) und am Ende soll eine 5x2-Matrix ausgegeben werden.
Hallo, ganz schnell geht´s zum Beispiel mit diesem Einzeiler:
Code:
int matrix[5][2] = { { 1,2 }, { 3,4 }, { 17,4 }, { 9,0 }, {3,8 } };
Falls aber deine Werte, Vektorgrößen oder -anzahlen variabel sein sollen, so
muss eine kleine Hilfsfunktion her. Hab´s nun nicht getestet, aber irgendwie so ist der Ansatz:
Code:
void KopiereVektorInMatrix(int* matrix[2], int* vektor, int zeile) {
  int j;
  for (j = 0; j < sizeof(vektor); j++)
    matrix[zeile][j] = vektor[j];
}

/* Beispiel: */
int a[] = { 1, 2 };
int m[5][2];
KopiereVektorInMatrix(m, a, 3);  // kopiert a in die 4. Zeile von m
Natürlich gehört noch ein gewisser Overhead dazu, um die Arraygrenzen nicht zu überschreiten.
 
Zuletzt bearbeitet:
Hallo,
erstmal vielen Dank für deine Antwort...

Eine grundsetzliche Frage: werden Vektoren in C spaltenweise oder zeilenweise deklariert, also wenn ich schreibe int a[]=(5,3) ist das dann eine Zeile?

Hab mir den Code angeguckt und glaube, dass der Vektor a nicht, wie gewollt, spaltenweise, sondern zeilenweise kopiert wird, oder?
Will es am besten mir konkreten Vektoren mal testen, aber irgendwie fehlt mir das Wissen dazu. Hab im Inet viele Einführungen gefunden, aber nichts konkretes.

Brauche eine 576x750 Matrix, die ich nach und nach mit Vektoren spaltenweise fülle...bin (nur) soweit gekommen:

Code:
#include<stdio.h>
#include<stdlib.h>

void VektorenSpaltenweiseInMatrizeKopieren(int* matrix[576][750], int* vektor, int zeile) //Funktionsprototyp: Hilfe für Compiler

int main(void)
{
 int j;
 int a[750]={ones} //möchte hier einen Vektor mit Einsen erzeugen, der dann eine Spalte der Matrix bilden soll  
    
    double VektorenSpaltenweiseInMatrizeKopieren(int* matrix[576][750], int* vektor, int zeile) 
    {
         for (j = 0; j < sizeof(vektor); j++)
         matrix[zeile][j] = vektor[j];
         return matrix;
    }
 return matrix;
 printf("matrix ist ", matrix);
 system("pause")
}
 
hm. nehemen wir mal an das wäre soetwas wie ein kordinatensystem, nur das hier in der angabe erst di y-Achse und dann die y-Achse angegeben wird.

Also, vertausche doch vll einfach
Code:
         matrix[zeile][j] = vektor[j];
//zu:
         matrix[j][zeile] = vektor[j];

Und denn evntl noch die forschleife anpassen^^
 
Hi.
Eine grundsetzliche Frage: werden Vektoren in C spaltenweise oder zeilenweise deklariert, also wenn ich schreibe int a[]=(5,3)
... dann ist das zunächst einmal kein korrekter C Code.
und es ist das dann eine Zeile?

Hab mir den Code angeguckt und glaube, dass der Vektor a nicht, wie gewollt, spaltenweise, sondern zeilenweise kopiert wird, oder?
Das könnte man durch die Benennung der Variablen "zeile" vermuten. Ja.

Allerdings ist das Ansichtssache. Das kannst du dir vorstellen wie du willst.
Will es am besten mir konkreten Vektoren mal testen, aber irgendwie fehlt mir das Wissen dazu. Hab im Inet viele Einführungen gefunden, aber nichts konkretes.
Schau dir mal das Buch "Numerical Recipes in C" an. (gibt es evtl. in der nächsten Bibliothek bzw. findest du auch einiges dazu im Netz.)
Brauche eine 576x750 Matrix, die ich nach und nach mit Vektoren spaltenweise fülle...bin (nur) soweit gekommen:

Code:
#include<stdio.h>
#include<stdlib.h>

void VektorenSpaltenweiseInMatrizeKopieren(int* matrix[576][750], int* vektor, int zeile) //Funktionsprototyp: Hilfe für Compiler

int main(void)
{
 int j;
 int a[750]={ones} //möchte hier einen Vektor mit Einsen erzeugen, der dann eine Spalte der Matrix bilden soll  
    
    double VektorenSpaltenweiseInMatrizeKopieren(int* matrix[576][750], int* vektor, int zeile) 
    {
         for (j = 0; j < sizeof(vektor); j++)
         matrix[zeile][j] = vektor[j];
         return matrix;
    }
 return matrix;
 printf("matrix ist ", matrix);
 system("pause")
}
Den Code kann man ja nicht mal kompilieren. Bist du dir sicher, das du diese Aufgabe bewältigen kannst? Es scheint deine Aussage du hast lange nichts mehr mit C gemacht ist eine größere Untertreibung... ?! Besorg dir am besten erstmal ein C Grundlagen Buch und arbeite es durch.

Außerdem enthält der Code von Onkel Schuppig teilweise grobe Fehler. Die Verwendung von sizeof ist völlig unsinnig in der KopiereVektorInMatrix Funktion.

Array mit einem Wert initialisieren:
C:
int a[200];

for (int i = 0; i < sizeof(a) / sizeof(*a); ++i) {
  a[i] = 1;
}
Bessere KopiereVektorInMatrix Funktion (es wird spaltenweise kopiert):
C:
/* Funktion die einen Vektor der Länge l in die angegebene Spalte einer Matrix kopiert */
void KopiereVektorInMatrix(int** matrix, int spalte, int vektor[], int l) {
  for (int i = 0; i < l; ++i) {
    matrix[i][spalte] = vektor[i];
  }
}
Verwendung:
C:
int* matrix[200]; // Matrix mit 200 Zeilen ...
for (int i = 0; i < sizeof(matrix)/sizeof(*matrix); ++i) {
  matrix[i] = calloc(300, sizeof(**matrix)); // .. und 300 Spalten
}

// Vektor in die 6te Spalte kopieren:
KopiereVektorInMatrix(matrix, 5, a, sizeof(a)/sizeof(*a));
Zum Schluss mußt du natürlich dafür sorgen, dass die Zeilen der Matrix wieder freigegeben werden.

Gruß
 
Danke für die Antwort und Funktion...

Code:
int a[200]; for (int i = 0; i < sizeof(a) / sizeof(*a); ++i){
  a[i] = 1;}
berechnet man mit sizeof(a) / sizeof(*a) die Länge des Vektors? Warum dividiert man dazu durch *a (Pionter)?

Danke.
 
Danke für die Antwort und Funktion...


berechnet man mit sizeof(a) / sizeof(*a) die Länge des Vektors? Warum dividiert man dazu durch *a (Pionter)?
Man berechnet damit die Anzahl der Elemente im Array. sizeof(a) gibt die Größe von a in Bytes zurück. sizeof(*a) entspricht sizeof(a[0]) und gibt die Größe in Bytes des ersten Elementes des Array zurück.

Teilt man nun die Gesamtgröße durch die Größe eines Elementes (wobei alle Elemente gleich groß sind) erhält man...

Gruß
 
Hab versucht, die Funktion mal zu testen aber irgendwie bekomme ich es nicht hin...will einfach einen vektor vorgeben und dann in eine spalte reinkopieren und mir das als ausgabe angucken.

wie geht das aber?
man muss wohl mit scanf und printf arbeiten so viel ich weiß...
 
Hi.
Hab versucht, die Funktion mal zu testen aber irgendwie bekomme ich es nicht hin...will einfach einen vektor vorgeben und dann in eine spalte reinkopieren und mir das als ausgabe angucken.

wie geht das aber?
man muss wohl mit scanf und printf arbeiten so viel ich weiß...
Die Ausgabe mit printf bzw. Einlesen mit scanf sind doch aber absolute Grundlagen... :confused:

Die werden in jedem C Grundlagenbuch vermittelt. Wir werden dir hier nicht deine kompletten Aufgaben machen. Wenn du konkrete Fragen hast, werden dir hier mehrere Leute sicher helfen - aber es wird sicherlich nicht so sein, dass wir die hier alles vorkauen. Ich kann nur meinen Rat wiederholen: besorg dir ein C Grundlagen Buch, fang damit an und lerne Programmieren.

Während des Lern-Prozesses wirst du sicherlich Fragen haben, die man 1. mit ein wenig Eigeninitiative (Google-Suche bzw. Suche hier im Forum) selbst lösen kann und solche, wo du Hilfe brauchst. Dann ist dieses Forum hier der geeignete Platz um deine Frage zu stellen (dann aber bitte möglichst mit einem konkreten Beispiel, dem gewünschten Resultat und inwieweit sich das aktuelle Resultat von dem gewünschten unterscheidet).

Es gibt übrigens vom Galileo Verlag ein OpenBook: "C von A bis Z".

Darf man denn eigentlich nach dem Grund fragen, warum der Matlab Code denn jetzt in C umgesetzt werden soll? Geht es um Optimierung? Oder nur als Test / zum Spaß?

Gruß
 
Zurück