ALGORITMOS
COM PASCAL
Prof. Miguel Jonathan – Dept. Ciência da Computação – IM/UFRJ – 2003 –
versão 1.0
Um vetor (array em inglês) é um agregado de variáveis do mesmo tipo (homogêneas). O exemplo abaixo mostra a representação gráfica de um vetor de 6 inteiros chamado v:
1 2 3 4 5 6
![]()
Fazer
um programa para ler n valores inteiros quaisquer, n <50, onde o valor de n
deve ser previamente fornecido pelo usuário.
Em
seguida, o programa deve escrever na tela os valores em ordem numérica
crescente.
A
solução utiliza um algoritmo de ordenação .
O algoritmo abaixo é conhecido como ordenação por seleção. Os números são colocados em um vetor
definido com 50 posições. Inicialmente, procura-se a posição no vetor
(posMenor) onde está o menor número. Se essa posição for diferente da posição
1, então troca-se os valores das casas 1 e posMenor. Isso garante que o menor
elemento agora está na posição 1. A seguir, repete-se o processo a partir da
posição 2. Ou seja, procura-se a posição do menor elemento da posição 2 em
diante, que será posMenor. Se o valor de posMenor for diferente de 2, troca-se
os valores das casas 2 e posMenor. O processo é repetido a partir da posição 3,
depois 4, etc, até n-1. Nesse ponto o vetor estará com os valores ordenados.
Basta então escrever na tela os valores das posições 1 a n e teremos os números
em ordem crescente.
program
ordenasel;
const
nmax=50;
var
v: array[1..nmax] of integer;
i,j,n,posMenor,temp:
integer;
begin
writeln('Digite um inteiro menor ou igual a
' ,nmax, ' : '); readln(n);
writeln('Digite ',n,' inteiros separados por
espacos');
for i:=1 to n do read(v[i]);
for i:=1 to
n-1 do begin
posMenor:=i;
for j:=i+1 to n do
if v[j] < v[posMenor] then posMenor :=
j;
if i
<> posMenor then begin
temp :=
v[i];
v[i] := v[posMenor];
v[posMenor] := temp;
end;
end;
writeln;
for i:=1 to n
do write(v[i]:4);
end.
program
ordenanomes;
(**********************************************************************
algoritmo de selacao para ordenar nomes em
ordem alfabética.
**********************************************************************)
const nmax=50;
var
v:
array[1..nmax] of string;
i,j,n,posMenor: integer;
temp:string;
begin
writeln('Digite um inteiro menor ou igual a
' ,nmax, ' : '); readln(n);
writeln('Digite ',n,' strings, uma em cada
linha);
for i:=1 to n do readln(v[i]);
for i:=1 to n-1 do begin
posMenor:=i;
for j:=i+1 to n do
if v[j] < v[posMenor] then posMenor :=
j;
if i
<> posMenor then begin
temp :=
v[i];
v[i] := v[posMenor];
v[posMenor] := temp;
end;
end;
writeln;
for i:=1 to n
do writeln(v[i]);
end.