|
|
Linha 83: |
Linha 83: |
| /*Estrutura para o arquivo*/ | | /*Estrutura para o arquivo*/ |
| struct TLocalidade{ | | 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);{ | + | struct Tcadastro { |
− | 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{ | | 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{ | | 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{ | | struct Tlerarquivos{ |
Linha 174: |
Linha 123: |
| } | | } |
| | | |
− |
| |
− | _____________________________________________________________________________________________________________________________
| |
− | #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);
| |
− | }
| |
| | | |
| | | |
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{
};
struct Tcadastro {
};
struct Tremover{
};
struct Timprimir{
};
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;
}
}