Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com passagem de arrays para função


Vinicius Tergolina

Pergunta

Ola pessoal, bom, eu tenho 2 programas separados em C e transformei um deles numa função para o programa principal "main" só que na hora de passar os arrays do main.c para a função.o resolver descobri que os arrays não estão indo mesmo a compilação tendo dado certo, vou mostrar pedaços dos codigos dos dois que são elevantes, se souberem como me ajudar agradeço muito.

Main.c

#include <stdio.h>  

void funcao( float Sx[], float h[], float Cor[][4], int PontosSpec, int v );

int main()
{
  int v,  PontosSpec;  
float Sx[N], h[N],  Cor[N][4];
...

     funcao(Sx, h, Cor, PontosSpec, v);

...
}
funcao.o
#include <stdio.h>
#include <stdlib.h>

void funcao( float Sx[], float h[], float Cor[][4], int PontosSpec, int v )
{
...
}

Os dois programas funcionam perfeitamente, mas testei uma simples passagem de inteiro pra adição pra ver se a função recebe variáveis do main e não esta dando certo.

Usei o gcc como compilador e compilei os 2 em um executável.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Codigo completo:

Main.c

#include <stdio.h>  
#include "funcao.o"
#define N 4000

void funcao( float Sx[], float h[], float Cor[][4], int PontosSpec, int v );

int main()
{

  int v, j,  NumeroEspectros, PontosSpec, q;
  char   L[N][1000];
  signed char   x[N][1000];
  float Sx[N], h[N], c[N], Cor[N][4];
  
  
  FILE *ArquivoEntrada;
  FILE *Espectro;     
   ArquivoEntrada = fopen("lista.dat", "r");
  
  v=0;
  do{
    
    fscanf(ArquivoEntrada,"%s",L[v]);  
    //printf("v=%d %s\n", v, L[v]);
    
    v++;
    
  }while( feof(ArquivoEntrada)== 0 );
  

  NumeroEspectros = v - 2;
  //printf("numero de espectros = %d\n",NumeroEspectros);



  for(v=0;v<=NumeroEspectros;v++)
    {
  
   j=0;  
      
   Espectro = fopen(L[v], "r");
    //printf("i=%d %s\n", v, L[i]);
      do{
    
    fgets (x[j] , 1000 , Espectro);
    //printf("i=%d %s\n", j, x[j]);
    
    if(j>=26)
{
  
  sscanf (x[j],"%f  %e  %e",&Sx[j],&h[j],&c[j]);
  //printf("j=%d %f %e %e\n", j, Sx[j], h[j], c[j]);  

 }
    
    j++;
    
      }while( feof(Espectro)== 0 );
      
PontosSpec = j - 27;
printf("pt = %d\n",PontosSpec);
     filtro_solo(Sx, h, Cor, PontosSpec, v);

for (q=0; q<=4; q++)
{ 
      printf("%s Fluxo total = %f\n",L[v],Cor[v][q]);     
printf("pt = %d\n",PontosSpec);
}

/*

for (q=0; q<=4; q++)
{

      if (q==1)     
    {      
      printf("v=%d Fluxo total em U = %f\n",v,Cor[v][q]);    
    }
      if (q==2)     
    {      
      printf("v=%d Fluxo total em G = %f\n",v,Cor[v][q]);    
    }
      if (q==3)     
    {      
      printf("v=%d Fluxo total em R = %f\n",v,Cor[v][q]);    
    }
      if (q==4)     
    {      
      printf("v=%d Fluxo total em I = %f\n",v,Cor[v][q]);    
    }
      if (q==5)     
    {      
      printf("v=%d Fluxo total em Z = %f\n",v,Cor[v][q]);    
    }
}
*/  
        }

  fclose(ArquivoEntrada);
  fclose(Espectro);
return 0;
}
funcao.o
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
//#include "function.h"
#define N 4000
void filtro_solo( float Sx[], float h[], float Cor[][4], int PontosSpec, int v )
{
  
  int i,j,q,NumeroPontosS, NumeroPontos;
  float  y[N+1],p[N+1], o[N+1],l[N+1],z[N],x[N+1],a,b, Sy[N];
  FILE *ArquivoEntrada;
  //FILE *ArquivoEntradaS;
  //FILE *a1;  
  
PontosSpec = PontosSpec + 1;
  
  for(q=1;q<=5;q++)
    {
      
      for(i=1;i<=(NumeroPontos);i++)
    {
      y[i]=0.0;
      p[i]=0.0;
      o[i]=0.0;
      l[i]=0.0;
      x[i]=0.0;
    }
      
      for(j=1;j<=(NumeroPontosS);j++)
    {
      z[j]=0.0;
    }
      
      if(q==1)
    {
      ArquivoEntrada = fopen("u.dat", "r");
      //a1= fopen("EspFiltr_u.dat", "w"); 
    }
      
      if(q==2)
    {
      ArquivoEntrada = fopen("g.dat", "r"); 
     // a1= fopen("EspFiltr_g.dat", "w");
    }
      
      if(q==3)
    { 
      ArquivoEntrada = fopen("r.dat", "r");
     // a1= fopen("EspFiltr_r.dat", "w");
    }
      
      if(q==4)
    {
      ArquivoEntrada = fopen("i.dat", "r");
     // a1= fopen("EspFiltr_i.dat", "w");
    }
      
      if(q==5)
    {        
      ArquivoEntrada = fopen("z.dat", "r");
     // a1= fopen("EspFiltr_z.dat", "w");
    } 
      
      //printf("filtro = %f", Filtro);
      i=1;  
      
      do{
    fscanf(ArquivoEntrada,"%f %f %f %f %f",&x[i],&p[i],&o[i],&y[i],&l[i]);
    //printf("i=%d %f %f\n", i, x[i],y[i]);
    i++;
      }while( feof(ArquivoEntrada)==0 );
      NumeroPontos = i - 2;
      //printf("Num pontos Filtro=%d\n", NumeroPontos ); 
              
      for(j=2;j<=PontosSpec;j++)    
    {
      for(i=1;i<=NumeroPontos;i++)
        {         
          if(Sx[j]>x[i] && Sx[j]<x[i+1])
        {
          //printf("j=%d %f \n", j,Sx[j]);      
          a=(y[i]-y[i+1])/(x[i]-x[i+1]);
          b=((x[i]*y[i+1])-(y[i]*x[i+1]))/(x[i]-x[i+1]);
          Sy[j]=a*Sx[j]+b;
          z[j]=Sy[j]*h[j];
          
          //printf("j=%d a=%f b=%f \n", j, a, b);
          //fprintf(a1,"%f %f \n",Sx[j],z[j]);
          //printf("%f %f \n",Sx[j],z[j]);  
          if(j<PontosSpec)
            {
              //printf("%f %f \n",Sx[j],z[j]);
              
  //********** Cálculo do fluxo total na banda desejada através do método dos trapézios. **********
               Cor[v][q]+=(z[j]+z[j+1])*(Sx[j+1]-Sx[j])/2;

            }      
        }       
        }     
       }    
      fclose(ArquivoEntrada);
    }

}

ta ai, desconsiderar o que estiver comentado.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...