Lucati Postado Agosto 12, 2011 Denunciar Share Postado Agosto 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CPP Postado Agosto 16, 2011 Denunciar Share Postado Agosto 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] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lucati Postado Agosto 17, 2011 Autor Denunciar Share Postado Agosto 17, 2011 Cara vlw pela ajudaaaa!deu certo ...agora estarei on mais tempo aqui no blog!precisando estamos ai!abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
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 para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.