Ir para conteúdo
Fórum Script Brasil

Vinicius Tergolina

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Sobre Vinicius Tergolina

Vinicius Tergolina's Achievements

0

Reputação

  1. 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.
  2. 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.
  3. Tenho um programa pronto que serve para multiplicar gráficos, um pelo outro... O programa funciona perfeitamente então adicionei algumas linhas para refina-lo e fazer com que ele multiplicasse o gráfico desejado por 5 diferentes em diferentes vezes mas estou tendo problemas para fazer funcionar com a função IF, ao meu ver esta tudo correto e como estou obtendo o terrível Erro de Segmentação não tenho pistas. #include <math.h> #include <stdio.h> #define N 4000 main() { int i,j,q,NumeroPontosS, NumeroPontos,v; float y[N+1],p[N+1], o[N+1],l[N+1],z[N],x[N+1],a,b,Sx[N], Sy[N],h[N+1], Cor, Filtro,U,G,R,I,Z; FILE *ArquivoEntrada; FILE *ArquivoEntradaS; FILE *a1; for(q=1;q<=5;q++) { if(q=1) { ArquivoEntrada = fopen("u.dat", "r"); a1= fopen("EspFiltr_u.dat", "w"); //Filtro = U; if(q=2) { ArquivoEntrada = fopen("g.dat", "r"); a1= fopen("EspFiltr_g.dat", "w"); //Filtro = G; if(q=3) { ArquivoEntrada = fopen("r.dat", "r"); a1= fopen("EspFiltr_r.dat", "w"); //Filtro = R; if(q=4) { ArquivoEntrada = fopen("i.dat", "r"); a1= fopen("EspFiltr_i.dat", "w"); //Filtro = I; if(q=5) { ArquivoEntrada = fopen("z.dat", "r"); a1= fopen("EspFiltr_z.dat", "w"); //Filtro = Z; //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 ); j=1; ArquivoEntradaS = fopen("da10750_525.dat", "r"); do{ fscanf(ArquivoEntradaS,"%f %f",&Sx[j],&h[j]); //printf("j=%d %f %f\n", j,Sx[j],h[j]); j++; }while( feof(ArquivoEntradaS)==0 ); NumeroPontosS = j - 2; printf("Num ponto Espectro=%d\n", NumeroPontosS ); v=NumeroPontosS; Cor=0.0; for(j=2;j<=v;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<v) { //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+=(z[j]+z[j+1])*(Sx[j+1]-Sx[j])/2; } } } } //printf("Fluxo total em %f = %f\n",Filtro,Cor); printf("Fluxo total = %f\n",Cor); } } } } } } } Enfim, já tentei mexer no chaveamento dos IFs e nada funcionou, se alguém souber de outra maneira pra resolver o problema sem usar os IFs e puder me indicar eu agradeço, sou iniciante em programação em C e por isso os recursos que estão nesse programa são todos que tenho. PS: o que estiver // (comentado) deve ser ignorado.
×
×
  • Criar Novo...