Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

César Massruhá

[Resolvido] Acessar Dados via Struct

Recommended Posts

Senhores, muito boa noite.

Estou fazendo um pequeno programa c++ e como ja faz muito tempo parado, estou tentando relembrar umas coisas.

Bem é o seguinte, meu programa abre um .txt com 50 registro e preciso pegar o campo cid.num_acidentes para fazer uma média entre os 50 registros,ou seja eu preciso somar estes campos e não tenho idéia de como fazer para somar tudo. A unica coisa q consegui fazer é pegar o valor do ultimo registro e dividir pelo quantidade de registro.

Bem minha duvida é como faço para somar todos os valores do campo.

Segue o codigo

 


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void processa_dados ();
int x;
int y;
int registro;
int i;
int qtde;

struct CIDADE
{
   long int cod_cidade;
   char estado[3];
   int num_veiculos;
   int num_acidentes;
};

int main(int argc, char *argv[])
{

   
   
  
   int op;
   FILE *arq;
   
   
   do {
     system("CLS");
     printf("** SISTEMA DE ESTATISTICA**\n\n");
     printf("1 - Registrar Dados em Arquivo\n");
     printf("2 - Abrir Arquivo de Dados\n");
     printf("3 - Processar Dados\n");
     printf("4 - Sair\n\n");
     printf("Opcao: ");
     scanf("%d", &op);
     
     switch (op) {
         case 1:
               struct CIDADE cid;
               printf("Digite o numero de registros: ");
               scanf("%i",&registro);
    
               arq = fopen("carros.txt", "wt");
               fprintf(arq,"%d\n",registro);
    
               for (i=0; i<registro; i++)
               {
              
               printf ("Cadastro %d/%d:\n", i+1, registro);
              
               printf("Codigo da Cidade: ");
               scanf("%li", &cid.cod_cidade);
               fflush(stdin);
              
               printf("Estado: ");
               gets(cid.estado);
              
               printf("Qtde de Veiculos: ");
               scanf("%d", &cid.num_veiculos);
               fflush(stdin);
              
               printf("Qted de Acidentes: ");
               scanf("%d", &cid.num_acidentes);
               fflush(stdin);
              
              
              
               fprintf(arq,"%li;",cid.cod_cidade);
               fprintf(arq,"%s;",cid.estado);
               fprintf(arq,"%d;",cid.num_veiculos);
               fprintf(arq,"%d\n",cid.num_acidentes);
              
               }
    
               fclose (arq);
    
          
           break;
    
    
    
        case 2:
                
                   //struct CIDADE cid; //--> Não precisa referenciar o registro novamente.
                   FILE *arq;
                   printf("Lendo Arquivo 'carros.txt'\n");
                   arq =  fopen("carros.txt","rt");
        
                   fscanf(arq, "%i", &qtde);
                   printf("Qtde de registros: %d\n\n",qtde);
        
              
                   for (i=0; i<qtde; i++) 
                       {
                        fscanf(arq,"%li;%2s;%d;%d",&cid.cod_cidade,cid.estado,&cid.num_veiculos,&cid.num_acidentes);
                        printf("Registro: %5li | Estado: %5s | Veiculos: %5i | Acidentes: %5i\n",cid.cod_cidade,cid.estado,cid.num_veiculos,cid.num_acidentes);
                     
                         }
                      
                                            
                       fclose(arq);
        
          system("PAUSE");
           break;
  
  
           case 3:
            
            
            processa_dados ();         
        
            system("PAUSE");  
            break;            
           
                   
           
           case 4:
           exit(0);
           break;
           
           
           default:
           printf("Opcao invalida!\n\n");
           system("PAUSE");
     }
   } while ( op != 4 );
}




void processa_dados ()
{
     
     
            
           struct CIDADE cid;        
           FILE *arq;
           int qtdeRS = 0;
           int z;
           
           arq =  fopen("carros.txt","rt");
           fscanf(arq, "%i",&qtde);
           printf("Registro tem: %i\n\n",qtde);
           for(i=0; i<qtde; i++) 
                    {
                      fscanf(arq,"%li",&cid.cod_cidade);// pega o codigo
                      fgetc(arq); // ignora o ;
                      fscanf(arq, "%[^;]s", cid.estado); // pega a uf
                      fgetc(arq); // ignora o ;
                      fscanf(arq,"%i",&cid.num_veiculos);
                      fgetc(arq); // ignora o ;
                      fscanf(arq,"%i",&cid.num_acidentes);
                      fgetc(arq); // ignora o ;
             
                      
                       
                            
                      MINHA DUVIDA ESTA ABAIXO, COMO DISSE PRECISO FAZER
                      O cid.num_acidentes ARMAZENAR, OU SEJA SOMAR O VALOR TOTAL DE TODOS OS REGISTRO.

                      
                      if (stricmp(cid.estado, "RS") == 0) // use para comparar textos
                           { 
                               
                               qtdeRS ++;
                               
                               
                               z=cid.num_acidentes/qtdeRS;            
                               


                       

                                           }
                         
                         
                             
                     printf("Registro: %5li | Estado: %5s | Veiculos: %5i | Acidentes: %5i\n",
                     cid.cod_cidade, cid.estado, cid.num_veiculos, cid.num_acidentes);
                     
                     
          } 
          
          
          printf("\n\nTotal de registros de RS: %i\n\n", qtdeRS);
          printf("Media: %i\n\n",z); 
          fclose(arq);
          
           
      
     
      
     
     }

















Compartilhar este post


Link para o post
Compartilhar em outros sites

calma ai..

se você já ta armazenando tudo na struct certinho n te erro.

primeiro, só some as UF's iguais depois que acabar o loop, ai sim você vai fazer a média.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe minha ignorancia, mas não entendi.

No if lá eu estou somando a quantidade de UF = RS, inicializei ela em zero e ai fiz o precidemento. Até ai tudo bem. Só que preciso tb pegar o valor armazenado no campo num_acidentes dos registro cuja uf = RS e ir somando cada campo desse para depois dividir pela quantidade de registro com a UF = RS.

No estou conseguindo desenvolver essa idéia de como fazer para somar os dados contidos nesse dentro do campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi do seu código, você jah esta fazendo a média a cada iteração do seu loop.

a média deve ser feita por ultimo..

veja um exemplo:

Loop //só um exemplo
    If (UF == "RS") {
        qtd_acidentes_rs++;
        n_qtd_acidentes+=cid.num_acidentes;
End
media = n_qtd_acidentes / qtd_acidentes;

deu pra ter idéia, acho q ficou um pouco confuso, + tente implementar algo e va postando ai ;D

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Amigo, muito obrigado pela força.

Eu pesquisei bastante e consegui resolver o problema da média.

Mais tarde vou postar a parte do código que eu estava tendo dificuldado.

Show de bola esse forum, parabens !!!!!!!!!1

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.