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

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(38 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 55: Linha 55:
 
  400 33.5 71
 
  400 33.5 71
 
  500 41.2 93
 
  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
  
 
[...]
 
[...]
Linha 61: Linha 69:
  
 
==Distribuição==
 
==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.
  
Aula 6, 9, 19, 20, 22;
+
PAULO HENRIQUE HORST BIANCHIN - Responsável pela compilação e debate sobre desenvolvimento do projeto.
  
 
==Desenvolvimento==
 
==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
  
Cadastro/Remover - Lista ligada (*pTLocalidade) - Malloc()
+
3.1 - Ajuste de erros e a repetição dos passos 2.1, 2.2, 2.3
  
Média de temperatura - (Temp1+Temp2+....+TempN)/N = Temp média
+
4.1 - Compilação final sem nenhum problema
  
Organizar lista da temperatura maior p/ menor.
+
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==
 
==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.
  
=Código fonte=
+
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.
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <string.h>
 
  
/*Estrutura para o arquivo*/
+
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.
struct TLocalidade{
 
  int codigo;
 
  char nome[40];
 
  float temp;
 
  int umidade;
 
  struct TLocalidade *prox;
 
}*head,*tail,*aux;
 
  
struct Tcadastro (int codigo, char nome[40], float temp);{
 
  TLocalidade cadastro*();
 
  int cdg;
 
  char nme[40];
 
  cadastro = (TLocalidade*) malloc(sizeof(TLocalidade));
 
  printf("\n Insira o codigo desejado para a cidade\n");
 
  scanf("%s",cdg);
 
  if(strcmp(cdg,TLocalidade.codigo)==0){
 
  printf("Este codigo ja esta sendo utilizado");
 
  break;
 
  }
 
  else{
 
  strcpy(cdg,cadastro->codigo);
 
  }
 
  printf("\n Insira o nome da cidade\n");
 
  scanf("%s",nme);
 
  if(strcmp(nme,TLocalidade.codigo)==0){
 
  printf("Este nome ja esta sendo utilizado");
 
  break;
 
  }
 
  else{
 
  strcpy(nme,cadastro->nome);
 
  }
 
  printf("\n Insira a temperatura da cidade\n");
 
  scanf("%s",tmp);
 
  printf("\n Insira a umidade\n");
 
  scanf("%s",cadastro->umidade);
 
  free()
 
  };
 
struct Tremover{
 
  int cdg;
 
  TLocalidade *pa,*pp;
 
  pa=tail;
 
  pp=tail->proximo;
 
  scanf("%s", cdg);
 
   
 
  while(pp!=NULL && strcmp(pp->codigo,cdg)!=0){
 
  pa=pp;
 
  pp=pp->proximo;
 
  }
 
   
 
  if (pp!=NULL){
 
  pa->proximo=pp->proximo;
 
  free(pp);
 
  }
 
};
 
struct Timprimir{
 
  TLocalidade *p;
 
  for(p=tail;p!=NULL;p=p->prox){
 
  printf("\n %d %s %d %f\n\t",p->código, p->nome, p->temp, p->umidade);
 
  }
 
};
 
struct Tlerarquivos{
 
 
 
};
 
  
void main(){
+
Daniel = 9,
 +
          - Empenho para acompanhar o raciocínio das funções e criação de algumas das mesmas
 +
          - Apresentou dificuldades para entender e implementar algumas funções
 +
          - Esforço apresentado para correção dos bugs.
  
  int opcao;
+
Pablo = 10,
  printf("Entre com uma opção\n 1-Cadastro\n 2-Remover cadastro\n 3-Imprimir\n 4-Ler Arquivos 5-Sair\n");
+
            - Domínio do conteúdo e raciocínio para criação de funções no projeto
  scanf ("%d",&opcao);
+
            - Criador da estrutura do projeto
  switch(opcao) {
+
            - Esforço apresentado para correção de bugs.
  case 1:
 
          Tcadastro;
 
          break;
 
  case 2:
 
          Tremover;
 
          break;
 
  case 3:
 
          Timprimir;
 
          break;
 
  case 4:
 
          Tlerarquivos;
 
          break;
 
  case 5:
 
          printf("Saindo");
 
          break;
 
  default:
 
          printf("opcao default\n");
 
          break;   
 
  }
 
  
}
+
Paulo;
  
 +
==Avaliação (professor)==
  
_____________________________________________________________________________________________________________________________
+
Caros alunos!
#include <stdio.h>
 
#include <stdlib.h>
 
#include <string.h>
 
 
#define FIM 5
 
 
typedef struct Tlocalidade localidade;
 
 
struct TLocalidade {
 
  char nome[20];
 
  int codigo;
 
  float temp;
 
  int umidade;
 
  localidade *proximo;
 
} *tail;
 
 
void listar_temperatura_por_cidade()
 
{
 
  
char nome[20];
+
Eu esperava mais do trabalho de vocês. O desempenho que vocês vinham tendo na disciplina não refletiu no trabalho. O programa não atendeu aos requisitos iniciais, porém, foram feitas novas implementações interessantes e o código fonte está comentado. Ainda faltou um cuidado maior com a wiki, achei que o código fonte está muito "inchado", com muitas variáveis, entre outros problemas identificados que conversamos na apresentação.
    localidade *pa,*pp;
 
    pa=tail;
 
    pp=tail->proximo;
 
    scanf("%s",nome);
 
   
 
    while(pp!=NULL && strcmp(pp->nome,nome)!=0){
 
    pa=pp;
 
    pp=pp->proximo;
 
    }
 
   
 
    if (pp!=NULL){
 
    printf("Nome: %s\n codigo: %d\n temperatura: %f\n umidade: %d\n", pp->nome, pp->codigo, pp->temp, pp->umidade);
 
}
 
}
 
 
void remover_cidade()
 
{
 
  char nome[20];
 
    localidade *pa,*pp;
 
    pa=tail;
 
    pp=tail->proximo;
 
    scanf("%s",nome);
 
   
 
    while(pp!=NULL && strcmp(pp->nome,nome)!=0){
 
    pa=pp;
 
    pp=pp->proximo;
 
    }
 
   
 
    if (pp!=NULL){
 
    pa->proximo=pp->proximo;
 
    free(pp);
 
    }
 
}
 
 
void inserir_cidade()
 
{
 
 
    localidade *inserir=(localidade*) malloc(sizeof(localidade));
 
    printf("Digite o nome: ");
 
    scanf("%s",inserir->nome);
 
    printf("Digite o codigo: ");
 
    scanf("%s",inserir->codigo);
 
    printf("Digite a temperatura: ");
 
    scanf("%s",inserir->temp);
 
    printf("Digite a umidade: ");
 
    scanf("%s",inserir->umidade);
 
  
    if (tail==NULL){
+
Por isso minha nota para a equipe toda é: 7.
        tail=inserir;
 
    }
 
        else{
 
            inserir->proximo=tail->proximo;
 
            tail->proximo=inserir;
 
            }
 
}
 
 
void listar_todos()
 
{
 
  
+
(Com exceção do Paulo que faltou.)
localidade *p;
 
  for (p = tail; p != NULL; p = p->proximo)
 
  
      printf("Nome: %s | codigo: %d | temperatura: %f | umidade: %d\n", p->nome,p->codigo,p->temp,p->umidade);
+
Douglas A.
     
 
}     
 
   
 
void main()
 
{
 
  int opcao;
 
 
  tail=NULL;
 
 
  do {
 
    printf("1-Listar por nome\n 2-Remover cidade\n 3-Inserir cidade\n 4-Listar todos\n 5-FIM\n");
 
    scanf("%d", &opcao);
 
    switch(opcao) {
 
    case 1: listar_temperatura_por_cidade();
 
            break;
 
    case 2:
 
            remover_cidade();
 
            break;
 
    case 3:
 
            inserir_cidade();
 
            break;
 
    case 4:
 
            listar_todos();
 
            break;
 
    default:
 
            break;
 
    }
 
  } while(opcao!=FIM);
 
}
 
  
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
=Código fonte=
 +
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <stdlib.h>
 
#include <string.h>
 
#include <string.h>
 
   
 
   
#define FIM 5
+
//Máximo de bytes para uma String
 
#define BUFFER 64
 
#define BUFFER 64
 
+
typedef struct TLocalidade {
+
//Espera 3 segundos
  char nome[20];
+
#define ESPERA sleep(5)
  int codigo;
+
  float temp;
+
//Estrutura da lista que será criada
  int umidade;
+
typedef struct lista {
  struct TLocalidade *proximo;
+
    char cidade[40];
 +
    int codigo;
 +
    float temp;
 +
    int umidade;
 +
    struct lista *proximo;
 
} Dados;
 
} Dados;
 
+
 +
void abrirarquivo2();
 +
 +
//Arquivo utilizado
 +
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 *nome, int idade);
+
Dados *inicia_dados  (char *cidade, int codigo, float temp, int umidade);
Dados *insere_dados  (Dados *dados, char *nome, int idade);
+
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);
Linha 315: Linha 162:
 
//Funções para mostrar dados
 
//Funções para mostrar dados
 
void  exibe_dados    (Dados *dados);
 
void  exibe_dados    (Dados *dados);
void  exibe_tamanho  (Dados *nova);
 
 
void  busca_dados    (Dados *dados, char *chave);
 
void  busca_dados    (Dados *dados, char *chave);
 
+
 
//Inicializando os dados da lista
 
//Inicializando os dados da lista
 
Dados *principal = NULL;
 
Dados *principal = NULL;
 
   
 
   
void remover_cidade()
+
{
+
//---------------------------------
 +
//    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
 +
if(principal==NULL) {
 +
principal=p;
 +
}else {
 +
        p->proximo=principal->proximo;
 +
principal->proximo=p;
 +
  }
 +
}
 +
 +
//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;
 +
    Dados *p;
 +
    p=dados;
 +
    printf("Cadastro:\n\n");
 +
    printf("------------------------\n");
 +
    //Exibindo todos os valores da lista
 +
    for (p=principal; p!= NULL; p=p->proximo) {
 +
        printf("cidade: %s\t", p->cidade);
 +
        printf("Codigo: %d\t", p->codigo);
 +
        printf("Temperatura: %.2f\t", p->temp);
 +
        printf("Umidade: %d\n", p->umidade);
 +
}
 +
        printf("------------------------\n");
 +
getchar();
 +
}
 +
 +
//---------------------------------
 +
//    Opção '5'
 +
//---------------------------------
 +
 +
//Deletando valor buscado
 +
void delbusca(void) {
 
     char *chave;
 
     char *chave;
 
     //Se não estiver vazio
 
     //Se não estiver vazio
Linha 328: Linha 363:
 
         chave = (char *)malloc(BUFFER);
 
         chave = (char *)malloc(BUFFER);
 
         //Armazenando o valor digitado
 
         //Armazenando o valor digitado
         fprintf(stdout, "Digite o nome para buscar: \n--> ");
+
         printf("Digite o cidade para buscar: \n--> ");
 
         scanf("%s", chave);
 
         scanf("%s", chave);
 
         //Deletando a chave buscada
 
         //Deletando a chave buscada
Linha 334: Linha 369:
 
     }
 
     }
 
}
 
}
 
+
 +
//Deletando os valores buscados
 
Dados *delbusca_dados(Dados *dados, char *chave) {
 
Dados *delbusca_dados(Dados *dados, char *chave) {
 
     int achou=0,cont=0;
 
     int achou=0,cont=0;
     Dados *juntou, *aux, *nova=dados;      
+
     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
 
     //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) {
 
     for (; nova != NULL; nova = nova->proximo) {
         if (strcmp(chave, nova->nome) == 0) {
+
         if (strcmp(chave, nova->cidade) == 0) {
 
             achou=1;
 
             achou=1;
 
             cont++;
 
             cont++;
Linha 353: Linha 389:
 
         for(ind=0;ind<cont;ind++){
 
         for(ind=0;ind<cont;ind++){
 
             //Se encontrou na primeira casa apaga a primeira casa
 
             //Se encontrou na primeira casa apaga a primeira casa
             if(strcmp(chave,dados->nome)==0){
+
             if(strcmp(chave,dados->cidade)==0){
 
                 aux=dados;
 
                 aux=dados;
 
                 dados=dados->proximo;
 
                 dados=dados->proximo;
Linha 362: Linha 398:
 
                 aux=dados;
 
                 aux=dados;
 
                 //Posiciona na frente do encontro para exclusão
 
                 //Posiciona na frente do encontro para exclusão
                 while(strcmp(chave,aux->nome)!=0){
+
                 while(strcmp(chave,aux->cidade)!=0){
 
                     aux=aux->proximo;
 
                     aux=aux->proximo;
 
                 }
 
                 }
Linha 377: Linha 413:
 
             }
 
             }
 
         }
 
         }
         fprintf(stdout, "Excluido.\n");
+
         printf("Excluido.\n");
 
     }
 
     }
 
     else
 
     else
         fprintf(stdout, "Nenhum resultado encontrado.\n");
+
         printf("Nenhum resultado encontrado.\n");
 
   
 
   
 
     getchar();
 
     getchar();
 
     return dados;
 
     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
 
//Função que testa se a lista esta vazia
Linha 390: Linha 571:
 
     //Se a lista estiver vazia
 
     //Se a lista estiver vazia
 
     if (dados == NULL) {
 
     if (dados == NULL) {
             fprintf(stdout, "Lista vazia!\n");
+
             printf("Lista vazia!\n");
 
             getchar();
 
             getchar();
 
             return 1;
 
             return 1;
Linha 397: Linha 578:
 
}
 
}
 
   
 
   
void lista_vazia(void)
+
//---------------------------------
{
+
//    Função Principal
    char *nome;
+
//---------------------------------
    int codigo, umidade;
 
    float temp;
 
    //Alocando dados para uma String
 
    struct TLocalidade *inserir=(char*) malloc(BUFFER);
 
    //Lendo String Nome
 
    fprintf(stdout, "\n\nDigite o Nome: \n----> ");
 
    scanf("%s", nome);
 
    fprintf(stdout, "\n");
 
    //Lendo int codigo
 
    fprintf(stdout, "Digite o Codigo: \n----> ");
 
    scanf("%d", &codigo);
 
    fprintf(stdout, "\n");
 
    //Lendo float temp
 
    fprintf(stdout, "Digite a Temperatura: \n----> ");
 
    scanf("%d", &temp);
 
    fprintf(stdout, "\n");
 
    //Lendo int umidade
 
    fprintf(stdout, "Digite a umidade: \n----> ");
 
    scanf("%d", &umidade);
 
    fprintf(stdout, "\n");
 
    //Lançando os dados lidos na lista Principal
 
    free(principal);
 
    principal = inicia_dados(nome, codigo, temp, umidade);
 
}
 
 
 
Dados *inicia_dados(char *nome, 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
 
    novo->nome = (char *)malloc(strlen(nome)+1);
 
    strncpy(novo->nome, nome, strlen(nome)+1);
 
    novo->codigo = codigo;
 
    novo->temp = temp;
 
    novo->umidade = umidade;
 
    //Apontando para a próxima posição da lista
 
    novo->proximo = NULL;
 
    return novo;
 
}
 
 
 
void inserir_cidade()
 
{
 
    char *nome;
 
    int codigo, umidade;
 
    float temp;
 
    //Alocação de espaço para String Nome
 
    nome = (char *)malloc(BUFFER);
 
    //Armazenando String Nome
 
    fprintf(stdout, "\n\nDigite o Nome: \n----> ");
 
    scanf("%s", nome);
 
    fprintf(stdout, "\n");
 
    //Armazenando Int codigo
 
    fprintf(stdout, "Digite o codigo: \n----> ");
 
    scanf("%d", &codigo);
 
    fprintf(stdout, "\n");
 
    //Lendo float temp
 
    fprintf(stdout, "Digite a Temperatura: \n----> ");
 
    scanf("%d", &temp);
 
    fprintf(stdout, "\n");
 
    //Lendo int umidade
 
    fprintf(stdout, "Digite a umidade: \n----> ");
 
    scanf("%d", &umidade);
 
    fprintf(stdout, "\n");
 
    //Criando listas auxiliares       
 
    Dados *final,*aux;
 
    //Alocando dados para a posição final da lista
 
    final = (Dados *)malloc(sizeof(Dados));
 
    //Setando os valores
 
    final->nome = (char *)malloc(strlen(nome)+1);
 
    strncpy(final->nome, nome, strlen(nome)+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;
 
}
 
 
 
 
void listar_todos()
 
{
 
    fprintf(stdout, "Cadastro:\n\n");
 
    fprintf(stdout, "------------------------\n");
 
    //Exibindo todos os valores da lista
 
    for (; Dados != NULL; Dados = Dados->proximo) {
 
        fprintf(stdout, "Nome: %s\n Codigo: %d\n Temperatura: %d\n Umidade: %d\n",Dados->nome, Dados->codigo, Dados->temp, Dados->umidade);
 
        fprintf(stdout, "------------------------\n");
 
    }
 
    getchar();
 
}     
 
   
 
void main()
 
{
 
  lista_vazia();   
 
  int opcao;
 
 
   
 
   
  do {
+
int main(void) {
    printf("1Remover cidade\n 2-Inserir cidade\n 3-Listar todos\n 4-FIM\n");
+
    char escolha;
    scanf("%d", &opcao);
+
    int chave=0;
    switch(opcao) {
+
    abrirarquivo2();
    case 1:
+
    //Laço que irá mostrar o menu esperando uma opção (char)
             remover_cidade();
+
    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 - Adicionar cidade\n");
 +
        printf("2 - Inserir no Fim de uma lista\n");
 +
        printf("3 - Lista Vazia...\n");
 +
  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)
 +
        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;
 
             break;
    case 2:
+
             //Adiocana conteudo de arquivo no final da lista
             inserir_cidade();
+
             case '8':
             break;
+
             abrirarquivo();
    case 3:
+
             ESPERA;
             listar_todos();
 
             break;
 
    default:
 
 
             break;
 
             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(opcao!=FIM);
+
    while (escolha > 0); //Loop Infinito
 +
    return 0;
 
}
 
}
 
 
  
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição atual tal como às 10h46min de 1 de julho 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.


Daniel = 9,

          - Empenho para acompanhar o raciocínio das funções e criação de algumas das mesmas
          - Apresentou dificuldades para entender e implementar algumas funções
          - Esforço apresentado para correção dos bugs.

Pablo = 10,

           - Domínio do conteúdo e raciocínio para criação de funções no projeto
           - Criador da estrutura do projeto
           - Esforço apresentado para correção de bugs.

Paulo;

Avaliação (professor)

Caros alunos!

Eu esperava mais do trabalho de vocês. O desempenho que vocês vinham tendo na disciplina não refletiu no trabalho. O programa não atendeu aos requisitos iniciais, porém, foram feitas novas implementações interessantes e o código fonte está comentado. Ainda faltou um cuidado maior com a wiki, achei que o código fonte está muito "inchado", com muitas variáveis, entre outros problemas identificados que conversamos na apresentação.

Por isso minha nota para a equipe toda é: 7.

(Com exceção do Paulo que faltou.)

Douglas A.

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
		if(principal==NULL) {
			principal=p;
		}else {
         p->proximo=principal->proximo;
			principal->proximo=p;
	   }
}
 
//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;
    Dados *p;
    p=dados;
    printf("Cadastro:\n\n");
    printf("------------------------\n");
    //Exibindo todos os valores da lista
    for (p=principal; p!= NULL; p=p->proximo) {
        printf("cidade: %s\t", p->cidade);
        printf("Codigo: %d\t", p->codigo);
        printf("Temperatura: %.2f\t", p->temp);
        printf("Umidade: %d\n", p->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;
    abrirarquivo2();
    //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 - Adicionar cidade\n");
        printf("2 - Inserir no Fim de uma lista\n");
        printf("3 - Lista Vazia...\n");
		  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)
        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 '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