[c] Matrix Struktur | Bitte dringend um hilfe

Status
Nicht offen für weitere Antworten.
ich verstehe nicht wie ich das anpassen soll. in deinem beispiel fehlt zum beispiel das n in
Code:
void liesMat(struct matrix *A)
.

Wo defeniere ich das n(die größe | z.b. n= 3)?
Der wird doch nicht einfach erkennen das er es automatisch irgendwie regeln soll.

Auch wenn es dreist klingt aber kannst du den Code nicht fertig machen und den Code KOmmentieren?
Auch anhaltspunkte was ich zu dem thema durchlesen kann wäre super. Da ich solche sachen in Zukunft öfter brauchen werde. Es würde mir ja nichts bringen wenn ich das fertige ding ohne irgendwelche anhaltspunkte bekommen würde.

Falls nein würde ich dir gern meine icq nummer geben damit ich nicht hier die ganze zeit schreiben muss (wegen Regel -> das Forum ist kein Chat)
 
Wenn du mit matrixx[ i ] arbeitest, darfst du bei malloc nur 1 * verwenden!
Wenn du mit matrixx arbeitest, musst du bei malloc 2 * verwenden!
 
Hi.

Da hat jemand bei Strukturen nicht aufgepasst... ;-]

Das ist eine Struktur:
C:
struct matrix {
  int m;
  int n;
 double **komp;
};
Sie enthält die Elemente m, n und komp. D.h. es werden die Variablen die du vorher einzeln hattest zu einer Einheit zusammengefaßt.

Legen wir mal eine Struktur an:
C:
struct matrix dieMatrix;

dieMatrix.m = 5;
dieMatrix.n = 5;
dieMatrix.komp = malloc(dieMatrix.m * dieMatrix.n * sizeof(**dieMatrix.komp))
Diese Matrix kannst du dann auch an eine Funktion übergeben usw.

Etwas klarer geworden?

Gruß
 
Woher das n kommt, steht doch oben (und jetzt sogar in zwei Posts)

Wenn ich dir das fertig mach, kannst du es danach erst recht nicht.
Anhaltspunke...das Galilieo Openbook zu C.
Link ist einer hier: http://www.tutorials.de/c-c/380577-haeufige-fragen-und-irrtuemer.html#lernen

Icq: Auch nein. Die Chat-Regel meint, dass nicht alles aus Drei-Wörter-Posts bestehen soll.
Hab außerdem kein Icq.

Den Regelpunkt, auf den ich dich hingewiesen hab, hältst du aber noch immer nicht ein.
 
Ich danke für eure bisherige Hilfe aber sie bringt mir nichts.

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

struct matrix {
int m;
int n;
double **komp;
}*liste, dieMatrix;

void zeigeMat(double **matrixx);

int main (void)
{
int i;
double k;
k = 0.0;

dieMatrix.m = 5;
dieMatrix.n = 5;

/*---------------------------------------------------------------------------
| Erstellung der Matrix.
---------------------------------------------------------------------------*/
liste->komp = (double**)malloc((liste->n)*sizeof(double));

for( i=0; i<3; ++i)
{
liste->komp[i] = (double *)malloc((liste->n)*sizeof(double));

if( liste->komp[i] == NULL)
{
printf("ERROR(%s, %d)", __FILE__,__LINE__);
system("pause");
}
}
zeigeMat(liste->komp);

system("pause");
return 0;
}

void zeigeMat(double **komp)
{
int k=0;
int i,j;
for(i=0; i<3; ++i)
{
printf("\n");
for(j=0;j<3; ++j)
{
printf("%1.2lf\t ", komp[i][j]);
++k;
}
}
}

Beim Debuggen ist es immer noch das erste malloc falsch. Warum?
 
Zuletzt bearbeitet von einem Moderator:
Ich danke für eure bisherige Hilfe aber sie bringt mir nichts.
Tja, aber warum denn nicht?

Bitte vermeide Doppelposts. Siehe Netiquette. Man kann Beiträge bearbeiten.

Zu deinem Fehler: du greifst auf liste->n zu. Warum? liste ist ein Zeiger, den du nicht initialisiert hast, der zeigt also irgendwo ins Nirvana und du greifst drauf zu... *boom*

Gruß
 
Zuletzt bearbeitet:
Es gehört so:
Code:
liste->komp = (double**)malloc((liste->n)*sizeof(double*));
Du reservierst ja nicht speicher für double-Werte, sondern für double-Zeiger!

Lg
 
Code:
liste->komp = (double **)malloc((dieMatrix.m)*sizeof(double));
immer noch Falsch.

Könnt ihr nicht einfach mal die Zeile richtig hinschreiben bitte?
Ich Tab hier nur im dunklen rum.

einige Fragen sich warum jetzt m.

da ich im unteren Teil n habe kann ich oben ja nicht wieder n nehmen. Könnt ich schon aber dann wäre die Spalten/Zeilen Sache nicht wirklich sinvoll.

Code:
 liste->komp = (double **)malloc((dieMatrix.m)*sizeof(double));


for( i=0; i<3; ++i)
{
liste->komp[i] = (double *)malloc((dieMatrix.n)*sizeof(double));

if( liste->komp[i] == NULL)
{
printf("ERROR(%s, %d)", __FILE__,__LINE__);
system("pause");
}
}
Der Teil funktioniert nicht.
 
Zuletzt bearbeitet von einem Moderator:
Code:
liste->komp = (double **)malloc((dieMatrix.m)*sizeof(double));
immer noch Falsch.
Überleg doch mal was du da tust.

Jetzt greifst du nicht mehr auf liste->n zu, sondern auf liste->komp.

Das ist kein bißchen besser.
Könnt ihr nicht einfach mal die Zeile richtig hinschreiben bitte?
Ich Tab hier nur im dunklen rum.
Dann trink einen Tee und setz dich in Ruhe hin und überleg mal bevor du irgendwas programmierst.

Außerdem überstürzt du schon wieder einiges. Du solltest doch gar nicht dynamisch Matrizen anlegen, in der Aufgabe steht doch ausdrücklich erstmal statisch.
einige Fragen sich warum jetzt m.
Nee, ich frage mich: warum nur m? Eine 2D Matrix hat üblicherweise m * n Elemente.

da ich im unteren Teil n habe kann ich oben ja nicht wieder n nehmen.
Das klingt unlogisch. \edit: sorry, du willst also ein 2 dimensionales Array anlegen. Dann brauchst du erstmal m Zeiger auf double (so wie ibafluss geschreiben hat).

Gruß
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Zurück