2017-11-08 1 views
1
//Ordenacao por insercao/selecao 

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <ctype.h> 


int vet[10]={8,16,34,13,19,7,45,3,12,9},a,b,aux; 

void selecao(); 
int pesquisar_bin(int,int,int,int); 

int main(){ 
    int opt=0,num,max; 
    char continuar; 

    printf("ESCOLHA O METODO DE ORDENACAO:\n\ 
    1- INSERCAO\n\ 
    2- SELECAO\n\ 
    3- SAIR\n"); 
    do{ 
     scanf("%d",&opt); 
    }while(opt!=1 && opt!=2 && opt!=3); 

    switch(opt){ 
     case 1: 
      break; 
     case 2: 
      selecao(); 
      break; 
     case 3: 
      exit(1); 
      break; 
    } 

    printf("\n\n1- PESQUISA SEQUENCIAL\n\n\ 
2- PESQUISA BINARIA\n"); 
    do{ 
     aux=0; 
     scanf("%d",&aux); 
    }while(aux!=1&&aux!=2); 

    printf("DIGITE O VALOR A SER PESQUISADO:\n"); 
    scanf("%d",&num); 

    else if(aux==2){ 
     max=sizeof(vet)/sizeof(int); 
     pesquisar_bin(vet[max],0,max,num); 
    } 
} 

//ORDENACAO POR SELECAO 

void selecao(){ 

    int i=1; 

    do{ 
     b=0; 

     for (a=0;a<9;a++){ 
      if(vet[a+1]<vet[a]){ 
       aux=vet[a]; 
       vet[a]=vet[a+1]; 
       vet[a+1]=aux; 
       b=1; 
      } 
     } 

     if(b==1){ 
      printf("Fase %d: [",i); 
      for(a=0;a<10;a++){ 
       printf("%d ",vet[a]); 
      } 
      printf("]\n\n"); 

      i++; 
     } 

    }while(b==1); 
} 


//PESQUISA BINARIA 

int pesquisar_bin(int vetor[],int ini,int fim,int numero){ 

    int pos; 

    pos=((fim-ini)/2)+ini; 

    if (ini>fim){ 
     printf("Valor %d nao encontrado no vetor\n",numero); 
     return 0; 
    } 

    if(numero>vet[pos]){ 
     return (pesquisar_bin(vet,pos+1,fim,numero)); 
    } 
    else if(numero<vet[pos]){ 
     return (pesquisar_bin(vet,ini,pos-1,numero)); 
    } 
    else if(numero==vet[pos]){ 
     printf("O valor %d se encontra na posicao %d do vetor.",numero,pos); 
     return 0; 
    } 
} 

私はCの演習を行ってきましたが、dev C++がこのエラーを返す理由を理解できません。pesquisar_binへの未定義の参照

私は既に、ポイントなどを含むリファレンスを変更するようなことを多く試してみました。

C:\Users\ANONYM~1\AppData\Local\Temp\ccguUdp9.o ordenacao.cpp:(.text+0x128): undefined reference to `pesquisar_bin(int, int, int, int)'

\Mac\Home\Desktop\EXERCICIOS ED\collect2.exe [Error] ld returned 1 exit status

+1

'int pesquisar_bin(int vetor []、int ini、int fim、int numero){'あなたが宣言した署名は実際の関数の署名と一致しません。 'vetor'は正しいタイプではありません。 – JMichelB

+0

https://stackoverflow.com/help/mcveをご覧ください。あなたが投稿したコードはコンパイルされず、リンカエラーを起こすことは少なくなります: 'else if(aux == 2)'には 'if'文がありません。 – jwdonahue

+0

私は@jwdonahueを知っています。私はここに貼り付けるプログラムの多くの部分を隠しました。唯一のエラーは私が言ったような参考です。 – Eddie

答えて

1

pesquisar_binの宣言と使用は、実装と一致しません。 @JMichelBが指摘するように、はと宣言され、pesquisar_binを呼び出すとintに渡されますが、実装ではvetorint[]と定義されています。 MCVEが存在しない場合、これは我々がこの時点で推測できる最高のものです。

pesquisar_binの実装では、vetorパラメータが無視され、ファイルスコープの変数vetが代わりに使用されています。実際にはMCVEを掲示しておらず、あなたのスラッシングのためにコードが混乱しています。 vetpesquisar_binに渡し、vetorパラメータを使用するように実装を変更します。

+0

私は、ありがとう!どうすれば解決できますか? – Eddie

+0

更新された回答を参照してください。 – jwdonahue

+0

皆さん、お返事いただきありがとうございます。私のコードはすごくうれしく思います! – Eddie

関連する問題