IvoSilva

[PROG2] Mini-Teste Exemplo #1 | Exercício 1

Mar 25th, 2012
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.23 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. /*** exercicio 1.1 ***/
  6. typedef struct
  7. {
  8.     char *word ;
  9.     int oco ;
  10. } registo;
  11.  
  12. /*** exercicio 1.2 ***/
  13. registo *analisarFicheiro(FILE *ficheiro, int *num_palavras)
  14. {
  15.     registo *palavras ;
  16.     char palavra[100] ;
  17.     int i = 0 , flag = 0 ;
  18.     while (fscanf (ficheiro , "%s" , palavra) != EOF)
  19.     {
  20.         if (*num_palavras == 0)
  21.         {
  22.             palavras = (registo*) malloc (sizeof(registo)) ;
  23.             palavras[0].word = (char*) malloc (strlen(palavra) + 1);
  24.             strcpy (palavras[0].word , palavra) ;
  25.             palavras[0].oco = 1 ;
  26.             *num_palavras += 1 ;
  27.         }
  28.         else
  29.         {
  30.             flag = 0 ;
  31.             for (i = 0 ; i < *num_palavras ; i++)
  32.             {
  33.                 if (strcmp (palavras[i].word , palavra) == 0) palavras[i].oco += 1 ;
  34.                 else flag++ ;
  35.             }
  36.             if (flag == *num_palavras)
  37.             {
  38.                     palavras = (registo*) realloc (palavras , (*num_palavras + 1) * sizeof(registo));
  39.                     palavras[*num_palavras].word = (char*) malloc (strlen(palavra) + 1);
  40.                     strcpy (palavras[*num_palavras].word , palavra) ;
  41.                     palavras[*num_palavras].oco = 1 ;
  42.                     *num_palavras += 1 ;
  43.             }
  44.         }
  45.     }
  46.     return palavras ;
  47. }
  48.  
  49. /*** exercicio 1.3 ***/
  50. void gerarRelatorio(FILE *ficheiro, registo *resultados, int num_palavras)
  51. {
  52.     int i ;
  53.     fprintf (ficheiro , "Palavras encontradas:\n--------------------\n") ;
  54.     for (i = 0 ; i < num_palavras ; i++) fprintf (ficheiro , "%d:   %s - %d\n" , i + 1 , resultados[i].word , resultados[i].oco) ;
  55. }
  56.  
  57. /*** exercicio 1.4 ***/
  58. int main()
  59. {
  60.     char entrada[50] , saida[50] ;
  61.     printf ("Ficheiros de entrade e saída: ") ;
  62.     scanf ("%s %s" , entrada , saida) ;
  63.     FILE *f = fopen (entrada , "r") , *p = fopen (saida , "w") ;
  64.     registo *palavras = NULL ;
  65.     int nPal = 0 , i ;
  66.     if (f == NULL)
  67.     {
  68.         printf ("Ficheiro não encontrado.\n") ;
  69.         return -1 ;
  70.     }
  71.     palavras = analisarFicheiro(f , &nPal) ;
  72.     gerarRelatorio(p , palavras , nPal) ;
  73.     fclose (f) ;
  74.     fclose (p) ;
  75.     return 0 ;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment