n>;
12.2.2 Parte de Declarações de Constantes:
Define os identificadores que terão valores constantes durante toda a execução do programa, podendo ser números, seqüências de caracteres (strings) ou mesmo outras constantes.
A declaração de constantes inicia pela palavra reservada CONST, seguida po uma seqüência de: identificador, um sinal de igual, o valor da constante e um ponto e vírgula:
CONST =
12.2.3 Parte de Declarações de Tipos:
Serve para o programadore criar seus próprios tipos de dados.
A declaração dos tipos é iniciadas pela palavra reservada TYPE, seguida de um ou mais identificadores separados por vírgula, um sinal de igual, um tipo e um ponto e vírgula:
TYPE , ... , n> = ;
12.2.4 Parte de Declarações de Variáveis:
Quando declaramos uma variável temos que definir, além do nome, seu tipo. O tipo especifica os valores que poderão ser atribuídos a esta variável. O tipo pode ser algum dos tipos predefinidos pela linguagem ou um tipo definido pelo usuário.
A declaração das variáveis é iniciada pela palavra reservada VAR, seguida de um ou mais identificadores, separados por vírgula, um tipo um ponto e vírgula:
VAR < ident1> , ... , n> : ;
12.2.5Parte de Declarações de Subprogramas:
Nesta parte são declarados e implementados os subprogramas (funções e procedimentos) e devem estar declarados e implementados antes da sua chamada em qualquer parte do programa principal ou de subprogramas.
12.3Bloco de Comandos
O Bloco de Comandos é a última parte que compõe um programa em Pascal e especifica as ações a serem executadas sobre os objetos definidos no Bloco de Declarações.
O Bloco de Comandos é também conhecido como programa principal e é iniciado pela palavra reservada BEGIN seguida de por uma seqüência de comandos e finalizada pela palavra reservada END seguida um ponto.
13.Comandos
13.1Comandos Simples
Os comandos simples ou não estruturados, caracterizam-se por não possuírem outros comandos relacionados.
13.1.1Comandos de Entrada e Saída
Como as outras linguagens de programação de microcomputadores, o Turbo Pascal possui uma tremenda capacidade de programação interativa. Um programa interativo pega informações das entradas do usuário para o computador, e depois responde apropriadamente às entradas, colocando informações na tela ou enviando para a impressora.
A linguagem Pascal tem definido os comandos de entrada e saída na própria linguagem.
13.1.1.1 Read e Readln
Na sua forma mais simples, a procedure embutida READLN aceita um valor de entrada a partir do teclado:
READLN (NomedaVariável)
Este comando espera que o usuário entre com o dado, e depois armazena a resposta do usuário na variável especificada. A entrada do usuário deve se corresponder com o tipo de dado da variável identificada no comando READLN. Quando o usuário terminar de digitar o valor de entrada e pressionar a tecla Enter, o valor será armazenado na variável, e a tarefa do comando READLN se completa.
Num programa interativo, um comando READLN é normalmente usado precedido por um comando WRITE ou WRITELN, que coloca na tela uma mensagem apropriada. A mensagem geralmente informa ao usuário o tipo de informação que o programa espera como entrada. Por exemplo:
WRITE (’Nome do usuário: ’);
READLN (Nome);
Esta seqüência coloca uma mensagem na tela e espera que o usuário entre com o nome do usuário.
READLN também lhe permite aceitar mais de um valor de entrada por vez. Podemos incluir uma lista de variáveis como argumento do comando READLN:
READLN (NomedaVariável1, Nomeda Variável2, NomedaVariável3,...)
Esta forma do comando READLN não é, geralmente, muito útil para entradas pelo teclado. Um programa exerce um controle mais cuidadoso e harmonioso sobre o processo de entrada, se cada valor de entrada for tomado e aceito por comandos READLN individuais.
O comando READ lê um valor de dado de uma linha de entrada e mantém a posição do cursor ou ponteiro de arquivo, de modo que um comando READ ou READLN subsequente possa ler dados adicionais da mesma linha. Este comando é, geralmente, mais importante em programas de manipulação de arquivos do que em programas que lêem dados do teclado.
A procedure READLN provoca problemas inoportunos em alguns programas interativos. O problema surge quando um programa espera por um valor numérico e o usuário entra inadvertidamente com uma seqiiência de caracteres que o Turbo Pascal não pode ler como um número. Quando isto acontece, a execução do programa termina com um erro em tempo de execução.
A prevenção contra este tipo de erro de entrada é uma interessante tarefa de programação.
13.1.1.1.1 AS FUNÇÕES EOLN e EOF
O Pascal possui duas funções padrão, eoln e eof, que são muito úteis quando se lêem dados. A primeira delas, eoln, devolve o valor booleano true se uma designação de fim de linha for detectada na linha que começou a ser lida. De outro modo devolve um valor false.
O valor de eoln é automaticamente passado para false todas as vezes que uma nova linha de entrada de dados for começada, informando que a nova linha não esteja vazia, isto é, garantindo que a nova linha tenha pelo menos um dado). Deste modo, esta função permite-nos ler um número qualquer de dados de qualquer linha, lendo dados da mesma linha até que eoln se torne um valor verdadeiro (true). Podemos então repetir este procedimento para a linha seguinte de dados, e assim sucessivamente.
A função eof é usada para detectar o fim dum arquivo de dados em disco. Esta função devolve o valor booleano true quando a designação de fim de arquivo for detectada; caso contrário devolve o valor false.
13.1.1.2 Write e Writeln
Na sua forma mais simples, o comando WRITELN exibe uma linha de informação na tela. A procedure WRITE também envia dados para a tela, mas mantém a posição final do cursor, permitindo que um comando WRITE ou WRITELN subseqüente possa exibir informações adicionais na mesma linha da tela.
WRITE e WRITELN, tomam uma lista de argumentos de dados na forma de constantes, variáveis, ou expressões, separados por vírgulas. Considere este exemplo:
Exemplo
PROGRAM ExemploWrite
USES Crt
VAR
itens, Precounit: INTEGER;
BEGIN
itens:= 200;
Precounit:=35;
WRITE (’O preço de ’,itens);
WRITELN (’ unidades é ’,itens * Precounit);
END.
Este programa exibe uma linha com quatro valores de dados na tela: um valor literal string, o valor de uma variável numérica, um segundo valor string e o resultado de uma expressáo aritmética. A tela de saída resultante é:
O preço de 200 unidades é 7000
Observe que, neste exemplo, os comandos WRITE e WRITELN exibem todos os quatro valores de dados numa única linha de saída - as duas constantes string, o valor armazenado na variável itens e o resultado da expressão itens* Precounit.
O dispositivo default de saída para os comandos WRITE e WRITELN é a tela. Quando queremos enviar a saída para algum outro dispositivo, devemos especificar um nome de arquivo como primeiro argumento do comando WRITE ou WRITELN. Por exemplo, a unidade PRINTER define um arquivo chamado LST e associa este arquivo ao dispositivo LPT1 do DOS. Portanto, podemos utilizar LST para enviar dados para impressora a partir dos comandos WRITE e WRITELN. Para fazer isso, devemos incluir o comando USES, a seguir, no topo do programa:
USES PRINTER;
Quando especificamos subsequentemente LST como primeiro argumento de uma chamada à procedure WRITE ou WRITELN, a saída será enviada para a impressora, ao invés da tela:
Exemplo
Program ExemploPrinter;
USES CRT, PRINTER;
VAR
itens, Precounit: INTEGER;
BEGIN
itens:= 200;
Precounit:=35;
WRITE (LST,’O preço de ’,itens);
WRITELN (LST,’ unidades é ’,itens * Precounit);
END.
Este exemplo imprime a linha de informação sobre o preço das unidades.
Para produzir uma linha de saida em branco na tela, inclua o comando WRITELN sozinho, sem uma lista de valores de dados. Por exemplo, esta sequência resulta em duas linhas de saida, com uma linha em branco entre elas:
WRITELN (’Comando 1’);
WRITELN;
WRITELN (’Comando 2’);
O comando WRITELN suporta notações especiais de formato para o controle da exibição de dados numéricos. Podemos especificar a largura da saida e o número de casas decimais:
WRITELN (valor : largura : CasasDecimais)
Nesta notação, largura e CasasDecimais são valores inteiros literais. No exemplo a seguir, o comando WRITELN justifica à direita um valor numérico dentro de um campo de saida de dez espaços e exibe duas casas decimais:
Exemplo
PROGRAM ExemploCasasDecimaisEmNumerosReais;
USES Crt;
Var ValorDeSaida: REAL;
BEGIN
ValorDeSaida:=18.766;
WRITELN (ValorDeSaida: 10:2);
END.
O valor de saida deste programa é 18.77. Observe que a segunda casa decimal foi arredondada. Para saidas inteiras, você pode omitir o especificador CasasDecimais. O Turbo Pascal não possui nenhum comando equivalente ao comando PRINT USING do BASIC (o qual produz saidas formatadas em dólares e centavos); entretanto, você pode escrever facilmente a sua própria função que simule este comando.
Se desejarmos incluir um caractere apóstrofo como parte do valor string de saida, devemos incluir uma seqüência de dois apóstrofos no argumento string correspondente. Por exemplo, o comando WRITELN:
WRITELN (’Pascal’’s input and output procedures.’)
Isto resulta na exibição da linha a seguir:
Pascal’s input and output procedures.
13.1.1.3 Readkey
O comando READKEY lê um caracter do teclado e associa a uma variável do tipo char:
variável_char := readkey;
13.1.2Comandos de Desvio Incondicional
13.1.2.1GOTO
Este Comando de desvio incondicional altera a seqüência normal de execução em um bloco de comandos, transferindo o processamento para um ponto no programa fonte marcado com o rótulo especificado no comando GOTO.
Exemplo
Program exemplo_label;
uses crt;
label ini, fim, gre, int;
var opcao: char;
begin
ini:
clrscr;
writeln('Escolha o seu time: [G] Gremio [I] Inter');
opcao:=readkey;
if upcase(opcao)='G' then goto gre;
if upcase(opcao)='I' then goto int;
goto ini;
gre:
writeln('Ok, Gremista!');
goto fim;
int:
writeln('Muito bem, Colorado!');
goto fim;
fim:
readkey;
end.
Devemos evitar sempre que possível o uso de comandos desse tipo.
13.1.2.2EXIT
Este procedimento faz com que o programa termine o bloco que está sendo executado. Se esse bloco for o programa principal, Exit o faz terminar. Se o bloco corrente é aninhado, Exit faz com que o próximo bloco mais externo continue na instrução imediatamente após a que passou o controle ao bloco aninhado. Se o bloco corrente é uma procedure ou função, Exit provoca a chamada do bloco para continuar na instrução após o ponto em que ele foi chamado.
Sua sintaxe é:
EXIT;
13.1.2.3BREAK
Este procedimento faz com que o programa termine o bloco que está sendo executado. Somente pode ser usado no interior de laços for, while ou repeat..
Sua sintaxe é:
break
13.1.2.4CONTINUE
Este procedimento faz com que o processamento de uma iteração num loop for, while ou repeat seja interrompido e continue com a próxima iteração.
Sua sintaxe é:
CONTINUE
Exemplo:
program exemplos;
uses crt;
var
i: integer;
begin
clrscr;
writeln('testando o break');
for i:= 1 to 10 do
begin
if i=5 then break;
writeln(i);
end;
readkey;
writeln('testando o continue');
for i:= 1 to 10 do
begin
if i=5 then continue;
writeln(i);
end;
readkey;
writeln('testando o exit');
for i:= 1 to 10 do
begin
if i=5 then exit;
writeln(i);
end;
writeln('Esta frase nao sera exibida!');
readkey;
end.
13.1.2.5Runerror
Este procedimento causa o término do programa no local onde estiver sendo executado, gerando um erro de execução com o mesmo valor passado como parâmetro. Caso o parâmetro seja omitido, o valor de erro de execução será zero.
Sua sintaxe é:
Runerror ([]: byte);
13.1.2.6 HALT
Este procedimento causa o término do programa no local onde estiver sendo executado, gerando um erro de execução com o mesmo valor passado como parâmetro. Caso o parâmetro seja omitido, o valor de erro de execução será zero.
O valor do erro pode ser tratado em arquivos de lote do DOS (Batch) .BAT com a opção ERRORLEVEL.
Sua sintaxe é:
Halt( []: word);
13.1.3Outros comandos simples
13.1.3.1 Clrscr
Este procedimento limpa a tela e coloca o cursor no canto superior esquerdo da tela. É a contração das palavras CLeaR SCReen.
13.1.3.2GotoXY
Este procedimento permite posicionar o cursor em um ponto qualquer da tela, referenciado pelos eixos X e Y (coluna e linha), antes de um comando de entrada ou saída.
Sua sintaxe é:
GotoXY (, : byte)
13.1.3.3Delay
Este procedimento permite fazer uma pausa programada por um determinado intervalo de tempo, antes de ser executado o próximo comando.
Sua sintaxe é:
Delay ( : byte)
13.1.3.4CHR
Esta função retorna o caractere ASCII correspondente ao valor do parâmetro passado.
Sua sintaxe é:
CHR(: byte):char;
13.1.3.5ORD
Esta função retorna a posição ordinal do parâmetro passado.
Sua sintaxe é:
ORD(): longint;
13.1.3.6 Upcase
Esta função retorna o caractere contido no parâmetro em maiúsculo.
Sua sintaxe é:
Upcase(:char): char;
Exemplo
program exemplos;
uses crt;
var x: char;
begin
clrscr;
writeln('Digite uma letra minuscula: ');
x:=readkey;
writeln('A letra digitada é: ',x);
writeln('O seu valor na tabela ASCII é: ', ord(x));
writeln('A letra maiuscula é: ',upcase(x));
writeln('O seu valor na tabela ASCII é: ', ord(upcase(x)));
writeln('O caracter 65 da tabela ASCII é: ',chr(65));
writeln('O caracter 75 da tabela ASCII é: ',#75);
readkey;
end.