Ana səhifə

Universidade Regional Integrada do Alto Uruguai e das Missões Campus Frederico Westphalen Departamento de Engenharias e Ciência da Computação Algoritmos e Estrutura de Dados I informática I


Yüklə 0.52 Mb.
səhifə17/23
tarix25.06.2016
ölçüsü0.52 Mb.
1   ...   13   14   15   16   17   18   19   20   ...   23

12.Estrutura do Programa


Normalmente um programa Pascal possui três partes distintas: Identificação do programa, Bloco de declarações e Bloco de comandos.

12.1 Identificação do programa


A identificação ou cabeçalho do programa em Pascal dá um nome ao programa. É a primeira linha do programa.
PROGRAM ;

12.2 Bloco de Declarações


Todo identificador definido pelo usuário em um programa deve ser declarado antes de ser referenciado (usado), caso contrário o compilador acusará um erro na fase de compilação por desconhecer o identificador.

O Bloco de Declarações define todos os identificadores utilizados pelo Bloco de Comandos, sendo todos opcionais. Quando o Bloco de Delarações existir sempre estará antes do Bloco de Comandos.

Em Pascal o Bloco de Declarações é formado por cinco partes:

12.2.1Parte de Declarações de Rótulos:


Rótulos (labels) existem para possibilitar o uso do comando de desvio incondicional GOTO. Este comando comando gera a desestruturação do programa e não é aconselhado seu uso.
LABEL , ... , 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.

1   ...   13   14   15   16   17   18   19   20   ...   23


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©atelim.com 2016
rəhbərliyinə müraciət