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

24 valores de uma funçao para um vetor


Artur S

Pergunta

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?

#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"); 
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Primeiramente, na declaração das funções, voce usa

double 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)

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...