Lucati Posted August 12, 2011 Report Share Posted August 12, 2011 Boa Tarde Galera,há tempo eu consulto o fórum e sempre foi muito útil o post de vocês!mais hoje eu preciso de uma ajuda...perdi as aulas de Fila e Pilha, e confesso que Ponteiros foi muito complicado!preciso resolver esse exercicio:Desenvolver um programa em linguagem C, semelhante a lista telefônica de um celularconvencional. O programa deverá armazenar as informações (NOME, TELEFONE FIXO, CELULARe E-MAIL) de cada contato. O usuário deverá ter as opções (Menu) de INSERIR NOVO CONTATO,EXCLUIR CONTATO, LOCALIZAR, MOSTRAR TODOS OS CONTATOS, EXCLUIR TODOS OSCONTATOS e VERIFICAR A QUANTIDADE DE REGISTROS CADASTRADOS. O Programa deve fazer ainserção de cada elemento em seu devido lugar, atualizando apenas os apontadores (ponteiros),mantendo assim a lista sempre ordenada pelo NOME do contato.Alguém me ajuda?Obrigado! Quote Link to comment Share on other sites More sharing options...
0 CPP Posted August 16, 2011 Report Share Posted August 16, 2011 Ola,Fiz as funções de manipulacao da lista pra você.Agora tenta resolver o resto do seu sistema.Qualquer dúvida posta ai que a gente ajudaColoquei alguns comentarios no main() pra ajudar a ententer como usar as funcoes.Abs#include <stdio.h>#include <stdlib.h>#include <string.h>struct TLista{ struct TLista *previous; struct TLista *next; char nome[31]; char celular[16]; char telefone[16]; char email[51];};typedef struct TLista tlista;void agendaInicia(void);void agendaInsere(char *nome, char *celular, char *telefone, char *email);void agendaLista(void);tlista *agendaLocaliza(char *nome);int agendaRemove(char *nome);int agendaContador;tlista agendaRoot; // raiz para a lista tlista *agendaLast; // ponteiro para o ultimo elemento da listatlista *agendaCurr; // ponteiro para o elemento corrente da lista//---------------------------------------------------void main(void){ // inicia as variaveis de controle da lista agendaInicia(); // insere os items já em ordem alfabetica por nome agendaInsere("nome-1", "123", "456", "email-1"); agendaInsere("nome-3", "123", "456", "email-3"); agendaInsere("nome-5", "123", "456", "email-5"); agendaInsere("nome-7", "123", "456", "email-7"); agendaInsere("nome-9", "123", "456", "email-9"); agendaInsere("nome-8", "123", "456", "email-8"); agendaInsere("nome-6", "123", "456", "email-6"); agendaInsere("nome-4", "123", "456", "email-4"); agendaInsere("nome-2", "123", "456", "email-2"); agendaInsere("nome-a", "123", "456", "email-a"); // exibe o conteudo da lista agendaLista(); tlista *ptr; printf("\n\nTestando localizacao\n"); if ((ptr = agendaLocaliza("nome-6")) != NULL) printf("Achei: %s\n", ptr->nome); else printf("não achei\n"); printf("\n\nTestando remocao\n"); if (agendaRemove("nome-3") == 0) { printf("Registro (%s) removido\n", "nome-3"); agendaLista(); } else printf("Registro não removido\n"); printf("Reinsere o item 3\n"); agendaInsere("nome-3", "123", "456", "EMAIL-3 (REINSERIDO NA ORDEM)"); agendaLista(); // quantidade de itens na lista printf("itens: %d\n", agendaContador);}//---------------------------------------------------void agendaInicia(void){ agendaContador = 0; agendaRoot.next = agendaRoot.previous = NULL; agendaLast = &agendaRoot; agendaCurr = &agendaRoot;}//---------------------------------------------------void agendaInsere(char *nome, char *celular, char *telefone, char *email){ // insere sempre em ordem tlista *ptr = &agendaRoot; tlista *ptrNovo; while(ptr != NULL) { if (strcmp(ptr->nome, nome) > 0) { ptr = ptr->previous; ptrNovo = (tlista *) malloc(sizeof(tlista)); ptrNovo->previous = ptr; ptrNovo->next = ptr->next; ptr->next->previous = ptrNovo; ptr->next = ptrNovo; strcpy(ptrNovo->nome, nome); strcpy(ptrNovo->celular, celular); strcpy(ptrNovo->telefone, telefone); strcpy(ptrNovo->email, email); agendaContador++; return; } ptr = ptr->next; } agendaLast->next = (tlista *) malloc(sizeof(tlista)); strcpy(agendaLast->next->nome, nome); strcpy(agendaLast->next->celular, celular); strcpy(agendaLast->next->telefone, telefone); strcpy(agendaLast->next->email, email); agendaLast->next->previous = agendaLast; agendaLast->next->next = NULL; agendaLast = agendaLast->next; agendaContador++;}//---------------------------------------------------void agendaLista(void){ if (!agendaContador) { puts("Agenda vazia"); return; } tlista *agendaPtr = &agendaRoot; while (agendaPtr != NULL) { printf("%s ",agendaPtr->nome); printf("%s ",agendaPtr->celular); printf("%s ",agendaPtr->telefone); printf("%s ",agendaPtr->email); printf("\n"); agendaPtr = agendaPtr->next; } printf("\n"); }//---------------------------------------------------tlista *agendaLocaliza(char *nome){ if (!agendaContador) { puts("Agenda vazia"); return; } tlista *agendaPtr = &agendaRoot; while (agendaPtr != NULL) { if (!strcmp(agendaPtr->nome, nome)) return agendaPtr; agendaPtr = agendaPtr->next; } return NULL;}//---------------------------------------------------int agendaRemove(char *nome){ tlista *ptr; if ((ptr = agendaLocaliza(nome)) == NULL) return 1; // não encontrado // refaz os links ptr->next->previous = ptr->previous; ptr->previous->next = ptr->next; free(ptr); agendaContador--; return 0;}[/codebox] Quote Link to comment Share on other sites More sharing options...
0 Lucati Posted August 17, 2011 Author Report Share Posted August 17, 2011 Cara vlw pela ajudaaaa!deu certo ...agora estarei on mais tempo aqui no blog!precisando estamos ai!abraços Quote Link to comment Share on other sites More sharing options...
Question
Lucati
Boa Tarde Galera,
há tempo eu consulto o fórum e sempre foi muito útil o post de vocês!
mais hoje eu preciso de uma ajuda...
perdi as aulas de Fila e Pilha, e confesso que Ponteiros foi muito complicado!
preciso resolver esse exercicio:
Desenvolver um programa em linguagem C, semelhante a lista telefônica de um celular
convencional. O programa deverá armazenar as informações (NOME, TELEFONE FIXO, CELULAR
e E-MAIL) de cada contato. O usuário deverá ter as opções (Menu) de INSERIR NOVO CONTATO,
EXCLUIR CONTATO, LOCALIZAR, MOSTRAR TODOS OS CONTATOS, EXCLUIR TODOS OS
CONTATOS e VERIFICAR A QUANTIDADE DE REGISTROS CADASTRADOS. O Programa deve fazer a
inserção de cada elemento em seu devido lugar, atualizando apenas os apontadores (ponteiros),
mantendo assim a lista sempre ordenada pelo NOME do contato.
Alguém me ajuda?
Obrigado!
Link to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.