Gå til innhold

c funksjon som tar 2-dim array av ukjent størrelse


Anbefalte innlegg

Sitter her og prøver å lage en funksjon som tar i mot en to-dimensjonal array av ukjent størrelse. Og jeg har forsåvidt klart det. Men synes grensesnitet på funksjonen blir dårlig. Har ikke klart å finne noen bra guider som dekker dette, annet enn et sted som sa at det var vanskelig.

 

funksjonen skal ta i mot x, b og A somt dimensjonene til disse som er m og n. funksjonen skal så lagre b*A i x. Dette er min implementasjon:

 

int MatrixVectorMultiply(double x[], double *A, double b[], int m, int n)
{
int i, j;
for(i = 0; i < m; i++)
{
 x[i] = 0;
 for(j = 0; j < n; j++)
 {
 	x[i] += A[i*n+j]*b[j];
 }
}	
return 0;
}

 

og jeg kan så bruke dette for å kalle funksjonen:

 

double A[3][4] = {{1,2,3,4},{4,5,6,7},{7,8,9,10}};
double b[] = {1,2,3,4};
double x[3];
MatrixVectorMultiply(x,&A[0][0],b,3,4);

 

Dette fungerer men jeg vil heller kunne skrive:.

 

MatrixVectorMultiply(x,A,b,3,4);

 

Noen ideer for hvordan jeg kan oppnå det?

Lenke til kommentar
Videoannonse
Annonse

Takker for svar, fungerer fint.!

Så da drister jeg meg til et spørsmål til. Dette er da altså starten på et lineæralgebrabibliotek jeg skla prøve å lage. Foreløpig kompilerer jeg bare med komandoen:

 

gcc -o superd main.c mnlinalg.c

 

.., men jeg vil gjerne lage et bibliotek slik at jeg bare kan bruke

 

#include <mnlinalg.h>

 

der jeg trenger det (f.eks i main). Noen som vet om en bra guide til det.

Lenke til kommentar

Vet ikke hvor stort dette biblioteket skal bli, men dersom det ikke er så veldig stort, anbefaler jeg å eksportere funksjonene til en .lib bibliotek, som deretter kan linkes statisk inn i applikasjonen senere. Ellers anbefaler jeg jeg å eksportere en .dll og linke mot .lib (som blir laget når du lager en dll og eksporterer funksjonene), og distribuere evt. programmer med denne .dll filen.

 

Dersom biblioteket er veldig lite, kan du legge både deklarasjon og definisjon i en header, men jeg vet ikke hvor mange stygg blikk jeg får for å foreslå noe sånt her :)

Lenke til kommentar

Btw: det vil være ryddigere, dersom du skal lage et bibliotek, å lage structs som inneholder dataene. Da kan man lage funskjoner som jobber direkte mot disse struct'ene i stedet. Og man slipper å kalle funksjoner med størrelser på array'ene fordi disse allerede er lagret i struct'ene.

 

Med matrise-matte kan man få igjen array'er med andre dimensjoner enn de man putter inn. Da forenkler man mye ved å putte den informasjonen i den returnerte struct'en.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...