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

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(Desfeita a edição 90920 de Daniel.cc (Discussão))
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>
  
//Máximo de bytes para uma String
+
/*Estrutura para o arquivo*/
#define BUFFER 64
+
struct TLocalidade{
+
};
//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
+
struct Tcadastro {
void inserefim(void) {
+
};
    char *cidade;
+
struct Tremover{
    int codigo=0, umidade=0;
+
};
    int temp=0;
+
struct Timprimir{
    //Alocando dados para uma String
+
};
    cidade = (char *)malloc(BUFFER);
+
struct Tlerarquivos{
    //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
+
void main(){
//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;
//    Opção '5'
+
  printf("Entre com uma opção\n 1-Cadastro\n 2-Remover cadastro\n 3-Imprimir\n 4-Ler Arquivos 5-Sair\n");
//---------------------------------
+
  scanf ("%d",&opcao);
+
  switch(opcao) {
//Deletando valor buscado
+
  case 1:
void delbusca(void) {
+
          Tcadastro;
    char *chave;
+
          break;
    //Se não estiver vazio
+
  case 2:
    if (!checa_vazio(principal)) {
+
          Tremover;
        chave = (char *)malloc(BUFFER);
+
          break;
        //Armazenando o valor digitado
+
  case 3:
        printf("Digite o cidade para buscar: \n--> ");
+
          Timprimir;
        scanf("%s", chave);
+
          break;  
        //Deletando a chave buscada
+
  case 4:  
        principal = delbusca_dados(principal, chave);
+
          Tlerarquivos;
    }
+
          break;
}
+
  case 5:
+
          printf("Saindo");
//Deletando os valores buscados
+
          break;
Dados *delbusca_dados(Dados *dados, char *chave) {
+
  default:
    int achou=0,cont=0;
+
          printf("opcao default\n");
    Dados *juntou, *aux, *nova=dados;     
+
          break;  
+
  }
    //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 20h13min 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

Código fonte

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*Estrutura para o arquivo*/
struct TLocalidade{
};

struct Tcadastro {
};
struct Tremover{
};
struct Timprimir{
};
struct Tlerarquivos{
   
};

void main(){

  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");
  scanf ("%d",&opcao);
  switch(opcao) {
  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;    
  }

}



<< Equipe3-2015-1