Ir para conteúdo
Fórum Script Brasil
  • 0

O que há de errado nesse código?


gbplayer

Pergunta

Fiz este programa, que executa normalmente até a opção de pesquisa de array, quando ele trava. O que há de errado?


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define TAM 100

void lerArray(int[],int);
void ordenaArray(int[],int);
int pesquisaArray(int[],int,int);

    int a[TAM];
main()
{
      int fim=0,opcao,tam,elemento,pesquisa,pos;
      int chave1=0;
      while(!fim)
      {
      system("cls");
      printf("Programa de pesquisa binaria em arrays\n"
             "Escolha uma opcao:\n\n"
             "1. Ler array\n"
             "2. Pesquisar elemento no array\n"
             "3. Sair\n");
             
      scanf("%d",&opcao);
      
         switch(opcao)
         {
                   case 1:
                        {
                           printf("Qual o tamanho do array?\n");
                           scanf("%d",&tam);
                           while(tam<1||tam>TAM)
                           {
                            system("cls");
                            printf("O array deve ter entre um e %d elementos.\n"
                                   "Quantos elementos havera no array?\n",TAM);
                            scanf("%d",&tam);
                           }
                           int a[tam];
                           lerArray(a,tam);
                           ordenaArray(a,tam);
                           chave1=1;
                        }
                        break;
                   
                   case 2:
                        {     if(chave1==1)
                              {
                              printf("Que elemento sera pesquisado?\n");
                              scanf("%d",&elemento);
                              pesquisa = pesquisaArray(a,pos,elemento);
                              
                              if(pesquisa==0)
                              printf("O elemento %d foi encontrado na posicao %d.\n",elemento,pos);
                              
                              if(pesquisa==1)
                              printf("O elemento não foi encontrado!\n");
                              }
                              
                              else
                              printf("Leia um array antes!\n");    
                        }
                        break;
                   
                   case 3:
                        fim=1;
                        break;
                        
                   default:
                           printf("Digite 1, 2 ou 3!\n");
                           break;
         }
      getch();
      }  
      }
      
      void lerArray(int a[], int tam)
      {      int i;
            printf("Digite os termos, separados por enter ou espaco:\n ");  /*Impressão do pedido de entrada pelo teclado*/
            for(i=0;i<tam;i++)                  /* lerArray usa um for para receber pelo teclado os valores do array, de entrada[0]*/
                    scanf("%d",&a);    /*até entrada[tam]*/
      }
      
      void ordenaArray(int a[],int tam)
     {    
          int passo,aux,cont;
          
          for (passo=1;passo<tam;passo++)
          {
              for(cont=0;cont<tam-passo;cont++)
              {
                if(a[cont]>a[cont+1])
                {
                aux=a[cont];
                a[cont]=a[cont+1];
                a[cont+1]=aux;
                }
          }
          }
          }
          
     int pesquisaArray(int a[],int pos,int elemento)
     {   int tam;
         int inf=0,sup=tam-1,meio;
         
         meio=(inf+sup)/2;
         
         if(a[meio]==elemento)
         {
               pos=meio;
               return 0;
         }
         
         else if(a[meio]<elemento)
           return pesquisaArray(a,meio+1,elemento);
           
         else
           return pesquisaArray(a,meio-1,elemento);
           
         return 1;
     }
         

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

O primeiro erro é você fazer duas declarações para seu array a[], uma global lá em cima da main e outra local no case 1.

se você for usar a global não precisa passar por parâmetro as funções, pois o array será conhecido por todo seu código, o que não é bom e não recomendado.

dá uma olhada :

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define TAM 100

void lerArray(int);
void ordenaArray(int);
int pesquisaArray(int,int);

    int a[TAM];
main()
{
      int fim=0,opcao,tam,elemento,pesquisa,pos;
      int chave1=0;
      while(!fim)
      {
      system("cls");
      printf("Programa de pesquisa binaria em arrays\n"
             "Escolha uma opcao:\n\n"
             "1. Ler array\n"
             "2. Pesquisar elemento no array\n"
             "3. Sair\n");
             
      scanf("%d",&opcao);
      
         switch(opcao)
         {
                   case 1:
                        {
                           printf("Qual o tamanho do array?\n");
                           scanf("%d",&tam);
                           while(tam<1||tam>TAM)
                           {
                            system("cls");
                            printf("O array deve ter entre um e %d elementos.\n"
                                   "Quantos elementos havera no array?\n",TAM);
                            scanf("%d",&tam);
                           }
                           
                           lerArray(tam);
                           ordenaArray(tam);
                           chave1=1;
                        }
                        break;
                   
                   case 2:
                        {     if(chave1==1)
                              {
                              printf("Que elemento sera pesquisado?\n");
                              scanf("%d",&elemento);
                              pesquisa = pesquisaArray(tam,elemento);
                              }
                              else
                              printf("Leia um array antes!\n");
                              
                              
                              
                              if(pesquisa==0){
                              printf("O elemento %d foi encontrado na posicao %d.\n",elemento);
                              }                              
                              else
                              printf("O elemento não foi encontrado!\n");
                              
                              
                                  
                        }
                        break;
                   
                   case 3:
                        fim=1;
                        break;
                        
                   default:
                           printf("Digite 1, 2 ou 3!\n");
                           break;
         }
      getch();
      }  
      }
      
      void lerArray(int tam)
      {      int i;
            printf("Digite os termos, separados por enter ou espaco:\n ");  /*Impressão do pedido de entrada pelo teclado*/
            for(i=0;i<tam;i++)                  /* lerArray usa um for para receber pelo teclado os valores do array, de entrada[0]*/
                    scanf("%d",&a[i]);    /*até entrada[tam]*/
      }
      
      void ordenaArray(int tam)
     {    
          int passo,aux,cont;
          
          for (passo=1;passo<tam;passo++)
          {
              for(cont=0;cont<tam-passo;cont++)
              {
                if(a[cont]>a[cont+1])
                {
                aux=a[cont];
                a[cont]=a[cont+1];
                a[cont+1]=aux;
                }
          }
          }
          }
          
     int pesquisaArray(int tam,int elemento)
     {   
         int inf=0,sup=tam-1,meio = 0;
         
                 
         for(int i = 0;i< tam;i++){printf("%d\n",a[i]);}
         
         
         while(inf <= sup ){
         meio = inf + (sup-inf)/2;
         
         if(a[meio]==elemento)
         {
               return 0;
         }         
         else if(a[meio]<elemento)
           sup = meio-1;
           
         else
           inf = meio +1;
           }  
         return 1;
     }

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...