| Autor |
Mensagem |
|
|
valeu pessoal pelas dicas, vou tentar fazer depois mando p/ vcs avaliarem ok?
valeuuuu
|
 |
|
|
|
seria sim..
|
 |
|
|
também tenho outro exercicio pronto , mas vou ter que fazer modificações, ve pra mim se esse tem alguma coisa haver com tabela hash?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFFER 64
/* Estrutura da lista declarada para armazenar nossos dados. */
typedef struct lista {
char *nome;
int idade;
struct lista *proximo;
} Dados;
/* Prototipo das funcoes de manuseio dos dados. */
Dados *inicia_dados(char *nome, int idade);
Dados *insere_dados(Dados *dados, char *nome, int idade);
void exibe_dados(Dados *dados);
void busca_dados(Dados *dados, char *chave);
Dados *deleta_dados(Dados *dados);
int checa_vazio(Dados *dados);
/* Prototipo das funcoes do menu.*/
void insere(void);
void exibe(void);
void busca(void);
void deleta(void);
/* Inicializa a estrutura de dados principal. */
Dados *principal = NULL;
/* Cria a nova lista apontando o proximo no para NULL. */
Dados *inicia_dados(char *nome, int idade) {
Dados *novo;
novo = (Dados *)malloc(sizeof(Dados));
novo->nome = (char *)malloc(strlen(nome)+1);
strncpy(novo->nome, nome, strlen(nome)+1);
novo->idade = idade;
novo->proximo = NULL;
return novo;
}
/* Como a lista nao esta mais vazia, apontamos o proximo no para lista anterior. */
Dados *insere_dados(Dados *dados, char *nome, int idade) {
Dados *novo;
novo = (Dados *)malloc(sizeof(Dados));
novo->nome = (char *)malloc(strlen(nome)+1);
strncpy(novo->nome, nome, strlen(nome)+1);
novo->idade = idade;
novo->proximo = dados;
return novo;
}
/* Percorre todos os campos da lista e imprime ate o ponteiro proximo chegar em NULL. */
void exibe_dados(Dados *dados) {
fprintf(stdout, "Cadastro:\n\n");
fprintf(stdout, "------------\n");
for (; dados != NULL; dados = dados->proximo) {
fprintf(stdout, "Nome: %s\n", dados->nome);
fprintf(stdout, "Idade: %d\n", dados->idade);
fprintf(stdout, "------------\n");
}
getchar();
}
/* Percorre cada ponta comparando o nome com a chave. */
void busca_dados(Dados *dados, char *chave) {
int achou = 0;
fprintf(stdout, "Cadastro:\n\n");
for (; dados != NULL; dados = dados->proximo) {
if (strcmp(chave, dados->nome) == 0) {
fprintf(stdout, "------------\n");
fprintf(stdout, "Nome: %s\n", dados->nome);
fprintf(stdout, "Idade: %d\n", dados->idade);
fprintf(stdout, "------------\n");
achou++;
}
}
if (achou == 0)
fprintf(stdout, "Nenhum resultado encontrado.\n");
else
fprintf(stdout, "Foram encontrados %d registros.\n", achou);
sleep(1);
}
/* Deleta o ultimo registro inserido. */
Dados *deleta_dados(Dados *dados) {
Dados *novo;
novo = dados->proximo;
free(dados->nome);
free(dados);
fprintf(stdout, "O ultimo registro inserido foi deletado com sucesso.\n");
sleep(1);
return novo;
}
/* Apena checa se a lista e NULL ou nao. */
int checa_vazio(Dados *dados) {
if (dados == NULL) {
fprintf(stdout, "Lista vazia!\n");
sleep(1);
return 1;
} else
return 0;
}
/* Obtem os dados necessarios para chamar as funcoes de manuseio de dados. */
void insere(void) {
char *nome;
int idade;
nome = (char *)malloc(BUFFER);
fprintf(stdout, "\n\nDigite o Nome: \n--> ");
scanf("%s", nome);
fprintf(stdout, "\n");
fprintf(stdout, "Digite a Idade: \n--> ");
scanf("%d", &idade);
fprintf(stdout, "\n");
if (principal == NULL)
principal = inicia_dados(nome, idade);
else
principal = insere_dados(principal, nome, idade);
}
void exibe(void) {
if (!checa_vazio(principal))
exibe_dados(principal);
}
void busca(void) {
char *chave;
if (!checa_vazio(principal)) {
chave = (char *)malloc(BUFFER);
fprintf(stdout, "Digite o nome para buscar: \n--> ");
scanf("%s", chave);
busca_dados(principal, chave);
}
}
void deleta(void) {
if (!checa_vazio(principal))
principal = deleta_dados(principal);
}
int main(void) {
char escolha;
do {
system("/usr/bin/clear"); /* Nao lembro de nada melhor! */
fprintf(stdout, "\n\t\tCadastro de Pessoas\n\n");
fprintf(stdout, "Escolha uma opcao: \n");
fprintf(stdout, "1 - Insere Dados\n");
fprintf(stdout, "2 - Exibe Dados\n");
fprintf(stdout, "3 - Busca Dados\n");
fprintf(stdout, "4 - Deleta Dados\n");
fprintf(stdout, "5 - Sair\n\n");
scanf("%c", &escolha);
switch(escolha) {
case '1':
insere();
break;
case '2':
exibe();
break;
case '3':
busca();
break;
case '4':
deleta();
break;
case '5':
exit(0);
break;
default:
fprintf(stderr,"Digite uma opcao valida!\n");
sleep(1);
break;
}
getchar(); /* E para impedir sujeira na entrada da escolha. Nao lembro de nada melhor tambem. */
}
while (escolha > 0); /* Loop Principal. */
return 0;
}
|
 |
|
|
ele disse que com esse código não da para colocar os dois ou seja o nome e o tel. tem que ser feito na linguagem c++. obrigada
lá vai o código.... não se assuste..
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAMTAB 37
typedef char string[30];
typedef struct{
string tab[TAMTAB];
int ocup;
}tabela;
void pausa(){
fflush(stdin);
getchar();
}
int hash(char *nom){
int soma, i;
soma = 0;
for(i = 0; i < strlen(nom); i++)
soma += (i+1)*nom[i];
soma = soma%TAMTAB;
if(soma == 0)
return 1;
return soma;
}
int hash_insere(tabela *t, char *nome, int h){
if(strcmp(t->tab[h],"\0") == 0 || strcmp(t->tab[h], "*") == 0){
strcpy(t->tab[h], nome);
t->ocup++;
printf("\n\tO nome foi inserido na posicao %d\n", h);
return 0;
}
return 1;
}
int hash_procura(tabela *t, char *nome, int h){
int i = 0;
while(strcmp(t->tab[(h*++i*i)%TAMTAB],"\0") != 0 && strcmp(t->tab[(h*i*i)%TAMTAB], nome) != 0); //Faz ateh achar um espaco vazio ou achar o nome.
if(strcmp(t->tab[(h*i*i)%TAMTAB],"\0") == 0){
return -1;//Se nao achou, devolve -1
}
else{
printf("\n\tO nome foi encontrado na posição %d\n", h*i*i%TAMTAB);
return (h*i*i)%TAMTAB; //se achou, em que posicao achou?
}
}
void hash_remover(tabela *t, char *nome){
int a;
a = hash_procura(t, nome, hash(nome));
if(a < 0)
printf("\n\tO nome %s procurado nao consta na tabela.\n", nome);
else{
strcpy(t->tab[a], "*");
t->ocup--;
printf("\n\tO nome foi removido: %s\n", nome);
}
}
void menu(){
printf("\t0. Sair do programa\n");
printf("\t1. Inserir Nomes;\n");
printf("\t2. Procurar Nomes;\n");
printf("\t3. Remover Nomes;\n");
printf("\n\nSua escolha: ");
}
void escolha(tabela *t){
string nome;
int i, h, opc;
scanf("%d", &opc);
switch(opc){
case 0:
break;
case 1:
printf("\nDigite os nomes a serem colocados na tabela.\n");
printf("Termine a sequencia com \"*\":\n");
do{
scanf("%s", nome);
if(strcmp(nome, "*") != 0){
i = 0;
h = hash(nome);
while(hash_insere(t, nome, ((++i*h*i)%TAMTAB)));
//printf("i = %d\n", i); //imprimir o numero de tentativas
}
}while(strcmp(nome, "*")); //leitura
break;
case 2:
printf("\nDigite os nomes a serem consultados.\n");
printf("Termine a sequencia com \"*\"\n");
do{
scanf("%s", nome);
if(strcmp(nome, "*") != 0){
h = hash(nome);
i = hash_procura(t, nome,h);
if(i < 0){
printf("\n\tO nome %s nao foi encontrado\n");
}
else{
printf("\n\t%s esta na tabela!\n");
}
}
}while(strcmp(nome, "*"));//procura
break;
case 3:
printf("\nDigite os nomes a serem removidos.\n");
printf("Termine a sequencia com \"*\":\n");
do{
scanf("%s", nome);
if(strcmp(nome, "*") != 0){
hash_remover(t, nome);
}
}while(strcmp(nome, "*"));//remocao
break;
default:
printf("Opcao invalida. Por favor, digite uma opcao valida.\n");
break;
}
if(opc != 0){
menu();
escolha(t);
}
}
int main(){
tabela t;
int i;
for(i = 0; i < TAMTAB; i++){
strcpy(t.tab[i],"\0");
}
t.ocup = 0;//Ateh aqui, iniciar tabela.
menu();
escolha(&t);
printf("Saindo do programa....\n");
}
|
 |
|
|
|
ele quer que inseri cada nome de uma pessoa e o tel, depois remover e procurar o tel.
|
 |
|
|
|
pelo menos como começar, pois eu tinha feito e o prof disse que não era do jeito que fiz, eu queria pelo menos o começo para eu conseguir depois desenvolver, pois estou perdida..
|
 |
|
|
olá pessol será que alguém poderá me ajudar é que tenho que fazer um trabalho que consiste de uma tabela Hash, onde cada entrada da tabela será uma lista encadeada simples. Cada nó da lista encadeada terá o nome e telefone de uma pessoa. ´
obrigada
|
 |
|
|
|
olá thingo, será que vc pode me daralguma demonstração de como devo fazer a class para inserir nome e telefone? porque não estou conseguindo fazer.. obrigada
|
 |
|
|
olá pessoal, tenho que fazer um portal de uma biblioteca em php, com buscas de livros, cadastros, listagens, se alguém tiver algum código relacionado me mande. pois já tenho um template agora tenho que implementar o banco de dados.
Obrigada
|
 |
|
|
ok, valeu pela dica..
|
 |
|
|
a ta .. valeu rafael.. [flash]
|
 |
|
|
pessoal sou nova no forum e queria saber como apago meus posts e os que recebo ?
|
 |
|
|
|
valeu thingo vou tentar fazer, no caso eu preciso fazer um hash para telefone também né.. um Abração
|
 |
|
|
valeu pessoal pelas sugestôes.. mas ainda estou pesquisando sobre o assunto dos custos..
|
 |
|
|
teria como me enviar o que vc tem? pelo menos pode me servir.
obrigada
|
 |
|
|
|
|