Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Shibata

sobre Pesquisa Binária

Recommended Posts

Beleza,

 

Sou novo em Programação, e sei que minha pergunta pode estar sendo ridícula, mas não consigo fazer essa programação.

 

Preciso de uma ajuda referente ao programa abaixo, ele deveria procurar um numero x digitado e verificar em que posição ele se encontra ou se não existe na lista (no caso de 1 á 11).

 

 

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

main()
{
	int i;
	int x;
	int v[10];
	int achou;
	int inicio;
	int final;
	(achou = 0);
	(inicio = 1);
	(final = 11);
	for (i=0; i<10; i++)
	{
		v[i]=(i+1);
	}
	printf ("digite um numero inteiro: ");
	scanf ("%d",&x);
	for (i=0; i<10; i++)
	do
	{
		  if(v[(inicio + final)/2 > x]);
		  {
					   final = (inicio + final)/2;
					   }
		  if(v[(inicio + final)/2 < x]);
		  {
					   inicio = (inicio + final)/2;
					   }
	}
	while (achou == 0);
	if(v[(inicio + final)/2 == x])
	{
	printf ("o valor %d esta na posicao: %d",v[i],i);
	}
	(achou = 1); 
	 
	getch();
}

 

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

num é + facil fazer assim:

int achou = -1;
for(i=0;i<10;i++) if (num_digitado == vet[i]) achou = i;
if (achou != -1) printf("Foi encontrado na posicao %d", achou);
else				 printf("Numero nao encontrado");

+ vamos considerar no código acima q ele vai pegar a ultima ocorrencia do numero..

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quit, pesquisa binária != pesquisa seqüencial.

A pesquisa binária assume o vetor ordenado e particiona o conjunto em metades p/ localizar mais rápido.

 

P/ quê tanta chave e parênteses??

 

Preste atenção porque você tem um if vazio.

 

 

int x; // NOME MUITO SIGNIFICATIVO.... NÃO COMECE PROGRAMANDO ASSIM.

 

 

#include <stdio.h>
#define MAX 10
int main() {
  int v[MAX];
  int inicio = 0;
  int final = MAX-1;
  int meio;

  for (int i=0; i<MAX; i++)
   v[i]=(i+1);

  printf ("digite um numero inteiro: ");
  int chave;
  scanf ("%d",&chave);

  while (inicio <= final) {
   meio = (inicio+final)/2;
   if(chave < v[meio])
	   final = meio-1;
   else if(chave > v[meio])
	   inicio = meio+1;
   else break;
}

if (inicio > final)
   puts("valor não encontrado.");
else
   printf ("o valor %d esta na posicao: %d",chave,meio);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Pessoal!!!

 

 

Vou tentar implementar...

 

Pelo que estou vendo parace ser bem mais fácil do que como eu tentei fazer, mas nem percebi onde eu errei... acho que compliquei demais... rsrsrsrs

 

Quit o de cima alí é Pesq. Sequencial né?

 

Mas valeu pela força Galera.

 

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.