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

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(34 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 55: Linha 55:
 
  400 33.5 71
 
  400 33.5 71
 
  500 41.2 93
 
  500 41.2 93
 +
 +
;Arquivo utilizado pela equipe (infcoletadas.dat):
 +
cat infcoletadas.dat
 +
XINGU            100      23.5      80
 +
SOLIMOES        200      24.8      81
 +
IAPOQUE          300      32.0      75
 +
MADEIRA          400      33.9      98
 +
BELLOMONTE      500      40.5      90
  
 
[...]
 
[...]
Linha 61: Linha 69:
  
 
==Distribuição==
 
==Distribuição==
 +
DANIEL CABRAL CORREA - Responsável pela programação das funções, pelo ajuste de erros, e debate sobre desenvolvimento do projeto.
  
Aula 6, 9, 19, 20, 22;
+
PABLO FIDELIS DIAS - Responsável pela estruturação do programa, pela programação das funções, pelo ajuste de erros e debate dobre desenvolvimento do projeto.
 +
 
 +
PAULO HENRIQUE HORST BIANCHIN - Responsável pela compilação e debate sobre desenvolvimento do projeto.
  
 
==Desenvolvimento==
 
==Desenvolvimento==
  
 +
1.1  - Inicialmente foram feitas a estruturação do arquivo separando a função main do restante das funções para facilitar na detecção de erros
 +
 +
2.1 - Em seguida foram feitas algumas funções (essa sendo desenvolvidas a partir do conhecimento de cada aluno,exemplos passado pelo professor, conteúdo da wiki e pesquisas).
 +
 +
2.2 - Logo após essas funções foram implementadas ao arquivo principal.
  
Cadastro/Remover - Lista ligada (*pTLocalidade) - Malloc()
+
2.3 - Compilação do Arquivo principal
  
Média de temperatura - (Temp1+Temp2+....+TempN)/N = Temp média
+
3.1 - Ajuste de erros e a repetição dos passos 2.1, 2.2, 2.3
  
Organizar lista da temperatura maior p/ menor.
+
4.1 - Compilação final sem nenhum problema
 +
 
 +
Observação:O trabalho foi feito através do skype, pela ferramenta de compartilhamento de tela.
 +
A programação foi desenvolvida no programa notepad++.
 +
Os testes foram realizados nas paginas http://www.tutorialspoint.com/codingground.htm http://www.tutorialspoint.com/compile_c_online.php e confirmados no terminal do linux.
  
 
==Conclusão==
 
==Conclusão==
 +
Nesse projeto encontramos grande dificuldades e constatamos que ao implementar o projeto nosso conhecimento foi melhorado.
  
 +
Ao final do programa realizamos ajustes finos no programa para que funcionasse corretamente e que não houvessem duplicatas.
 +
 +
Concluímos que com o projeto em que trabalhamos conseguimos utilizar todos os métodos aprendidos em aula, utilizamos algumas fontes de estudos extra-curriculares para desenvolvimento do mesmo.
 +
 +
Sugerimos que a cada aula seja proposto para que cada aluno faça um programa de tema livre, porém que use os comandos apresentados em aula com o monitoramento do professor.
 +
 +
 +
Daniel = 9,
 +
          - Empenho para acompanhar o raciocínio das funções e criação de algumas das mesmas
 +
          - Apresentou dificuldades para entender e implementar algumas funções
 +
          - Esforço apresentado para correção dos bugs.
 +
 +
Pablo = 10,
 +
            - Domínio do conteúdo e raciocínio para criação de funções no projeto
 +
            - Criador da estrutura do projeto
 +
            - Esforço apresentado para correção de bugs.
 +
 +
Paulo;
 +
 +
==Avaliação (professor)==
 +
 +
Caros alunos!
 +
 +
Eu esperava mais do trabalho de vocês. O desempenho que vocês vinham tendo na disciplina não refletiu no trabalho. O programa não atendeu aos requisitos iniciais, porém, foram feitas novas implementações interessantes e o código fonte está comentado. Ainda faltou um cuidado maior com a wiki, achei que o código fonte está muito "inchado", com muitas variáveis, entre outros problemas identificados que conversamos na apresentação.
 +
 +
Por isso minha nota para a equipe toda é: 7.
 +
 +
(Com exceção do Paulo que faltou.)
 +
 +
Douglas A.
 +
 +
=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
 
//Máximo de bytes para uma String
 
#define BUFFER 64
 
#define BUFFER 64
 
   
 
   
 
//Espera 3 segundos
 
//Espera 3 segundos
#define ESPERA sleep(3)
+
#define ESPERA sleep(5)
 
   
 
   
 
//Estrutura da lista que será criada
 
//Estrutura da lista que será criada
 
typedef struct lista {
 
typedef struct lista {
     char *cidade;
+
     char cidade[40];
 
     int codigo;
 
     int codigo;
     int temp;
+
     float temp;
 
     int umidade;
 
     int umidade;
 
     struct lista *proximo;
 
     struct lista *proximo;
 
} Dados;
 
} Dados;
 +
 +
void abrirarquivo2();
 +
 +
//Arquivo utilizado
 +
FILE *p_arq;
 
   
 
   
 
//Funções para manusear os dados (irão retornar dados)
 
//Funções para manusear os dados (irão retornar dados)
Dados *inicia_dados  (char *cidade, int codigo, int temp, int umidade);
+
Dados *inicia_dados  (char *cidade, int codigo, float temp, int umidade);
Dados *insere_dados  (Dados *dados, char *cidade, int codigo, int temp, int umidade);
+
Dados *insere_dados  (Dados *dados, char *cidade, int codigo, float temp, int umidade);
 
Dados *delbusca_dados(Dados *dados, char *chave);
 
Dados *delbusca_dados(Dados *dados, char *chave);
 
Dados *deleta_dados  (Dados *dados, int nTipo);
 
Dados *deleta_dados  (Dados *dados, int nTipo);
Linha 103: Linha 162:
 
//Funções para mostrar dados
 
//Funções para mostrar dados
 
void  exibe_dados    (Dados *dados);
 
void  exibe_dados    (Dados *dados);
void  exibe_tamanho  (Dados *nova);
 
 
void  busca_dados    (Dados *dados, char *chave);
 
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
 
//Inicializando os dados da lista
 
Dados *principal = NULL;
 
Dados *principal = NULL;
 +
 +
 
//---------------------------------
 
//---------------------------------
 
//    Opção '1'
 
//    Opção '1'
Linha 121: Linha 173:
 
//Criando uma lista vazia
 
//Criando uma lista vazia
 
void criavazia(void){
 
void criavazia(void){
    char *cidade;
+
Dados *p = malloc(sizeof(Dados));
    int codigo=0, umidade=0;
 
    int temp=0;
 
 
     //Alocando dados para uma String
 
     //Alocando dados para uma String
    cidade = (char *)malloc(BUFFER);
 
 
     //Lendo String cidade
 
     //Lendo String cidade
 
     printf("\n\nDigite o cidade: \n----> ");
 
     printf("\n\nDigite o cidade: \n----> ");
     scanf("%s", cidade);
+
     scanf("%s", p->cidade);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int codigo
 
     //Lendo int codigo
 
     printf("\n\nDigite o codigo: \n----> ");
 
     printf("\n\nDigite o codigo: \n----> ");
     scanf("%d", &codigo);
+
     scanf("%d", &p->codigo);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int temp
 
     //Lendo int temp
 
     printf("\n\nDigite a temperatura: \n----> ");
 
     printf("\n\nDigite a temperatura: \n----> ");
     scanf("%d", &temp);
+
     scanf("%f", &p->temp);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int umidade
 
     //Lendo int umidade
 
     printf("Digite a umidade: \n----> ");
 
     printf("Digite a umidade: \n----> ");
     scanf("%d", &umidade);
+
     scanf("%d", &p->umidade);
 
     printf("\n");
 
     printf("\n");
 
     //Lançando os dados lidos na lista Principal
 
     //Lançando os dados lidos na lista Principal
    free(principal);
+
if(principal==NULL) {
    principal = inicia_dados(cidade, codigo, temp, umidade);
+
principal=p;
 +
}else {
 +
        p->proximo=principal->proximo;
 +
principal->proximo=p;
 +
  }
 
}
 
}
 
   
 
   
 
//Iniciando os dados da lista vazia
 
//Iniciando os dados da lista vazia
Dados *inicia_dados(char *cidade, int codigo, int temp, int umidade) {
+
Dados *inicia_dados(char cidade[40], int codigo, float temp, int umidade) {
 
     Dados *novo;
 
     Dados *novo;
 
     //Alocando memória para a posição atual da lista
 
     //Alocando memória para a posição atual da lista
 
     novo = (Dados *)malloc(sizeof(Dados));
 
     novo = (Dados *)malloc(sizeof(Dados));
 
     //Lançando os dados lidos
 
     //Lançando os dados lidos
    novo->cidade = (char *)malloc(strlen(cidade)+1);
 
 
     strncpy(novo->cidade, cidade, strlen(cidade)+1);
 
     strncpy(novo->cidade, cidade, strlen(cidade)+1);
 
     novo->codigo = codigo;
 
     novo->codigo = codigo;
Linha 166: Linha 218:
 
//    Opção '2'
 
//    Opção '2'
 
//---------------------------------
 
//---------------------------------
 
+
 
//Inserção de dados no final de uma lista
 
//Inserção de dados no final de uma lista
 
void inserefim(void) {
 
void inserefim(void) {
     char *cidade;
+
     char cidade[40];
 
     int codigo=0, umidade=0;
 
     int codigo=0, umidade=0;
     int temp=0;
+
     float temp=0;
 
     //Alocando dados para uma String
 
     //Alocando dados para uma String
    cidade = (char *)malloc(BUFFER);
 
 
     //Lendo String cidade
 
     //Lendo String cidade
 
     printf("\n\nDigite o cidade: \n----> ");
 
     printf("\n\nDigite o cidade: \n----> ");
Linha 184: Linha 235:
 
     //Lendo int temp
 
     //Lendo int temp
 
     printf("\n\nDigite a temperatura: \n----> ");
 
     printf("\n\nDigite a temperatura: \n----> ");
     scanf("%d", &temp);
+
     scanf("%f", &temp);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int umidade
 
     //Lendo int umidade
Linha 195: Linha 246:
 
     final = (Dados *)malloc(sizeof(Dados));
 
     final = (Dados *)malloc(sizeof(Dados));
 
     //Setando os valores cidade e Idade
 
     //Setando os valores cidade e Idade
    final->cidade = (char *)malloc(strlen(cidade)+1);
+
 
     strncpy(final->cidade, cidade, strlen(cidade)+1);
 
     strncpy(final->cidade, cidade, strlen(cidade)+1);
 
     final->codigo = codigo;
 
     final->codigo = codigo;
Linha 213: Linha 264:
 
     aux->proximo=final;
 
     aux->proximo=final;
 
}
 
}
 
+
 
//Se não tiver nada, insere no inicio
 
//Se não tiver nada, insere no inicio
 
//Inserindo no início da lista
 
//Inserindo no início da lista
void insereinicio(void){
+
void insereinicio(Dados *dados){
 
     char *cidade;
 
     char *cidade;
 
     int codigo=0, umidade=0;
 
     int codigo=0, umidade=0;
     int temp=0;
+
     float temp=0;
 +
    char aux[40];
 +
    int aux2;
 
     //Alocando dados para uma String
 
     //Alocando dados para uma String
 
     cidade = (char *)malloc(BUFFER);
 
     cidade = (char *)malloc(BUFFER);
 
     //Lendo String cidade
 
     //Lendo String cidade
     printf("\n\nDigite o cidade: \n----> ");
+
     printf("\n\nDigite a cidade: \n----> ");
     scanf("%s", cidade);
+
     scanf("%s", aux);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int codigo
 
     //Lendo int codigo
 
     printf("\n\nDigite o codigo: \n----> ");
 
     printf("\n\nDigite o codigo: \n----> ");
     scanf("%d", &codigo);
+
     scanf("%d", &aux2);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo float temp
 
     //Lendo float temp
 
     printf("\n\nDigite a temperatura: \n----> ");
 
     printf("\n\nDigite a temperatura: \n----> ");
     scanf("%d", &temp);
+
     scanf("%f", &temp);
 
     printf("\n");
 
     printf("\n");
 
     //Lendo int umidade
 
     //Lendo int umidade
Linha 243: Linha 296:
 
   
 
   
 
//Inserindo dados recebidos
 
//Inserindo dados recebidos
Dados *insere_dados(Dados *dados, char *cidade, int codigo, int temp, int umidade) {
+
Dados *insere_dados(Dados *dados, char cidade[40], int codigo, float temp, int umidade) {
 
     Dados *inicio;
 
     Dados *inicio;
 
     //Alocando memória para a posição atual
 
     //Alocando memória para a posição atual
 
     inicio = (Dados *)malloc(sizeof(Dados));
 
     inicio = (Dados *)malloc(sizeof(Dados));
 
     //Lançando os dados lidos
 
     //Lançando os dados lidos
    inicio->cidade = (char *)malloc(strlen(cidade)+1);
 
 
     strncpy(inicio->cidade, cidade, strlen(cidade)+1);
 
     strncpy(inicio->cidade, cidade, strlen(cidade)+1);
 
     inicio->codigo = codigo;
 
     inicio->codigo = codigo;
Linha 284: Linha 336:
 
//Exibindo todos os dados do menu
 
//Exibindo todos os dados do menu
 
void exibe_dados(Dados *dados) {
 
void exibe_dados(Dados *dados) {
 +
int res;
 +
    Dados *p;
 +
    p=dados;
 
     printf("Cadastro:\n\n");
 
     printf("Cadastro:\n\n");
 
     printf("------------------------\n");
 
     printf("------------------------\n");
 
     //Exibindo todos os valores da lista
 
     //Exibindo todos os valores da lista
     for (; dados != NULL; dados = dados->proximo) {
+
     for (p=principal; p!= NULL; p=p->proximo) {
         printf("cidade: %s\n", dados->cidade);
+
         printf("cidade: %s\t", p->cidade);
         printf("Codigo: %d\n", dados->codigo);
+
         printf("Codigo: %d\t", p->codigo);
         printf("Temperatura: %d\n", dados->temp);
+
         printf("Temperatura: %.2f\t", p->temp);
         printf("Umidade: %d\n", dados->umidade);
+
         printf("Umidade: %d\n", p->umidade);
 +
}
 
         printf("------------------------\n");
 
         printf("------------------------\n");
    }
+
getchar();
    getchar();
 
 
}
 
}
 
+
 
//---------------------------------
 
//---------------------------------
 
//    Opção '5'
 
//    Opção '5'
Linha 396: Linha 451:
 
             printf("Codigo: %d\n", dados->codigo);
 
             printf("Codigo: %d\n", dados->codigo);
 
             printf("cidade: %s\n", dados->cidade);
 
             printf("cidade: %s\n", dados->cidade);
             printf("Temperatura: %d\n", dados->temp);
+
             printf("Temperatura: %f\n", dados->temp);
 
             printf("Umidade: %d\n", dados->umidade);
 
             printf("Umidade: %d\n", dados->umidade);
 
             printf("------------------------\n");
 
             printf("------------------------\n");
Linha 414: Linha 469:
 
//    Opção '7'
 
//    Opção '7'
 
//---------------------------------
 
//---------------------------------
 
+
//Organiza a lista pela temperatura(função auxiliar)
+
void media(void){
void organizatemp(){
+
    mediaa (principal);
int tamanho = 62; //Pois amazonas só tem 62 municipios
+
    maxima (principal);
int aux;
+
    minima (principal);
for(int i=tamanho+1; i <= 1; i++) {  
+
}
for( int j=0; j < i ; j++) {
+
if(Dados.temp[j]>Dados.temp[j+1]) {
+
int maxima(Dados *dados){
aux = Dados.temp[j];
+
    int max=-60000;
Dados.temp[j] = Dados.temp[j+1];
+
    for (; dados != NULL; dados = dados->proximo){
Dados.temp[j+1] = aux;    
+
        if(max < dados->temp){
 +
            max=dados->temp;
 +
        }
 +
    }
 +
    printf("Temperatura maxima: %d\n", max);
 +
}
 +
   
 +
int minima(Dados *dados){
 +
    int min=60000;
 +
    for (; dados != NULL; dados = dados->proximo){
 +
        if(min > dados->temp){
 +
            min=dados->temp;
 +
        }
 +
    }
 +
    printf("Temperatura minima: %d\n", min);
 +
}
 +
 +
 +
int mediaa (Dados *dados){
 +
    int aux;
 +
    float soma=0;
 +
    float media=0;
 +
    int cont=0;
 +
    for (; dados != NULL; dados = dados->proximo){
 +
        aux = dados->temp;
 +
        soma = soma+aux;
 +
        cont ++;
 +
        if(dados==NULL){
 +
            break;
 
         }
 
         }
      }
 
 
     }
 
     }
printf("temperatura maxima:%f\n temperatura minima:%f\n",Dados.temp[0],Dados.temp[j-1]);
+
    media=soma/cont;
}
+
    printf("media das temperatura:%.2f\n",media);
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'
 
//    Opção '8'
 
//---------------------------------
 
//---------------------------------
 
+
 +
void abrirarquivo()
 +
{
 +
  FILE *p_arq;
 +
  int i;
 +
  int res;
 +
  char buff[100];
 +
  if ((p_arq=fopen("infcoletadas.dat", "r")) == NULL) {
 +
    printf("Problemas na abertura do arquivo\n");
 +
    return;
 +
  }
 +
  while(1) {
 +
      if((res = fscanf(p_arq,"%s\n",buff))==EOF) {       
 +
  break;
 +
      }
 +
      printf("%s\n",buff);
 +
  }
 +
fclose(p_arq);
 +
}
 +
 +
 +
void abrirarquivo2()
 +
{
 +
int res;
 +
if ((p_arq=fopen("infcoletadas.dat","r"))==NULL) {
 +
printf("Falha na abertura do arquivo.\n");
 +
return;
 +
}
 +
while(1) {
 +
  Dados *dados;
 +
    dados = (Dados *)malloc(sizeof(Dados));
 +
    if((res=fscanf(p_arq,"%s %d %f %d", dados->cidade, &dados->codigo, &dados->temp, &dados->umidade))==EOF) {
 +
break;
 +
  }
 +
if(principal==NULL) {
 +
principal=dados;
 +
}else {
 +
        dados->proximo=principal->proximo;
 +
principal->proximo=dados;
 +
 +
}
 +
}
 +
fclose(p_arq);
 +
}
 +
 +
 
//---------------------------------
 
//---------------------------------
 
//    Função Auxiliar
 
//    Função Auxiliar
Linha 473: Linha 585:
 
     char escolha;
 
     char escolha;
 
     int chave=0;
 
     int chave=0;
 +
    abrirarquivo2();
 
     //Laço que irá mostrar o menu esperando uma opção (char)
 
     //Laço que irá mostrar o menu esperando uma opção (char)
 
     do {
 
     do {
Linha 479: Linha 592:
 
         printf("\n\t\tSistema de Monitoração de temperatura do Amazonas\n\n");
 
         printf("\n\t\tSistema de Monitoração de temperatura do Amazonas\n\n");
 
         printf("Escolha uma opcao: \n");
 
         printf("Escolha uma opcao: \n");
         printf("1 - Criar lista vazia\n");
+
         printf("1 - Adicionar cidade\n");
         if(chave==1){
+
         printf("2 - Inserir no Fim de uma lista\n");
            printf("2 - Inserir no Fim de uma lista\n");
 
        }
 
 
         printf("3 - Lista Vazia...\n");
 
         printf("3 - Lista Vazia...\n");
        if(chave==1){
+
  printf("4 - Exibir a Lista inteira\n");
            printf("4 - Exibir a Lista inteira\n");
+
        printf("5 - Eliminar cidade\n");
            printf("5 - Eliminar cidade\n");
+
        printf("6 - Busca Dados\n");
            printf("6 - Busca Dados\n");
+
         printf("7 - Mostra media e temperaturas\n");
         }
+
         printf("9 - Sair\n\n");
         printf("7 - Sair\n\n");
 
 
         printf("Resposta: ");
 
         printf("Resposta: ");
 
         scanf("%c", &escolha);
 
         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)
 
         //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) {
 
         switch(escolha) {
 
             //Criando lista vazia
 
             //Criando lista vazia
Linha 510: Linha 617:
 
                 //senão inclui no inicio
 
                 //senão inclui no inicio
 
                 else{
 
                 else{
                     insereinicio();
+
                     insereinicio(principal);
 
                 }
 
                 }
 
                 break;
 
                 break;
Linha 529: Linha 636:
 
                 busca();
 
                 busca();
 
                 break;
 
                 break;
//Encontra o maior e menor e faz média das temperatura
+
            //Encontra o maior e menor e faz média das temperatura
case '7';
+
            case '7':
media();
+
            media();
break;
+
            ESPERA;
//Adiocana conteudo de arquivo no final da lista
+
            break;
case '8';
+
            //Adiocana conteudo de arquivo no final da lista
addconteudoarq();
+
            case '8':
break;
+
            abrirarquivo();
 +
            ESPERA;
 +
            break;
 
             //Saindo e finalizando o programa
 
             //Saindo e finalizando o programa
 
             case '9':
 
             case '9':
Linha 556: Linha 665:
 
     return 0;
 
     return 0;
 
}
 
}
 
  
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição atual tal como às 10h46min de 1 de julho 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
Arquivo utilizado pela equipe (infcoletadas.dat)
cat infcoletadas.dat
XINGU            100      23.5       80
SOLIMOES         200      24.8       81
IAPOQUE          300      32.0       75
MADEIRA          400      33.9       98
BELLOMONTE       500      40.5       90

[...]

Atividades

Distribuição

DANIEL CABRAL CORREA - Responsável pela programação das funções, pelo ajuste de erros, e debate sobre desenvolvimento do projeto.

PABLO FIDELIS DIAS - Responsável pela estruturação do programa, pela programação das funções, pelo ajuste de erros e debate dobre desenvolvimento do projeto.

PAULO HENRIQUE HORST BIANCHIN - Responsável pela compilação e debate sobre desenvolvimento do projeto.

Desenvolvimento

1.1 - Inicialmente foram feitas a estruturação do arquivo separando a função main do restante das funções para facilitar na detecção de erros

2.1 - Em seguida foram feitas algumas funções (essa sendo desenvolvidas a partir do conhecimento de cada aluno,exemplos passado pelo professor, conteúdo da wiki e pesquisas).

2.2 - Logo após essas funções foram implementadas ao arquivo principal.

2.3 - Compilação do Arquivo principal

3.1 - Ajuste de erros e a repetição dos passos 2.1, 2.2, 2.3

4.1 - Compilação final sem nenhum problema

Observação:O trabalho foi feito através do skype, pela ferramenta de compartilhamento de tela. A programação foi desenvolvida no programa notepad++. Os testes foram realizados nas paginas http://www.tutorialspoint.com/codingground.htm http://www.tutorialspoint.com/compile_c_online.php e confirmados no terminal do linux.

Conclusão

Nesse projeto encontramos grande dificuldades e constatamos que ao implementar o projeto nosso conhecimento foi melhorado.

Ao final do programa realizamos ajustes finos no programa para que funcionasse corretamente e que não houvessem duplicatas.

Concluímos que com o projeto em que trabalhamos conseguimos utilizar todos os métodos aprendidos em aula, utilizamos algumas fontes de estudos extra-curriculares para desenvolvimento do mesmo.

Sugerimos que a cada aula seja proposto para que cada aluno faça um programa de tema livre, porém que use os comandos apresentados em aula com o monitoramento do professor.


Daniel = 9,

          - Empenho para acompanhar o raciocínio das funções e criação de algumas das mesmas
          - Apresentou dificuldades para entender e implementar algumas funções
          - Esforço apresentado para correção dos bugs.

Pablo = 10,

           - Domínio do conteúdo e raciocínio para criação de funções no projeto
           - Criador da estrutura do projeto
           - Esforço apresentado para correção de bugs.

Paulo;

Avaliação (professor)

Caros alunos!

Eu esperava mais do trabalho de vocês. O desempenho que vocês vinham tendo na disciplina não refletiu no trabalho. O programa não atendeu aos requisitos iniciais, porém, foram feitas novas implementações interessantes e o código fonte está comentado. Ainda faltou um cuidado maior com a wiki, achei que o código fonte está muito "inchado", com muitas variáveis, entre outros problemas identificados que conversamos na apresentação.

Por isso minha nota para a equipe toda é: 7.

(Com exceção do Paulo que faltou.)

Douglas A.

Código fonte

#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(5)
 
//Estrutura da lista que será criada
typedef struct lista {
    char cidade[40];
    int codigo;
    float temp;
    int umidade;
    struct lista *proximo;
} Dados;
 
void abrirarquivo2();
 
//Arquivo utilizado
	FILE *p_arq;
 
//Funções para manusear os dados (irão retornar dados)
Dados *inicia_dados  (char *cidade, int codigo, float temp, int umidade);
Dados *insere_dados  (Dados *dados, char *cidade, int codigo, float 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  busca_dados    (Dados *dados, char *chave);
 
//Inicializando os dados da lista
Dados *principal = NULL;
 
 
//---------------------------------
//     Opção '1'
//---------------------------------
//Criando uma lista vazia
void criavazia(void){
	 Dados *p = malloc(sizeof(Dados));
    //Alocando dados para uma String
    //Lendo String cidade
    printf("\n\nDigite o cidade: \n----> ");
    scanf("%s", p->cidade);
    printf("\n");
    //Lendo int codigo
    printf("\n\nDigite o codigo: \n----> ");
    scanf("%d", &p->codigo);
    printf("\n");
    //Lendo int temp
    printf("\n\nDigite a temperatura: \n----> ");
    scanf("%f", &p->temp);
    printf("\n");
    //Lendo int umidade
    printf("Digite a umidade: \n----> ");
    scanf("%d", &p->umidade);
    printf("\n");
    //Lançando os dados lidos na lista Principal
		if(principal==NULL) {
			principal=p;
		}else {
         p->proximo=principal->proximo;
			principal->proximo=p;
	   }
}
 
//Iniciando os dados da lista vazia
Dados *inicia_dados(char cidade[40], 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
    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[40];
    int codigo=0, umidade=0;
    float temp=0;
    //Alocando dados para uma String
    //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("%f", &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
 
    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(Dados *dados){
    char *cidade;
    int codigo=0, umidade=0;
    float temp=0;
    char aux[40];
    int aux2;
    //Alocando dados para uma String
    cidade = (char *)malloc(BUFFER);
    //Lendo String cidade
    printf("\n\nDigite a cidade: \n----> ");
    scanf("%s", aux);
    printf("\n");
    //Lendo int codigo
    printf("\n\nDigite o codigo: \n----> ");
    scanf("%d", &aux2);
    printf("\n");
    //Lendo float temp
    printf("\n\nDigite a temperatura: \n----> ");
    scanf("%f", &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[40], int codigo, float temp, int umidade) {
    Dados *inicio;
    //Alocando memória para a posição atual
    inicio = (Dados *)malloc(sizeof(Dados));
    //Lançando os dados lidos
    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) {
	 int res;
    Dados *p;
    p=dados;
    printf("Cadastro:\n\n");
    printf("------------------------\n");
    //Exibindo todos os valores da lista
    for (p=principal; p!= NULL; p=p->proximo) {
        printf("cidade: %s\t", p->cidade);
        printf("Codigo: %d\t", p->codigo);
        printf("Temperatura: %.2f\t", p->temp);
        printf("Umidade: %d\n", p->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: %f\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'
//---------------------------------
 
void media(void){
    mediaa (principal);
    maxima (principal);
    minima (principal);
}
 
int maxima(Dados *dados){
    int max=-60000;
    for (; dados != NULL; dados = dados->proximo){
        if(max < dados->temp){
            max=dados->temp;
        }
    }
    printf("Temperatura maxima: %d\n", max);
}
 
int minima(Dados *dados){
    int min=60000;
    for (; dados != NULL; dados = dados->proximo){
        if(min > dados->temp){
            min=dados->temp;
        }
    }
    printf("Temperatura minima: %d\n", min);
}
 
 
int mediaa (Dados *dados){
    int aux;
    float soma=0;
    float media=0;
    int cont=0;
    for (; dados != NULL; dados = dados->proximo){
        aux = dados->temp;
        soma = soma+aux;
        cont ++;
        if(dados==NULL){
            break;
        }
    }
    media=soma/cont;
    printf("media das temperatura:%.2f\n",media);
}
 
//---------------------------------
//     Opção '8'
//---------------------------------
 
void abrirarquivo()
{
  FILE *p_arq;
  int i;
  int res;
  char buff[100];
   if ((p_arq=fopen("infcoletadas.dat", "r")) == NULL) {
     printf("Problemas na abertura do arquivo\n");
     return;
  }
   while(1) {
      if((res = fscanf(p_arq,"%s\n",buff))==EOF) {  					  	    
			   break;
      }
      printf("%s\n",buff);
  }
 fclose(p_arq);
}
 
 
void abrirarquivo2()
{
	int res; 
	if ((p_arq=fopen("infcoletadas.dat","r"))==NULL) {
		printf("Falha na abertura do arquivo.\n");
		return;
	} 
	while(1) { 
   	Dados *dados;
    	dados = (Dados *)malloc(sizeof(Dados));
    	if((res=fscanf(p_arq,"%s %d %f %d", dados->cidade, &dados->codigo, &dados->temp, &dados->umidade))==EOF) {
			break;
	   }
		if(principal==NULL) {
			principal=dados;
		}else {
         dados->proximo=principal->proximo;
			principal->proximo=dados;
 
		}	
	}
	fclose(p_arq);
}
 
 
//---------------------------------
//     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;
    abrirarquivo2();
    //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 - Adicionar cidade\n");
        printf("2 - Inserir no Fim de uma lista\n");
        printf("3 - Lista Vazia...\n");
		  printf("4 - Exibir a Lista inteira\n");
        printf("5 - Eliminar cidade\n");
        printf("6 - Busca Dados\n");
        printf("7 - Mostra media e temperaturas\n");
        printf("9 - 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)
        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(principal);
                }
                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();
            ESPERA;
            break;
            //Adiocana conteudo de arquivo no final da lista
            case '8':
            abrirarquivo();
            ESPERA;
            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;
}



<< Equipe3-2015-1