Ir ao conteúdo
  • Cadastre-se

C Problema Programação em C


Jonathangfra

Posts recomendados

 

Arquivo - https://www.dropbox.com/s/4guyiinfke6g6pc/livros_final.zip?dl=0

               O arquivo contém a seguinte estrutura de registro:

-Código, inteiro de sete posições

-Título, caractere de 45 posições

-Autor, caractere de 30 posições

-Mês de publicação, inteiro de uma posição

-Ano de publicação, inteiro de quatro posições

                Você deverá ler o arquivo e responder as seguintes perguntas:

-Quantos títulos de livros diferentes existem?

-Quantos autores diferentes existem?

-Qual é o ano com menos e mais publicações?

-Qual é o mês com menos e mais publicações?

-Tempo total de processamento

                Para resolver as perguntas acima, crie um programa em linguagem C que leia esse arquivo, manipule o arquivo e responda as perguntas solicitadas.

                Gere um novo arquivo com as perguntas e as respostas. 

                Pontos a serem observados na implementação:

-Usar alocação dinâmica de memória

-Usar passagem por referência

-Usar uma estrutura para definir os campos do registro do arquivo

Submita o arquivo do programa e o arquivo texto gerado com as respostas.

  • Obrigado 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Jonathangfra      abrir um arquivo , você já deve saber , usando fopen , e lendo fgets , que lê uma linha de cada vez , e separe os tipos de dados como está no enunciado e faça a contagem , e para calcular o tempo de execução use o comando clock_t inicio logo no começo do programa dentro da função main e clock_t fim no final  e subtraia o fim menos o inicio e terá o tempo  em milissegundos , poste um código seu sobre esse exercício e ajudaremos se precisar alguma correção  .

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@devair1010Cheguei até aqui, ta lendo o arquivo certo, mas não to conseguindo imprimir a quantidade certa e falta a questão do tempo também.

Se conseguir da uma mão agradeço!


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct arq{
 int cod;
 char t[45];
 char aut[30];
 int m;
 int a;
};
typedef struct arq ARQ;
void main(){
    FILE *f=NULL;
     FILE *r=NULL;
    ARQ l[9999];
    int i,z,j;
    int c;
    int conta[2020],contm[12];
    int auxa,auxm;
    int contitulo,contautor;
    int menora,menorm;

    char arquivo[400];
    printf("Digite o nome do arquivo:\n");
    scanf("%s", arquivo);

    f = fopen(arquivo,"r");

    if (f==NULL){
        printf("Erro ao abrir o arquivo. %s\n",arquivo);
        exit(0);
    }

    i=0;
     while(fscanf(f,"%d",&l[i].cod)>0){
         (fgets(l[i].t,45,f));
     (fgets(l[i].aut,30,f));
      fscanf(f,"%d\n",&z);
      l[i].m=z/10000;
      l[i].a=z%10000;


        printf("codigo %d\n",l[i].cod);
      printf("titulo %s\n",l[i].t);
      contitulo++;
       printf("autor %s\n",l[i].aut);
       contautor++;
        printf("mes %d\n",l[i].m);
        contm[l[i].m]++;
         printf("ano %d\n",l[i].a);
         conta[l[i].a]++;
          i++;

}
for (j=0;j<2020;j++){
for (i=0;i<2020;i++){
    if(conta[i]<conta[i+1]){
        auxa=conta[i];
        conta[i]=conta[i+1];
        conta[i+1]=auxa;

    }
}
}
for (j=0;j<12;j++){
for (i=0;i<12;i++){
    if(contm[i]<contm[i+1]){
        auxm=contm[i];
        contm[i]=contm[i+1];
        contm[i+1]=auxm;

    }
}
}
for(i==2019;i>=0;i--){
    if(i>0){
            menora=conta[i];
    i=-1;
    }
}
for(i==12;i>=0;i--){
    if(i>0){
            menorm=contm[i];
    i=-1;
    }

}
if((r=fopen("resposta.txt","wb"))==NULL) {
    printf("Arquivo não pode ser aberto\n");
    exit(1);
    }

   fprintf(r,"titulos: %d\n",contitulo);
 fprintf(r,"autores: %d\n",contautor);
  fprintf(r,"ano com mais: %d\n",conta[0]);
   fprintf(r,"ano com menos: %d\n",menora);
     fprintf(r,"mes com mais: %d\n",contm[0]);
   fprintf(r,"mes com menos: %d\n",menorm);

}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Jonathangfra    está lendo apenas alguns dados e para logo ,  e modificando o Loop de leitura vai até o fim ,

#include <stdio.h>
#include <iomanip>
#include <vector>
#include <stdlib.h>
#include <string.h>
struct arq
{
    int cod;
    char t[46];
    char aut[31];
    int m;
    int a;
};
typedef struct arq ARQ;
int main()
{
    FILE *f=NULL;
    FILE *r=NULL;
    ARQ l[9999];
    int i=0,z,j,c,
        conta[2020],
        contm[12],
        auxa,auxm,
        contitulo,
        contautor,
        menora,menorm;
    char arquivo[400];
    printf("Digite o nome do arquivo:\n");
    scanf("%s", arquivo);
    strcat(arquivo,".txt");
    f = fopen(arquivo,"r");
    if ( f == NULL )
    {
        printf("Erro ao abrir o arquivo. %s\n",arquivo);
        exit(0);
    }
    int w=0;
    while(fscanf(f,"%d",&l[i].cod) != EOF /*>0*/)
    {
        fgets(l[i].t,45,f);
        fgets(l[i].aut,30,f);
        fscanf(f,"%d\n",&z);
        while(l[i].aut[0] == ' ')
            for(w=0;w<strlen(l[i].aut);w++)
                l[i].aut[w] = l[i].aut[w+1];
        l[i].aut[w] = '\0';
        l[i].m=z/10000;
        l[i].a=z%10000;
        contitulo++;
        contm[l[i].m]++;
        contautor++;
        printf("codigo ---: %d\n",l[i].cod);
        printf("titulo ---: %s\n",l[i].t  );
        printf("autor ----: %s\n",l[i].aut);
        printf("mes ------: %d\n",l[i].m  );
        printf("ano ------: %d\n",l[i].a  );
        conta[l[i].a]++;
        i++;
    }
    for (j=0;j<2020;j++)
    {
        for (i=0;i<2020;i++)
        {
            if(conta[i]<conta[i+1])
            {
                auxa=conta[i];
                conta[i]=conta[i+1];
                conta[i+1]=auxa;
            }
        }
    }
    for (j=0;j<12;j++)
    {
        for (i=0;i<12;i++)
        {
            if(contm[i]<contm[i+1])
            {
                auxm=contm[i];
                contm[i]=contm[i+1];
                contm[i+1]=auxm;
            }
        }
    }
    for(i==2019;i>=0;i--)
    {
        if(i>0)
        {
            menora=conta[i];
            i=-1;
        }
    }
    for(i==12;i>=0;i--)
    {
        if(i>0)
        {
            menorm=contm[i];
            i=-1;
        }
    }
    if((r=fopen("resposta.txt","wb"))==NULL)
    {
        printf("Arquivo não pode ser aberto\n");
        exit(1);
    }
    fprintf(r,"titulos -------: %d\n",contitulo);
    fprintf(r,"autores -------: %d\n",contautor);
    fprintf(r,"ano com mais --: %d\n",conta[0] );
    fprintf(r,"ano com menos -: %d\n",menora   );
    fprintf(r,"mes com mais --: %d\n",contm[0] );
    fprintf(r,"mes com menos -: %d\n",menorm   );

    printf("titulos -------: %d\n",contitulo);
    printf("autores -------: %d\n",contautor);
    printf("ano com mais --: %d\n",conta[0] );
    printf("ano com menos -: %d\n",menora   );
    printf("mes com mais --: %d\n",contm[0] );
    printf("mes com menos -: %d\n",menorm   );
}

mas essa parte de seu código é para que ?

for (j=0;j<2020;j++)
    {
        for (i=0;i<2020;i++)
        {
            if(conta[i]<conta[i+1])
            {
                auxa=conta[i];
                conta[i]=conta[i+1];
                conta[i+1]=auxa;
            }
        }
    }
    for (j=0;j<12;j++)
    {
        for (i=0;i<12;i++)
        {
            if(contm[i]<contm[i+1])
            {
                auxm=contm[i];
                contm[i]=contm[i+1];
                contm[i+1]=auxm;
            }
        }
    }
    for(i==2019;i>=0;i--)
    {
        if(i>0)
        {
            menora=conta[i];
            i=-1;
        }
    }
    for(i==12;i>=0;i--)
    {
        if(i>0)
        {
            menorm=contm[i];
            i=-1;
        }
    }
    if((r=fopen("resposta.txt","wb"))==NULL)
    {
        printf("Arquivo não pode ser aberto\n");
        exit(1);
    }
    fprintf(r,"titulos -------: %d\n",contitulo);
    fprintf(r,"autores -------: %d\n",contautor);

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...