2017-10-11 4 views
0

J'ai cette fonction qui calcule x [0], x [1], x [2] où n sont les rangées, L la matrice inférieure (0 sur la diagonale supérieure), x l'inconnu et le b la solution. Le problème est qu'ils me demandent de l'appeler de la principale et ne savent pas comment passer les paramètres à la fonction, je laisse ici:Paramètres dans une fonction

void resTinf (int n, double **L, double *x, double *b){ 
    int i, k; 
    x[0]=b[0]; 

    for (i = 1, i<n, i++){ 
     x[i]=b[i]; 

     for (k = 0, k<i, k++){ 
      x[i] = x[i]-L[i][k]*x[k]; 
     } 
    } 
    x[2] = b[2] - L[2][0]*x[0]-L[2][1]*x[1]; 
    printf(x[1], x[2], x[3]); 
} 

principale:

int n = 3; 
double **a, *v, *u; 

scanf ("% le " , &v[0 ]); 
scanf ("% le " , &v[1 ]); 
scanf ("% le " , &v[2 ]); 
scanf ("% le " , &a[1][ 0]); 
scanf ("% le " , &a[2 ][ 0]); 
scanf ("% le " , &a[2 ][ 1 ]); 
+4

Eh bien pour commencer [un tableau de tableaux n'est pas la même chose que d'un pointeur vers un pointeur] (https: //stackoverflow.com/questions/18440205/casting-void-to-2d-array-of-int-c/18440456#18440456). Sans plus d'informations et un [Exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve), il est vraiment difficile de dire autre chose. Et s'il vous plaît prenez le temps de [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask). –

+0

Je ne comprends pas vraiment, vous devez utiliser les paramètres que vous donnez à votre programme quand vous l'exécutez: './matrix n param1 param2 param3' ou juste quelques variables qui sont dans votre fonction principale? – pierreafranck

+0

J'ai ceci dans ma fonction principale: int n = 3; \t \t double ** a, * v, * u; \t \t \t \t scanf ("% le" & v [0]); \t scanf ("% le", & v [1]); \t scanf ("% le", & v [2]); \t \t \t \t \t scanf ("% le", & a [1] [0]); \t scanf ("% le", & a [2] [0]); \t scanf ("% le", & a [2] [1]); – Snarky

Répondre

1

D'abord, vous besoin d'allouer de la mémoire pour votre tableau dynamique ou simplement créer des tableaux statiques au début de la fonction. Comme ça:

#include <stdlib.h> 

principale:

int n = 3; 
double **a, *v, *u; 
v = (double*)malloc(n * sizeof(double)); 
u = (double*)malloc(n * sizeof(double)); 
a = (double**)malloc(n * sizeof(double *)); 
for(int i = 0; i < n; i++){ 
a[i] = (double*)malloc(n * sizeof(double)); 
} 


scanf ("% le " , &v[0 ]); 
scanf ("% le " , &v[1 ]); 
scanf ("% le " , &v[2 ]); 
scanf ("% le " , &a[1][ 0]); 
scanf ("% le " , &a[2 ][ 0]); 
scanf ("% le " , &a[2 ][ 1 ]); 

ou

int n = 3; 
double a[n][n], v[n], u[n]; 

scanf ("% le " , &v[0 ]); 
scanf ("% le " , &v[1 ]); 
scanf ("% le " , &v[2 ]); 
scanf ("% le " , &a[1][ 0]); 
scanf ("% le " , &a[2 ][ 0]); 
scanf ("% le " , &a[2 ][ 1 ]);