Jump to content
Fórum Script Brasil
  • 0

Ajuda...


Lucati

Question

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

  • 0

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 ajuda

Coloquei 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 lista
tlista *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]

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...