Rony melo
Membros-
Total de itens
8 -
Registro em
-
Última visita
Tudo que Rony melo postou
-
Resolvido!!! navegando por ai achei uma coisa que me ensina a direção do caminhos da pedra... pra quem estiver interessado, eis aqui o link: http://www.math.ucla.edu/~anderson/JAVAcla...aInterface.html
-
cara porq você está dizendo que sua matriz tem tamanho 0? declara como um ponteiro.... e qual é o tipo de erro? eu estou com problema também com matrizes, e no Linux é reportado um segmetation fault, quanto no windows o programa é simplesmente encerrado .
-
aqui no meu trabalho faz-se muitos programas em matlab e fortram para moer números. E estamos com vontade de fazer uma interface gráfica pra esses programas. Seria possível através do java chamar os programas em fortram? ou teria que reescrever todo o programas, o que seria inviável....
-
Gráfico No Matlab
pergunta respondeu ao rafaellucas de Rony melo em Outras Linguagens de Programação
cara pra você plotar esses pontos é so fazer isso: x=[x1,x2,x3....xn]; y=[y1,y2,y3....xn]; plot(x,y,'+'); pra ajustar uma curva dá um certo trabalho no matlab, eu tenho o programinha escrito aqui mas agora to sem tempo de te explicar. Acoselho você fazer no origin ou no excel. qualquer coisa posta novamente que tento te ajudar... -
olha aqui flávio os códigos do alocar e liberar float **Alocar (int m, int n) { float **v; /* ponteiro para a matriz */ int i; /* variavel auxiliar */ if (m < 1 || n < 1) { /* verifica parametros recebidos */ printf ("** Erro: Parametro invalido **\n"); return (NULL); } /* aloca as linhas da matriz */ v = (float **) calloc (m, sizeof(float *)); if (v == NULL) { printf ("** Erro: Memoria Insuficiente **"); return (NULL); } /* aloca as colunas da matriz */ for ( i = 0; i < m; i++ ) { v[i] = (float*) calloc (n, sizeof(float)); if (v[i] == NULL) { printf ("** Erro: Memoria Insuficiente **"); return (NULL); } } return (v); /* retorna o ponteiro para a matriz */ } e aqui tá o código para liberar float **Liberar (int m, int n, float **v) { int i; /* variavel auxiliar */ if (v == NULL) return (NULL); if (m < 1 || n < 1) { /* verifica parametros recebidos */ printf ("** Erro: Parametro invalido **\n"); return (v); } for (i=0; i<m; i++) free (v[i]); /* libera as linhas da matriz */ free (v); /* libera a matriz */ return (NULL); /* retorna um ponteiro nulo */ } detalhe, esse código eu pegquei de uma apostilha da UFMG.... esse negocio de migra de linguagem tá dando um trabalho!!!
-
Veleu flavio pela ajuda, demorei a responder pois tava sem net em casa. O erro era de execução, dai eu me arretei e fui estudar esse negocio de alocação dinâmica(ainda não sei como funciona) nuns livros de C que eu tenho e casa, e lá possuia um script de alocação para matrizes bidimensionais, o qual resolveu o meu problema parcialmente. suponhamos o seguinte código: #include <stdio.h> #include "lfixo.h" extern long int a,m; extern float nad[7]; float Tgl0 = 580; float Tr0 = 590; void ci(float **Tgl,float **Ts,float **Tr) { Tgl = Alocar(a,m);Ts = Alocar(a,m);Tr = Alocar(a,m); long int i,j,k; for(j=0;j<m;j++) { // inicialização das temperaturas Tgl[0][j]=Tgl0; //condições iniciais de temperatura na fase fluida Ts[0][j]=Tgl0; //condições iniciais de temperatura na fase sólida Tr[0][j]=Tr0; //condições iniciais de temperatura na fluido refrigerante } Liberar(a,m,Tgl);Liberar(a,m,Ts);Liberar(a,m,Tr);} onde as funções Alocar e Liberar funcionam perfeitamente alocando a minha matriz 2D. Agora considerando o seguinte main: #include <stdio.h> #include "lfixo.h" long int a=2400,m=6; float nad[7],dt; void main(void) { float **Tgl, **Ts, **Tr; ci(Tgl,Ts,Tr); } esse código funciona perfeitamente. no entanto se eu alterar a função ci(mantendo o mesmo main) para: #include <stdio.h> #include "lfixo.h" extern long int a,m; extern float nad[7]; float Tgl0 = 580; float Tr0 = 590; void ci(float **Tgl,float **Ts,float **Tr) { Tgl = Alocar(a,m);Ts = Alocar(a,m);Tr = Alocar(a,m); long int i,j,k; for(j=0;j<m;j++) { // inicialização das temperaturas Tgl[0][j]=Tgl0; //condições iniciais de temperatura na fase fluida Ts[0][j]=Tgl0; //condições iniciais de temperatura na fase sólida Tr[0][j]=Tr0; //condições iniciais de temperatura na fluido refrigerante } for(k=0;k<a;k++){ for (j=1;j<=m-1;j++) { // nós internos Tgl[k+1][j]=Tgl[k][j]*(1-2*nad[1]-nad[2]-nad[3])+Tgl[k][j-1]*(nad[0]+nad[1])+Tgl[k][j+1]*(-nad[0]+nad[1])+nad[2]*Ts[k][j]+nad[3]*Tr[k][j]; } } Liberar(a,m,Tgl);Liberar(a,m,Ts);Liberar(a,m,Tr); } o programa não roda até o valor final de a, por exemplo, para a=240, o programa só roda até a=226 e é retornado um segmentation fault. Se eu disser que a=226, ele so rodará para um valor de a=200, irá me rotornará um segmentation faul também, ou seja, não importa o valor de o for nunca chega até o final.....e eu prciso fazer esse programa rodar de todo jeito. isso será um trabalho que vai para um congresso de engenharia química. help me please?!?!?!?!?
-
valeu Flavio, na verdade eu estava puxando n de txt que não mostrei aqui no código, no entanto este estar com valores distorcidos. Portanto comecei a especificar o valor de n no programa principal mesmo, so pra testar o meu código.....dai esbarrei em outro segmentation fault, só que pra valores de "a" bem mais alto pra ser exato "a=17310", no entanto eu troquei os float por double e ainda continuou dando este erro..... eu preciso que minhas matrizes sejam as maiores possíveis, pois a simulação que irei fazer vai requerer matrizes enormes mesmo. Pelo que eu andei lendo, um double e long int já seria suficiente, mas o erro persistiu. e agora?
-
ae pessoa estou tentando trocar um programa que eu tenho em matlab pra c, mas estou encontrado vários problemas, e o que mais está roubando o meu tempo é esse segmetation fault. já li aguns tópicos aqui no forum, mas não consegui resolver o meu problema. aqui está o programa principal #include <stdio.h> #include "lfixo.h" int n; const int a=4; float nad[7]; void main(void) { float Tgl[ 100][n],Ts[ 100][n],Tr[ 100][n],Ccos[ 100][n],Ccol[ 100][n],Ccog[ 100][n]; float CH2s[ 100][n],CH2l[ 100][n],CH2g[ 100][n],Ctoll[ 100][n],Ctols[ 100][n]; d 100dos(); ci(Tgl,Ts,Tr,Ccos,Ccol,Ccog,CH2s,CH2g,CH2l,Ctoll,Ctols); } e aqui a minha função #include <stdio.h> #include "lfixo.h" extern int a,n; extern float nad[7]; float Tgl0 = 580; float Tr0 = 590; void ci(float Tgl[ 100][n],float Ts[ 100][n],float Tr[ 100][n],float Ccos[ 100][n],float Ccol[ 100][n],float Ccog[ 100][n], float CH2s[ 100][n],float CH2l[ 100][n],float CH2g[ 100][n],float Ctoll[ 100][n],float Ctols[ 100][n]) { int i,j,k; for(k=0;k<=a;++k) {for(j=0;j<=n;++j) { // inicialização das temperaturas Tgl[k][j]=Tgl0; //condições iniciais de temperatura na fase fluida Ts[k][j]=Tgl0; //condições iniciais de temperatura na fase sólida Tr[k][j]=Tr0; //condições iniciais de temperatura na fluido refrigerante // incialização das concentrações Ccos[k][j]=0; Ccol[k][j]=0; Ccog[k][j]=0; CH2s[k][j]=0; CH2l[k][j]=0; CH2g[k][j]=0; Ctols[k][j]=0; Ctoll[k][j]=0; } } Ctoll[0][0]=1; } pra valores de a ou n maiores que 4, eu obtenho um segmetation fault... e ai, aguel tem alguma ideia