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 90746 de Pablo.f (Discussão))
Linha 176: Linha 176:
  
 
_____________________________________________________________________________________________________________________________
 
_____________________________________________________________________________________________________________________________
#include <stdio.h>
+
include <stdio.h>
 
#include <stdlib.h>
 
#include <stdlib.h>
 
#include <string.h>
 
#include <string.h>
 
   
 
   
#define FIM 5
+
/*Estrutura para o arquivo*/
+
typedef struct TLocalidade localidade;
typedef struct Tlocalidade localidade;
+
 
+
struct TLocalidade{
struct TLocalidade {
 
  char nome[20];
 
 
   int codigo;
 
   int codigo;
 +
  char nome[40];
 
   float temp;
 
   float temp;
 
   int umidade;
 
   int umidade;
   localidade *proximo;
+
   localidade *prox;
} *tail;
+
}*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 {
+
void Tcadastro(){
    printf("1-Listar por nome\n 2-Remover cidade\n 3-Inserir cidade\n 4-Listar todos\n 5-FIM\n");
+
  localidade *cadastro;
    scanf("%d", &opcao);
+
  cadastro =(localidade *) malloc(sizeof(localidade));
    switch(opcao) {
+
  printf("\n Insira o codigo desejado para a cidade\n");
    case 1: listar_temperatura_por_cidade();
+
  gets(cadastro->codigo);
            break;
+
  printf("\n Insira o nome da cidade\n");
    case 2:
+
   gets(cadastro->nome[40]);
            remover_cidade();
+
   printf("\n Insira a temperatura da cidade\n");
            break;
+
   gets(cadastro->temp);
    case 3:
+
   printf("\n Insira a umidade\n");
            inserir_cidade();
+
   gets(cadastro->umidade);
            break;
+
  };
    case 4:
+
 
            listar_todos();
+
void Tremover(){
            break;
+
  int cdg;
    default:
+
  localidade *pa,*pp;
            break;
+
  pa=tail;
    }
+
  pp=tail->prox;
   } while(opcao!=FIM);
+
   scanf("%s", cdg);
}
 
 
 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
#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
+
  while(pp!=NULL && strcmp(pp->codigo,cdg)!=0){
void  exibe_dados    (Dados *dados);
+
  pa=pp;
void  exibe_tamanho  (Dados *nova);
+
  pp=pp->prox;
void  busca_dados    (Dados *dados, char *chave);
+
  }
 
 
//Inicializando os dados da lista
 
Dados *principal = NULL;
 
 
   
 
   
void remover_cidade()
+
  if (pp!=NULL){
{
+
  pa->prox=pp->prox;
    char *chave;
+
  free(pp);
    //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) {
+
void Timprimir(){
    int achou=0,cont=0;
+
  localidade *p;
    Dados *juntou, *aux, *nova=dados;      
+
  for(p=tail;p!=NULL;p=p->prox){
+
  printf("\n %d %s %d %f\n\t",p->codigo, p->nome, p->temp, p->umidade);
    //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) {
+
void Tlerarquivos(){
            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)
+
void main(){
{
 
    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;
 
 
   
 
   
 +
  char opcao;
 
   do {
 
   do {
    printf("1Remover cidade\n 2-Inserir cidade\n 3-Listar todos\n 4-FIM\n");
+
  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);
+
  scanf ("%d",&opcao);
    switch(opcao) {
+
  switch(opcao) {
    case 1:
+
  case 1:
            remover_cidade();
+
          Tcadastro();
            break;
+
          break;  
    case 2:
+
  case 2:
            inserir_cidade();
+
          Tremover();
            break;
+
          break;
    case 3:
+
  case 3:
            listar_todos();
+
          Timprimir();
            break;
+
          break;
    default:
+
  case 4:
            break;
+
          Tlerarquivos();
    }
+
          break;
  } while(opcao!=FIM);
+
  case 5:
 +
          printf("Saindo");
 +
          break;
 +
  default:
 +
          printf("opcao default\n");
 +
          break;  
 +
  }
 +
} while(opcao!="FIM");
 
}
 
}
 
 
  
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição das 22h03min de 22 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{
  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>
 
/*Estrutura para o arquivo*/
typedef struct TLocalidade localidade;

struct TLocalidade{
  int codigo;
  char nome[40];
  float temp;
  int umidade;
  localidade *prox;
}*tail;
 
void Tcadastro(){
  localidade *cadastro;
  cadastro =(localidade *) malloc(sizeof(localidade));
  printf("\n Insira o codigo desejado para a cidade\n");
  gets(cadastro->codigo);
  printf("\n Insira o nome da cidade\n");
  gets(cadastro->nome[40]);
  printf("\n Insira a temperatura da cidade\n");
  gets(cadastro->temp);
  printf("\n Insira a umidade\n");
  gets(cadastro->umidade);
  };
  
void Tremover(){
  int cdg;
  localidade *pa,*pp;
  pa=tail;
  pp=tail->prox;
  scanf("%s", cdg);
 
  while(pp!=NULL && strcmp(pp->codigo,cdg)!=0){
  pa=pp;
  pp=pp->prox;
  }
 
  if (pp!=NULL){
  pa->prox=pp->prox;
  free(pp);
  }
};

void Timprimir(){
   localidade *p;
   for(p=tail;p!=NULL;p=p->prox){
   printf("\n %d %s %d %f\n\t",p->codigo, p->nome, p->temp, p->umidade);
   }
};
void Tlerarquivos(){
 
};
 
void main(){
 
  char opcao;
  do {
  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;    
  }
} while(opcao!="FIM");
}



<< Equipe3-2015-1