Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mast

busca binaria erro

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.