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

Não Imprime Na Tela


mestre fyoda

Pergunta

alguém poderia me apontar o erro , não estou identificando .


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

	int ordenacao ( int v[] , int n )
	{

  int i,k,aux;

      for( i=1; i<n; i++)
  	{

    for( k=0; k<n; k++)
    {

    	if(v[k] > v[k+1])
    	{

         aux = v[k];
        v[k] = v[k+1];
      v[k+1] = aux;

    	}

    }

  	} return(-1);

	}


	int busca_binaria( int v[] , int n , int x)
	{

  int meio,inic,fim;

  inic = 0;
   fim = n-1;

    while( inic <= fim )
  	{

    meio = (inic + fim)/2;

    	if( x == v[meio] )
    	{

      return meio;

    	}

      else
      {

      	if( x > v[meio])
        inic = meio + 1;


        else
        	fim = meio -1;

      }

  	} return(-1);
	}



	int main()
	{

  int v[100];
  int i,n,x,z,y,w;

  printf("Digite o n :");
  scanf("%d",&n);

  	for( i=0; i<n; i++)
  	{

    printf("Digite os numeros :");
    scanf("%d",&v[i]);

  	}

    printf("Digite o numero a ser pesquisado :");
    scanf("%d",&x);

	z = ordenacao( v , n);
	y = busca_binaria( v , n , x );

	printf("O vetor ordenado e : %d ",y);
	printf("O vetor pesquisado esta na posicao  %d",y);


	getch();

	}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olá.

Modifiquei seu programa, deixando-o assim:

#include <stdio.h>

#include <conio.h>

void ordenacao ( int v[] , int n )

{

  int i, k, aux;

  for( i = 1; i < n; i++) {

      for( k = 0; k < n; k++) {

        if( v[ k ] > v[ k+1 ] ) {

            aux = v[ k ];

            v[ k ] = v[ k+1 ];

            v[ k+1 ] = aux;

        }

      }

  }

}

int busca_binaria( int v[], int n, int x )

{

  int meio, inic, fim;

  inic = 0;

  fim = n - 1;

  while( inic <= fim ) {

      meio = ( inic + fim ) / 2;

      if( x == v[ meio ] )

          return meio;

      else {

          if( x > v[ meio ])

            inic = meio + 1;

          else

            fim = meio - 1;

      }

  }

}

int main()

{

  int v[ 100 ];

  int i, n, x, y, w;

  printf( "Digite o n :" );

  scanf( "%d", &n );

  for( i = 0; i < n; i++) {

      printf( "Digite os numeros :" );

      scanf( "%d", &v );

  }

  printf( "Digite o numero a ser pesquisado :" );

  scanf( "%d", &x );

  ordenacao( v , n );

  y = busca_binaria( v , n , x );

  for ( i = 0; i < n; i++ )

      printf("O vetor ordenado e : %d ", v[ i ] );

  printf("O vetor pesquisado esta na posicao  %d", y);

  getch();

}

Na função "ordenacao()" mudei o tipo de retorno para void, já que ela não precisa retornar um valor, e tirei o comando "return -1" das duas primeiras funções (tirei de "busca_binaria()" também porque ela já retorna o valor da variável "meio").

Em "main()" adicionei uma rotina para imprimir na tela o array e excluí a variável "z", pois a ela seria atribuído o valor retornado pela função "ordenacao()", só que essa função não retorna mais nenhum valor.

Até mais! biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

ei wicker man , ta dando uns erros estranhos :

ele da um avizo : warning : linha 46 missing return value

Dando um exemplo :

digito n = 3

v[0] = 1

v[1] = 5

v[2] = 3

quando ele vai imprimir ordenado , ele imprime assim :

1

-370086

3

e outro erro é na busca binaria , ele sempre diz que o numero procurado esta na posição 2 .

me ajude cara .

Link para o comentário
Compartilhar em outros sites

  • 0

Aí, não reparei isso na hora que eu tava corrigindo da primeira vez. No loop interno da permuta (na função "ordenacao()") teríamos que fazer:

...

for( k = 0; k < n - 1; k++) {

...

Pois da forma que fizemos excederíamos os limites do array. Dessa forma, a função ficaria assim:

void ordenacao ( int v[] , int n )

{

  int i, k, aux;

  for( i = 1; i < n; i++) {

      for( k = 0; k < n - 1; k++) {

        if( v[ k ] > v[ k+1 ] ) {

            aux = v[ k ];

            v[ k ] = v[ k+1 ];

            v[ k+1 ] = aux;

        }

      }

  }

}

E quanto à função "busca_binaria()" não consigo ver o que está errado. Então desenvolvi uma função recursiva pra ver no que é que dá...

int busca_binaria( int v[], int inic, int fim, int x )

{

  int meio;

  meio = ( inic + fim ) / 2;

  if( x == v[ meio ] )

      return meio;

  else if( x < v[ meio ])

      return busca_binaria( v, inic, meio - 1, x );

  else

      return busca_binaria( v, meio + 1, fim, x );

 

  return -1;

}

Pode-se ver que cresceu o número de argumentos da função. Pra chamá-la em "main()" terá que fazer:

busca_binaria( v, 0, n - 1, x );

Eu testei aqui mas não pegou... sad.gif

Já faz algumas eras que não estudo busca binária...

Até mais e desculpe se não pude ajudar.

Link para o comentário
Compartilhar em outros sites

  • 0

Ai gente eu corrigi um pedaço do codigo , Valeu pela ajuda Wicker Man , voce me ajudou em 70% .

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


void ordenacao ( int v[] , int n )
{

  int i, k, aux;

  for( i = 1; i < n; i++) {

      for( k = 0; k < n - 1; k++) {

        if( v[ k ] > v[ k+1 ] ) {

            aux = v[ k ];
            v[ k ] = v[ k+1 ];
            v[ k+1 ] = aux;

        }
      }
  }
}



int busca_binaria( int v[] , int n , int x)
{

 int meio,inic,fim;

 inic = 0;
  fim = n-1;

   while( inic <= fim )
  {

   meio = (inic + fim)/2;

    if( x == v[meio] )
    {

     return meio;

    }

     else
     {

      if( x > v[meio])
       inic = meio + 1;


       else
        fim = meio -1;

     }

  } return(-1);
}



int main()
{
  int v[ 100 ];
  int i, n, x, y, w;

  printf( "Digite o n :" );
  scanf( "%d", &n );

  for( i = 0; i < n; i++) {

      printf( "Digite os numeros :" );
      scanf( "%d", &v[i] );

  }

  printf( "Digite o numero a ser pesquisado :" );
  scanf( "%d", &x );

  ordenacao( v , n );
  y = busca_binaria( v , n , x );

  for ( i = 0; i < n; i++ )
  {
    printf("\n\nO vetor ordenado e : %d ", v[ i ] );
  }



  printf("\n\n\nO vetor pesquisado esta na posicao  %d", y);

  getch();
}

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...