Mudanças entre as edições de "Equipe3-2015-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 116: Linha 116:
 
//Estrutura da lista que será criada
 
//Estrutura da lista que será criada
 
typedef struct lista {
 
typedef struct lista {
     char *cidade;
+
     char cidade[40];
 
     int codigo;
 
     int codigo;
     int temp;
+
     float temp;
 
     int umidade;
 
     int umidade;
 
     struct lista *proximo;
 
     struct lista *proximo;
 
} Dados;
 
} Dados;
  
 +
void abrirarquivo2();
 +
 
//Arquivo utilizado
 
//Arquivo utilizado
 
FILE *p_arq;
 
FILE *p_arq;
 
   
 
   
 
//Funções para manusear os dados (irão retornar dados)
 
//Funções para manusear os dados (irão retornar dados)
Dados *inicia_dados  (char *cidade, int codigo, int temp, int umidade);
+
Dados *inicia_dados  (char *cidade, int codigo, float temp, int umidade);
Dados *insere_dados  (Dados *dados, char *cidade, int codigo, int temp, int umidade);
+
Dados *insere_dados  (Dados *dados, char *cidade, int codigo, float temp, int umidade);
 
Dados *delbusca_dados(Dados *dados, char *chave);
 
Dados *delbusca_dados(Dados *dados, char *chave);
 
Dados *deleta_dados  (Dados *dados, int nTipo);
 
Dados *deleta_dados  (Dados *dados, int nTipo);
 
int  checa_vazio    (Dados *dados);
 
int  checa_vazio    (Dados *dados);
 
+
 
//Funções para mostrar dados
 
//Funções para mostrar dados
 
void  exibe_dados    (Dados *dados);
 
void  exibe_dados    (Dados *dados);
Linha 139: Linha 141:
 
//Inicializando os dados da lista
 
//Inicializando os dados da lista
 
Dados *principal = NULL;
 
Dados *principal = NULL;
 
+
  
 
//---------------------------------
 
//---------------------------------
Linha 146: Linha 148:
 
//Criando uma lista vazia
 
//Criando uma lista vazia
 
void criavazia(void){
 
void criavazia(void){
    char *cidade;
+
Dados *p = malloc(sizeof(Dados));
    int codigo=0, umidade=0;
 
    int temp=0;
 
 
     //Alocando dados para uma String
 
     //Alocando dados para uma String
    cidade = (char *)malloc(BUFFER);
 
 
     //Lendo String cidade
 
     //Lendo String cidade
 
     printf("\n\nDigite o cidade: \n----> ");
 
     printf("\n\nDigite o cidade: \n----> ");
     scanf("%s", cidade);
+
     scanf("%s", p->cidade);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int codigo
 
     //Lendo int codigo
 
     printf("\n\nDigite o codigo: \n----> ");
 
     printf("\n\nDigite o codigo: \n----> ");
     scanf("%d", &codigo);
+
     scanf("%d", &p->codigo);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int temp
 
     //Lendo int temp
 
     printf("\n\nDigite a temperatura: \n----> ");
 
     printf("\n\nDigite a temperatura: \n----> ");
     scanf("%d", &temp);
+
     scanf("%f", &p->temp);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int umidade
 
     //Lendo int umidade
 
     printf("Digite a umidade: \n----> ");
 
     printf("Digite a umidade: \n----> ");
     scanf("%d", &umidade);
+
     scanf("%d", &p->umidade);
 
     printf("\n");
 
     printf("\n");
 
     //Lançando os dados lidos na lista Principal
 
     //Lançando os dados lidos na lista Principal
     free(principal);
+
     principal = p;
     principal = inicia_dados(cidade, codigo, temp, umidade);
+
     abrirarquivo2();
 
}
 
}
 
   
 
   
 
//Iniciando os dados da lista vazia
 
//Iniciando os dados da lista vazia
Dados *inicia_dados(char *cidade, int codigo, int temp, int umidade) {
+
Dados *inicia_dados(char cidade[40], int codigo, float temp, int umidade) {
 
     Dados *novo;
 
     Dados *novo;
 
     //Alocando memória para a posição atual da lista
 
     //Alocando memória para a posição atual da lista
 
     novo = (Dados *)malloc(sizeof(Dados));
 
     novo = (Dados *)malloc(sizeof(Dados));
 
     //Lançando os dados lidos
 
     //Lançando os dados lidos
    novo->cidade = (char *)malloc(strlen(cidade)+1);
 
 
     strncpy(novo->cidade, cidade, strlen(cidade)+1);
 
     strncpy(novo->cidade, cidade, strlen(cidade)+1);
 
     novo->codigo = codigo;
 
     novo->codigo = codigo;
Linha 194: Linha 192:
 
//Inserção de dados no final de uma lista
 
//Inserção de dados no final de uma lista
 
void inserefim(void) {
 
void inserefim(void) {
     char *cidade;
+
     char cidade[40];
 
     int codigo=0, umidade=0;
 
     int codigo=0, umidade=0;
     int temp=0;
+
     float temp=0;
 
     //Alocando dados para uma String
 
     //Alocando dados para uma String
    cidade = (char *)malloc(BUFFER);
 
 
     //Lendo String cidade
 
     //Lendo String cidade
 
     printf("\n\nDigite o cidade: \n----> ");
 
     printf("\n\nDigite o cidade: \n----> ");
Linha 209: Linha 206:
 
     //Lendo int temp
 
     //Lendo int temp
 
     printf("\n\nDigite a temperatura: \n----> ");
 
     printf("\n\nDigite a temperatura: \n----> ");
     scanf("%d", &temp);
+
     scanf("%f", &temp);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int umidade
 
     //Lendo int umidade
Linha 220: Linha 217:
 
     final = (Dados *)malloc(sizeof(Dados));
 
     final = (Dados *)malloc(sizeof(Dados));
 
     //Setando os valores cidade e Idade
 
     //Setando os valores cidade e Idade
    final->cidade = (char *)malloc(strlen(cidade)+1);
+
 
 
     strncpy(final->cidade, cidade, strlen(cidade)+1);
 
     strncpy(final->cidade, cidade, strlen(cidade)+1);
 
     final->codigo = codigo;
 
     final->codigo = codigo;
Linha 244: Linha 241:
 
     char *cidade;
 
     char *cidade;
 
     int codigo=0, umidade=0;
 
     int codigo=0, umidade=0;
     int temp=0;
+
     float temp=0;
 
     char aux[40];
 
     char aux[40];
 
     int aux2;
 
     int aux2;
Linha 259: Linha 256:
 
     //Lendo float temp
 
     //Lendo float temp
 
     printf("\n\nDigite a temperatura: \n----> ");
 
     printf("\n\nDigite a temperatura: \n----> ");
     scanf("%d", &temp);
+
     scanf("%f", &temp);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int umidade
 
     //Lendo int umidade
Linha 270: Linha 267:
 
   
 
   
 
//Inserindo dados recebidos
 
//Inserindo dados recebidos
Dados *insere_dados(Dados *dados, char *cidade, int codigo, int temp, int umidade) {
+
Dados *insere_dados(Dados *dados, char cidade[40], int codigo, float temp, int umidade) {
 
     Dados *inicio;
 
     Dados *inicio;
 
     //Alocando memória para a posição atual
 
     //Alocando memória para a posição atual
 
     inicio = (Dados *)malloc(sizeof(Dados));
 
     inicio = (Dados *)malloc(sizeof(Dados));
 
     //Lançando os dados lidos
 
     //Lançando os dados lidos
    inicio->cidade = (char *)malloc(strlen(cidade)+1);
 
 
     strncpy(inicio->cidade, cidade, strlen(cidade)+1);
 
     strncpy(inicio->cidade, cidade, strlen(cidade)+1);
 
     inicio->codigo = codigo;
 
     inicio->codigo = codigo;
Linha 311: Linha 307:
 
//Exibindo todos os dados do menu
 
//Exibindo todos os dados do menu
 
void exibe_dados(Dados *dados) {
 
void exibe_dados(Dados *dados) {
 +
int res;
 
     printf("Cadastro:\n\n");
 
     printf("Cadastro:\n\n");
 
     printf("------------------------\n");
 
     printf("------------------------\n");
Linha 317: Linha 314:
 
         printf("cidade: %s\n", dados->cidade);
 
         printf("cidade: %s\n", dados->cidade);
 
         printf("Codigo: %d\n", dados->codigo);
 
         printf("Codigo: %d\n", dados->codigo);
         printf("Temperatura: %d\n", dados->temp);
+
         printf("Temperatura: %.2f\n", dados->temp);
 
         printf("Umidade: %d\n", dados->umidade);
 
         printf("Umidade: %d\n", dados->umidade);
 
         printf("------------------------\n");
 
         printf("------------------------\n");
    }
 
 
     getchar();
 
     getchar();
 +
}
 
}
 
}
 
   
 
   
Linha 423: Linha 420:
 
             printf("Codigo: %d\n", dados->codigo);
 
             printf("Codigo: %d\n", dados->codigo);
 
             printf("cidade: %s\n", dados->cidade);
 
             printf("cidade: %s\n", dados->cidade);
             printf("Temperatura: %d\n", dados->temp);
+
             printf("Temperatura: %f\n", dados->temp);
 
             printf("Umidade: %d\n", dados->umidade);
 
             printf("Umidade: %d\n", dados->umidade);
 
             printf("------------------------\n");
 
             printf("------------------------\n");
Linha 489: Linha 486:
 
//    Opção '8'
 
//    Opção '8'
 
//---------------------------------
 
//---------------------------------
 
+
  void abrirarquivo()
+
void abrirarquivo()
 
{
 
{
 
   FILE *p_arq;
 
   FILE *p_arq;
Linha 506: Linha 503:
 
       printf("%s\n",buff);
 
       printf("%s\n",buff);
 
   }
 
   }
  fclose(p_arq);
+
fclose(p_arq);
 
}
 
}
 +
  
//void abrirarquivo()
+
void abrirarquivo2()
//{
+
{
//    Dados *dados;
+
int res;  
// int res;  
+
if ((p_arq=fopen("infcoletadas.dat","r"))==NULL) {
// if ((p_arq=fopen("infcoletadas.dat","r"))==NULL) {
+
printf("Falha na abertura do arquivo.\n");
// printf("Falha na abertura do arquivo.\n");
+
return;
// return;
+
}  
// }  
+
while(1) {  
// while(1) {
+
  Dados *dados;
  //  dados = (Dados *)malloc(sizeof(Dados));
+
    dados = (Dados *)malloc(sizeof(Dados));
    // if((res=fscanf(p_arq,"%s %d %d %d", dados->cidade, &dados->codigo, &dados->temp, &dados->umidade))==EOF) {
+
    if((res=fscanf(p_arq,"%s %d %f %d", dados->cidade, &dados->codigo, &dados->temp, &dados->umidade))==EOF) {
// break;
+
break;
// if(principal==NULL) {
+
  }
// principal=dados;
+
if(principal==NULL) {
// }
+
principal=dados;
// }
+
}else {
// else {
+
        dados->proximo=principal->proximo;
// principal->proximo=dados;
+
principal->proximo=dados;
// }
+
       
// }
+
}
// fclose(p_arq);
+
}
//}
+
fclose(p_arq);
 +
}
 
   
 
   
 
   
 
   
Linha 561: Linha 560:
 
         printf("\n\t\tSistema de Monitoração de temperatura do Amazonas\n\n");
 
         printf("\n\t\tSistema de Monitoração de temperatura do Amazonas\n\n");
 
         printf("Escolha uma opcao: \n");
 
         printf("Escolha uma opcao: \n");
         printf("1 - Criar lista vazia\n");
+
         printf("1 - Criar lista com os dados do arquivo\n");
 
         if(chave==1){
 
         if(chave==1){
 
             printf("2 - Inserir no Fim de uma lista\n");
 
             printf("2 - Inserir no Fim de uma lista\n");
Linha 571: Linha 570:
 
             printf("6 - Busca Dados\n");
 
             printf("6 - Busca Dados\n");
 
             printf("7 - Mostra media e temperaturas\n");
 
             printf("7 - Mostra media e temperaturas\n");
            printf("8 - Arquivo\n");
 
 
         }
 
         }
 
         printf("9 - Sair\n\n");
 
         printf("9 - Sair\n\n");
Linha 619: Linha 617:
 
             break;
 
             break;
 
             //Adiocana conteudo de arquivo no final da lista
 
             //Adiocana conteudo de arquivo no final da lista
 +
          case 'a':
 +
            abrirarquivo2();
 +
            ESPERA;
 +
            break;
 +
 
             case '8':
 
             case '8':
 
             abrirarquivo();
 
             abrirarquivo();
Linha 642: Linha 645:
 
     return 0;
 
     return 0;
 
}
 
}
 
  
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição das 15h40min de 30 de junho de 2015

Integrantes

DANIEL CABRAL CORREA

PABLO FIDELIS DIAS

PAULO HENRIQUE HORST BIANCHIN


Descrição da atividade principal

Um sistema de aquisição recebe, a cada final do dia, um arquivo de dados contendo informações sobre a temperatura (°C) e a umidade relativa do ar (%) de determinadas localidades do auto Amazonas. Implemente um sistema que importe esses arquivos e atualize os dados de temperatura e umidade de todas as localidades cadastradas. No entanto, é preciso ter um cadastro de localidades com seus respectivos códigos. A cada dia, ou seja, a cada arquivo lido, é preciso apresentar na tela a amplitude térmica da região, indicando temperaturas mínimas, médias e máximas . Portanto é preciso cadastrar novas localidades, remover localidades e imprimir a lista dessas localidades. O sistema deve conter um menu de opções para realizar as atividades, em loop contínuo e com opção para sair.

Descrição da atividade específica

Fazer uso
  1. Comando swith
  2. Lista encadeada
  3. Ponteiros
  4. Alocação Dinâmica de Memória
  5. Funções para tratamento de arquivo


Exemplo da estrutura (encadeada)
struct TLocalidade{
  int codigo;
  char nome[40];
  float temp_media;
  float temp_media;
  struct TLocalidade *prox;
};
Exemplo de arquivo (localidades.dat)
cat localidades.dat
100 XINGU 23.5 80
200 SOLIMOES 24.8 81
300 IAPOQUE 32.0 75
400 MADEIRA 33.9 98
500 BELLOMONTE 40.5 90
Exemplo dos dados coletados (dados1.dat)
cat dados1.dat
100 29.0 89
200 25.3 88
300 35.1 90
400 35.3 100
500 32.0 100
Exemplo dos dados coletados (dodos2.dat)
cat dodos2.dat
100 39.4 100
200 35.3 78
300 26.9 70
400 33.5 71
500 41.2 93
Arquivo utilizado pela equipe (infcoletadas.dat)
cat infcoletadas.dat
XINGU            100      23.5       80
SOLIMOES         200      24.8       81
IAPOQUE          300      32.0       75
MADEIRA          400      33.9       98
BELLOMONTE       500      40.5       90

[...]

Atividades

Distribuição

DANIEL CABRAL CORREA - Responsável pela programação das funções, pelo ajuste de erros, e debate sobre desenvolvimento do projeto.

PABLO FIDELIS DIAS - Responsável pela estruturação do programa, pela programação das funções, pelo ajuste de erros e debate dobre desenvolvimento do projeto.

PAULO HENRIQUE HORST BIANCHIN - Responsável pela compilação e debate sobre desenvolvimento do projeto.

Desenvolvimento

1.1 - Inicialmente foram feitas a estruturação do arquivo separando a função main do restante das funções para facilitar na detecção de erros

2.1 - Em seguida foram feitas algumas funções (essa sendo desenvolvidas a partir do conhecimento de cada aluno,exemplos passado pelo professor, conteúdo da wiki e pesquisas).

2.2 - Logo após essas funções foram implementadas ao arquivo principal.

2.3 - Compilação do Arquivo principal

3.1 - Ajuste de erros e a repetição dos passos 2.1, 2.2, 2.3

4.1 - Compilação final sem nenhum problema

Observação:O trabalho foi feito através do skype, pela ferramenta de compartilhamento de tela. A programação foi desenvolvida no programa notepad++. Os testes foram realizados nas paginas http://www.tutorialspoint.com/codingground.htm http://www.tutorialspoint.com/compile_c_online.php e confirmados no terminal do linux.

Conclusão

Nesse projeto encontramos grande dificuldades e constatamos que ao implementar o projeto nosso conhecimento foi melhorado.

Ao final do programa realizamos ajustes finos no programa para que funcionasse corretamente e que não houvessem duplicatas.

Concluímos que com o projeto em que trabalhamos conseguimos utilizar todos os métodos aprendidos em aula, utilizamos algumas fontes de estudos extra-curriculares para desenvolvimento do mesmo.

Sugerimos que a cada aula seja proposto para que cada aluno faça um programa de tema livre, porém que use os comandos apresentados em aula com o monitoramento do professor.

Código fonte

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
//Máximo de bytes para uma String
#define BUFFER 64
 
//Espera 3 segundos
#define ESPERA sleep(5)
 
//Estrutura da lista que será criada
typedef struct lista {
    char cidade[40];
    int codigo;
    float temp;
    int umidade;
    struct lista *proximo;
} Dados;

void abrirarquivo2();
 
//Arquivo utilizado
	FILE *p_arq;
 
//Funções para manusear os dados (irão retornar dados)
Dados *inicia_dados  (char *cidade, int codigo, float temp, int umidade);
Dados *insere_dados  (Dados *dados, char *cidade, int codigo, float temp, int umidade);
Dados *delbusca_dados(Dados *dados, char *chave);
Dados *deleta_dados  (Dados *dados, int nTipo);
int   checa_vazio    (Dados *dados);
 
//Funções para mostrar dados
void  exibe_dados    (Dados *dados);
void  busca_dados    (Dados *dados, char *chave);
 
//Inicializando os dados da lista
Dados *principal = NULL;
 

//---------------------------------
//     Opção '1'
//---------------------------------
//Criando uma lista vazia
void criavazia(void){
	 Dados *p = malloc(sizeof(Dados));
    //Alocando dados para uma String
    //Lendo String cidade
    printf("\n\nDigite o cidade: \n----> ");
    scanf("%s", p->cidade);
    printf("\n");
    //Lendo int codigo
    printf("\n\nDigite o codigo: \n----> ");
    scanf("%d", &p->codigo);
    printf("\n");
    //Lendo int temp
    printf("\n\nDigite a temperatura: \n----> ");
    scanf("%f", &p->temp);
    printf("\n");
    //Lendo int umidade
    printf("Digite a umidade: \n----> ");
    scanf("%d", &p->umidade);
    printf("\n");
    //Lançando os dados lidos na lista Principal
    principal = p;
    abrirarquivo2();
}
 
//Iniciando os dados da lista vazia
Dados *inicia_dados(char cidade[40], int codigo, float temp, int umidade) {
    Dados *novo;
    //Alocando memória para a posição atual da lista
    novo = (Dados *)malloc(sizeof(Dados));
    //Lançando os dados lidos
    strncpy(novo->cidade, cidade, strlen(cidade)+1);
    novo->codigo = codigo;
    novo->temp = temp;
    novo->umidade = umidade;
    //Apontando para a próxima posição da lista
    novo->proximo = NULL;
    return novo;
}
 
//---------------------------------
//     Opção '2'
//---------------------------------
 
//Inserção de dados no final de uma lista
void inserefim(void) {
    char cidade[40];
    int codigo=0, umidade=0;
    float temp=0;
    //Alocando dados para uma String
    //Lendo String cidade
    printf("\n\nDigite o cidade: \n----> ");
    scanf("%s", cidade);
    printf("\n");
    //Lendo int codigo
    printf("\n\nDigite o codigo: \n----> ");
    scanf("%d", &codigo);
    printf("\n");
    //Lendo int temp
    printf("\n\nDigite a temperatura: \n----> ");
    scanf("%f", &temp);
    printf("\n");
    //Lendo int umidade
    printf("Digite a umidade: \n----> ");
    scanf("%d", &umidade);
    printf("\n");
    //Criando listas auxiliares       
    Dados *final,*aux;
    //Alocando dados para a posição final da lista
    final = (Dados *)malloc(sizeof(Dados));
    //Setando os valores cidade e Idade

    strncpy(final->cidade, cidade, strlen(cidade)+1);
    final->codigo = codigo;
    final->temp = temp;
    final->umidade = umidade;
    //A pŕoxima posição será Nulo
    final->proximo=NULL;
    //A lista auxiliar será igual a Principal
    aux=principal;
    //Enquanto o próximo de auxiliar não for Nulo
    while(aux->proximo!=NULL){
        aux=aux->proximo;
    }
    //O último valor, será Nulo, e depois apontando para
    //o Final
    aux->proximo=NULL;
    aux->proximo=final;
}
 
//Se não tiver nada, insere no inicio
//Inserindo no início da lista
void insereinicio(Dados *dados){
    char *cidade;
    int codigo=0, umidade=0;
    float temp=0;
    char aux[40];
    int aux2;
    //Alocando dados para uma String
    cidade = (char *)malloc(BUFFER);
    //Lendo String cidade
    printf("\n\nDigite a cidade: \n----> ");
    scanf("%s", aux);
    printf("\n");
    //Lendo int codigo
    printf("\n\nDigite o codigo: \n----> ");
    scanf("%d", &aux2);
    printf("\n");
    //Lendo float temp
    printf("\n\nDigite a temperatura: \n----> ");
    scanf("%f", &temp);
    printf("\n");
    //Lendo int umidade
    printf("Digite a umidade: \n----> ");
    scanf("%d", &umidade);
    printf("\n");
    //Lançando dados no ínicio da lista
    principal = insere_dados(principal, cidade, codigo, temp, umidade);
}
 
//Inserindo dados recebidos
Dados *insere_dados(Dados *dados, char cidade[40], int codigo, float temp, int umidade) {
    Dados *inicio;
    //Alocando memória para a posição atual
    inicio = (Dados *)malloc(sizeof(Dados));
    //Lançando os dados lidos
    strncpy(inicio->cidade, cidade, strlen(cidade)+1);
    inicio->codigo = codigo;
    inicio->temp = temp;
    inicio->umidade = umidade;
    //O próximo valor aponta para a lista já existente
    inicio->proximo = dados;
    return inicio;
}
 
//---------------------------------
//     Opção '3'
//---------------------------------
 
//Função que testa se a lista está vazia
void listavazia(void){
    if (principal == NULL)
        printf("\n\nLista esta Vazia!\n\n ");
    else
        printf("\n\nLista nao esta Vazia!\n\n ");
    getchar();
}
 
//---------------------------------
//     Opção '4'
//---------------------------------
 
//Exibindo dados da lista
void exibe(void) {
    //Se não estiver vazio, exibe os dados
    if (!checa_vazio(principal))
        exibe_dados(principal);
}
 
//Exibindo todos os dados do menu
void exibe_dados(Dados *dados) {
	 int res;
    printf("Cadastro:\n\n");
    printf("------------------------\n");
    //Exibindo todos os valores da lista
    for (; dados != NULL; dados = dados->proximo) {
        printf("cidade: %s\n", dados->cidade);
        printf("Codigo: %d\n", dados->codigo);
        printf("Temperatura: %.2f\n", dados->temp);
        printf("Umidade: %d\n", dados->umidade);
        printf("------------------------\n");
    getchar();
	}
}
 
//---------------------------------
//     Opção '5'
//---------------------------------
 
//Deletando valor buscado
void delbusca(void) {
    char *chave;
    //Se não estiver vazio
    if (!checa_vazio(principal)) {
        chave = (char *)malloc(BUFFER);
        //Armazenando o valor digitado
        printf("Digite o cidade para buscar: \n--> ");
        scanf("%s", chave);
        //Deletando a chave buscada
        principal = delbusca_dados(principal, chave);
    }
}
 
//Deletando os valores buscados
Dados *delbusca_dados(Dados *dados, char *chave) {
    int achou=0,cont=0;
    Dados *juntou, *aux, *nova=dados;       
 
    //Correndo a lista e verificando se encontrou a string buscada, se sim, aumenta o contador e seta a variável de busca
    for (; nova != NULL; nova = nova->proximo) {
        if (strcmp(chave, nova->cidade) == 0) {
            achou=1;
            cont++;
        }
    }
 
    //Se encontrou a busca
    if(achou==1){
        int ind=0;
        //Correndo a lista
        for(ind=0;ind<cont;ind++){
            //Se encontrou na primeira casa apaga a primeira casa
            if(strcmp(chave,dados->cidade)==0){
                aux=dados;
                dados=dados->proximo;
                free(aux);
            }
            //Senão, procura até encontrar
            else{
                aux=dados;
                //Posiciona na frente do encontro para exclusão
                while(strcmp(chave,aux->cidade)!=0){
                    aux=aux->proximo;
                }
 
                juntou=dados;
                //Enquanto o auxiliar juntou for diferente do posicionado para exclusão
                while(juntou->proximo!=aux){
                    juntou=juntou->proximo;
                }
                //Aponta para o próximo valor válido
                juntou->proximo=aux->proximo;
 
                free(aux);
            }
        }
        printf("Excluido.\n");
    }
    else
        printf("Nenhum resultado encontrado.\n");
 
    getchar();
    return dados;
}
 
//---------------------------------
//     Opção '6'
//---------------------------------
 
//Função que busca os dados
void busca(void) {
    char *chave;
    //Senão estiver vazio a lista
    if (!checa_vazio(principal)) {
        chave = (char *)malloc(BUFFER);
        //Lendo o cidade que será buscado
        printf("Digite o cidade para buscar: \n--> ");
        scanf("%s", chave);
        //chamando a função que irá procurar o cidade
        busca_dados(principal, chave);
    }
}
 
//Percorre cada ponta da lista verificando busca
void busca_dados(Dados *dados, char *chave) {
    int achou = 0;
    printf("Cadastro:\n\n");
    //Percorrendo todas as posições
    for (; dados != NULL; dados = dados->proximo) {
        //Se encontrou, mostra os dados
        if (strcmp(chave, dados->cidade) == 0) {
            printf("------------------------\n");
            printf("Codigo: %d\n", dados->codigo);
            printf("cidade: %s\n", dados->cidade);
            printf("Temperatura: %f\n", dados->temp);
            printf("Umidade: %d\n", dados->umidade);
            printf("------------------------\n");
            achou++;
        }
    }
 
    //Mostrando o resultado da busca
    if (achou == 0)
        printf("Nenhum resultado encontrado.\n");
    else
        printf("Foram encontrado(s) %d registro(s).\n", achou);
 
    getchar();
}
//---------------------------------
//     Opção '7'
//---------------------------------
 
void media(void){
    mediaa (principal);
    maxima (principal);
    minima (principal);
}
 
int maxima(Dados *dados){
    int max=-60000;
    for (; dados != NULL; dados = dados->proximo){
        if(max < dados->temp){
            max=dados->temp;
        }
    }
    printf("Temperatura maxima: %d\n", max);
}
 
int minima(Dados *dados){
    int min=60000;
    for (; dados != NULL; dados = dados->proximo){
        if(min > dados->temp){
            min=dados->temp;
        }
    }
    printf("Temperatura minima: %d\n", min);
}
 
 
int mediaa (Dados *dados){
    int aux;
    float soma=0;
    float media=0;
    int cont=0;
    for (; dados != NULL; dados = dados->proximo){
        aux = dados->temp;
        soma = soma+aux;
        cont ++;
        if(dados==NULL){
            break;
        }
    }
    media=soma/cont;
    printf("media das temperatura:%.2f\n",media);
}
 
//---------------------------------
//     Opção '8'
//---------------------------------
 
void abrirarquivo()
{
  FILE *p_arq;
  int i;
  int res;
  char buff[100];
   if ((p_arq=fopen("infcoletadas.dat", "r")) == NULL) {
     printf("Problemas na abertura do arquivo\n");
     return;
  }
   while(1) {
      if((res = fscanf(p_arq,"%s\n",buff))==EOF) {  					  	    
			   break;
      }
      printf("%s\n",buff);
  }
 fclose(p_arq);
}
 

void abrirarquivo2()
{
	int res; 
	if ((p_arq=fopen("infcoletadas.dat","r"))==NULL) {
		printf("Falha na abertura do arquivo.\n");
		return;
	} 
	while(1) { 
   	Dados *dados;
    	dados = (Dados *)malloc(sizeof(Dados));
    	if((res=fscanf(p_arq,"%s %d %f %d", dados->cidade, &dados->codigo, &dados->temp, &dados->umidade))==EOF) {
			break;
	   }
		if(principal==NULL) {
			principal=dados;
		}else {
         dados->proximo=principal->proximo;
			principal->proximo=dados;
         
		}	
	}
	fclose(p_arq);
}
 
 
//---------------------------------
//     Função Auxiliar
//---------------------------------
 
//Função que testa se a lista esta vazia
int checa_vazio(Dados *dados) {
    //Se a lista estiver vazia
    if (dados == NULL) {
            printf("Lista vazia!\n");
            getchar();
            return 1;
    } else
            return 0;
}
 
//---------------------------------
//     Função Principal
//---------------------------------
 
int main(void) {
    char escolha;
    int chave=0;
    //Laço que irá mostrar o menu esperando uma opção (char)
    do {
        //Limpando a tela, e mostrando o menu lembrando que primeiramente, os itens estão bloqueados até que seja criada uma lista vazia
        system("clear");
        printf("\n\t\tSistema de Monitoração de temperatura do Amazonas\n\n");
        printf("Escolha uma opcao: \n");
        printf("1 - Criar lista com os dados do arquivo\n");
        if(chave==1){
            printf("2 - Inserir no Fim de uma lista\n");
        }
        printf("3 - Lista Vazia...\n");
        if(chave==1){
            printf("4 - Exibir a Lista inteira\n");
            printf("5 - Eliminar cidade\n");
            printf("6 - Busca Dados\n");
            printf("7 - Mostra media e temperaturas\n");
        }
        printf("9 - Sair\n\n");
        printf("Resposta: ");
        scanf("%c", &escolha);
        //Se a chave for diferente de zero, porém a escolha for diferente de 1, 4 e 9, a escolha será z (opção inválida)
        if((chave==0)&&((escolha!='1')&&(escolha!='3')&&(escolha!='9')))
            escolha='z';
 
        switch(escolha) {
            //Criando lista vazia
            case '1':
                chave=1;
                criavazia();
                break;
            //Inserindo no final
            case '2':
                //Se a lista não estiver vazia
                if(principal!=NULL){
                    inserefim();
                }
                //senão inclui no inicio
                else{
                    insereinicio(principal);
                }
                break;
            //Checando se a lista está vazia
            case '3':
                listavazia();
                break;
            //Exibindo todos elementos
            case '4':
                exibe();
                break;
            //Deleta elemento buscado
            case '5':
                delbusca();
                break;               
            //Buscando elementos
            case '6':
                busca();
                break;
            //Encontra o maior e menor e faz média das temperatura
            case '7':
            media();
            ESPERA;
            break;
            //Adiocana conteudo de arquivo no final da lista
           case 'a':
            abrirarquivo2();
            ESPERA;
            break;

            case '8':
            abrirarquivo();
            ESPERA;
            break;
            //Saindo e finalizando o programa
            case '9':
                printf("Obrigado por utilizar esse programa!\n");
                printf("------>Terminal de Informação<------\n\n");
                ESPERA;
                exit(0);
                break;
            //Se foi algum valor inválido
            default:
                printf("Digite uma opcao valida (pressione -Enter- p/ continuar)!\n");
                getchar();
                break;
        }
        //Impedindo sujeira na gravação da escolha
        getchar();
    }
    while (escolha > 0); //Loop Infinito
    return 0;
}



<< Equipe3-2015-1