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

Busca em Vetor ( lógica complicada)


Mathiasi7

Pergunta

Pessoal, estou aprendendo a programar, mas o professor anda judiando.

Além de não explicar ele pede exercícios bem complexos, que abusam da lógica do pessoal do primeiro período.

Gostaria que me ajudassem nesse problema:

" Faça um programa em C para ler um vetor não ordenado de inteiros, com 10 elementos e, em seguida, solicitar ao usuário que digite um número inteiro. Como resultado, o programa deve escrever na tela a posição ocupada no vetor pelo elemento cujo valor seja igual ao número inteiro fornecido pelo usuário. Caso o elemento não exista, o programa escreverá uma mensagem indicando o fato. "

Ou seja, entram 10 números, digita-se outro e é pra dizer qual a posição desse número no vetor.

Eis o que tentei:

#include <iostream>
#include <stdlib.h>

using namespace std;

//tinha um programa mais fácil pra inventar não?
int main ()
{
int v [10];
int i, n,p;

cout << "Digite 10 elementos:\n" << endl;

for (i = 0; i < 10; i++)
{
cin >> v [i];
cout<<"\n";
}

cout<<"Digite um numero: ";
cin>>n;

n=v[i]; //minha inteção aqui foi de fazer "n" receber a posição correspondente no vetor
p=n; // aqui de fazer "p"(de posição) receber n para poder imprimir o p.
cout<<p;


if (n!=v[i]){
cout<<"\n O num. não faz referencia a nenhum elemento do vetor";
}
}

Vocês poderiam me ajudar com esse código?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Você precisa percorrer o vetor e comparar elemento por elemento, verificando se corresponde ao valor digitado pelo usuário. Algo assim:

bool encontrado=false;

for (i = 0; i < 10; i++)
{
    if(v[i]==n)
    {
         //Encontramos
         encontrado=true;
         break; //devemos parar o loop
    }
}

Obs.:

Faça um programa em C

Se o objetivo é fazer o programa realmente em C, o correto seria utilizar as funções de entrada e saída do próprio C (printf, scanf, etc.) ao invés da biblioteca iostream (ela pertente à biblioteca padrão do C++, não do C).

Link para o comentário
Compartilhar em outros sites

  • 0

O que o Jonathan disse é a verdade. Se tu quiseres escrever em C (e não C++), precisas utilizar as funções da biblioteca "stdio.h" (e não "iostream").

Posto dessa forma teu algoritmo ficaria + ou - assim:

#include <stdio.h>
//#include <stdlib.h>

#define MAX 10

int main () {
  
  int v[MAX], i, n;
  
  printf ("Digite %d numeros para um vetor\n", MAX);
  
  for (i = 0; i < MAX; i++) {
    
    printf ("Digite o %do numero: ", i + 1);  
    scanf ("%d", &v[i]);
  
  }
  
  printf ("\nDigite o numero a ser procurado: ");
  scanf ("%d", &n);
  
  for (i = 0; i < MAX; i++)
    if (v[i] == n) {
      
      printf ("O numero \"%d\" foi encontrado na %da posicao!\n\n", n, i + 1);
      break;
    
    }
  
  if (i == MAX)
    printf ("O numero \"%d\" não foi encontrado no vetor!\n\n", n);
  
  //system ("timeout /t 6");
  
  return 0;
}

Este mesmo estilo pode ser aplicado a diversos outros casos. Espero ter ajudado! ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Veja bem, esse código percorreu MSN alguns amigos e daí o IOSTREAM apareceu, eu tinha posto STDIO.H, estou ciente que é de C. Mas valeu o toque.

Sem usar aritmética de ponteiros eu consegui também, o problema é que é OBRIGATÓRIO o uso de ponteiro e alocação dinâmica. Só usei aquele vetor pra mandar os valores pro *cpf.

Se vocês tentarem colar o programa no devC da vida, irão perceber que ele compila, porém, na hora de executar: tela preta. Ou seja, tem algo no começo que está errado.

EDIT: notei que o programa inteiro tem coisa trocada, devo dizer de imediato que acho que foi o próprio editor do fórum que fez isso, pois em hora nenhuma eu coloquei Cin nem Cout, o código original é este:

#include<stdlib.h>

#include<stdio.h>

int main ()

{

int *aux;

int *cpf;

int i,k,soma=0,digito1=0,digito2=0;

int cpfdeclarado[11]={0,1,8,1,9,2,8,5,1,5,4};

cpf = (int*) malloc(11* sizeof(int));

aux = (int*) malloc(9* sizeof(int));

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

(*(cpf+i)) = cpfdeclarado; // *cpf recebe os 11 dígitos do cpfdeclarado;

k = 10;

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

{

*(aux+i) =*(cpf+i)*k--; //*aux recebe os valores de cpf vezes K decrementando-se.

soma = ( soma + (*(aux+i))); //variável soma vai incrementando os valores obtidos da operação acima

}

if (soma%11 < 2) //condição pro 1° digito verificador ser 0

digito1=0;

else digito1 = (11 - (soma%11)); //caso não seja < 2, é 11 - o resto

//segund digito

soma = 0;

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

*(aux+i) = *(cpf+i) * k--; //mesma coisa sendo aplicada ao segundo dígito

soma = (soma+ (*(aux+i)));

}

if(soma%11 <2)

digito2 = 0;

else digito2 = ( 11- (soma%11));

//final

if (digito1 == (*(cpf+9))) //verifica se o valor obtido no primeiro digito, bate com a 9 posição do CPF

{

if (digito2 == (*(cpf+10))) //verifica se o valor obtido do segundo dígito, bate com a décima posição do CPF

printf("\nCPF válido\n");

}

else printf("CPF invalido\n");

system("PAUSE");

return 0;

}

EDIT 2 = estou assustado! Como o código pode ter sido tão modificado?!?!?!?!

EDIT 3 = UAHUAHAUHA CONFUNDI ESSE TÓPICO COM OUTRO, ESSA DÚVIDA EU TINHA NO SEMESTRE PASSADO UAUAHA

Editado por Mathiasi7
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...