Tendo construído o programa de entrada e saída dos 20 nomes na matriz, seria bastante útil que, antes de
apresenta-los, o programa efetuasse o processamento da classificação alfabética, apresentando os nomes
em ordem, independentemente daquela em que foram informados, facilitando desta forma a localização de
algum nome, quando for efetuada uma pesquisa visual.
Existem vários métodos para obter a ordenação de elementos de uma matriz. Aqui será apresentado um
método bastante simples de ordenação que consiste na comparação de cada elemento com todos os
elementos subsequentes. Sendo o elemento comparado menor para ordenação decrescente, ou maior para
ordenação crescente que o atual, ele será trocado de posição com o outro. A ordenação considerada é
alfabética, devendo essa ser crescente, ou seja, de A até Z.
A seguir, é apresentado o programa completo com a parte de entrada de dados na matriz, o processamento
da ordenação e a apresentação dos dados ordenados. Mas somente o trecho de ordenação será
comentado, uma vez que a entrada e a saída dos elementos já foram comentados anteriormente.
Algoritmo
1. Definir a variável i do tipo inteira para controlar a malha de repetição;
2. Definir a matriz NOME do tipo literal para 20 elementos;
3. Iniciar o programa, fazendo a leitura dos 20 nomes;
4. Colocar em ordem crescente os elementos da matriz;
5. Apresentar após a leitura, os 20 nomes ordenados.
É importante que se estabeleça adequadamente o quarto passo do algoritmo, ou seja, como fazer para
colocar os elementos em ordem crescente. Foi informado que basta comparar um elemento com os demais
subseqüentes. Isto é verdade, mas necessita ser feito com alguma cautela.
É importante que se estabeleça adequadamente o quarto passo do algoritmo, ou seja, como fazer para
colocar os elementos em ordem crescente. Foi informado que basta comparar um elemento com os demais
subseqüentes. Isto é verdade, mas necessita ser feito com alguma cautela.
Os valores estão armazenados na ordem: 9, 8, 7, 5 e 3 e deverão ser apresentados na ordem 3. 5, 7, 8 e 9
Para efetuar o processo de troca, é necessário aplicar o método de propriedade distributiva. Sendo assim, o
elemento que estiver em A[1] deverá ser comparado com os elementos que estiverem em A[2], A[3], A[4] e
A[5]. Depois, o elemento que estiver em A[2] não necessita ser comparado com o elemento que estiver em
A[1], pois já foram anteriormente comparados, passando a ser comparado somente com os elementos que
estiverem em A[3], A[4] e A[5]. Na seqüência, o elemento que estiver em A[3] é comparado com os
elementos que estiverem em A[4] e A[5] e por fim o elemento que estiver em A[4] é comparado com o
elemento que estiver em A[5].
Seguindo este conceito, basta comparar o valor do elemento armazenado em A[1] com o valor do elemento
armazenado em A[2]. Se o primeiro for maior que o segundo, então trocam-se os seus valores. Como a
condição de troca é verdadeira, o elemento 9 de A[1] é maior que o elemento 8 de A[2], passa-se para A[1]
o elemento 8 e para A[2] passa-se o elemento 9, desta forma os valores dentro da matriz passaram a ter a
seguinte formação:
Seguindo a regra de ordenação, o atual valor de A[1] deverá ser comparado com o próximo valor após a
sua última comparação. Sendo assim, deverá ser comparado com o próximo valor após a sua última
comparação. Sendo assim, deverá ser comparado com o valor existente em A[3]. O atual valor do elemento
de A[1] é maior que o valor do elemento de A[3]. Ou seja, 8 é maior que 7. Efetua-se então a sua troca,
ficando A[1] com o elemento de valor 7 e A[3] com o elemento de valor 8. Assim sendo, os valores da matriz
passam a ter a seguinte formação:
Agora deverão ser comparados os valores dos elementos armazenados nas posições A[1] e A[4]. O valor
do elemento 7 de A[1] é maior que o valor do elemento 5 de A[4]. Eles são trocados, passando A[1] a
possuir o elemento 5 e A[4] a possuir o elemento 7. A matriz para a ter a seguinte formação:
Observe que ate aqui os elementos comparados foram sendo trocados de posição, estando agora em A[1] o
elemento de valor 5 e que será mudado mais uma vez por ser maior que o valor do elemento 3 armazenado
em A[5]. Desta forma, a matriz passa a ter a seguinte formação:
A partir deste ponto o elemento de valor 3 armazenado em A[1] não necessitará mais ser comparado. Assim
sendo, deverá ser pego o atual valor do elemento da posição A[2] e ser comparado sucessivamente com
todos os outros elementos restantes. Desta forma, queremos dizer que o valor do elemento armazenado em
A[2] deverá ser comparado com os elementos armazenados em A[3], A[4] e A[5], segundo a regra da
aplicação de propriedade distributiva.
Comparando o valor do elemento 9 da posição A[2] com o elemento 8 da posição A[3] e efetuando a troca
de forma que 8 esteja em A[2] e 9 esteja em A[3], a matriz passa a ter a seguinte formação:
Em seguida o atual valor do elemento de A[2] deve ser comparado com o valor do elemento de A[4]. 8 é
maior que 7 e são trocado, ficando A[2] com 7 e A[4] com 8. Desta forma, a matriz passa a ter a seguinte
formação:
Será então dado continuidade a processo de comparação e troca. O atual valor do elemento na posição
A[2] é 7 e será comparado com o valor do elemento A[5] que é 5. São estes trocados, passando A[2] ficar
com o elemento 5 e A[5] ficar com o elemento 7, conforme indicado no esquema abaixo:
Note que até este ponto a posição A[2] foi comparada com todas as posições subseqüentes a ela, não
tendo mais nenhuma comparação para ela. Agora será efetuada a comparação da próxima posição com o
restante. No caso, de A[3] com A[4] e A[5]. Sendo assim, o valor do elemento da posição A[3] será
comparado com o valor da posição A[4]. Como 9 é maior que 8 eles serão trocados:
A seguir, será comparado o valor do elemento da posição A[3] com o valor do elemento da posição A[5].
Sendo o primeiro maior que o segundo, ocorre a troca. Desta forma A[3] passa a possuir o elemento 7 e
A[5] passa a possuir o elemento 8, como indicado em seguida:
Tendo sido efetuadas todas as comparações de A[3] com A[4] e A[5], fica somente a última comparação
que é A[4] com A[5], cujos valores são trocados, passando A[4] possuir o elemento de valor 8 e A[5] possuir
o elemento de valor 9, como mostrado em seguida:
Desta forma, pode-se notar que a referida ordenação foi executada, apresentando os elementos da matriz
em ordem crescente.
Para dados do tipo literal o processo é o mesmo, uma vez que cada letra possui um valor diferente da outra.
A letra “A”, por exemplo, tem valor menor que a letra “B”, e assim por diante. Se a letra “A” maiúscula for
comparada com a letra “a” minúscula, terão valores diferentes. Cada caractere é guardado dentro da
memória de um computados segundo o valor de uma código, que recebe o nome de ASCII (American
Standard Code for Information Interchange – Código Americano Padrão para Troca de Informações). E é
com base nesta tabela que o processo de ordenação trabalha, pois cada caractere tem um peso, um valor
previamente determinado, segundo este padrão.
Diagrama de Blocos
A seguir são apresentados o diagrama de blocos da entrada, processamento de ordenação e apresentação
dos nomes ordenados. Atente para dois pontos:
O primeiro a ser observado é a utilização de uma segunda variável para controlar o índice subsequente no
processo de ordenação, no caso a variável “j”. Observe que a variável i é iniciada pela instrução para como:
i de 1, e no segundo pela instrução para que está sendo encadeada a primeira e iniciando a variável j,
como: j de i+1. Isto implica na seguinte sequência:
Observe que somente quando a variável j atinge o valor 20 é que este looping se encerra, retornando ao
looping da variável i, acrescentando mais um em i até i atinja o seu limite e ambos os loopings sejam
encerrados.
Quando a variável i for 1, a variável j será 2 e contará até 20. Ao final deste ciclo, a variável i é acrescentada
de mais 1 tornando-se 2; assim sendo a variável j passa a ser 3. Quando a variável j voltar a ser 20
novamente, a variável i passa a ser 3 e a variável j passa a ser 4. Este ciclo irá ser executado até que por fim a variável i seja 19 e a variável j seja 20, e será comparado o penúltimo elemento com o seu elemento
subsequente, no caso, o último.
O segundo ponto a ser observado é o fato da utilização do algoritmo de troca, utilizado junto da instrução de decisão se NOME[i] > NOME[j] então. Após a verificação desta condição, sendo o primeiro nome maior que o segundo, efetua-se então a sua troca com o algoritmo:
NOME[i] <- NOME[j]
NOME[j] <- X
Considere o vetor NOME[i] como o valor “Carlos” e o vetor NOME[j] com o valor “Alberto”. Ao final NOME[i]
deverá estar com “Alberto” e NOME[j] deverá estar com “Carlos”. Para conseguir este efeito, é necessária a
utilização de uma variável de apoio, a qual será chamada X. Para que o vetor NOME[i] fique livre para
receber o valor do vetor NOME[j]. X deverá ser implicado pelo valor do vetor NOME[i]. Assim sendo, X
passa a ser “Carlos”. Neste momento pode-se implicar o valor de NOME[j] em NOME[i]. Desta forma o vetor
NOME[i] passa a possuir o valor “Alberto”. Em seguida o vetor NOME[j] é implicado pelo valor que está em
X. Ao final deste processo, ter-se-á NOME[i] com “Alberto” e NOME[j] com “Carlos”.
Um detalhe utilizado neste exemplo foram os comentários colocados entre as chaves. Comentários deste
tipo servem para documentar o programa, facilitando a interpretação de um determinado trecho.
Comentários
Postar um comentário