Ir ao conteúdo
  • Cadastre-se
brCode

Cadastro em c - tad

Recommended Posts

Boa tarde a todos,

 

Desejo fazer um cadastro de dados  no formato Tipo Abstrato de Dados, onde existe um arquivo main.c , outro StrCol.c e um header  StrCol.h. Entre os dados que se pretende cadastrar estão : nome,  uma lista de telefones e uma lista de e-mails do tipo StrCol . Desta forma, tenho a intenção de inserir na lista e listar os dados referente a um contato. 

Havia criado uma variável BLOCO para definir o tamanho de cada BLOCO na memória e uma variável MAX que diz respeito a quantidade máxima de blocos que se poder ter. Seguindo esse raciocínio , ao inserir um dado na lista, verifica-se primeiro se existe um contato e se também foram ocupados os blocos disponibilizados . Caso não exista nenhum contato é alocado na memória um array de ponteiros do tipo char, onde cada um deles irá apontar para um bloco de memória, de acordo com o tamanho do dado que o usuário for inserir. Caso já exista algum contato e se os blocos já foram  ocupados  não estourando o número máximo de blocos, então se faz uma realocação de memória, disponibilizando um novo bloco, sem perder os dados anteriores.  Havia criado no arquivo StrCol.h , uma struct StrCol onde dentro dela denominei um ponteiro para ponteiro lista(char** lista). Mas algumas informações estão meio desencontradas , pois eu já havia definido dentro de struct no arquivo StrCol.h  o campo MAX e BLOCOS, mas não sei como chamar isso no arquivo StrCol.c .

 

Tendo como base a ideia do programa , já explicada acima e sem querer me estender muito,  estou um pouco confuso e encontrando muita dificuldade em como criar uma lista de contatos dentro de main.c  e listar os dados como nome, e a lista de e-mails ou telefones referentes a cada contato. Fico muito agradecido caso alguém se proponha a me ajudar.

main.c.jpg

 

StrCol.h.jpg

 

StrCol.c.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei porque me da a impressão de que você não está usando um projeto. Os arquivos .c você nunca deve fazer a inclusão, pois nesses tipos de arquivo costumam carecer do sistema de "proteção contra dupla inclusão"(guard) como eu gosto de chamar(ifnodef-define). Quando você tem um projeto você não precisa fazer includes de arquivos .c. Realmente faço uma ideia do que esteja falhando, mas sem ver o programa completo não vou arriscar porque pode que eu fale alguma besteira:atirador:. Se quiser subir os arquivos comprimidos talvez eu ou outros usuários sejamos capaz ajudar-lhe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O projeto  é constituído desses três arquivos de forma idêntica aos que foram enviados. Porém,   como estou com dificuldade , não consegui dar andamento ou completar a resolução.  É que se trata de  Tipo Abstrato de Dados(TAD), ou seja, foi criado um novo tipo (StrCol) que funcionará como uma lista(Coleção) para telefones e e-mails, usando alocação dinâmica de memória.  Em função disso , foram criados os arquivos descritos : StrCol.c , StrCol.h e o main.c. com seus respectivos “includes”. A ideia é que quando se insere o nome do contato, em seguida possam ser inseridos quantos telefones ou e-mails forem necessários demandando para tal memória do computador. No StrCol.c, são criados alguns métodos genéricos para inserir na lista e listar . Nesse caso foram adaptados para cadastrarem telefones e e-mails quando se está cadastrando um contato. Contudo, estou tendo dificuldade em como criar uma lista de contatos(contendo nome, telefone(s) e email(s))  e posteriormente exibí-los durante a execução do main.c, através dessa estrutura baseada no TAD. Segue o projeto em anexo. Agradeço a atenção.

Projeto.rar

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa de um array de contatos, isso é o que falha no seu programa, cada contato terá 2 listas, uma de telefone e outra de emails. Dei uma remodelada, falta você implementar a função inserirContato para inserir os contatos. Projeto Modificado.rar

 

Se tiver duvidas pergunte. Seja mais direto com o que você quer.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Visualizei a ideia que você demonstrou na modificação do projeto. No caso a minha ideia era dentro do método main criar uma lista de contatos usando também alocação dinâmica de memória, seguindo o mesmo raciocínio da lista de telefones e e-mails. Talvez eu não tenha deixado isso claro  na explicação.

Para não tomar muito o seu tempo, já que já está me ajudando bastante com sua explicação,  vamos considerar então o modo que você fez , definindo um vetor de Contatos(sem alocação dinâmica).

Completei apenas o código  no método inserirContato  seguindo as suas orientações, conforme demonstrado abaixo. Não sei se fiz algo errado ou se  seria algum problema no aplicativo CodeBlocks referente ao compilador  mas está aparecendo um erro durante a execução do programa. O erro aparece no arquivo contatos.h na linha #include “StrCol.h”.  Não entendi o por quê deste erro . Vide o anexo.  Se você puder demonstrar como ficaria o método genérico listar do arquivo StrCol.c, fico grato também.

#include <stdio.h>
#include "contatos.h"
#include "StrCol.h"

void inserirContato( Contato c ){

    //Escanear nome e guardar em c.nome

    //Inserir na lista de telefones

    //Inserir na lista de emails

 char nome[50];
 char tel[20];
 char email[50];

    printf("Insira o seu nome : ");
    gets(nome);
    inserir_na_lista(&c.nome, nome);

    printf("Insira o seu telefone : ");
    gets(tel);
    inserir_na_lista(&c.tels, tel);

    printf("Insira o seu e-mail : ");
    gets(email);
    inserir_na_lista(&c.emails , email);

}

 

Erro.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×