Equipe3-2015-1
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
[...]
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 |
---|