Last active
October 3, 2016 18:58
-
-
Save jeffersonrnb/662bfff8229a639b3a0479e8849ea8f6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <stdbool.h> | |
#define TamMAX 11 | |
typedef struct Cadastro{ | |
char nome[21]; | |
int idade; | |
char endereco[21]; | |
struct Cadastro *prox; | |
}Cadastro; | |
Cadastro* vetor[TamMAX]; | |
int posicaoNome (char* nome); | |
Cadastro* criarCadastro (char* nome, int idade, char* endereco); | |
void imprimir (Cadastro **vetor, int pos); | |
void inicializar (Cadastro **vetor); | |
void inserir (Cadastro **vetor, char* nome, int idade, char* endereco); | |
void limpar (Cadastro **vetor); | |
void remover (Cadastro **vetor, char* nome); | |
void apagar (Cadastro *elo); | |
int compararNomes (Cadastro *inferior, char* meio, Cadastro *superior); | |
void consultanome(Cadastro **vetor, char* nome); | |
int posicaoNome (char* nome){ | |
int i; | |
int valor = 0; | |
for (i = 0; i < strlen(nome); i++){ | |
if(nome[i] == ' ') | |
valor += 27; | |
else | |
valor += nome[i] - 96; | |
} | |
return valor % TamMAX; | |
} | |
void inicializar (Cadastro **vetor){ | |
int i; | |
for (i = 0; i < TamMAX; i++){ | |
vetor[i] = NULL; | |
} | |
} | |
Cadastro* criarCadastro (char* nome, int idade, char* endereco){ | |
Cadastro *novoelo = (Cadastro*)malloc(sizeof(Cadastro)); | |
if (novoelo){ | |
//cout << "\n" << "aqui" << "\n" << nome << endl; | |
strcpy(novoelo->nome,nome); | |
strcpy(novoelo->endereco,endereco); | |
novoelo->idade = idade; | |
novoelo->prox=NULL; | |
} | |
return novoelo; | |
} | |
void inserir (Cadastro** vetor, char* nome, int idade, char* endereco){ | |
int posicao = posicaoNome(nome); | |
//cout << "hit"<< endl; | |
Cadastro* novoelo = (Cadastro*)malloc(sizeof(Cadastro)); | |
if (novoelo){ | |
strcpy(novoelo->nome,nome); | |
strcpy(novoelo->endereco,endereco); | |
novoelo->idade = idade; | |
novoelo->prox = NULL; | |
if (!vetor[posicao]){ | |
vetor[posicao] = novoelo; | |
}else{ | |
Cadastro *primeiro = vetor[posicao]; | |
Cadastro *segundo = primeiro->prox; | |
Cadastro *novoelo = NULL; | |
bool busca = true; | |
while (busca){ | |
switch (compararNomes(primeiro, nome, segundo)){ | |
/* Nome já existe */ | |
case -3: | |
//cout << "\nnome '" << nome << "' já existe" << endl; | |
return; | |
/* Nome já existe */ | |
case -2: | |
//cout << "\nnome '" << nome << "' já existe" << endl; | |
return; | |
/* Está antes da primeira, só acontece no início */ | |
case -1: | |
novoelo = criarCadastro (nome, idade, endereco); | |
novoelo->prox = primeiro; | |
vetor[posicao] = novoelo; | |
busca = false; | |
break; | |
/* Entre os dois */ | |
case 1: | |
novoelo = criarCadastro (nome, idade, endereco); | |
novoelo->prox = segundo; | |
primeiro->prox = novoelo; | |
busca = false; | |
break; | |
default: | |
primeiro = segundo; | |
segundo = primeiro->prox; | |
break; | |
} | |
} | |
} | |
} | |
return; | |
} | |
void remover (Cadastro **vetor, char* nome){ | |
int posicao = posicaoNome(nome); | |
if (!vetor[posicao]){ | |
//cout << "Nao ha '" << nome << "' no registro" << endl; | |
}else{ | |
Cadastro *primeiro = vetor[posicao]; | |
Cadastro *segundo = primeiro->prox; | |
Cadastro *apagar = NULL; | |
bool busca = true; | |
while (busca){ | |
switch (compararNomes(primeiro, nome, segundo)){ | |
/* Nome já existe */ | |
case -3: | |
apagar = primeiro; | |
//cout << "A apagar '" << apagar->nome << "' do registro" << endl; | |
vetor[posicao] = apagar->prox; | |
free (apagar); | |
busca = false; | |
break; | |
/* Nome já existe */ | |
case -2: | |
apagar = segundo; | |
//cout << "A apagar '" << apagar->nome << "' do registro" << endl; | |
primeiro->prox = apagar->prox; | |
free (apagar); | |
busca = false; | |
break; | |
default: | |
primeiro = segundo; | |
segundo = primeiro->prox; | |
break; | |
} | |
} | |
} | |
return; | |
} | |
void limpar (Cadastro **vetor){ | |
Cadastro *elo; | |
int i; | |
for (i = 0; i < TamMAX; i++){ | |
elo = vetor[i]; | |
apagar (elo); | |
vetor[i] = NULL; | |
} | |
} | |
void apagar (Cadastro *elo){ | |
if (elo){ | |
if (elo->prox) | |
apagar(elo->prox); | |
free (elo); | |
} | |
} | |
void imprimir (Cadastro **vetor, int pos){ | |
Cadastro *elo; | |
for(elo = vetor[pos];elo; elo = elo->prox) | |
printf("%s\n", elo->nome); | |
/* | |
elo = vetor[pos]; | |
if (elo != NULL){ | |
//cout << "Posicao: "<< pos << endl; | |
//cout << endl; | |
while (elo != NULL){ | |
//cout << "Nome: " << elo->nome << endl; | |
//cout << "idade: " << elo->idade << endl; | |
//cout << "endereco: " << elo->endereco << endl; | |
//cout << endl; | |
elo = elo->prox; | |
} | |
}else{ | |
} | |
*/ | |
} | |
int compararNomes (Cadastro *inferior, char* meio, Cadastro *superior){ | |
char* inf = inferior->nome; | |
char* sup = ""; | |
if (superior) | |
sup = superior->nome; | |
/* | |
printf("\ninferior => %s\n", inf.c_str()); | |
printf("meio => %s\n", meio.c_str()); | |
printf("superior => %s\n", sup.c_str()); | |
//*/ | |
if (inf == meio) | |
return -3; | |
if (meio == sup) | |
return -2; | |
if (inf > meio) | |
return -1; | |
if ((inf < meio) && (meio < sup)) | |
return 1; | |
return 0; | |
} | |
void consultanome(Cadastro **vetor, char* nome){ | |
int posicao = posicaoNome(nome); | |
if (!vetor[posicao]){ | |
}else{ | |
Cadastro *primeiro = vetor[posicao]; | |
Cadastro *segundo = primeiro->prox; | |
Cadastro *achou = NULL; | |
bool busca = true; | |
while (busca){ | |
switch (compararNomes(primeiro, nome, segundo)){ | |
/* Nome já existe */ | |
case -3: | |
achou = primeiro; | |
//cout << "Posicao: " << posicao << endl; | |
//cout << "Nome: " << achou->nome << endl; | |
//cout << "Idade: " << achou->idade << endl; | |
//cout << "Endereco: " << achou->endereco << endl; | |
busca = false; | |
break; | |
/* Nome já existe */ | |
case -2: | |
achou = segundo; | |
//cout << "Posicao: " << posicao << endl; | |
//cout << "Nome: " << achou->nome << endl; | |
//cout << "Idade: " << achou->idade << endl; | |
//cout << "Endereco: " << achou->endereco << endl; | |
busca = false; | |
break; | |
default: | |
primeiro = segundo; | |
segundo = primeiro->prox; | |
break; | |
} | |
} | |
} | |
return; | |
} | |
int main (void){ | |
char escolha; | |
int qts_vezes; | |
int i, pos; | |
char nome[21], endereco[21]; | |
int idade; | |
Cadastro *vetor[TamMAX]; | |
inicializar (vetor); | |
do{ | |
//cout << "Escolha uma opcao: " << endl; | |
//cin >> escolha; | |
scanf(" %c", &escolha); | |
if (escolha == 'i'){ | |
//cin >> qts_vezes; | |
scanf(" %d", &qts_vezes); | |
for (i = 0; i < qts_vezes; i++){ | |
scanf(" %[^\n]s", nome); | |
scanf(" %d", &idade); | |
scanf(" %[^\n]s", endereco); | |
//cout << "Nome: " << nome << "\n" << endl; | |
//cout << "Idade: " << idade << "\n" << endl; | |
//cout << "Endereco: " << endereco << "\n" << endl; | |
inserir(vetor, nome, idade, endereco); | |
} | |
} | |
if (escolha == 'r'){ | |
scanf(" %[^\n]s", nome); | |
remover(vetor, nome); | |
} | |
if (escolha == 'c'){ | |
scanf(" %[^\n]s", nome); | |
consultanome(vetor, nome); | |
} | |
if (escolha == 'l'){ | |
scanf(" %d", &pos); | |
imprimir(vetor, pos); | |
} | |
}while (escolha != 'e'); | |
return 0; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <cstdlib> | |
#include <string.h> | |
#include <malloc.h> | |
#define TamMAX 11 | |
using namespace std; | |
typedef struct Cadastro{ | |
string nome; | |
int idade; | |
string endereco; | |
struct Cadastro *prox; | |
}Cadastro; | |
Cadastro* vetor[TamMAX]; | |
int posicaoNome (string nome); | |
Cadastro* criarCadastro (string nome, int idade, string endereco); | |
void imprimir (Cadastro **vetor, int pos); | |
void inicializar (Cadastro **vetor); | |
void inserir (Cadastro **vetor, string nome, int idade, string endereco); | |
void limpar (Cadastro **vetor); | |
void remover (Cadastro **vetor, string nome); | |
void apagar (Cadastro *elo); | |
int compararNomes (Cadastro *inferior, string meio, Cadastro *superior); | |
void consultanome(Cadastro **vetor, string nome); | |
int posicaoNome (string nome){ | |
int i; | |
int valor = 0; | |
for (i = 0; i < nome.size(); i++){ | |
valor += nome[i] - 96; | |
} | |
return valor % TamMAX; | |
} | |
void inicializar (Cadastro **vetor){ | |
for (int i = 0; i < TamMAX; i++){ | |
vetor[i] = NULL; | |
} | |
} | |
Cadastro* criarCadastro (string nome, int idade, string endereco){ | |
Cadastro *novoelo = (Cadastro*)malloc(sizeof(Cadastro)); | |
if (novoelo){ | |
cout << "\n" << "aqui" << "\n" << nome << endl; | |
novoelo->nome = nome; | |
novoelo->endereco = endereco; | |
novoelo->idade = idade; | |
novoelo->prox=NULL; | |
} | |
return novoelo; | |
} | |
void inserir (Cadastro** vetor, string nome, int idade, string endereco){ | |
int posicao = posicaoNome(nome); | |
//cout << "hit"<< endl; | |
if (!vetor[posicao]){ | |
Cadastro* novoelo = (Cadastro*)malloc(sizeof(Cadastro)); | |
if (novoelo){ | |
novoelo->nome = nome; | |
//cout << "here" << endl; | |
} | |
}else{ | |
Cadastro *primeiro = vetor[posicao]; | |
Cadastro *segundo = primeiro->prox; | |
Cadastro *novoelo = NULL; | |
bool busca = true; | |
while (busca){ | |
switch (compararNomes(primeiro, nome, segundo)){ | |
/* Nome já existe */ | |
case -3: | |
//cout << "\nnome '" << nome << "' já existe" << endl; | |
return; | |
/* Nome já existe */ | |
case -2: | |
//cout << "\nnome '" << nome << "' já existe" << endl; | |
return; | |
/* Está antes da primeira, só acontece no início */ | |
case -1: | |
novoelo = criarCadastro (nome, idade, endereco); | |
novoelo->prox = primeiro; | |
vetor[posicao] = novoelo; | |
busca = false; | |
break; | |
/* Entre os dois */ | |
case 1: | |
novoelo = criarCadastro (nome, idade, endereco); | |
novoelo->prox = segundo; | |
primeiro->prox = novoelo; | |
busca = false; | |
break; | |
default: | |
primeiro = segundo; | |
segundo = primeiro->prox; | |
break; | |
} | |
} | |
} | |
return; | |
} | |
void remover (Cadastro **vetor, string nome){ | |
int posicao = posicaoNome(nome); | |
if (!vetor[posicao]){ | |
cout << "Nao ha '" << nome << "' no registro" << endl; | |
}else{ | |
Cadastro *primeiro = vetor[posicao]; | |
Cadastro *segundo = primeiro->prox; | |
Cadastro *apagar = NULL; | |
bool busca = true; | |
while (busca){ | |
switch (compararNomes(primeiro, nome, segundo)){ | |
/* Nome já existe */ | |
case -3: | |
apagar = primeiro; | |
cout << "A apagar '" << apagar->nome << "' do registro" << endl; | |
vetor[posicao] = apagar->prox; | |
free (apagar); | |
busca = false; | |
break; | |
/* Nome já existe */ | |
case -2: | |
apagar = segundo; | |
cout << "A apagar '" << apagar->nome << "' do registro" << endl; | |
primeiro->prox = apagar->prox; | |
free (apagar); | |
busca = false; | |
break; | |
default: | |
primeiro = segundo; | |
segundo = primeiro->prox; | |
break; | |
} | |
} | |
} | |
return; | |
} | |
void limpar (Cadastro **vetor){ | |
Cadastro *elo; | |
for (int i = 0; i < TamMAX; i++){ | |
elo = vetor[i]; | |
apagar (elo); | |
vetor[i] = NULL; | |
} | |
} | |
void apagar (Cadastro *elo){ | |
if (elo){ | |
if (elo->prox) | |
apagar(elo->prox); | |
free (elo); | |
} | |
} | |
void imprimir (Cadastro **vetor, int pos){ | |
Cadastro *elo; | |
elo = vetor[pos]; | |
if (elo != NULL){ | |
cout << "Posicao: "<< pos << endl; | |
cout << endl; | |
while (elo != NULL){ | |
cout << "Nome: " << elo->nome << endl; | |
cout << "idade: " << elo->idade << endl; | |
cout << "endereco: " << elo->endereco << endl; | |
cout << endl; | |
elo = elo->prox; | |
} | |
}else{ | |
} | |
} | |
int compararNomes (Cadastro *inferior, string meio, Cadastro *superior){ | |
string inf = inferior->nome; | |
string sup = ""; | |
if (superior) | |
sup = superior->nome; | |
/* | |
printf("\ninferior => %s\n", inf.c_str()); | |
printf("meio => %s\n", meio.c_str()); | |
printf("superior => %s\n", sup.c_str()); | |
//*/ | |
if (inf == meio) | |
return -3; | |
if (meio == sup) | |
return -2; | |
if (inf > meio) | |
return -1; | |
if ((inf < meio) && (meio < sup)) | |
return 1; | |
return 0; | |
} | |
void consultanome(Cadastro **vetor, string nome){ | |
int posicao = posicaoNome(nome); | |
if (!vetor[posicao]){ | |
}else{ | |
Cadastro *primeiro = vetor[posicao]; | |
Cadastro *segundo = primeiro->prox; | |
Cadastro *achou = NULL; | |
bool busca = true; | |
while (busca){ | |
switch (compararNomes(primeiro, nome, segundo)){ | |
/* Nome já existe */ | |
case -3: | |
achou = primeiro; | |
cout << "Posicao: " << posicao << endl; | |
cout << "Nome: " << achou->nome << endl; | |
cout << "Idade: " << achou->idade << endl; | |
cout << "Endereco: " << achou->endereco << endl; | |
busca = false; | |
break; | |
/* Nome já existe */ | |
case -2: | |
achou = segundo; | |
cout << "Posicao: " << posicao << endl; | |
cout << "Nome: " << achou->nome << endl; | |
cout << "Idade: " << achou->idade << endl; | |
cout << "Endereco: " << achou->endereco << endl; | |
busca = false; | |
break; | |
default: | |
primeiro = segundo; | |
segundo = primeiro->prox; | |
break; | |
} | |
} | |
} | |
return; | |
} | |
int main (void){ | |
char escolha; | |
int qts_vezes; | |
int i, pos; | |
string nome, endereco; | |
int idade; | |
Cadastro *vetor[TamMAX]; | |
inicializar (vetor); | |
do{ | |
//cout << "Escolha uma opcao: " << endl; | |
cin >> escolha; | |
if (escolha == 'i'){ | |
cin >> qts_vezes; | |
for (i = 0; i < qts_vezes; i++){ | |
cin >> nome; | |
//cout << "Nome: " << nome << "\n" << endl; | |
cin >> idade; | |
//cout << "Idade: " << idade << "\n" << endl; | |
cin >> endereco; | |
//cout << "Endereco: " << endereco << "\n" << endl; | |
inserir(vetor, nome, idade, endereco); | |
} | |
} | |
if (escolha == 'r'){ | |
cin >> nome; | |
remover(vetor, nome); | |
} | |
if (escolha == 'c'){ | |
cin >> nome; | |
consultanome(vetor, nome); | |
} | |
if (escolha == 'l'){ | |
cin >> pos; | |
imprimir(vetor, pos); | |
} | |
}while (escolha != 'e'); | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment