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).

 

Voltar para o Índice