WinFuture-Forum.de: C Matrix Probleme - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C Matrix Probleme


#1 Mitglied ist offline   wiseguy 

  • Gruppe: aktive Mitglieder
  • Beiträge: 23
  • Beigetreten: 15. März 06
  • Reputation: 0

geschrieben 15. März 2006 - 17:29

Hallo

Ich will ein bissl mit C Programmieren lernen und habe ein Problem eine Matrix gescheit zu befüllen.

Ich möchte das die Matrix wiefolgt ausschaut:

 a   a+b a+c ... a+n
a+b  b  b+c ... b+n
a+c b+c  c  ... c+n
...


a, b, c, ... n entnehme ich eines vorgegebenen arrays.

Also beispielsweise so hier:

a=1, b=2, c=1, d=4, e=5

1 3 2 5 6
3 2 3 6 7
2 3 1 5 6
5 6 5 4 9
6 7 6 9 5

Jetzt hab ich folgender maßen begonnen:
...
int werte[lmax]={1, 2, 1, 4, 5, 6};
...
funktion_matrix(lmax, zmax)
int lmax, zmax;
int werte[lmax]
{
  int matrix[lmax][zmax];

  int l;
  int z;

  //löschen der Matrix
  for (l=0; l<lmax; l++)
  {
	for (z=0; z<zmax; z++)	
	{
		C_matrix[l][z] = 0;
	}
  }

  //befüllen der Matrix
  for (l=0; l<lmax; l++)
  {
	matrix[l][l] = werte[l];
  }
}


Einmal scheint das mit den Variablen für die größe der arryas (lmax, zmax) nicht zu gehen. Vermutlich liegt das da ran, dass der Compiler die Größe schon beim Programmieren festlegt. Nun gut, damit kann ich leben... also bleiben die eckigen Klammern zur Größenangabe der Arrays einfach leer.
Aber abgesehen davon und das ich noch nicht weiß, wie ich die Berechnungen für die anderen Felder in Abhängigkeit von der Anzahl der zur verfügung stehenden Werte durchführen und diese eintragen kann, klappt schon beim befüllen der bloßen Variablen was nicht.

Meine Matrix schaut nun nämlich erstmal so aus:

1 0 0 0 0 2
0 2 0 0 0 0
0 0 1 0 0 0
0 0 0 4 0 0
0 0 0 0 5 0
5 0 0 0 0 6

kann mir jemand sagen, woran das liegt und mir helfen?

mfg wiseguy

Okay sorry - hab den Fehler schon gefunden: zmax darf nicht anderes sein als lmax - oder halt die Werte dürfen nicht anders sein - also muss die matrix natürlich gleich viele Zeilen wie Spalten haben.

Aber ich weiß trotzdem noch nicht, wie ich die Berechnungen anstelle. Kann mir dabei jemand helfen oder nen Tip geben?

mfg wiseguy
0

Anzeige



#2 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 15. März 2006 - 17:31

Dynamische Arrays sind dynamische Arrays, die musst du in C halt selbst verwalten.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#3 Mitglied ist offline   wiseguy 

  • Gruppe: aktive Mitglieder
  • Beiträge: 23
  • Beigetreten: 15. März 06
  • Reputation: 0

geschrieben 15. März 2006 - 17:56

Komisch - gerade hab ich ein posting geschrieben, das ist nun weg... na ja was solls

Also ich habe die zwei Hauptprobleme gerade in den Griff bekommen:

1. Dieser Fehler lag da ran, dass die Matrix natürlich genauso viele Zeilen wie Spalten benötigt - ich hatte dafür ja zmax und smax - und die waren nicht gleich (bzw. die festen Werte, die ich dann statt der Variablen reingeschrieben hatte, damit ich weiter probieren konnte.

2. Die Berechnungen dafür hab ich jetzt wifolgt gelöst:

//In Anlehnung an den Code in dem Posting weiter oben
for (l=0; l<lmax-1; l++)
{
	for (z=l+1; z<lmax; z++)
	{
		C_matrix[l][z] = C_matrix[l][l] + C_matrix[z][z];
		C_matrix[z][l] = C_matrix[l][l] + C_matrix[z][z];
	}
}


Zitat

Dynamische Arrays sind dynamische Arrays, die musst du in C halt selbst verwalten.

Und wie mach ich das? Sag mal bitte ein Schlüsselwort dazu.
0

#4 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 15. März 2006 - 18:10

int[][] blah = malloc(sizeof(int)*lmax*zmax);

und natürlich ein entsprechendes free().

Dieser Beitrag wurde von Rika bearbeitet: 15. März 2006 - 18:11

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#5 Mitglied ist offline   wiseguy 

  • Gruppe: aktive Mitglieder
  • Beiträge: 23
  • Beigetreten: 15. März 06
  • Reputation: 0

geschrieben 15. März 2006 - 18:41

Ich habe folgende zwei Varianten ausprobiert:

int[][] matrix = malloc(sizof(int)*lmax*zmax);

// und

int matrix[][] = malloc(sizof(matrix)*lmax*zmax);


geht beides nicht.

Was mach ich falsch?

Und zweite Frage: Wie kann ich diese Matrix von der main Funktion aus übergeben, wenn ich die durch meine matrix Funktion erstellen will?
Also bspsw. so:

main()
{
  ...
  int matrix[lmax][zmax] = funktion_matrix(lmax, zmax);
  ...
}


Oder geht das nicht? Bis jetzt hab ich diese Matrix nämlich außerhalb der main Funktion definiert - dann gehts natürlich, aber lieber währe mir ich würde die in der main Funtion definieren können und entsprechend übergeben können. Das Problem scheint zu sein, dass ich ja mit meinem Aufruf 'matrix[lmax][zmax] = funktion_matrix(lmax, zmax);' über den ganzen Bereich schreiben will - und das geht ja irgendwie nicht...

mfg wiseguy
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0