7
- PROCESSAMENTO DE INFORMAÇÕES NÃO NUMÉRICAS
Os computadores geralmente dispõem de
facilidades em seus compiladores para efetuar o processamento de informações
não numéricas (alfanuméricas). As operações mais usuais com informações
alfanuméricas são: leitura, armazenamento, recuperação, exibição, impressão e
comparação.
A linguagem PASCAL oferece recursos para
efetuar todas estas operações com informações alfanuméricas. Há dois tipos
predefinidos de dados para armazenamento de informações não numéricas em
PASCAL: o tipo CHAR e o tipo STRING.
7.1.
O TIPO CHAR
Uma variável deve ser declarada como sendo do
tipo char quando o valor que ali será armazenado consistir sempre de um único
caracter em cada instante do processamento. Além das operações normais (excetuando-se
as aritméticas) existem funções predefinidas para efetuar várias operações com
variáveis do tipo char. Estas funções variam de um compilador para outro, sendo
as mais comuns especificadas a seguir:
PRED(X) - retorna o caracter que precede aquele armazenamento na
variável X na seqüência de
classificação.
SUCC(X) - retorna o caracter sucessor daquele armazenado a variável
X na seqüência de classificação.
ORD(X) - retorna o inteiro correspondente à posição ocupada pelo
caráter armazenado na variável X na
seqüência de classificação.
Utilizando uma combinação dos tipos Array e Char podemos formar palavras, frases e até textos: cada
elemento do array conterá um caráter
em cada instante. Desta forma, a palavra PASCAL poderá ser armazenada em uma
variável declarada como sendo do tipo Array
[1..6] of char.
Por razões de
economia de espaço de memória as palavras, frase e textos podem ser armazenados
em variáveis declaradas como sendo do tipo PACKED
ARRAY[...] OF CHAR. Isto
significa que o compilador produzirá código objeto para armazenamento das
informações em forma compactada economizando cerca de metade do espaço
necessário.
Uma forma mais
simples de manipular com palavras e frases em PASCAL é através do tipo
predefinido STRING que será descrito na próxima seção. Os textos podem ser
diretamente manipulados utilizando o tipo predefinido TEXT (corresponde a um file
of char).
7.2.
O TIPO STRING
O tipo STRING
está predefinido na maioria dos compiladores da linguagem PASCAL. O tipo STRING
é um tipo estruturado que serve para declarar variáveis cujo conteúdo é uma
cadeia de caracteres. O tamanho da cadeia de caracteres pode variar em tempo de
execução até o tamanho máximo que é especificado na declaração de tipo para a
variável. Além das operações normais (excetuando-se as aritméticas) existem
funções pré-definidas para efetuar várias operações com variáveis do tipo string.
Estas funções variam de um compilador para outro, sendo as mais comuns
especificadas a seguir:
CONCATENAÇÃO - une
dois strings
formando um novo string (|| ou +).
LENGTH(X) - retorna
o tamanho atual (quantidade de caracteres) do string X.
SUBSTR(FONTE, INICIO, QUANTIDADE) - retorna
uma parte do string FONTE (substring) a partir da posição INICIO e cujo tamanho é QUANTIDADE.
Exemplos de utilização:
LENGTH('TA NA HORA') retorna o inteiro 10
SUBSTR('ABCDE',
2, 3) retorna 'BCD'
SUBSTR('TA
NA HORA', 1, 5) || SUBSTR('DE BOATO', 4, 3)
retorna 'TA NA BOA'
Exemplos de declarações:
NOME:
STRING[30]; /* NOME conterá até 30 caracteres */
ESTADO:
STRING [2];
ESTADO_CIVIL:
STRING[1]; /* eqüivale ao tipo char */
A comparação
de duas variáveis do tipo string é feita caráter a caráter. Ao
encontrar dois caracteres distintos o compilador determina qual dos dois strings
é maior e qual é o menor (em termos de seqüência de classificação). Ao comparar
strings
com tamanhos diferentes o string de menor número de caracteres
será completado (apenas para efeito de comparação) com espaços em branco à
direita.
Considere o
problema de determinar qual seria o primeiro da classificação alfabética em uma
lista de 20 nomes com até 25 caracteres cada um. A solução apresentada a
seguir, foi obtida do programa anteriormente apresentado com a finalidade de
determinar o maior (neste caso procuramos pelo menor) de um grupo de 20 valores
inteiros. Compare as soluções e identifique as diferenças.
PROGRAM PARECIDO;
VAR
NOME_ATUAL: STRING[25]; /* O NOME QUE ESTÁ SENDO PROCESSADO*/
PRIMEIRO_ATE_AGORA:
STRING[25]; /* O PRIMEIRO DA CLASSIFI FICAÇÃO ENTRE OS PRO CESSADOS*/
K:
INTEGER; /* UMA VARIÁVEL AUXILIAR PARA O FOR */
BEGIN
WRITELN('INFORME
UM NOME COM ATÉ 25 CARACTERES');
READLN(NOME_ATUAL);
/* O PRIMEIRO DOS NOMES */
PRIMEIRO_ATE_AGORA
:= NOME ATUAL; /*SO FOI LIDO UM
NOME*/
FOR K := 1
TO 19 DO
BEGIN
WRITELN('INFORME
UM NOME COM ATÉ 25 CARACTERES');
READLN(NOME_ATUAL);
IF
NOME_ATUAL < PRIMEIRO_ATE_AGORA
THEN
PRIMEIRO_ATE_AGORA := NOME_ATUAL;
WRITELN
('NOME LIDO=', NOME_ATUAL:25)
END;
WRITELN('O
PRIMEIRO NOME DA CLASSIFICAÇÃO ALFABÉTICA EH:', PRIMEIRO_ATE_AGORA')
END.
7.3.
EXERCÍCIOS PROPOSTOS
1. Escreva um programa em PASCAL para ler 20 nomes de
pessoas na ordem direta (com até 30 caracteres cada) e imprima os nomes como
foram lidos e na forma 'sobrenome, nome'.
2. Escreva um programa em PASCAL para ler frases com
até 80 caracteres e determinar se cada frase é um palíndromo perfeito ou não.
Encerrar o processamento quando uma mesma frase estiver repetida em linhas
adjacentes de entrada. Sugestão: eliminar espaços em branco e demais caracteres
não alfabéticos antes de efetuar a verificação. Exemplo de palíndromo:
'socorram-me, subi no onibus em marrocos'.
3. Escreva um programa em PASCAL para determinar as
formas nominais e para conjugar verbos regulares de qualquer conjugação nos
vários tempos verbais simples. Estabeleça um diálogo amigável com o usuário,
solicitando o verbo e informações para direcionar o processamento.
4. Escreva um programa em PASCAL para ler uma lista
de vários nomes de 25 caracteres e imprimir os nomes na seqüência de leitura e
em ordem alfabética inversa. Encerrar o processamento quando encontrar a
palavra final.
5. Escreva um programa em PASCAL para determinar o
primeiro e o último nomes da classificação alfabética de um grupo de vários
nomes, sem ordenar o grupo de nomes. Encerrar o processamento quando encontrar
o final do arquivo de entrada.
6. Escreva um programa em PASCAL para determinar
aquele que seria o penúltimo nome da classificação alfabética num grupo de
vários nomes e sua posição relativa de entrada.
7. Escreva um programa em PASCAL para criptografar
uma frase com até 80 caracteres de acordo com o seguinte algoritmo: - para os
primeiros 40 caracteres da frase: cada caráter deve ser substituído pelo
caráter que está três posições à sua frente na tabela ASCII. Os três últimos
caracteres da tabela ASCII serão substituídos pelos três primeiros; - para os
últimos 40 caracteres da frase: cada caráter deve ser substituído pelo caráter
que o antecede em três posições na tabela ASCII. Os três primeiros caracteres
da tabela ASCII serão substituídos pelos três últimos.
8. Escreva um programa em PASCAL para decodificar uma
frase com 80 caracteres que foi criptografada pelo programa anterior.
9. Escreva um programa em PASCAL para ler os nomes
dos vários amigos de uma pessoa (até encontrar o final do arquivo de entrada) e
determinar as várias maneiras que essa pessoa pode convidar os amigos para
jantar. Considere um máximo de 20 amigos.
10. Escreva um programa em PASCAL para ler um número
inteiro decimal com até 6 dígitos e determinar seu correspondente em algarismos
romanos.
11. Escreva um programa em PASCAL para ler um número
em algarismos romanos e determinar seu correspondente em algarismos arábicos.
12. Escreva um programa em PASCAL para ler um número
real com até 10 dígitos (duas casas decimais) representando uma quantia em
cruzeiros e escrever por extenso esta quantia.
13. Escreva um programa em PASCAL para ler o nome
completo de várias pessoas (até encontrar o final do arquivo) e determinar as
pessoas pertencentes às várias famílias do grupo. Lembre-se que uma mesma
pessoa geralmente pertence a mais de uma família.
14. Escreva um programa em PASCAL para ler as
relações de até 100 nomes de pessoas que compareceram a duas festas diferentes.
A segunda relação começa com 'FESTA 2' e termina após a leitura dos 100 nomes
ou com o final do arquivo de entrada. O programa deve imprimir: - uma listagem
das pessoas suspeitas (compareceram a pelo menos uma das festas); - uma
listagem das pessoas pouco suspeitas (compareceram a apenas uma das festas); e
- uma listagem das pessoas muito suspeitas (compareceram a ambas as festas).