1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Listas Dinamicas - HELP

Discussão em 'Programação' iniciada por erdnusse, 27 de Março de 2007. (Respostas: 1; Visualizações: 496)

  1. Se houver alguem que me poder ajudar eu tou a fazer um trabalho para amanha e nao tou a conseguir completar o trabalho se me conseguirem explicar cm fazer agradecia.


    /*****************************************************************************
    * File: nova_palavra.c
    *
    * Time-stamp: "2007-03-22 10:56:04 nova_palavra.c
    *
    * Purpose: Contar o numero de palavras diferentes num ficheiro utilizando
    * listas.
    *
    * History: 2007-03-22 - pff - changed.
    *
    *
    *****************************************************************************/
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<strings.h>
    #include"nova_palavra.h"
    Elem_palavras inicio = NULL;
    int num_palavras = 0;
    int palavras_dif = 0;

    /* Cria um novo elemento com a dimens� correcta para a vari�el nome,
    inicializa ocorr�cias e pr�imo elemento a apontar para NULL */
    Elem_palavras cria_palavra(char *palavra)
    {
    Elem_palavras pont = NULL;
    pont = (Elem_palavras) malloc(sizeof(Elem_palavras));
    pont->nome = (char*) malloc(sizeof(char*));
    strcpy(pont->nome, palavra);
    pont->ocorrencias = 1;
    pont->prox = NULL;
    palavras_dif++;
    return pont;
    }

    /* inser�o no fim da lista de um novo elemento
    * (porqu�no fim?? h� alguma raz�??)
    */
    void insere_palavra(char *palavra)
    {
    Elem_palavras novo = NULL;
    Elem_palavras aux = inicio;
    novo = cria_palavra(palavra);
    if (aux == NULL) {
    /* Primeira vez insere sempre */ O QUE EU PONHO AKI??
    }
    else { E aqui?
    /* acrescentar c�igo para implementar inser�o no fim da lista */
    }
    }

    /* testa se a palavra est�na lista, se sim incrementa ocorr�cias, se n�,
    * insere palavra na lista. Retorna o numero de ocorr�cias */
    int testa_palavra(char *palavra)
    {
    Elem_palavras apont = inicio;
    while (apont != NULL) {
    if (strcasecmp(apont->nome, palavra) == 0) {
    apont->ocorrencias += 1;
    return apont->ocorrencias;
    }
    apont = apont->prox;
    }
    insere_palavra(palavra);
    return 1;
    }

    void cria_lista_palavras_ficheiro(char *nome)
    {
    char palavra[100];
    FILE *fp = NULL;
    fp = fopen(nome, "r");
    if (fp == NULL)
    {printf("Erro na abertura do ficheiro.\n");exit(0); }
    else
    while (fscanf(fp, "%s", palavra) != EOF) {
    testa_palavra(palavra);
    num_palavras++;
    }
    }

    void escreve_lista_palavras_ficheiro(char *nome)
    {
    char *novo_nome;
    char p[] = { ".palavras" };
    Elem_palavras pont = inicio;
    FILE *fp = NULL;
    novo_nome = (char*) malloc(sizeof(char*)); /* -- Aloca�o -- */
    strcpy(novo_nome, nome);
    strcat(novo_nome, p);
    fp = fopen(novo_nome, "w");
    while (pont != NULL) {
    fprintf(fp, "%i %s\n", pont->ocorrencias, pont->nome);
    pont = pont->prox;
    }
    free(novo_nome);
    }

    int main(int argc, char *argv[])
    {
    char *nome_fich;
    if (argc == 1) {
    printf("Falta o nome do ficheiro de palavras.\n");
    return 2;
    }
    nome_fich = (char*) malloc(sizeof(char*));
    strcpy(nome_fich, argv[1]);
    cria_lista_palavras_ficheiro(nome_fich);
    escreve_lista_palavras_ficheiro(nome_fich);
    printf("Total de palavras = %d \t Palavras diferentes = %d\n",
    num_palavras, palavras_dif);
    free(nome_fich);
    return 1;
    }
    /*****************************************************************************/
     
  2. TuxBoss

    TuxBoss Power Member

    Se disseres quais são as tuas dúvidas imagino que seja mais fácil ajudar.
     

Partilhar esta Página