Apresentam-se nesta parte algumas breves noções introdutórias em questões mais avançadas do Pascal, algumas das quais tocam já procedimentos criados com o Delphi (Object Pascal). De entre os temas abordados, destaca-se:
Exception
) numa Estrutura de Tentativa;Note-se que esta Parte só tem conteúdos preliminares, e nada de muito avançado.
O Pascal, de origem, tem capacidade para aceitar a escrita de números inteiros sob a forma hexadecimal e binária. Estando fora do âmbito deste livro a explicação prolongada da representação numérica hexadecimal e binária, explica-se de seguida como introduzir, directamente em código, cada um deste tipo de representação. Considere-se, para tal, a variável numero
, do tipo integer
ou longint
, e iremos gravar o valor 12.
numero := $C;
numero := %1100;
O IDE preparado na íntegra para funções e procedimentos de conversão destas representações é o Free Pascal. Declarando-se a unidade strutils
(utilidades para strings
), existe uma série de procedimentos e funções. Aqui serão representados tal como estão na unidade, excepto que os parâmetros foram traduzidos para português.
valor
numa sequência binária, tendo esta dígitos
dígitos e onde será acrescentado um espaço a cada espaços dígitos
. espaços
é facultativo, e não deverá ser zero.function IntToBin(valor : longint; dígitos : integer; espaços : integer) : string;
function Hex2Dec(S : string) : longint;
Outras funções e procedimentos existem, mas estão fora do âmbito do presente livro.
Quando abordada a Estrutura de Tentativa, recorreu-se logo à adição de uma variável de excepção, exception
, mas com a qual nada se fez. Ora, qual a vantagem de a declarar?
Imagine-se que se pretende testar um programa complexo e com contornos que possam criar possíveis situações de instabilidade, e o programador pretende saber qual o erro então ocorrido para poder, se possível, corrigi-lo. Contudo, o programa vai abaixo, e a mensagem de erro que a consola lança nem chega a ser vista de tão rápido o processo de erro e encerramento é.
Ora, a variável do tipo exception
guarda em si o erro ocorrido, erro este que pode ser traduzido por uma mensagem (message
). Veja-se, então, o exemplo simples da divisão onde pode ocorrer o erro da divisão por zero.
Tradicionalmente, até ao momento, far-se-ia tão-somente o seguinte:
try resultado := valor1 / valor2; except ON e:exception do begin writeln('Ocorreu um erro!'); end; end;
Podia ser adicionada a mensagem “Divisão por zero”, mas admitamos hipoteticamente que não sabemos o erro que poderá ocorrer. Então, vamos introduzir o código que nos permite descobrir o erro que ocorre, caso ocorra:
readln(valor1, valor2); try resultado := valor1 / valor2; except ON e:exception do begin writeln('Ocorreu um erro!'); writeln('O erro foi o seguinte: ',e.message); end; end;
Ou seja, lembrando o paradigma POO, obtém-se a propriedade message
da variável e, do tipo exception
.
A mensagem é debitada em inglês. Veja-se um exemplo de output deste excerto de programa, no caso do código anterior:
35 0 Ocorreu um erro! O erro foi o seguinte: Division by zero
O título da consola, em Windows, por pré-definição é o directório do executável. Por exemplo:
C:Dev-Pasexemplo.exe
Claro que o programador gostaria de fazer o seu programa que apresentasse um título na janela da Consola, sem ser uma linha de texto cheia de barras e sem sentido aparente. Neste caso, um bom título seria:
Programa de Exemplo
É possível alterar o título da consola com um procedimento pertencente à unidade windows
:
program exemplo; uses windows; begin SetConsoleTitle('Programa de Exemplo'); // programa end;
Uma Message Box em Delphi cria-se através de um procedimento que tem quatro parâmetros, existindo dezenas de combinações possíveis. Existem valores pré-definidos, constantes, que, somados, resultam no resultado pretendido. Existem constantes para os botões, o ícone, o botão focado por defeito, etc. Contudo, as Message Boxes serão aqui programas de forma segura com o auxílio do Editor do Dev-Pascal.
O Dev-Pascal possui uma ferramenta que auxilia a criação de uma Message Box, que permite, inclusive, a sua pré-visualização antes de ser aplicada. Por passos:
1. Coloca-se o cursor na zona do código onde se pretende que apareça uma Message Box;
2. Faz-se Edit > Insert > Message Box;
3. Aparece o Editor. Introduz-se o título pretendido, o texto, selecciona-se a sequência de botões desejados, o ícone e o botão que é focado;
4. Para se verificar se a Message Box está como se pretende, faz-se Preview.
5. Estando tudo como desejado, faz-se OK e o código aparece automaticamente no local onde o cursor foi posicionado no passo 1.
Neste caso, foi feita apenas uma Message Box modelo para que se pudesse visualizar o código gerado pelo Editor e verificar a posição dos diferentes argumentos. No caso do programa em questão, adaptar-se-ia do seguinte modo:
program Untitled1; uses crt, windows; var nome : string; msg : string; mensagem : pchar; begin write('Introduza o seu nome: '); readln(nome); msg := 'Olá, ' + nome + '!'#0; mensagem := @msg[1]; MessageBox(0, mensagem , 'Mensagem de boas-vindas' , 0 + MB_ICONASTERISK); readln; // pausa end.
Está fora do âmbito da presente Parte a explicação da conversão de uma string
para um pchar
. Fica apenas registado desta forma exemplificativa como o fazer, pois os argumentos de texto da Message Box são do tipo pchar
e não string
.
Declarando a unidade strings
ou a strutils
, dependendo do IDE, é possível converter um número inteiro longo (maior que 1 milhão) para numeração romana, e vice-versa. Nenhum erro ocorre, pois são procedimentos seguros.
longint
) para Numeração Romana (string
)IntToRoman(inteiro, romano);
string
) para Inteiro (longint
)RomanToInt(romano, inteiro);
Propostas de Exercícios 13. Crie um conversor de numeração romana, enquadrado numa Estrutura de Tentativa, em que, caso um erro ocorra, seja mostrado o erro numa Message Box, em que o título é “Ocorreu um erro” e o texto é tão-somente a mensagem do erro. Normas: Limite de número de linhas (excluindo comentários e linhas em branco): 75 linhas.