Usando procedimentos e função faça dois módulos que receba com parâmetro um vetor com 5 números reais e retorne esses números ordenados em ordem crescente.
Passo 1
Beleza, o que a questão pede é criar dois “módulos” (um procedimento e uma função) que recebam um vetor de 5 números reais e devolvam esse mesmo vetor ordenado de forma crescente.
Conteúdo:
Conteúdo:
- Vetores (arrays)
- Passagem de parâmetro por referência (no procedimento) e por valor/retorno (na função)
- Algoritmo de ordenação (vamos usar o bubble sort, que é bem simples)
Para resolver, precisamos entender:
- Como representar um vetor de 5 reais.
- Como implementar o bubble sort, trocando pares de elementos fora de ordem.
- Diferença entre procedimento (que modifica o vetor direto) e função (que retorna um novo vetor).
Passo 2
Teoria do bubble sort:
Imagina que você percorre o vetor várias vezes; a cada passagem, você compara pares adjacentes e troca se estiverem fora de ordem. No nosso caso, como o vetor tem tamanho fixo , a estratégia é:
Imagina que você percorre o vetor várias vezes; a cada passagem, você compara pares adjacentes e troca se estiverem fora de ordem. No nosso caso, como o vetor tem tamanho fixo
- Para
até - Para
até -
Se $v[i] > v[j]$, troca $v[i]$ com $v[j]$.
Essa repetição garante que, ao final, todos os elementos estarão em ordem crescente.
Passo 3
Procedimento (passagem por referência):
procedure OrdenaProcedimento(var v: array[1..5] of real);
var
i, j: integer;
temp: real;
begin
for i := 1 to 5-1 do // i = 1..4
for j := i+1 to 5 do // j = i+1..5
if v[i] > v[j] then begin
// faz a troca
temp := v[i];
v[i] := v[j];
v[j] := temp;
end;
end;
Explicando:
var v: array[1..5] of real
indica que o vetor é passado por referência, ou seja, qualquer mudança dentro do procedimento reflete no vetor original.- As variáveis
i
ej
controlam as duas passagens do laço. temp
serve para armazenar um valor enquanto trocamosv[i]
ev[j]
.
Passo 4
Função (passagem por valor e retorno de um novo vetor):
function OrdenaFuncao(v: array[1..5] of real): array[1..5] of real;
var
i, j: integer;
res: array[1..5] of real;
temp: real;
begin
res := v; // copia o vetor de entrada
for i := 1 to 5-1 do // i = 1..4
for j := i+1 to 5 do // j = i+1..5
if res[i] > res[j] then begin
temp := res[i];
res[i] := res[j];
res[j] := temp;
end;
OrdenaFuncao := res; // retorna o vetor ordenado
end;
Explicando:
- A função recebe
v
por valor (não altera o original). - Copiamos
v
parares
, aplicamos o mesmo bubble sort emres
e, ao final, devolvemosres
.
Resposta
Aqui estão os dois módulos que recebem um vetor de 5 reais e devolvem ele ordenado em ordem crescente:
- Procedimento
OrdenaProcedimento(var v: array[1..5] of real)
– ordena direto o vetor passado. - Função
OrdenaFuncao(v: array[1..5] of real): array[1..5] of real
– retorna uma cópia ordenada do vetor.