2017-11-08 7 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가 지적한대로 vetor은 으로 선언되고 pesquisar_bin을 호출 할 때 int을 전달하지만 구현시 vetorint[]으로 정의합니다. MCVE이 없으면이 시점에서 우리가 추측 할 수있는 최선의 방법입니다.

사용자의 pesquisar_bin 구현은 vetor 매개 변수를 무시하고 파일 범위의 vet 변수를 대신 사용합니다. 코드는 당신의 쓰레기 때문에 엉망이되어 실제로는 MCVE을 게시하지 않습니다. vetpesquisar_bin으로 전달하고 vetor 매개 변수를 사용하도록 구현을 변경하십시오.

+0

나는 고마워! 어떻게 해결할 수 있습니까? – Eddie

+0

업데이트 된 답변보기 – jwdonahue

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 이제 코드가 훌륭하게 처리됩니다. – Eddie