• 0
Sign in to follow this  
gbplayer

O que há de errado nesse código?

Question

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;
     }
         

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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;
     }

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this