Objetivo: varrer vetor e aplicar decisões com if.
Descrição: leia 8 inteiros. Encontre maior e menor valor e índices em que aparecem (primeira ocorrência).
Critérios:
  • Inicializar com v[0].
  • Um for para busca; atualizar posição com if.
Extensão: também exibir a última ocorrência de cada um.

Passo 1

O que o enunciado pede e quais informações ele dá:
  • Ler 8 inteiros (ou seja, um vetor com exatamente 8 elementos).
  • Encontrar o maior valor e o menor valor presentes no vetor.
  • Encontrar os índices (posições) das primeiras ocorrências do maior e do menor.
  • Extensão: também exibir as últimas ocorrências do maior e do menor.
  • Critério obrigatório: inicializar as variáveis de máximo e mínimo com o valor de \,v[0]\,.
  • Critério obrigatório: usar um único laço \text{for} para fazer a busca e usar decisões com \text{if} para atualizar valores/índices.
    Informações resumidas que recebemos: tamanho fixo 8; inicializar com \,v[0]\,; procurar primeiro/último usando condições com \text{if}.

Passo 2

Conceito básico e por que inicializar com \,v[0]:
  • Quando vamos varrer um vetor e queremos comparar com “o que já vimos”, precisamos de um valor inicial. Se usamos \,v[0] como inicial, garantimos que existe algum valor real do vetor para comparar (evitamos usar valores mágicos como +\infty ou -\infty que podem confundir).
  • Variáveis que vamos manter durante a varredura (cada uma explicada):
    • \,v: o vetor de 8 inteiros lidos.
    • \,maxVal: o maior valor encontrado até agora.
    • \,minVal: o menor valor encontrado até agora.
    • \,idxFirstMax: índice da primeira ocorrência do maior (se atualizo só quando encontro valor estritamente maior, a primeira ocorrência fica).
    • \,idxFirstMin: índice da primeira ocorrência do menor.
    • \,idxLastMax: índice da última ocorrência do maior (se atualizo também quando encontro valor igual, o índice vai se mover para a última ocorrência).
    • \,idxLastMin: índice da última ocorrência do menor.
  • Índices: aqui vou usar índice começando em 0 (ou seja, \,v[0] é o primeiro elemento e \,v[7] é o oitavo). Se você for forçado a entregar índices começando em 1 na prova, basta somar 1 ao índice final antes de imprimir.

Passo 3

Estratégia de atualização no laço \text{for}:
  • Inicialização (antes do laço):
    • Ler os 8 valores em \,v[0] até \,v[7].
    • Fazer \,maxVal \leftarrow v[0] e \,minVal \leftarrow v[0].
    • Fazer \,idxFirstMax \leftarrow 0, \,idxFirstMin \leftarrow 0.
    • Fazer \,idxLastMax \leftarrow 0, \,idxLastMin \leftarrow 0.
  • Laço para varrer as posições restantes:
    • Percorrer \,i de 1 até 7 (inclusive). Em cada iteração, comparar \,v[i] com \,maxVal e \,minVal.
    • Regras para manter a primeira ocorrência:
      • Se \,v[i] > maxVal então:
        • \,maxVal \leftarrow v[i]
        • \,idxFirstMax \leftarrow i
        • \,idxLastMax \leftarrow i (nova maior aparição; também é a última até agora)
      • Se \,v[i] < minVal então:
        • \,minVal \leftarrow v[i]
        • \,idxFirstMin \leftarrow i
        • \,idxLastMin \leftarrow i
    • Regras para manter a última ocorrência (mesma passada):
      • Se \,v[i] == maxVal então:
        • \,idxLastMax \leftarrow i (atualiza para a posição mais recente do maior)
      • Se \,v[i] == minVal então:
        • \,idxLastMin \leftarrow i
  • Observação importante sobre ordem dos \text{if}:
    • Quando encontrar um valor maior que \,maxVal, atualizamos \,maxVal primeiro. Se houver um teste separado de igualdade a seguir, ele deve usar o novo \,maxVal; por isso, a forma limpa é:
      • Primeiro testar \,v[i] > maxVal (caso novo maior).
      • Else if (ou teste separado) testar \,v[i] == maxVal para atualizar \,idxLastMax.
    • Similar para o mínimo.
  • Assim conseguimos em uma única varredura manter:
    • a primeira ocorrência (porque só mudamos \,idxFirst* quando o valor aumenta/diminui estritamente),
    • a última ocorrência (porque sempre que vemos igualdade atualizamos o \,idxLast*).

Passo 4

Pseudocódigo detalhado linha a linha (leitura e lógica explicada):
  • Leitura:
    • Leia os 8 inteiros e armazene em \,v[0],v[1],\dots,v[7].
  • Inicialização:
    • \,maxVal \leftarrow v[0]
    • \,minVal \leftarrow v[0]
    • \,idxFirstMax \leftarrow 0
    • \,idxFirstMin \leftarrow 0
    • \,idxLastMax \leftarrow 0
    • \,idxLastMin \leftarrow 0
  • Laço principal:
    • Para \,i de 1 até 7 faça:
      • Se \,v[i] > maxVal então:
        • \,maxVal \leftarrow v[i]
        • \,idxFirstMax \leftarrow i
        • \,idxLastMax \leftarrow i
      • Senão se \,v[i] == maxVal então:
        • \,idxLastMax \leftarrow i
      • Fim se
      • Se \,v[i] < minVal então:
        • \,minVal \leftarrow v[i]
        • \,idxFirstMin \leftarrow i
        • \,idxLastMin \leftarrow i
      • Senão se \,v[i] == minVal então:
        • \,idxLastMin \leftarrow i
      • Fim se
    • Fim para
  • Ao final do laço, você tem:
    • \,maxVal e \,minVal (maior e menor valores).
    • \,idxFirstMax, \,idxLastMax (primeira e última ocorrências do maior).
    • \,idxFirstMin, \,idxLastMin (primeira e última ocorrências do menor).
  • Impressão:
    • Imprima \,maxVal e \,idxFirstMax e \,idxLastMax (ou no formato pedido pela prova).
    • Imprima \,minVal e \,idxFirstMin e \,idxLastMin.

Passo 5

Exemplo passo a passo com dados concretos (serve para fixar a ideia). Suponha que os 8 números lidos sejam:
\,v = [5,\,3,\,5,\,2,\,2,\,9,\,9,\,1].
  • Inicializamos com \,maxVal = 5, \,minVal = 5, índices todos 0.
  • i=1: \,v[1]=3. \,3<minVal(=5) então \,minVal\leftarrow3, \,idxFirstMin\leftarrow1, \,idxLastMin\leftarrow1.
  • i=2: \,v[2]=5. \,5==maxVal(=5) então \,idxLastMax\leftarrow2. Não muda o mínimo.
  • i=3: \,v[3]=2. \,2<minVal(=3) então \,minVal\leftarrow2, \,idxFirstMin\leftarrow3, \,idxLastMin\leftarrow3.
  • i=4: \,v[4]=2. \,2==minVal(=2) então \,idxLastMin\leftarrow4.
  • i=5: \,v[5]=9. \,9>maxVal(=5) então \,maxVal\leftarrow9, \,idxFirstMax\leftarrow5, \,idxLastMax\leftarrow5.
  • i=6: \,v[6]=9. \,9==maxVal(=9) então \,idxLastMax\leftarrow6.
  • i=7: \,v[7]=1. \,1<minVal(=2) então \,minVal\leftarrow1, \,idxFirstMin\leftarrow7, \,idxLastMin\leftarrow7.
  • Resultado do exemplo:
    • \,maxVal = 9, \,idxFirstMax = 5, \,idxLastMax = 6.
    • \,minVal = 1, \,idxFirstMin = 7, \,idxLastMin = 7.
      Isso mostra que a primeira ocorrência do maior foi em 5 e a última em 6 (índices base 0) e o menor apareceu pela primeira e última vez em 7.

Passo 6

Dicas práticas para prova (curtas e úteis):
  • Faça sempre a leitura dos 8 números antes de inicializar \,maxVal e \,minVal com \,v[0].
  • Não use \,> quando quer detectar última ocorrência: para última ocorrência use \,== para atualizar o índice ao ver igualdade; para primeira ocorrência só atualize quando for estritamente maior/menor.
  • Teste mentalmente com casos extremos: todos iguais (então primeira e última serão 0 e 7 respectivamente), crescente, decrescente, valores repetidos intercalados.
  • Se a prova pede índices começando em 1, lembre-se de somar 1 ao final.

Resposta

Leia v[0],v[1],\dots,v[7]\n maxVal \leftarrow v[0]\n minVal \leftarrow v[0]\n idxFirstMax \leftarrow 0\n idxLastMax \leftarrow 0\n idxFirstMin \leftarrow 0\n idxLastMin \leftarrow 0\nPara i de 1 até 7 faça:\n\quad Se v[i] > maxVal então:\n\quad\quad maxVal \leftarrow v[i]\n\quad\quad idxFirstMax \leftarrow i\n\quad\quad idxLastMax \leftarrow i\n\quad Senão se v[i] == maxVal então:\n\quad\quad idxLastMax \leftarrow i\n\quad Fim se\n\quad Se v[i] < minVal então:\n\quad\quad minVal \leftarrow v[i]\n\quad\quad idxFirstMin \leftarrow i\n\quad\quad idxLastMin \leftarrow i\n\quad Senão se v[i] == minVal então:\n\quad\quad idxLastMin \leftarrow i\n\quad Fim se\nFim para\nImprima maxVal, idxFirstMax, idxLastMax\nImprima minVal, idxFirstMin, idxLastMin

Exercícios relacionados