2016-12-04 2 views
0

Как вернуть матрицу из функции? Я делаю программу, которая постоянно отправляет матрицу в функцию, а также требует постоянного возврата матрицы из функции, я знаю, как отправить матрицу в функцию (с двумя указателями), но каждый раз, когда я пытаюсь позвонить функция говорит, что это несовместимый тип. Вот пример функции, я использую:Возврат матрицы из функции

float *filtrar(float val, int col, float **M) 
{ 
    int i=0,j,k=0; 
    float temp[4][6],linea[6]; 
    if (existe(val, col, M)>0) 
    { 
     for (i=0; i<tam; i++) 
     { 
      if (linea[col]==val) 
      { 
       for (j= 0; j <6; j++) 
        temp[k][j]=M[i][j]; 
        k++; 
       } 
      } 
     } 
    } 
    else 
    { 
     for (i=0; i<tam; i++) 
     { 
      if (linea[col]==inferior(val,col,M)||linea[col]==superior(val,col,M)) 
      { 
       for (j= 0; j < 6; j++) 
       { 
        temp[k][j]=M[i][j]; 
        k++; 
       } 
      } 
     } 
    } 
} 

А вот та часть, которая призывает к этому Fuction:

float **m=filtrar(v1,t1,agua_vapor); 

Эта последняя часть является тот, где мне нужна ваша помощь, так как я не знаю, как дать asigne матрицу, полученную из функции to te переменной m, я не знаю, должна ли она быть точкой, двойным указателем, общей матрицей и т. д.

Буду признателен если кто-то может показать мне, как это сделать.

Вот пример того, как я объявил матрицу, чтобы работать с, очень похожий на тот, что предыдущая функция показала использует в случае, если кто задавался вопросом, как я это сделал:

float *carga_archivo(char nombre_de_archivo) 
{ 
    float M[200][6]; 
    float *p[6], **q; 
    int i=0; 
    FILE *archivo; 
    archivo=fopen(nombre_de_archivo,"r"); 
    while(!feof(archivo)) 
    { 
     fscanf(archivo,"%f\t%f\t%f\t%f\t%f\t%f\n",&M[0][i],&M[1][i],&M[2][i],&M[3][i],&M[4][i],&M[5][i],&M[6][i]); 
     i++; 
    } 
    tam=i; 
    for(i=0;i<6;i++) 
     p[i]=M[i]; 
    q=p; 
    fclose (archivo); 
    return M; 
} 

Любое исправление в письме или способ задать этот вопрос приветствуется.

+0

возвращаемого значение вашей функции имеет типа поплавок *, и вы объявили м как поплавок ** –

+0

также в вашей функции filtrar, откуда вы возвращаетесь из функции? –

+0

@HardikSanghvi У меня нет второго комментария, вы спрашиваете, откуда взялась матрица? –

ответ

0

Если вы хотите вернуть матрицу вам нужно объявить функцию как тип матрицы, я имею в виду:

float** filtrar(float val, int col, float **M) 
{ 
    /* stuff that filtrar do */ 
    return M 
} 
Смежные вопросы