Mudanças entre as edições de "Equipe3-2015-1"
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 | |
− | typedef struct TLocalidade localidade; | + | |
+ | 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 | ||
− | struct TLocalidade{ | + | typedef struct TLocalidade { |
+ | char nome[20]; | ||
int codigo; | int codigo; | ||
− | |||
float temp; | float temp; | ||
int umidade; | 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 { | 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); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | } while(opcao!= | ||
} | } | ||
+ | |||
+ | |||
</syntaxhighlight> | </syntaxhighlight> |
Edição das 21h18min 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
- 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 |
---|