Classificação dos Elementos de uma Matriz

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: 

X <- NOME[i]
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

Postagens mais visitadas deste blog

Atividades Phyton com Estrutura de Repetição

Introdução à Lógica

Leitura e Escrita de Registros