mast 0 Denunciar post Postado Setembro 30, 2009 Pessoal alguém pode me ajuda com a pesquisa binária o programa não executa a pesquisa. não faço e menor idéia em que errei. #include <stdio.h> #include <conio.h> #include <string.h> #include <unistd.h> #define cabecalho "---------------------------------------------------------------\nFATENE - Facudade tecnologica do ceara\n1o Analise e Desenvouvimento de Sistema\nAlunos: GILIARD & MAYARA\nProfessor: AMAURI-ADS-16\n-------------------------------------------------------\n" typedef struct { char nome[30]; char rua [50]; char bairro [30]; char cidade [30]; char sigla_estado [15]; int numero; int CEP[10]; }endereco; void inserir(void); void pesquisar(void); void todos(void); void menu(void); endereco cadastro[2]; char repeat[2]; int cont=1; void inserir(){ int i=0; do{ printf("Digite o Nome\n"); getchar(); gets(cadastro[i].nome); printf("Digite o rua\n"); getchar(); gets(cadastro[i].rua); printf("Digite o numero da casa\n"); scanf("%d",&cadastro[i].numero); printf("Digite o bairro\n"); getchar(); gets(cadastro[i].bairro); printf("Digite o cidade\n"); getchar(); gets(cadastro[i].cidade); printf("Digite o sigla_estado\n"); getchar(); gets(cadastro[i].sigla_estado); printf("Digite o CEP\n"); scanf("%d",&cadastro[i].CEP); printf("---------------------------------------------------------------\n"); printf("\nEndereço_%d",i+1); printf("\nCadastro conclu%cdo com sucesso!\n"); printf("---------------------------------------------------------------\n"); printf("\nDeseja continuar?(s ou n) \n"); getchar(); gets(repeat); cont=cont+i; i++; }while(strcmp(repeat,"s")==0 ); menu(); } void pesquisar(){ int i,j,comeco,final,meio; char aux[30]; char pesq[30]; char verdade[2]="f"; printf("\nDigite o nome a ser pesquisado\n"); getchar(); gets(pesq); // ordenação for (i = 0; i < cont - 1; i++){ for (j = i + 1; j <=cont; j++){ if ( strcmp(cadastro[i].nome,cadastro[j].nome) > 0){ strcpy(aux,cadastro[i].nome); strcpy(cadastro[i].nome,cadastro[j].nome); strcpy(cadastro[j].nome,aux); } } } //pesquisa binaria comeco=0; final=cont-1; while(comeco <= final) { meio = (comeco+final)/ 2; if(strcmp(pesq,cadastro[meio].nome)==0){ strcpy(verdade,"v"); } else { if(strcmp(pesq,cadastro[meio].nome)< 0){ final = meio -1; } else{ comeco = meio+1; } } } if(strcmp(verdade,"v")==0){ printf("---------------------------------------------------------------\n"); printf("\nEndereço_%d\n",j+1); printf("---------------------------------------------------------------\n"); printf("\nNome: %s",cadastro[ meio].nome); printf("\nrua: %s",cadastro[ meio].rua); printf("\ncasa: %d",cadastro[ meio].numero); printf("\n bairro: %s",cadastro[ meio].bairro); printf("\ncidade: %s",cadastro[ meio].cidade); printf("\nestado: %s",cadastro[ meio].sigla_estado); printf("\nCEP: %d\n",&cadastro[ meio].CEP); } printf("\nDeseja continuar? (S ou N) \n"); gets(repeat); if (strcmp(repeat,"s")==0 ); menu(); } void todos(){ int j; for(j=0;j<cont;j++) { printf("---------------------------------------------------------------\n"); printf("\nEndereço_%d\n",j+1); printf("---------------------------------------------------------------\n"); printf("\nNome: %s",cadastro[j].nome); printf("\nrua: %s",cadastro[j].rua); printf("\ncasa: %d",cadastro[j].numero); printf("\n bairro: %s",cadastro[j].bairro); printf("\ncidade: %s",cadastro[j].cidade); printf("\nestado: %s",cadastro[j].sigla_estado); printf("\nCEP: %d\n",&cadastro[j].CEP); } printf("\nDeseja continuar? (S ou N) \n"); gets(repeat); if (strcmp(repeat,"s")==0 ); menu(); } void menu(){ int x; do{ printf("---------------------------MENU---------------------------------------\n\n\n"); printf(" Agenda Eletronica\n"); printf(" Menu Principal\n\n"); printf( " |-----------------------|\n"); printf( " | 1. Inserir Contato | \n"); printf( " | 2. Listar os Contatos | \n"); printf(" | 3. Pesquisa Contato | \n"); printf( " | 4. Exlcuir Contato | \n"); printf(" | 0. Sair | \n"); printf(" |_____________________ _|\n\n"); printf( "O QUE você QUE FAZER\n\n: "); scanf("%d",&x); switch(x) { case 1: inserir(); break; case 2: todos(); break; case 3: pesquisar(); break; } }while(x!=2); getch(); } int main() { puts (cabecalho); menu(); } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Outubro 1, 2009 Supondo que você está executando num Windows, ative o depurador que deve existir no IDE. Se não tiver isso, troque de software. 1- Não use gets 2- Procure por %*c 3 - int cont = 1; (global) int i = 0 (local) i = 0 :: S[0] lido -> cont = 0 + 1 = 1 , i = 1 i = 1 :: S[1] lido -> cont = 1 + 1 = 2 , i = 2 i = 2 :: S[2] lido -> cont = 2 + 2 = 4, i = 3 i = 3 :: S[3] lido -> cont = 4 + 3 = 7, i=4 você leu 4 e tá contando 7? Compartilhar este post Link para o post Compartilhar em outros sites
mast 0 Denunciar post Postado Outubro 1, 2009 sim estou usando Windows 7 o codigo para a busca binaria esta correto? poderia me da uma dica de como excluir e atualizar; mais uma perguntinha? porque o meu cep tem um valor fixo. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Outubro 1, 2009 Corrija esses erros. Se a contagem de elementos está errada não adianta o algoritmo estar certo. Compartilhar este post Link para o post Compartilhar em outros sites
mast 0 Denunciar post Postado Outubro 1, 2009 Tai com as alterações Mais quando eu coloco %c no lugar de %s ele pula uns campos na hora de digita. o contado foi corrigido. mais ainda não fuciona. como faço para excluir, to tentando achar uma maneira e atualiza. a sim estou muito grato pela ajuda #include <stdio.h> #include <conio.h> #include <string.h> #include <unistd.h> #define cabecalho "---------------------------------------------------------------\nFATENE - Facudade tecnologica do ceara\n1o Analise e Desenvouvimento de Sistema\nAlunos: GILIARD & MAYARA\nProfessor: AMAURI-ADS-16\n-------------------------------------------------------\n" typedef struct { char nome[30]; char rua [50]; char bairro [30]; char cidade [30]; char sigla_estado [15]; char numero[10]; char CEP[12]; }endereco; //funções void inserir(void); void pesquisar(void); void todos(void); void menu(void); void remover(void); endereco cadastro[2]; char repeat[2]; int cont= 0; //inserir dados void inserir(){ int i=0; do{ printf("Digite o Nome\n"); scanf("%s",cadastro[i].nome); printf("Digite o rua\n"); scanf("%s",cadastro[i].rua); printf("Digite o numero da casa\n"); scanf("%s",cadastro[i].numero); printf("Digite o bairro\n"); scanf("%s",cadastro[i].bairro); printf("Digite o cidade\n"); scanf("%s",cadastro[i].cidade); printf("Digite o sigla_estado\n"); scanf("%s",cadastro[i].sigla_estado); printf("Digite o CEP\n"); scanf("%s",cadastro[i].CEP); printf("---------------------------------------------------------------\n"); printf("\nEndereço_%d",i+1); printf("\nCadastro conclu%cdo com sucesso!\n"); printf("---------------------------------------------------------------\n"); printf("\nDeseja continuar?(s ou n) \n"); scanf("%s",repeat); cont=cont+1; i++; }while(strcmp(repeat,"s")==0 ); menu(); } //Codigo fonte para pesquisa void pesquisar(){ int i,j,comeco,final,meio; char aux[30]; char pesq[30]; char verdade[2]="f"; printf("\nDigite o nome a ser pesquisado\n"); scanf("%s",pesq); // ordenação for (i = 0; i < cont - 1; i++){ for (j = i + 1; j <=cont; j++){ if ( strcmp(cadastro[i].nome,cadastro[j].nome) > 0){ strcpy(aux,cadastro[i].nome); strcpy(cadastro[i].nome,cadastro[j].nome); strcpy(cadastro[j].nome,aux); } } } //pesquisa binaria comeco=0; final=cont-1; while(comeco <= final) { meio = (comeco+final)/ 2; if(strcmp(pesq,cadastro[meio].nome)==0){ strcpy(verdade,"v"); } else { if(strcmp(pesq,cadastro[meio].nome)< 0){ final = meio -1; } else{ comeco = meio+1; } } } if(strcmp(verdade,"v")==0){ printf("---------------------------------------------------------------\n"); printf("\nEndereço_%d\n",j+1); printf("---------------------------------------------------------------\n"); printf("\nNome: %s",cadastro[ meio].nome); printf("\nrua: %s",cadastro[ meio].rua); printf("\ncasa: %d",cadastro[ meio].numero); printf("\n bairro: %s",cadastro[ meio].bairro); printf("\ncidade: %s",cadastro[ meio].cidade); printf("\nestado: %s",cadastro[ meio].sigla_estado); printf("\nCEP: %d\n",cadastro[ meio].CEP); } printf("\nDeseja continuar? (S ou N) \n"); scanf("%s",repeat); if (strcmp(repeat,"s")==0 ); menu(); } //mostra todos void todos(){ int j; for(j=0;j<cont;j++) { printf("---------------------------------------------------------------\n"); printf("\nEndereço_%d\n",j+1); printf("---------------------------------------------------------------\n"); printf("\nNome: %s",cadastro[j].nome); printf("\nrua: %s",cadastro[j].rua); printf("\ncasa: %d",cadastro[j].numero); printf("\n bairro: %s",cadastro[j].bairro); printf("\ncidade: %s",cadastro[j].cidade); printf("\nestado: %s",cadastro[j].sigla_estado); printf("\nCEP: %d\n",cadastro[j].CEP); } printf("\nDeseja continuar?(s ou n) \n"); scanf("%s",repeat); if (strcmp(repeat,"s")==0 ); menu(); } //remove void remover(){ int i; int posicao=(-1); char remov[30]; if(cont == 0 ) { printf("Nao existem contatos para serem removidos.\n"); menu(); } digitar_codigo: printf ("Insira o nome do contato a ser removido: "); scanf("%s",remov); for (i = 0; i < cont; i++){ if(strcmp(remov,cadastro[i].nome)==0){ posicao=i; break; } } if (posicao ==(-1)) { printf ("\aCodigo inexistente.\n"); goto digitar_codigo; printf ("\nDeseja mesmo remover o seguinte contato?\n\n %s_Nome: %s_rua: %s_bairro: %s_cidade: %s_sigla_estado: %d_numero: %d_CEP:\n\n[S]im\n[N]ao\n\n",cadastro[posicao].nome,cadastro[posicao].rua ,&cadastro[posicao].numero, cadastro[posicao].bairro,cadastro[posicao].cidade,cadastro[posicao].sigla_estado,&cadastro[posicao].CEP); } } //menu void menu(){ int x; do{ printf("---------------------------MENU---------------------------------------\n\n"); printf(" Agenda Eletronica\n\n\n"); printf(" Menu Principal\n\n\n"); printf(" |------------------------------------------|\n"); printf(" | 1. Inserir Contato | \n"); printf(" | 2. Listar os Contatos | \n"); printf(" | 3. Pesquisa Contato | \n"); printf(" | 4. Exlcuir Contato | \n"); printf(" | 0. Sair | \n"); printf(" |------------------------------------------|\n\n"); printf( "O QUE você QUE FAZER\n\n: "); scanf("%d",&x); switch(x) { case 1: inserir(); break; case 2: todos(); break; case 3: pesquisar(); break; case 4: remover(); break; } }while(x!=4); getch(); } int main() { puts (cabecalho); menu(); } Compartilhar este post Link para o post Compartilhar em outros sites