Mudanças entre as edições de "Equipe3-2015-1"
Linha 75: | Linha 75: | ||
==Conclusão== | ==Conclusão== | ||
− | |||
− | |||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
#include <string.h> | #include <string.h> | ||
− | /* | + | //Máximo de bytes para uma String |
− | + | #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' | ||
+ | //--------------------------------- | ||
− | + | //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; | ||
+ | } | ||
− | void | + | //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; | ||
+ | } | ||
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
- Comando swith
- Lista encadeada
- Ponteiros
- Alocação Dinâmica de Memória
- 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
- 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(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 |
---|