Ir ao conteúdo

Busca em array[Resolvido]


wagnermoliveira

Posts recomendados

Postado

To tentando fazer uma busca dentro de uma funçao, mas nao to sabendo como declarar as variaveis dentro da funçao. ja testei a busca, ele funciona direitim se tiver no corpo do programa, mas queria q ela funciona dentro de uma funçao. alguem tem uma dica? Ahh uso o Dev c++. Abraço

#include<conio.h>
#include<stdio.h>
#define n 10
/*** Prototipo da função***/
int buscasequencial(int v,int a[]);
/****Função Principal***/
main()
{
int a[n]={0,1,2,3,4,5,6,7,8,9};
int v;
printf("Digite o valor a ser buscado: ");
scanf("%d",&v);
printf("o valor esta na posicao: %d",buscasequencial(v,a[]));
getche();
}
/***Funçao de Busca***/
int buscasquencial(int v,int a[]){
bool achei=false;
int i=0;
while((i<n)&&(achei==false)){
if(a[i]==v){
achei=true;
}else{
i++;
}
}
if(achei==true){
return i;
}else{
return -1;
}
}

Postado

Você está tentando uma passagem por Valor de parâmetro. Sendo assim, o parâmetro a[] recebido pela função buscasequencial precisa ter o tamanho do array, assim:

int buscasquencial(int v,int a[10])

E no momento de enviar os parâmetros, na função main() você deve colocar dentro do printf o vetor sem os colchetes:

printf("o valor esta na posicao: %d",buscasequencial(v,a));

Lembre-se o nome de um vetor é um ponteiro para o primeiro elemento do array.

  • Membro VIP
Postado

Ia sugerir você fazer o bubblesort, mas acho que é bobagem.Contudo, se se interessar por esse método de pesquisa, me avise.Abraços.

Postado
  superroot disse:
Você está tentando uma passagem por Valor de parâmetro. Sendo assim, o parâmetro a[] recebido pela função buscasequencial precisa ter o tamanho do array, assim:

int buscasquencial(int v,int a[10])

E no momento de enviar os parâmetros, na função main() você deve colocar dentro do printf o vetor sem os colchetes:

printf("o valor esta na posicao: %d",buscasequencial(v,a));

Lembre-se o nome de um vetor é um ponteiro para o primeiro elemento do array.

Certo, o novo codigo ficaria assim?

#include<conio.h>
#include<stdio.h>
#define n 10
/*** Prototipo da função***/
int buscasequencial(int v,int a[10]);
/****Função Principal***/
main()
{
int a[n]={0,1,2,3,4,5,6,7,8,9};
int v;
printf("Digite o valor a ser buscado: ");
scanf("%d",&v);
printf("o valor esta na posicao: %d",buscasequencial(v,a));
getche();
}
/***Funçao de Busca***/
int buscasquencial(int v,int a[10]){
bool achei=false;
int i=0;
while((i<n)&&(achei==false)){
if(a[i]==v){
achei=true;
}else{
i++;
}
}
if(achei==true){
return i;
}else{
return -1;
}
}

desse jeito ainda não compilou aparece a mensagem: [Linker error] undefined reference to `buscasequencial(int, int*)' ld returned 1 exit status

Postado

Veja se agora funciona. Fiz algumas alterações na passagem dos parâmetros, onde TAM é o tamanho do vetor, que é recebido como parâmetro na sub-função. Fiz uma pequena alteração dentro do laço while para ficar um código mais bem elaborado.


#include<conio.h>
#include<stdio.h>
#define n 10
/*** Prototipo da função***/
int buscasequencial(int v, int a[], int TAM);
/****Função Principal***/
main()
{
int a[n]={0,1,2,3,4,5,6,7,8,9};
int v;
printf("Digite o valor a ser buscado: ");
scanf("%d",&v);
printf("o valor esta na posicao: %d",buscasequencial(v, a, n));
getche();
}
/***Funçao de Busca***/
int buscasquencial(int v, int a[], int TAM){
bool achei=false;
int i=0;
while((i<TAM)&&(achei==false)){
if(a[i]==v){
achei=true;
return i;
}else{
i++;
}
}
return -1;
}

Só uma pergunta: você está programando em C ou C++? Porque se for em C você não pode usar o tipo bool, porque ele não faz parte da linguagem C. Neste caso você pode declarar a variável achei como int e atribuir um valor qualquer à ela. Durante a procura do elemento no array você faz uma verificação se ela está no valor estabelecido para quando encontrar o elemento requerido.

  Plateu disse:
Ia sugerir você fazer o bubblesort, mas acho que é bobagem.Contudo, se se interessar por esse método de pesquisa, me avise.Abraços.

Bubblesort é um algoritmo de ordenação, não é adequado para a finalidade de busca. Até porque sua complexidade computacional é muito grande.

Postado
  superroot disse:
Veja se agora funciona. Fiz algumas alterações na passagem dos parâmetros, onde TAM é o tamanho do vetor, que é recebido como parâmetro na sub-função. Fiz uma pequena alteração dentro do laço while para ficar um código mais bem elaborado.


#include<conio.h>
#include<stdio.h>
#define n 10
/*** Prototipo da função***/
int buscasequencial(int v, int a[], int TAM);
/****Função Principal***/
main()
{
int a[n]={0,1,2,3,4,5,6,7,8,9};
int v;
printf("Digite o valor a ser buscado: ");
scanf("%d",&v);
printf("o valor esta na posicao: %d",buscasequencial(v, a, n));
getche();
}
/***Funçao de Busca***/
int buscasquencial(int v, int a[], int TAM){
bool achei=false;
int i=0;
while((i<TAM)&&(achei==false)){
if(a[i]==v){
achei=true;
return i;
}else{
i++;
}
}
return -1;
}

Só uma pergunta: você está programando em C ou C++? Porque se for em C você não pode usar o tipo bool, porque ele não faz parte da linguagem C. Neste caso você pode declarar a variável achei como int e atribuir um valor qualquer à ela. Durante a procura do elemento no array você faz uma verificação se ela está no valor estabelecido para quando encontrar o elemento requerido.

Bubblesort é um algoritmo de ordenação, não é adequado para a finalidade de busca. Até porque sua complexidade computacional é muito grande.

Cara não sei te falar se isso ta em c ou C++, rs, ate hj o professor nao explico a diferença.kkkkk:unsure:. Ainda não compilou, ta tando a mesmo mensgem.

Tive um exemplo com ponteiro, mas fico um pouco diferente do q o professor pediu,mas funciono certim. se você tiver mais alguma dica...

da uma olhada no codigo com ponteiro....

//Busca Array
#include<conio.h>
#include<stdio.h>

#define n 10
/*** Prototipo da função***/
int buscasequencial(int v,int *pt);
/****Função Principal***/
int main()
{
int a[n]={0,1,2,3,4,5,6,7,8,9};
int v;
printf("Digite o valor a ser buscado: ");
scanf("%d",&v);
printf("o valor esta na posicao: %d",buscasequencial(v,a));//enviando V, A para a função
getche();
return 0;
}
/***Funçao de Busca***/
int buscasequencial(int v,int *pt) // recebendo valores, a partir de agora o ponteiro estará apontando para A[0]
{
bool achei=false;
int i=0;
while((i<n)&&(achei==false))
{
if(*pt==v) // nesta condição você está testando SE o valor apontado pelo ponteiro é == V
achei=true;
else // Senão: pt++: o ponteiro apontará para o proximo valor armazenado na memória, no caso é o A[1] ... a variável I tem a função de Limitar o loop do While
{
pt++;
i++;
}
}
if(achei==true)
return i;
else
return -1;
}

Postado

Eu até pensei em sugerir uma implementação com ponteiros, mas não a fiz porque não sabia se você já estava bem familiarizado com ponteiros.

Parece que estás programando em C++ mesmo, porque C não aceita o tipo bool.

  • Membro VIP
Postado
  superroot disse:

Bubblesort é um algoritmo de ordenação, não é adequado para a finalidade de busca. Até porque sua complexidade computacional é muito grande.

Errei de tópico :lol:

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!