Ir ao conteúdo

Posts recomendados

Postado

 

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
Postado

@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
Postado

@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
Postado

@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);

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!