Sendo fornecidos N números inteiros, onde N é informado inicialmente pelo usuário, elabore um algoritmo que armazene esses N números. Após isso, solicite ao usuário 5 números e verifique quais desses números constam dentre os N previamente armazenados. Para cada um que existir apresente a mensagem no seguinte formato: “Valor encontrado no vetor = 45!”. Caso contrário não apresente nenhuma mensagem.
Passo 1
O enunciado pede o seguinte: o usuário informa um número inteiro
. Em seguida devemos ler e armazenar
números inteiros (um vetor/array de tamanho
). Depois disso, devemos solicitar ao usuário exatamente
números (chamarei cada um de “consulta”) e, para cada consulta, verificar se esse número consta entre os
números previamente armazenados. Para cada consulta que existir no vetor devemos apresentar exatamente a mensagem no formato: “Valor encontrado no vetor = 45!” (onde
é um exemplo — na prática deve aparecer o valor da consulta que foi encontrado). Se a consulta não existir no vetor, não devemos imprimir nada para essa consulta. Informações relevantes extraídas do enunciado:
- O usuário fornece
(um inteiro). - Devemos ler e armazenar
números inteiros. - Devemos ler exatamente
números-consulta. - Para cada consulta que estiver no vetor, imprimir a mensagem com o valor encontrado; caso contrário, não imprimir nada.
Passo 2
Escolha do método (explicada de forma simples e justa): a forma mais direta e segura de fazer isso na prova é usar um vetor para armazenar os
números e, para cada uma das
consultas, percorrer o vetor comparando elemento a elemento até encontrar o valor (ou acabar o vetor). Esse procedimento chama-se busca linear. Eu escolho a busca linear porque é a técnica mais básica, é fácil de implementar sem biblioteca e cabe bem num tempo curto de prova. Não precisa de estruturas avançadas nem de ordenar os dados.
Passo 3
O que é preciso saber para implementar isso (aula curta e prática)
- Vetor/array: é uma sequência indexada de elementos. Vou usar índice começando em
para facilitar a notação em provas (pode usar em linguagens, mas aqui escrevo conceitualmente ). Cada posição guarda um inteiro. - Laço (loop): usamos um laço para preencher o vetor e outro laço para testar cada consulta.
- Comparação de inteiros: em cada posição do vetor comparamos igualdade entre o valor guardado e a consulta (operador “igual”).
- Flag e break: ao encontrar uma correspondência é comum usar uma variável booleana (chamada de flag, por exemplo
) para indicar que achamos o valor e então interromper o laço (usar “break” ou encerrar o laço) para não imprimir várias vezes quando o valor aparece mais de uma vez.
Passo 4
Explicação passo a passo da busca linear (como fazer na prova, bem mastigado)
- Ler
. - Declarar um vetor
de tamanho . - Para
variando de até : ler e armazenar. - Aqui você está preenchendo o vetor posição a posição.
- Repetir o seguinte exatamente
vezes (para cada consulta):
a) Ler a consulta (vou chamar de).
b) Inicializar uma variável booleana.
c) Paravariando de até : - Se
então: - imprimir: “Valor encontrado no vetor = q!” substituindo
pelo valor lido, - definir
, - interromper o laço (fazer break) para não procurar mais — já que só queremos imprimir uma vez por consulta.
d) Se ao terminar o laçofor falso, não faça nada (não imprimir).
- imprimir: “Valor encontrado no vetor = q!” substituindo
- Se
- Fim.
Dica prática: usar o break assim que achar evita imprimir várias vezes no caso de existir mais de uma ocorrência do mesmo valor no vetor.
Passo 5
Por que isso funciona e custo (um toque teórico prático)
- Correção: a busca linear verifica cada elemento do vetor; se algum for igual à consulta, encontramos e imprimimos conforme pedido. Se nenhum for igual, não imprimimos.
- Complexidade: cada consulta faz, no pior caso,
comparações. Como temos consultas, o pior caso é comparações, que é em notação assintótica (o fator 5 é constante). Para a prova, isso significa que para pequeno ou médio, esse método é totalmente aceitável. - Alternativas: ordenar o vetor e usar busca binária reduziria tempo para muitas consultas, mas é trabalho extra e não necessário aqui (além de ser mais sujeito a erros em prova rápida). Como são apenas
consultas, busca linear é a escolha certa.
Passo 6
Exemplo prático pequeno (para fixar)
- Suponha
. Os números lidos em ordem são: , , , , , . - Agora imaginemos as
consultas na ordem: , , , , .
Processo: - Para
: percorrendo vemos — imprimimos “Valor encontrado no vetor = 45!” e paramos a busca para essa consulta. - Para
: percorremos todo o vetor e não encontramos 3 — imprimimos nada. - Para
: encontramos em — imprimimos “Valor encontrado no vetor = 2!”. - Para
: encontramos em — imprimimos “Valor encontrado no vetor = 99!”. - Para
: novamente imprimimos “Valor encontrado no vetor = 45!” (mesmo que já tenhamos impresso antes — cada consulta é tratada separadamente).
Passo 7
Dicas finais de implementação na prova (práxis)
- Use nomes simples:
para o vetor, para tamanho, para consulta, como flag. - Ao imprimir, formate exatamente: Valor encontrado no vetor = <valor>! (lembre-se do ponto de exclamação final).
- Evite imprimir mensagens extras (prompts, textos explicativos), pois enunciado disse que somente imprimir quando encontrar; nas provas de programação isso costuma ser cobrado.
- Se implementar em linguagem que começa índices em
(ex.: C, Python), converta mentalmente o laço, mas logicamente a ideia é a mesma.
Resposta
leia
declare vetor
para até
faça
\quad leia
fim para
para até
faça
\quad leia
\quad
\quad para até
faça
\quad\quad se então
\quad\quad\quad imprima "Valor encontrado no vetor = " + + “!”
\quad\quad\quad
\quad\quad\quad pare (break) do laço interno
\quad\quad fim se
\quad fim para
\quad /* se for falso, não imprimir nada */
fim para
declare vetor
para
\quad leia
fim para
para
\quad leia
\quad
\quad para
\quad\quad se
\quad\quad\quad imprima "Valor encontrado no vetor = " +
\quad\quad\quad
\quad\quad\quad pare (break) do laço interno
\quad\quad fim se
\quad fim para
\quad /* se
fim para