Jump to content
Fórum Script Brasil
  • 0

Ajuda com passagem de arrays para função


Vinicius Tergolina

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...