Mudanças entre as edições de "Equipe3-2015-1"
(32 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. | ||
− | + | 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. | ||
− | + | 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== | ==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= | =Código fonte= | ||
Linha 80: | Linha 132: | ||
#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( | + | #define ESPERA sleep(5) |
//Estrutura da lista que será criada | //Estrutura da lista que será criada | ||
typedef struct lista { | typedef struct lista { | ||
− | char | + | char cidade[40]; |
int codigo; | int codigo; | ||
− | + | 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, | + | Dados *inicia_dados (char *cidade, int codigo, float temp, int umidade); |
− | Dados *insere_dados (Dados *dados, char *cidade, int codigo, | + | 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 105: | Linha 162: | ||
//Funções para mostrar dados | //Funções para mostrar dados | ||
void exibe_dados (Dados *dados); | void exibe_dados (Dados *dados); | ||
− | |||
void busca_dados (Dados *dados, char *chave); | void busca_dados (Dados *dados, char *chave); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
//Inicializando os dados da lista | //Inicializando os dados da lista | ||
Dados *principal = NULL; | Dados *principal = NULL; | ||
+ | |||
+ | |||
//--------------------------------- | //--------------------------------- | ||
// Opção '1' | // Opção '1' | ||
Linha 123: | Linha 173: | ||
//Criando uma lista vazia | //Criando uma lista vazia | ||
void criavazia(void){ | void criavazia(void){ | ||
− | + | Dados *p = malloc(sizeof(Dados)); | |
− | |||
− | |||
//Alocando dados para uma String | //Alocando dados para uma String | ||
− | |||
//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("% | + | 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 | ||
− | + | if(principal==NULL) { | |
− | + | 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 | + | 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 | ||
− | |||
strncpy(novo->cidade, cidade, strlen(cidade)+1); | strncpy(novo->cidade, cidade, strlen(cidade)+1); | ||
novo->codigo = codigo; | novo->codigo = codigo; | ||
Linha 168: | 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 | + | char cidade[40]; |
int codigo=0, umidade=0; | int codigo=0, umidade=0; | ||
− | + | float temp=0; | |
//Alocando dados para uma String | //Alocando dados para uma String | ||
− | |||
//Lendo String cidade | //Lendo String cidade | ||
printf("\n\nDigite o cidade: \n----> "); | printf("\n\nDigite o cidade: \n----> "); | ||
Linha 186: | Linha 235: | ||
//Lendo int temp | //Lendo int temp | ||
printf("\n\nDigite a temperatura: \n----> "); | printf("\n\nDigite a temperatura: \n----> "); | ||
− | scanf("% | + | scanf("%f", &temp); |
printf("\n"); | printf("\n"); | ||
//Lendo int umidade | //Lendo int umidade | ||
Linha 197: | Linha 246: | ||
final = (Dados *)malloc(sizeof(Dados)); | final = (Dados *)malloc(sizeof(Dados)); | ||
//Setando os valores cidade e Idade | //Setando os valores cidade e Idade | ||
− | + | ||
strncpy(final->cidade, cidade, strlen(cidade)+1); | strncpy(final->cidade, cidade, strlen(cidade)+1); | ||
final->codigo = codigo; | final->codigo = codigo; | ||
Linha 215: | 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 insereinicio(Dados *dados){ |
char *cidade; | char *cidade; | ||
int codigo=0, umidade=0; | int codigo=0, umidade=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 | + | printf("\n\nDigite a cidade: \n----> "); |
− | scanf("%s", | + | 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", & | + | 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("% | + | scanf("%f", &temp); |
printf("\n"); | printf("\n"); | ||
//Lendo int umidade | //Lendo int umidade | ||
Linha 245: | Linha 296: | ||
//Inserindo dados recebidos | //Inserindo dados recebidos | ||
− | Dados *insere_dados(Dados *dados, char | + | 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 | ||
− | |||
strncpy(inicio->cidade, cidade, strlen(cidade)+1); | strncpy(inicio->cidade, cidade, strlen(cidade)+1); | ||
inicio->codigo = codigo; | inicio->codigo = codigo; | ||
Linha 286: | 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 (; | + | for (p=principal; p!= NULL; p=p->proximo) { |
− | printf("cidade: %s\ | + | printf("cidade: %s\t", p->cidade); |
− | printf("Codigo: %d\ | + | printf("Codigo: %d\t", p->codigo); |
− | printf("Temperatura: % | + | printf("Temperatura: %.2f\t", p->temp); |
− | printf("Umidade: %d\n", | + | printf("Umidade: %d\n", p->umidade); |
+ | } | ||
printf("------------------------\n"); | printf("------------------------\n"); | ||
− | + | getchar(); | |
− | |||
} | } | ||
− | + | ||
//--------------------------------- | //--------------------------------- | ||
// Opção '5' | // Opção '5' | ||
Linha 398: | 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: % | + | printf("Temperatura: %f\n", dados->temp); |
printf("Umidade: %d\n", dados->umidade); | printf("Umidade: %d\n", dados->umidade); | ||
printf("------------------------\n"); | printf("------------------------\n"); | ||
Linha 416: | Linha 469: | ||
// Opção '7' | // 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' | // 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 475: | 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 481: | 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 - | + | printf("1 - Adicionar cidade\n"); |
− | + | printf("2 - Inserir no Fim de uma lista\n"); | |
− | |||
− | |||
printf("3 - Lista Vazia...\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(" | ||
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) | ||
− | |||
− | |||
− | |||
switch(escolha) { | switch(escolha) { | ||
//Criando lista vazia | //Criando lista vazia | ||
Linha 512: | Linha 617: | ||
//senão inclui no inicio | //senão inclui no inicio | ||
else{ | else{ | ||
− | insereinicio(); | + | insereinicio(principal); |
} | } | ||
break; | break; | ||
Linha 531: | Linha 636: | ||
busca(); | busca(); | ||
break; | 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 | //Saindo e finalizando o programa | ||
case '9': | case '9': | ||
Linha 558: | 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
- 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
- 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 |
---|