Equipe3-2015-1

De MediaWiki do Campus São José
Revisão de 22h05min de 22 de junho de 2015 por Daniel.cc (discussão | contribs) (Desfeita a edição 90748 de Daniel.cc (Discussão))
Ir para navegação Ir para pesquisar

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{
  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(){

  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;    
  }

}


_____________________________________________________________________________________________________________________________
#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];
    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){
        tail=inserir;
    }
        else{
            inserir->proximo=tail->proximo;
            tail->proximo=inserir;
            }
}
 
void listar_todos()
{

	
 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);
      
}      
    
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);
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define FIM 5
#define BUFFER 64

typedef struct TLocalidade {
  char nome[20];
  int codigo;
  float temp;
  int umidade;
  struct TLocalidade *proximo;
} Dados;

//Funções para manusear os dados (irão retornar dados)
Dados *inicia_dados  (char *nome, int idade);
Dados *insere_dados  (Dados *dados, char *nome, int idade);
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);

//Inicializando os dados da lista
Dados *principal = NULL;
 
void remover_cidade()
{
    char *chave;
    //Se não estiver vazio
    if (!checa_vazio(principal)) {
        chave = (char *)malloc(BUFFER);
        //Armazenando o valor digitado
        fprintf(stdout, "Digite o nome para buscar: \n--> ");
        scanf("%s", chave);
        //Deletando a chave buscada
        principal = delbusca_dados(principal, chave);
    }
}

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->nome) == 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->nome)==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->nome)!=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);
            }
        }
        fprintf(stdout, "Excluido.\n");
    }
    else
        fprintf(stdout, "Nenhum resultado encontrado.\n");
 
    getchar();
    return dados;
}
 
//Função que testa se a lista esta vazia
int checa_vazio(Dados *dados) {
    //Se a lista estiver vazia
    if (dados == NULL) {
            fprintf(stdout, "Lista vazia!\n");
            getchar();
            return 1;
    } else
            return 0;
}
 
void lista_vazia(void)
{
    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 {
    printf("1Remover cidade\n 2-Inserir cidade\n 3-Listar todos\n 4-FIM\n");
    scanf("%d", &opcao);
    switch(opcao) {
    case 1:
            remover_cidade();
            break;
    case 2:
            inserir_cidade();
            break;
    case 3:
            listar_todos();
            break;
    default:
            break;
    }
  } while(opcao!=FIM);
}



<< Equipe3-2015-1