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 75: Linha 75:
 
==Conclusão==
 
==Conclusão==
  
=Código fonte=
 
<syntaxhighlight lang=c>
 
 
#include <stdio.h>
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <stdlib.h>
 
#include <string.h>
 
#include <string.h>
  
/*Estrutura para o arquivo*/
+
//Máximo de bytes para uma String
struct TLocalidade{
+
#define BUFFER 64
};
+
 +
//Espera 3 segundos
 +
#define ESPERA sleep(3)
 +
 +
//Estrutura da lista que será criada
 +
typedef struct lista {
 +
    char *cidade;
 +
    int codigo;
 +
    int temp;
 +
    int umidade;
 +
    struct lista *proximo;
 +
} Dados;
 +
 +
//Funções para manusear os dados (irão retornar dados)
 +
Dados *inicia_dados  (char *cidade, int codigo, int temp, int umidade);
 +
Dados *insere_dados  (Dados *dados, char *cidade, int codigo, int 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  exibe_tamanho  (Dados *nova);
 +
void  busca_dados    (Dados *dados, char *chave);
 +
 +
//Funções do Menu
 +
void criavazia(void);    //1
 +
void inserefim(void);    //2
 +
void listavazia(void);  //3
 +
void exibe(void);        //4
 +
void delbusca(void);    //5
 +
void busca(void);        //6
 +
 +
//Inicializando os dados da lista
 +
Dados *principal = NULL;
 +
//---------------------------------
 +
//    Opção '1'
 +
//---------------------------------
 +
//Criando uma lista vazia
 +
void criavazia(void){
 +
    char *cidade;
 +
    int codigo=0, umidade=0;
 +
    int temp=0;
 +
    //Alocando dados para uma String
 +
    cidade = (char *)malloc(BUFFER);
 +
    //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("%d", &temp);
 +
    printf("\n");
 +
    //Lendo int umidade
 +
    printf("Digite a umidade: \n----> ");
 +
    scanf("%d", &umidade);
 +
    printf("\n");
 +
    //Lançando os dados lidos na lista Principal
 +
    free(principal);
 +
    principal = inicia_dados(cidade, codigo, temp, umidade);
 +
}
 +
 +
//Iniciando os dados da lista vazia
 +
Dados *inicia_dados(char *cidade, int codigo, int 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->cidade = (char *)malloc(strlen(cidade)+1);
 +
    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'
 +
//---------------------------------
  
struct Tcadastro {
+
//Inserção de dados no final de uma lista
};
+
void inserefim(void) {
struct Tremover{
+
    char *cidade;
};
+
    int codigo=0, umidade=0;
struct Timprimir{
+
    int temp=0;
};
+
    //Alocando dados para uma String
struct Tlerarquivos{
+
    cidade = (char *)malloc(BUFFER);
 
+
    //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("%d", &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
 +
    final->cidade = (char *)malloc(strlen(cidade)+1);
 +
    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;
 +
}
  
void main(){
+
//Se não tiver nada, insere no inicio
 +
//Inserindo no início da lista
 +
void insereinicio(void){
 +
    char *cidade;
 +
    int codigo=0, umidade=0;
 +
    int temp=0;
 +
    //Alocando dados para uma String
 +
    cidade = (char *)malloc(BUFFER);
 +
    //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 float temp
 +
    printf("\n\nDigite a temperatura: \n----> ");
 +
    scanf("%d", &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, int codigo, int temp, int umidade) {
 +
    Dados *inicio;
 +
    //Alocando memória para a posição atual
 +
    inicio = (Dados *)malloc(sizeof(Dados));
 +
    //Lançando os dados lidos
 +
    inicio->cidade = (char *)malloc(strlen(cidade)+1);
 +
    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) {
 +
    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: %d\n", dados->temp);
 +
        printf("Umidade: %d\n", dados->umidade);
 +
        printf("------------------------\n");
 +
    }
 +
    getchar();
 +
}
  
  int opcao;
+
//---------------------------------
  printf("Entre com uma opção\n 1-Cadastro\n 2-Remover cadastro\n 3-Imprimir\n 4-Ler Arquivos 5-Sair\n");
+
//    Opção '5'
  scanf ("%d",&opcao);
+
//---------------------------------
  switch(opcao) {
+
  case 1:
+
//Deletando valor buscado
          Tcadastro;
+
void delbusca(void) {
          break;  
+
    char *chave;
  case 2:
+
    //Se não estiver vazio
          Tremover;
+
    if (!checa_vazio(principal)) {
          break;
+
        chave = (char *)malloc(BUFFER);
  case 3:
+
        //Armazenando o valor digitado
          Timprimir;
+
        printf("Digite o cidade para buscar: \n--> ");
          break;  
+
        scanf("%s", chave);
  case 4:
+
        //Deletando a chave buscada
          Tlerarquivos;
+
        principal = delbusca_dados(principal, chave);
          break;
+
    }
  case 5:
+
}
          printf("Saindo");
+
          break;
+
//Deletando os valores buscados
  default:
+
Dados *delbusca_dados(Dados *dados, char *chave) {
          printf("opcao default\n");
+
    int achou=0,cont=0;
          break;  
+
    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: %d\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'
 +
//---------------------------------
  
 +
//Organiza a lista pela temperatura(função auxiliar)
 +
void organizatemp(){
 +
int tamanho = 62; //Pois amazonas só tem 62 municipios
 +
int aux;
 +
for(int i=tamanho+1; i <= 1; i++) { 
 +
for( int j=0; j < i ; j++) {
 +
if(Dados.temp[j]>Dados.temp[j+1]) {
 +
aux = Dados.temp[j];
 +
Dados.temp[j] = Dados.temp[j+1];
 +
Dados.temp[j+1] = aux;     
 +
        }
 +
      }
 +
    }
 +
printf("temperatura maxima:%f\n temperatura minima:%f\n",Dados.temp[0],Dados.temp[j-1]);
 +
}
 +
void media(){
 +
float aux;
 +
float soma=0;
 +
float media=0;
 +
int i;
 +
organizatemp();
 +
for (i=0;i>=0;i++){
 +
aux=Dados.temp[i];
 +
soma=soma+aux;
 +
if(Dados.temp[i]==NULL){
 +
break;
 +
}
 +
}
 +
media=soma/(i-1);
 +
printf("media das temperatura:%f\n",media);
 
}
 
}
  
 +
//---------------------------------
 +
//    Opção '8'
 +
//---------------------------------
  
 +
//---------------------------------
 +
//    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 vazia\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 - 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();
 +
                }
 +
                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();
 +
break;
 +
//Adiocana conteudo de arquivo no final da lista
 +
case '8';
 +
addconteudoarq();
 +
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;
 +
}
  
  

Edição das 20h11min de 28 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

[...]

Atividades

Distribuição

Aula 6, 9, 19, 20, 22;

Desenvolvimento

Cadastro/Remover - Lista ligada (*pTLocalidade) - Malloc()

Média de temperatura - (Temp1+Temp2+....+TempN)/N = Temp média

Organizar lista da temperatura maior p/ menor.

Conclusão

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <string.h>

//Máximo de bytes para uma String

  1. define BUFFER 64

//Espera 3 segundos

  1. define ESPERA sleep(3)

//Estrutura da lista que será criada typedef struct lista {

   char *cidade;
   int codigo;
   int temp;
   int umidade;
   struct lista *proximo;

} Dados;

//Funções para manusear os dados (irão retornar dados) Dados *inicia_dados (char *cidade, int codigo, int temp, int umidade); Dados *insere_dados (Dados *dados, char *cidade, int codigo, int 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 exibe_tamanho (Dados *nova); void busca_dados (Dados *dados, char *chave);

//Funções do Menu void criavazia(void); //1 void inserefim(void); //2 void listavazia(void); //3 void exibe(void); //4 void delbusca(void); //5 void busca(void); //6

//Inicializando os dados da lista Dados *principal = NULL; //--------------------------------- // Opção '1' //--------------------------------- //Criando uma lista vazia void criavazia(void){

   char *cidade;
   int codigo=0, umidade=0;
   int temp=0;
   //Alocando dados para uma String
   cidade = (char *)malloc(BUFFER);
   //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("%d", &temp);
   printf("\n");
   //Lendo int umidade
   printf("Digite a umidade: \n----> ");
   scanf("%d", &umidade);
   printf("\n");
   //Lançando os dados lidos na lista Principal
   free(principal);
   principal = inicia_dados(cidade, codigo, temp, umidade);

}

//Iniciando os dados da lista vazia Dados *inicia_dados(char *cidade, int codigo, int 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->cidade = (char *)malloc(strlen(cidade)+1);
   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;
   int codigo=0, umidade=0;
   int temp=0;
   //Alocando dados para uma String
   cidade = (char *)malloc(BUFFER);
   //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("%d", &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
   final->cidade = (char *)malloc(strlen(cidade)+1);
   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(void){

   char *cidade;
   int codigo=0, umidade=0;
   int temp=0;
   //Alocando dados para uma String
   cidade = (char *)malloc(BUFFER);
   //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 float temp
   printf("\n\nDigite a temperatura: \n----> ");
   scanf("%d", &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, int codigo, int temp, int umidade) {

   Dados *inicio;
   //Alocando memória para a posição atual
   inicio = (Dados *)malloc(sizeof(Dados));
   //Lançando os dados lidos
   inicio->cidade = (char *)malloc(strlen(cidade)+1);
   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) {

   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: %d\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: %d\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' //---------------------------------

//Organiza a lista pela temperatura(função auxiliar) void organizatemp(){ int tamanho = 62; //Pois amazonas só tem 62 municipios int aux; for(int i=tamanho+1; i <= 1; i++) { for( int j=0; j < i ; j++) { if(Dados.temp[j]>Dados.temp[j+1]) { aux = Dados.temp[j]; Dados.temp[j] = Dados.temp[j+1]; Dados.temp[j+1] = aux;

       }
     }
   }

printf("temperatura maxima:%f\n temperatura minima:%f\n",Dados.temp[0],Dados.temp[j-1]);

}

void media(){ float aux; float soma=0; float media=0; int i; organizatemp(); for (i=0;i>=0;i++){ aux=Dados.temp[i]; soma=soma+aux; if(Dados.temp[i]==NULL){ break; } } media=soma/(i-1); printf("media das temperatura:%f\n",media); }

//--------------------------------- // Opção '8' //---------------------------------

//--------------------------------- // 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 vazia\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 - 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();
               }
               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(); break; //Adiocana conteudo de arquivo no final da lista case '8'; addconteudoarq(); 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;

}


</syntaxhighlight>



<< Equipe3-2015-1