Jump to content
Fórum Script Brasil
  • 0

Busca em Vetor ( lógica complicada)


Mathiasi7

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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

Edited by Mathiasi7
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...