Artur S Postado Janeiro 16, 2011 Denunciar Share Postado Janeiro 16, 2011 Oi,tenho um problema neste codigo. Queria que a função Fracio24Q enviasse 24 resultados para um vector... mas não estou a conseguiralguém me pode ajudar?#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <math.h> #include <windows.h> #include <sys/param.h> #include <dirent.h> //#include <sys/dir.h> //Funçoes void FMatriz(FILE *fp, int matriz[][20]); double FRacio24Q(int matriz[][20], double *quad); void Resultados (FILE *fr, char *fp, double r24q[], char *pathname); //Funçao Principal int main(int argc, char *argv[]) { FILE *fp, *fname2; DIR *dirp; char pathname[MAXPATHLEN],filename[MAXPATHLEN], nomef[128]; struct dirent *entrada; int matriz[30][20]; double r24q[24], valor[24]; int i; //Escolha da directoria printf("Directoria dos ficheiros?\n"); fgets(pathname,MAXPATHLEN,stdin); if(pathname[strlen(pathname)-1]=='\n') { pathname[strlen(pathname)-1]=''; } if((dirp=opendir(pathname))==NULL) { printf("Erro ao abrir directoria\n"); exit(1); } //Procurar ficheiros da directoria while((entrada=readdir(dirp))!=NULL) { //Filtragem if(strcmp(entrada->d_name,".")==0 || (strcmp(entrada->d_name,"..")==0)) { continue; } //Abrir Ficheiro sprintf(filename,"%s\\%s",pathname,entrada->d_name); fp = fopen(filename,"r"); if(fp==NULL) { printf("Erro na abertura do ficheiro \n"); } //Mostra o nome do ficheiro printf("\nFicheiro: %s\\%s aberto \n",pathname,entrada->d_name); //chamamento de funçoes FMatriz(fp, matriz); for(i=0; i<24; i++) { r24q[i]=FRacio24Q(matriz, valor); } Resultados(fopen("vector.txt","a"), entrada->d_name, r24q, pathname); fflush(stdin); free(filename); fclose(fp); } getchar(); } // Escrever Matriz void FMatriz(FILE *fp, int matriz[][20]){ FILE *fname2; int i=0,j=0; char num, nomef[128]; num = fgetc(fp); //Ler um caracter a partir de um fluxo //fprintf(fname2, nomef); while(num!=EOF) //Enquanto não chegar ao fim do ficheiro { if(num == '0') { matriz[i][j]=0; j++; //incrementa coluna (j) if(j==20) //se a coluna é a ultima passa para a linha de baixo (incrementa i e j passa a 0) { i++; j=0; } } //Senao, o num é '1', preenche na matriz a posiçao if(num == '1') { matriz[i][j]=1; j++; //incrementa coluna (j) if(j==20) //se a coluna é a ultima passa para a linha de baixo (incrementa i e j passa a 0) { i++; j=0; } } //Voltar a ler o valor num = fgetc(fp); } for (i=0; i<30; i++) { for (j=0; j<20; j++) { //Imprimir matriz no ecra printf ("%d", matriz[i][j]); } //mudança de linha printf("\n"); } fclose(fp); } double FRacio24Q(int matriz[][20], double *quad){ double cont1=0, cont2=0; int i=0, j=0, c=0; int lin_i=0; int lin_f=5; int col_i=0; int col_f=5; int cont3=0; printf("\n\nEm 24 Quadrantes\n"); for(i=0; i<24; i++){ quad[i]=0; } while(lin_f<=30){ while(col_f<=20){ for(i=lin_i; i<lin_f; i++){ for(j=col_i; j<col_f; j++){ //Conta 1s e 0s na matriz if((matriz[i][j])==1) { cont1++; } if((matriz[i][j])==0) { cont2++; } } } cont3++; //Calcula racio printf("\nQuadrante %d", cont3); printf("\nNumero de 1s: %f",cont1); printf("\nNumero de 0s: %f",cont2); quad[cont3-1]=(cont1/cont2); printf("\nRacio: %f\n\n\n",quad[cont3-1]); // lin_i = lin_i + 5; // lin_f = lin_f + 5; col_i = col_i + 5; col_f = col_f + 5; cont1=0; cont2=0; } lin_i = lin_i + 5; lin_f = lin_f + 5; col_i=0; col_f=5; } } void Resultados (FILE *fr, char *fp, double r24q[], char *pathname) { int i=0,c=0; //fprintf(fr,"%s ", fp); //Escreve o caminho //Escreve o racio for(i=0; i<24; i++) { printf("%f ", r24q[i]); } //fprintf(fr,"%f ", r24q); //fprintf(fr,"\n"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe Amadio Postado Janeiro 17, 2011 Denunciar Share Postado Janeiro 17, 2011 Primeiramente, na declaração das funções, voce usadouble FRacio24Q(int matriz[][20], double *quad); Se não me engano, você deveria usar "matriz[20][]", especificando somente o numero de linhas, e não o de colunas, não? Mas, enfim, dificilmente isso é o que está resultando no erro que você está tendo Agora quanto ao seu erro, voce sabe exatamente o que está ocorrendo? A principio, me parece correto o código (pelo menos os incrementos de cont3, que vai ser o indice do seu vetor) Tente colocar algo como for(i=0; i<24; i++) prinft("%f", quad[i]);pra descobrir o que está sendo armazenado no seu vetor, e se alguma posição não foi preenchida (desse modo, contendo o valor 0 utilizado na inicialização do vetor que voce mesmo fez) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Artur S
Oi,
tenho um problema neste codigo. Queria que a função Fracio24Q enviasse 24 resultados para um vector... mas não estou a conseguir
alguém me pode ajudar?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
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.