Você está na página 1de 27

ALGORITMOS E PROGRAMAO PROF. CLAUDIA PINTO P.

SENA

OBJETIVO DO MATERIAL: Este material tem por objetivo auxiliar os alunos da disciplina na elaborao de programas em pascal.

LINGUAGEM PASCAL
Introduo - Origem
A linguagem de programao Pascal, cujo nome uma homenagem ao filsofo Blaise Pascal, foi projetada pelo professor Niclaus Wirth da Technical University, em Zurich, na Sua no inicio da dcada de 70. Sua proposta inicial era proporcionar uma poderosa ferramenta de aprendizagem para a cincia da computao proporcionando bons hbitos nos programadores. Wirth acreditava que uma linguagem estruturada, organizada em blocos e com uma severa checagem de tipos, como Pascal, viesse ajudar a evitar muitos dos erros mais comuns em programao. Os blocos fundamentais do pascal so os subprogramas, que permitem que todas as informaes e instrues necessrias realizao de uma tarefa sejam reunidas e escondidas do resto do programa. Por que Turbo Pascal ? Um computador no pode entender nem to pouco executar instrues em linguagens de alto nvel. Ele s entende linguagem de mquina. Desta forma, os programas em linguagens de alto nvel devem ser traduzidos antes de serem executados pelo computador. Quem faz essa traduo so os programas tradutores. Existem basicamente dois tipos de programa tradutor: o interpretador; e o compilador; Os dois aceitam como entrada um programa em linguagem de alto nvel (fonte) e produzem como sada um programa em linguagem de mquina (objeto). A diferena entre eles est na forma de executar a tarefa de traduo. O interpretador traduz para a linguagem de mquina e roda uma linha por vez, at que todo programa seja executado. J o compilador traduz para a linguagem de mquina todo o programa fonte e s ento ele executado. Existem linguagens de programao interpretadas e compiladas. O Cobol compilado, o Basic pode ser tanto compilado como interpretado e assim por diante. A linguagem Pascal tradicionalmente compilada. Por outro lado, o processo de compilao de certa forma moroso, pois deve seguir as seguintes etapas: 1-) Devemos utilizar um editor de textos para escrever e armazenar em disco o nosso programa fonte. 2-) Utilizar um compilador para traduzir o programa fonte para um programa em linguagem de mquina.

3-) Finalmente, devemos juntar ao programa compilado as diversas rotinas necessrias que, normalmente, ficam armazenadas numa biblioteca. Aps todo esse processo, suponha que voc chegue concluso de que o programa tenha que sofrer modificaes, pois bem, voc ter que repetir os trs passos descritos, e assim sucessivamente at que o programa fique ao seu gosto. O compilador Turbo Pascal facilita todo esse processo, pois ele possui numa forma integrada, um editor de textos compatvel com o Wordstar, um compilador e um linkeditor. O processo de compilao pode ser feito tanto em disco como em memria, o que faz com que ele seja muito rpido. Alm disso, o Turbo Pascal atende aos padres da linguagem Pascal definido por Niklaus Wirth, "o pai da linguagem". Na realidade, o Turbo Pascal vai muito alm, pois ele possui inmeras procedures e funes a mais do que as existentes no padro da linguagem Pascal. Equipamento necessrio. 486DX 50 com dois acionadores de discos de dupla face e alta densidade, um winchester de 340 megabytes, um monitor monocromtico e 640 Kbytes de memria RAM. No entanto, a configurao mnima poderia ser um IBM/PC-XT com um winchester de 40M. Identificadores So os nomes escolhidos para representar constantes, variveis, tipos, funes, procedimentos, programas, e registros. Estes nomes obedecem algumas regras: a) O identificador deve ter como primeiro caractere uma letra; b) Aps a primeira letra o identificador s pode conter: letras, dgitos ou underline '_'; c) O identificador no pode conter espaos. No existe distino entre letras maisculas e minsculas, mas elas devem ser usadas para dar mais clareza aos identificadores. Palavras Reservadas So palavras que tm sentido pr-determinado na linguagem, sendo elas:
ABSOLUTE AND ARRAY BEGIN CASE CONST DIV DO DOWNTO ELSE END EXTERNAL FILE FOR FORWARD FUNCTION GOTO IF IMPLEMENTATION IN INLINE INTERFACE INTERRUPT LABEL MOD NIL NOT OF OR PACKED PROCEDURE PROGRAM RECORD REPEAT SET SHL SHR STRING THEN TO TYPE UNIT UNTIL USES VAR WHILE WITH XOR

Comentrios Usam-se os smbolos '{' e '}' ou '(*' e '*)' para indicar que o texto entre os delimitadores um comentrio, o qual no tem sentido para o compilador.

Estrutura de um Programa Pascal Um programa em pascal tem a seguinte estrutura: Program NomePrograma; Uses ... { utilizao das bibliotecas } Const... { definio de constantes } Type ... { definio de novos tipos } Var ... { declarao das variveis } Procedure { definio de procedimentos } Function... { definio de funes } {------- Bloco de comandos principal ----} Begin <comando_1>; <comando_2>; ... <comando_n>; End. Onde NomePrograma identifica o programa. A disposio dos elementos do programa totalmente livre, podendo-se escrever vrios elementos numa mesma linha de texto ou um elemento em vrias linhas, porm os recursos de indentao devem ser utilizados para aumentar a clareza do cdigo. O ponto e vrgula ';' utilizado como separador, sendo aplicado nos seguintes casos: a) finalizar o cabealho do programa b) finalizar cada declarao c) separar os comandos Variveis e Constantes
Tipo Integer Real char Boolean String Intervalo -32768 a 32767 2.9*10-39 a 1.7*1038 caracteres do teclado TRUE e FALSE cadeia de caracteres Tamanho 2 bytes 6 bytes 1 byte at 256 bytes

Tipos de Variveis Disponveis

Variveis do Tipo Numrico BYTE*: Tipo numrico inteiro pode ter uma faixa de valores de 0 a 255 ocupando, apenas 1 byte de memria. COMP: Tipo numrico real tem uma faixa de valores que varia entre 9.2e18 a 9.2e18, ocupa 8 bytes de memria e tem entre 19 a 20 dgitos significativos. S pode ser utilizado com o coprocessador 8087 presente. Apesar de ser do tipo real, s armazena nmeros inteiros e s disponvel a partir da verso 4 do turbo. DOUBLE: Tipo numrico real tem uma faixa de valores que varia entre 5.0e-324 a 1.7e308, ocupa 8 bytes de memria e tem entre 15 a 16 dgitos significativos. Somente disponvel a partir da verso 4 do Turbo e seu uso s permitido com o co-processador 8087 presente. EXTENDED: Tipo numrico real tem uma faixa de valores que varia entre 3.4e-4932 a 1.1e4932 ocupa 10 bytes de memria e tem entre 19 a 20 dgitos significativos. Somente disponvel a partir da verso 4 do Turbo e seu uso s permitido com o coprocessador presente. INTEGER*: Tipo numrico inteiro, pode ter seus valores variando entre 32768 a 32767, ocupa 2 bytes de memria, utiliza o bit mais direita como sinalizador, se 0 positivo, se 1, somado ao valor e torna-o negativo. LONGINT: Tipo numrico inteiro, pode ter seus valores variando entre 2147483648 a 2147483647, ocupa 4 bytes de memria, utiliza o bit mais direita como sinalizador, se 0 positivo, se 1, somado ao valor e torna-o negativo. Somente disponvel a partir da verso 4 do turbo. REAL*: Tipo numrico real, pode ter seus valores variando entre 2.9e-39 a 1.7e38, ocupa 6 bytes de memria, tem de 11 a 12 dgitos significativos. SHORTINT: Tipo numrico inteiro, pode ter seus valores variando entre 128 a127, ocupa 1 byte de memria, utiliza o bit mais direita como sinalizador, se 0 positivo, se 1, somado ao valor e torna-o negativo. Somente disponvel a partir da verso 4 do turbo. SINGLE: Tipo numrico real, pode Ter seus valores variando entre 1.5e-45 a 3.4e38, ocupa 4 bytes de memria e tem de 7 a 8 dgitos significativos. WORD: Tipo numrico inteiro, pode Ter seus valores variando entre 0 a 65535, ocupa 2 bytes de memria. Somente disponvel a partir da verso 4 do turbo. Variveis do Tipo Alfanumrico CHAR*: Tipo alfanumrico pode ter como contedo um caracter ASCII de cada vez e ocupa 1 byte de memria. STRING*: Tipo alfanumrico, pode ter como contedo uma cadeia de caracteres. O nmero de bytes que ocupa na memria pode variar entre 2 a 256 bytes, ficando este dependente da quantidade mxima de caracteres definidos para a cadeia. O primeiro byte contm a quantidade efetiva de caracteres da cadeia. Variveis do Tipo Lgico

BOOLEAN*: Tipo lgico pode assumir somente os valores TRUE ou FALSE e ocupa 1 byte de memria.

Declaraes: Pode-se declarar bibliotecas (Uses), constantes (Const), variveis (Var), novos tipos (Type), subPrograma (Procedure e Function). a) Declarao de Bibliotecas (Uses): Permite a utilizao de bibliotecas de subprogramas existentes na linguagem Pascal ou criadas pelo programador. Estas bibliotecas so 'importadas' para o programa quando declaradas. Ex:Uses crt, dos, graph, printer; Torna disponvel todos os comandos para formatao de tela (crt), manipulao do sistema operacional (dos) e comandos grficos (graph) e impresso (printer). b) Declarao de Constantes (Const): Certos valores que aparecem em diversas partes do programa e que no devem ser alterados, podem ser declarados como constantes. Ex.: Const polegada = 2.54; NotaMaxima = 5.0; LimiteCompra = 100000000.0; c) Declarao de Variveis: As definies de variveis em um programa, devem ser precedidas da declarao VAR. Cada varivel que tiver sua utilizao prevista no programa, deve Ter um nome de identificao e o seu tipo. O nome de uma varivel deve ser nico em cada bloco, pode ter qualquer tamanho, mas apenas os primeiros 63 caracteres so significativos. Pode ser composto por letras, nmeros e sublinhado _, porm deve sempre iniciar com uma letra. Tambm no pode ser uma palavra reservada. aconselhvel que se defina o nome da varivel de forma que este nos lembre a funo que ela ter no contexto do programa. O formato da declarao de variveis deve ter a seguinte sintaxe: VAR nome_da_varivel, nome_da_varivel2 : tipo; nome_da_varivel, nome_da_varivel2 : tipo; EXEMPLO: VAR indice : BYTE; resp : CHAR; valor : REAL; palavra : STRING (20); s_n : BOOLEAN; i, j, w : INTEGER; dia, ms, ano : WORD; Obs: As variveis no so automaticamente inicializadas quando declaradas. Devendo-se tomar cuidado especial com as variveis que serviro como acumuladores.

d) Declarao de Novos Tipos A declarao de tipos (Type) pode ser usada para nomear certas estruturas que sero freqentemente usadas no programa. Ex: Type palavra = String[35]; TipoSalario = real; Var a,b : palavra; salario = TipoSalario; Operaes Bsicas As expresses so definidas de acordo com os operadores:

Atribuio : : = Aritmticos: normalmente utilizados em operaes entre valores numricos inteiros ou reais. Adio de nmeros inteiros ou reais. Subtrao e negao de valores inteiros ou reais. Multiplicao de nmeros inteiros ou reais. Diviso com resultado real, para operandos inteiros ou reais. Resto de uma diviso entre nmeros inteiros. Diviso entre nmeros inteiros com resultado tambm inteiro.

Ex: Media := (Nota1+Nota2+Nota3)/3;

+ * / MOD DIV

Relacionais: Podem ser usados com todos os tipos, normalmente, so usados em expresses condicionais, retornando sempre um resultado lgico TRUE ou FALSE. Igual Diferente Maior Que Menor Que Maior ou Igual a Menor ou Igual a Booleanos: Utilizados entre operaes que retornam valores lgicos (verdadeiro ou falso). Inverte o resultado de uma expresso lgica. Somente resulta em verdadeiro se ambos operandos forem verdadeiros. verdadeiro quando pelo menos um dos operandos for verdadeiro. Exclusive or, s verdadeiro se apenas um dos operando for verdadeiro. Verdadeiro se um operando pertencer a um conjunto. String Permite a concatenao entre strings, seqncias de caracteres.

= <> > < >= <=

NOT AND OR XOR

Conjuntos:

IN

not1 *, /, div, mod, and2 +, -, or3 =,<>, <, <=, >4

O uso de parntese prioriza a execuo de qualquer operador. Vrios operadores possuem a mesma prioridade (p.ex. * e /) e neste caso a prioridade passa a ser dada pela ordem de escrita, ou, seja da esquerda para direita. Funes e Procedimentos para Manipulao Numrica Segue abaixo, a relao de funes e procedimentos de manipulao numrica do turbo pascal:

ABS: uma funo que retorna o valor absoluto de uma expresso numrica. Pode ser utilizada na declarao de constantes, e na edio de watches. Ex. r : = ABS(-4.5); r : = 4.5;

ARCTAN: Esta funo retorna o arco de tangente do argumento utilizado. O turbo pascal no dispe de funo para tangente, porm podemos simul-la utilizando seno/co-seno. Ex. r : = ARCTAN(0.1);

COS: Esta funo nos retorna o valor de co-seno de um argumento passado como parmetro. Ex. r : = COS(PI);

DEC: Este um procedimento que permite-nos decrementar uma varivel numrica inteira, em uma ou mais unidades. Se no for usado parmetro para decremento este ser assumido 1 Ex. para r: =10; DEC ; r:=9; ou DEC (r,7); r:=3;

EXP: Esta funo retorna o valor exponencial do argumento passado como parmetro. Ex. r : = EXP(1.0); r : = e1;

A potenciao A = BC ( A igual a B elevado C ) obtem-se da seguinte forma: A := exp(C*In(B))

FRAC: A funo FRAC retorna a parte fracionria do argumento passado como parmetro. No caso de um nmero negativo, a parte fracionria tambm ser negativa. Ex. r : = FRAC(-15.36); r:=-0.36;

INC: Este um procedimento que permite-nos incrementar uma varivel numrica inteira, em uma ou mais unidades e se no for usado parmetro para incremento, este ser assumido 1. Ex. para r : = 10; INC(r) ; r : = 11; ou INC (r,7); r : = 17;

INT: Funo que nos retorna o valor inteiro de uma varivel do tipo real. importante notar que esta funo retorna o contedo inteiro, porm no formato real. Ex. r : = INT(234.678); r : = 234;

LN: Esta funo nos retorna o logaritmo natural do argumento passado como parmetro. Ex. r : = LN(0); r : = 1;

PI: Esta funo nos retorna o valor de PI, 3.1415926535897932385. Ex. r : = PI; r : = 3.1415926535897932385;

ODD: Esta funo nos retorna um valor verdadeiro se o argumento passado como parmetro for impar, caso seja contrrio retorna falso. Ex. r1 : = ODD(5); r1 : = true; r2 : = ODD(4); r2 : = false;

ROUND: Esta funo nos retorna um nmero real convertido em inteiro e arredondado, se o valor decimal estiver abaixo de 5, o nmero arredondado para baixo caso contrrio ser arredondado para cima. Ex. r1 : = ROUND(5.65); r1 : = 6; r2 : = ROUND(5.44); r2 : = 5;

SIN: Esta funo nos retorna o valor do seno de um argumento passado como parmetro. Ex. r : = SIN(PI);

SQR: Esta funo nos retorna o parmetro elevado ao quadrado. Ex. r : = SQR(2); r : = 4;

SQRT: Esta funo retorna a raiz quadrada do valor do argumento usado como parmetro. Ex. r : = SQRT(4); r : = 2;

TRUNC: Esta funo retorna um valor inteiro truncado nas casas decimais. Ex. r1 : = TRUNC(-5.65); r : = -5; SUCC(N): Retorna o valor sucessor a n PRED(N): Retorna o valor antecessor a n

ODD( ): Retorna TRUE se uma determinado valor numrico FOR impar, FALSE caso contrrio

Ex: c: =odd(65); ( TRUE ) PI : Retorna o valor de PI

Ex: Resultado: =PI ; x: =PI; ( 4.1415926535)

Funes e Procedimentos para Manipulao de Strings e de Converses

LENGTH: A funo LENGHT retorna a quantidade de caracteres contidos em uma string.. Ex. s : = LENGHT(texto); s : = 5;

CONCAT: A funo CONCAT nos retorna uma string, que a unio entre uma ou mais strings passadas como parmetro na funo. Caso o resultado seja uma string de tamanho maior que 255, esta ser truncada em 255. Esta funo pode ser substituda pelo operador mais(+). Ex. s1 : = Bom ; s2 : = Dia; s : =CONCAT (s1, s2); s : = Bom Dia;

DELETE: O procedimento DELETE permite-nos retirar um ou mais caracteres de uma determinada string, passada como parmetro, em uma posio predefinida.. Ex. s : = DELETE (abcd,2,2); s : = ad ;

COPY: A funo COPY retorna uma substring de uma string passada como parmetro, de acordo com a posio e quantidade de caracteres predefinidos. Ex. s : = COPY(Bem-Te-Vi,4,5); r : = Te-Vi;

INSERT: Procedimento que permite inserir uma substring, em uma string em uma posio preestabelecida. Caso a soma da string original mais a fonte seja maior que 255 bytes, ser truncada em 255. Ex. r : = INSERT(.,123456,2); r : = INSERT(,,123456,5); r : = 1.234,56;

POS: Esta funo retorna a posio que uma substring ocupa dentro de uma string passada como parmetro. Se a funo retornar 0, porque o elemento de pesquisa no foi encontrado na string; Ex. A := 'FUMEC'; B :='M'; pos(A,B) VAL: Este procedimento converte uma string passada como parmetro para valor numrico. Caso o contedo da string no seja numrico, o fato ser informado em uma varivel de retorno de erro. Se o retorno de erro for <>0, implica em um erro de converso. Esta a posio onde ocorreu o primeiro erro. X :='1234'; val(X,Y,Z); a varivel Y conter o nmero 1234 e Z valer zero.

STR: Este procedimento permite a converso de uma varivel numrica em string, inclusive determinando o tamanho da string e quantas casas decimais, para nmeros reais, dever ter a mesma. Ex. x := 15; str(X,Y); a varivel Y conter a string 15.

CHR( ) : Retorna um caracter da tabela ASCII de acordo com um determinado valor numrico

Ex: Resultado: =CHR(Valor) ; X1: =CHR( 65 ); ( A ) WINDOW( ): Defini uma janela de texto cujo canto esquerdo superior x1,y1 e canto inferior direito x2,y2. Aps esta instruo, as instrues ClrScr, Write Writeln agem somente dentro da janela recm definida. A instruo Gotoxy passa a utilizar como referencial o ponto x1,y1 que passa a ser considerado 1,1.

Ex: WINDOW(x1,y1,x2,y2); WINDOW(10,10,70,20); ORD( ) : Retorna qual o nmero na tabela ASCII de um determinado caracter

Ex: Resultado: =ORD(Caracter) ; x: =ORD(A); ( 65 )

Comandos Simples de Entrada e Sada Os comandos de entrada e sada nos permite uma interao maior com o usurio. Usaremos somente o dispositivo padro de entrada/sada, ou seja, Console (Video+Teclado).

Comandos de Entrada: READ: Este procedimento permite a entrada de dados. No o utilize para receber variveis via teclado, esta uma restrio do turbo. Este comando s dever ser utilizado para receber informaes de outros dispositivos, normalmente arquivos em disco. Sintaxe: READ (varivel1, varivel2, ...,varivel n);

READLN: Procedimento que permite a entrada de dados em variveis oriundas de diversos dispositivos. Ao utilizarmos esta procedure, estaremos transferindo informaes do dispositivo de entrada para uma ou mais variveis. Se este dispositivo for a console, a entrada de dados estar limitada em 128 caracteres. Sintaxe: READLN (varivel1, varivel2, ...,varivel n);

OBS.: Quando for necessrio mais de uma entrada read ou readln, os dados a serem digitados no devem ser separados por vrgulas e sim por espao (ou Enter). OBS.: conveniente pedir apenas uma entrada de dado por cada comando read ou readln, para que no ocorra inconvenientes na entrada de textos.

Comandos de Sada: WRITE: Procedimento que permite escrever em um dispositivo de sada, normalmente o vdeo. Sintaxe: WRITE (Este apenas um exemplo,varivel1, varivel2);

WRITELN: Procedimento que permite escrever em um dispositivo de sada, normalmente o vdeo, avanando o cursor para o incio da prxima linha. Sintaxe: WRITELN (Este apenas um exemplo,varivel1, varivel2);

Sada De Informaes Na Impressora:

Os comandos que acionam a impressora so os mesmos do vdeo, ou seja, write e writeIn, acrescidos do parmetro (lst). Exemplo: writeIn(lst,'VOLUME = ', LARGURA*COMPRIMENTO*ALTURA,' cm3'); OBS.: O comando de mudana de linha (line feed) dado aps a impresso no exemplo anterior. A saida do comando de impresso (VOLUME = 60 cm3) seria a mesma com os comandos abaixo: write(lst,'VOLUME = ');

write(lst,LARGURA*COMPRIMENTO*ALTURA); write(lst,'cm3'); Outros Comandos

CLRSCR: Este procedimento nos permite limpar a tela e automaticamente colocar o cursor no canto superior esquerdo da mesma. a contrao das palavras inglesas CLeaR e SCReen. Sintaxe: CLRSCR; DELAY: Este procedimento permite-nos fazer uma pausa programada por um determinado intervalo de tempo, antes de ser executado o prximo comando. Sintaxe: DELAY(2000) pausa de 2s. GOTOXY: Este procedimento nos permite posicionar o cursor em um ponto qualquer da tela, referenciado pelos eixos X e Y, ou seja, coluna e linha. Tanto a coluna como a linha devem ser vlidas, caso contrrio o procedimento no ser executado, no causando nenhum dano ao programa. Sintaxe: GOTOXY(N Coluna, N Linha); KEYPRESSED: Esta funo retorna verdadeiro caso tenha sido pressionada alguma tecla. Est disponvel na unidade CRT.. Sintaxe: KEYPRESSED; REPEAT UNTIL KEYPRESSED permanece no programa at que seja pressionada uma tecla. READKEY: Retorna o valor de uma tecla pressionada. No necessrio teclar <enter> aps digitar a opo. Sintaxe: READKEY; UPCASE: Esta funo retorna o caractere contido no parmetro em maisculo: Sintaxe: UPCASE (caracter); WHEREX: Esta funo faz parte da unidade CRT, e retorna a coordenada X referente posio atual do cursor em relao WINDOW, ou seja, a coluna em que se encontra o cursor. Sintaxe: WHEREX ; WHEREY: Esta funo faz parte da unidade CRT, e retorna a coordenada Y referente posio atual do cursor em relao WINDOW, ou seja, a linha em que se encontra o cursor. Sintaxe: WHEREY ; RANDOMIZE - Inicializa o gerador de nmeros aleatrios com um valor aleatrio. RANDOM: Retorna um nmero real randmico entre 0 e 1. RANDOM(X): Retoma um nmero real randmico entre 0 e X. BREAK: Interrompe algum comando de repetio (For, While, Repeat). HALT: Interrompe a execuo do programa e retorna ao sistema operacional. EXIT: Sai do bloco corrente. Estando numa sub-rotina, retoma ao bloco onde foi feita a sua chamada. Se usado no programa principal, termina a execuo do mesmo.

TEXTBACKGROUNG: Este procedimento permite selecionar a cor de fundo, que representado por um valor numrico inteiro que pode variar de 0 at 7, correspondendo s seguintes cores: Sintaxe: TEXTBACKGROUND(valor);

Tabela de cores
0 1 2 3 4 5 6 7 Black Blue Green Cyan Red Magenta LightGray White Preto Azul Verde Ciano Vermelho Magenta Cinza-claro Branco

TEXTCOLOR: Este procedimento permite que selecionemos a cor do texto que aparecer no vdeo, sendo as cores representadas por valores numricos inteiros que variam de 0 a 15, que correspondem s seguintes cores: Sintaxe: TEXTCOLOR (valor);

Tabela de cores
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Black Blue Green Cyan Red Magenta Brown LightGray DarkGray LightBlue LightGreen LightCyan LightRed LightMagenta Yellow White Blink Preto Azul Verde Ciano Vermelho Magenta Marrom Cinza-claro Cinza-escuro Azul-claro Verde-claro Ciano-claro Vermelho-claro Magenta-claro Amarelo Branco Piscante

Propriedades de Tela O monitor tem a medida de 80 (altura) x 25 (largura) e expresso por X,Y. A cor padro das letras so : Letra cinza clara e fundo preto.

Estruturas Condicionais: Comando IF: IF: Este comando permite que alteremos a lgica de um programa, de acordo com uma determinada condio. Sintaxe: a) Estrutura simples: if <condio> then begin <bloco-de-comandos>; end; b) Estrutura composta: if <condio> then begin <bloco-de-comandos>; end else begin <bloco-de-comandos>; end; onde <condio> uma expresso lgica qualquer. Exemplo: if A>B then writeln (A) else writeln (B); Ao ser executado este comando, a expresso 'A > B' avaliada. Se o valor lgico for verdadeiro executado o primeiro comando writeln (A); . Se o valor lgico for negativo ento o segundo comando (writeln (B);) executado. Construir um programa para verificar se um nmero que foi digitado primeiro maior que o que foi digitado por ltimo. program TESTE_SE; uses CRT; var N1, N2 : real; begin
As palavras chaves begin e end s devero ser usadas se o bloco de comandos tiver mais de um comando. Caso tenha apenas um comando, no devero ser utilizados.

Antes da palavra chave else no se usa ponto e vrgula (;).

clrscr; writeln (Digite os Nmeros); readln (N1, N2); if N1 > N2 then writeln (N1:3:2 , maior que , N2:3:2); fim. Construir um programa para verificar qual o maior entre dois nmeros digitados. No exemplo anterior, quando o primeiro valor menor que o segundo nada acontecer. Para que tivssemos uma mensagem para esta situao, deveramos usar o else, veja exemplo abaixo : program TESTE_SENO; uses CRT; var N1, N2 : real; begin Observe que no comando que antecede a clrscr; palavra else , no usamos o (;) writeln (Digite os nmeros); readln (N1, N2); if N1 > N2 then writeln (N1:3:2 , maior que , N2:3:2) else writeln (N2 :3:2, maior que , N3:3:2); end. Construir um programa para verificar qual a relao entre dois nmeros digitados. Agora deveremos no s exibir uma mensagem quando encontrarmos o maior entre os nmeros digitados, deveremos tambm, considerar o fato de que os nmeros podem ser iguais. programa TESTE_SE_SENO; uses CRT; var N1, N2 : real; begin clrscr; writeln (Digite os nmeros); readln (N1, N2); if N1 > N2 then writeln (N1:3:2 , maior que , N2:3:2) else if N1 < N2 then writeln (N2:3:2 , maior que , N1:3:2) else writeln (Os nmeros digitados so iguais); end. Observe que: nestes exemplos, todos os blocos de comando s contm um comando a ser executado. Portanto, no utilizamos as palavras chaves begin e end.

Construir um programa que calcule a raiz da equao y = ax +b. program CALCULARAIZ; uses CRT; var A, B, X : real; begin clrscr; writeln (Entre com um valor para A e B); readln (A, B); if (A = 0) then writeln ('No h raizes') else Observe que agora temos 2 begin comandos pertencentes ao bloco de X := - (B / A); comandos do else. Portanto, o bloco dever ser delimitados por writeln ('Raiz: ', X:3:2); begin e end. end; fim. Comando CASE: CASE: Uma outra estrutura condicional o comando CASE. Sintaxe: a) Estrutura simples: case <expresso> of op1 : <bloco-de-comandos>; op2 : <bloco-de-comandos>;
. . .

op1 : <bloco-de-comandos>; end; b) Estrutura condicional: case <expresso> of op1 : <bloco-de-comandos>; op2 : <bloco-de-comandos>;
. . .

op1 : <bloco-de-comandos>; else <bloco-de-comandos>; end; Construir um programa que some ou diminua dois nmeros, a depender da opo desejada pelo usurio. program TESTE_CASE; uses CRT; var OP VALOR1, VALOR2 begin clrscr;

: :

char; real;

writeln (Calculadora Eletrnica que Soma e Subtrai); writeln; write (Entre com o primeiro valor : ); readln (VALOR1); writeln; write (Entre com o tipo de operao: ( + , - ) ); readln (OP); writeln; write (Entre com o segundo valor : ); readln (VALOR2); writeln; case OP of + : writeln (A soma entre os valores : ,VALOR1+VALOR2:5:2); - : writeln (A diferena entre os valores : ,VALOR1-VALOR2:5:2); end; DELAY (2000); end. Construir um programa que efetue uma operao desejada pelo usurio e, caso o usurio digite uma opo invlida, retorne mensagem de erro. program TESTE_CASE2; uses CRT; var OP : char; VALOR1, VALOR2 : real; begin clrscr; writeln (Calculadora Eletrnica que Soma e Subtrai); writeln; write (Entre com o primeiro valor : ); readln (VALOR1); writeln; write (Entre com o tipo de operao: ( + , - ) ); readln (OP); writeln; write (Entre com o segundo valor : ); readln (VALOR2); writeln; case OP of + : writeln (A soma entre os valores : ,VALOR1+VALOR2:5:2); - : writeln (A diferena entre os valores : ,VALOR1-VALOR2:5:2); else write (Opo invlida ); end; DELAY (2000); end.

Estruturas de Repetio: A estrutura de repetio fundamental para implementao de algoritmos. Permite que um determinado bloco de comandos (um comando ou vrios) seja executado um certo nmero de vezes. O Pascal disponibiliza para seus usurios trs estruturas de repetio. Vamos, a partir de agora, estud-las. FOR: Permite que executemos um bloco de comandos por um certo nmero de vezes predeterminado. Chamamos essa varivel de contador, pois nela que estar Sintaxe:
sendo armazenado o nmero de vezes que o bloco foi executado. Observe que nessa estrutura o incremento da varivel I (contador) feito de forma automtica.

for I: = <valor-inicial> to <valor-final> do begin Deveremos usar os <bloco-de-comandos>; delimitadores de bloco-deend; comandos (begin e end)
apenas quando no bloco existir mais de um comando.

Chamamos cada execuo de um bloco-de-comandos na estrutura de repetio de LOOP.

for I : = <valor-inicial> downto <valor-final> do begin <bloco-de-comandos>; end;

Neste caso, a varivel de controle, o contador, decrementado at que o seu valor seja menor que o final.

Construir um programa que escreva os 100 primeiros nmeros inteiros positivos. program EXEMPLO1; uses CRT; var I : integer ; begin crlscr; for I : = 1 to 100 do writeln (I); DELAY (2000); end.

O comando de escrita ser executado 100 vezes. A varivel I ser automaticamente incrementada de 1 a cada execuo, at que o nmero seja igual a 100.

Observe que no foi necessrio delimitar o bloco com as palavras chaves begin e end, pois dentro do bloco-decomandos existe apenas um comando.

Construir um programa que some os 100 primeiros nmeros inteiros positivos: program EXEMPLO2; uses CRT; var I, SOMA : integer; begin SOMA : = 0;

Chamamos a varivel SOMA deste exemplo de acumulador, pois ela estar acumulando o resultado da soma do novo nmero (no caso, armazenado na varivel I) com a soma feita anteriormente, at que o contador seja igual a 100.

for I : = 1 to 10 do SOMA : = SOMA + I; writeln (O resultado da soma : , SOMA); DELAY (2000); end. Construir um programa que exiba os nmeros pares compreendidos entre 1 e 100: program EXEMPLO3; uses : CRT; var I : integer; begin clrscr; for I : = 1 to 100 do if (I mod 2 = 0) ento writeln (I); DELAY (2000); fim.

Verifica se o nmero par

Construir um programa que exiba a soma dos nmeros pares compreendidos entre 1 e 100: program EXEMPLO4; uses CRT; var Neste exemplo, realizada uma verificao se I, SOMA : integer; o nmero em questo par. Caso seja, ele ser somado ao resultado da soma dos pares begin anteriores, caso no, o contador incrementado clrscr; e o prximo nmero passa a ser verificado. SOMA : = 0; for I : = 1 to 100 do if (I mod 2 = 0) then SOMA : = SOMA + I; writeln (O resultado da soma , SOMA); DELAY (2000); end.

REPITA AT-QUE: Um bloco de comando ser executado pelo menos uma vez, e ser repetido at que a condio associada seja satisfeita. Sintaxe: repeat <bloco-de-comandos>; until <condio>;
Nessa estrutura de repetio, o bloco de comando no delimitado pelas palavras chaves begin e end. A prpria estrutura delimita os comandos associados a ela, atravs das palavras repeat e until.

Construir um programa que escreva os 100 primeiros nmeros inteiros positivos. Use a estrutura de repetio: repeat until program EXEMPLO1; uses CRT; var I : integer; begin I : = 1; repeat writeln (I); I : = I + 1; until I > 100; DELAY (2000); end.

O comando de escrita ser executado 100 vezes. Observe que essa estrutura no incrementa o valor do contador I automaticamente, preciso que isso seja feito atravs deste comando de atribuio. Caso voc esquea de incrementar o contador, o programa no sair do lao de repetio, pois a condio nunca ser satisfeita. Quando isso acontece, dizemos que a execuo do programa entrou em loop infinito. Portanto, quando estiver utilizando esta estrutura no esquea de incrementar o contador.

Construir um programa que some os 100 primeiros nmeros inteiros positivos: Use a estrutura de repetio: repeat until. program EXEMPLO2; uses CRT; var I, SOMA : integer; begin clrscr; SOMA : = 0; I : = 0; repeat SOMA : = SOMA + I; I : = I + 1; until I > 100; writeln (O resultado da soma : , SOMA); DELAY (2000); end. Construir um programa que exiba os nmeros pares compreendidos entre 0 e 100. Use a estrutura de repetio: repeat until.

program EXEMPLO3; uses CRT; var I : integer; begin Clrscr; I : = 0; repeat se RESTO (I, 2) = 0 ento; escreva (I); I : = I + 1; until I > 100; DELAY (2000); fim. Construir um programa que exiba a soma dos nmeros pares compreendidos entre 0 e 100. Use a estrutura de repetio: repeat until. program EXEMPLO4; uses CRT; var I, SOMA integer; begin Clrscr; SOMA : = 0; I : = 0; repeat if (I mod 2 = 0) then SOMA : = SOMA + I; I : = I + 1; until I > 100; writeln (O resultado da soma , SOMA); fim.

WHILE DO: O bloco s executado enquanto a condio for satisfeita. Caso a condio no seja satisfeita logo no incio, ele no ser executado nenhuma vez. Sintaxe: Deveremos usar os delimitadores de bloco-dewhile <condio> do bloco existir mais de um comando. begin <bloco-de-comandos>; end;
comandos (begin e end) apenas quando no

Construir um programa que escreva os 100 primeiros nmeros inteiros positivos. Use a estrutura de repetio: while do. program EXEMPLO1; uses CRT; var I integer; begin clrscr; I : = 1; while I < = 100 do begin writeln (I); I : = I + 1; end; DELAY (2000); end.

O comando de escrita ser executado 100 vezes. Observe que essa estrutura no incrementa o valor do contador I automaticamente, preciso que isso seja feito atravs deste comando de atribuio. Caso voc esquea de incrementar o contador, o programa no sair do lao de repetio, pois a condio nunca ser satisfeita. Quando isso acontece, dizemos que a execuo do programa entrou em loop infinito. Portanto, quando estiver utilizando esta estrutura no esquea de incrementar o contador.

Construir um programa que some os 100 primeiros nmeros inteiros positivos: Use a estrutura de repetio: while do. program EXEMPLO2; uses CRT; var I, SOMA : integer; begin clrscr; SOMA : = 0; I : = 0; while I < = 100 do begin SOMA : = SOMA + I; I : = I + 1; end; writeln (O resultado da soma : , SOMA); DELAY (2000); end. Construir um programa que exiba os nmeros pares compreendidos entre 0 e 100. Use a estrutura de repetio: while do.

program EXEMPLO3; var I : integer; Begin clrscr; I : = 1; while I > = 100 do begin if ( I mod 2 = 0 ) then writeln (I); I : = I + 1; end; DELAY (2000); end. Construir um programa que exiba a soma dos nmeros pares compreendidos entre 0 e 100. Use a estrutura de repetio: while do. program EXEMPLO4; uses CRT; var I, SOMA integer; begin clrscr; SOMA : = 0; I : = 1; while I < = 100 do begin if I mod 2 = 0 then SOMA : = SOMA + I; I : = I + 1; end; writeln (O resultado da soma : , SOMA); DELAY (2000); end. Variveis Compostas: Vetores e Matrizes

ARRAY: A palavra ARRAY define a construo de vetores e matrizes , talvez seja uma das estruturas de dados mais conhecidas, pois utilizada em diversas linguagens de programao.

Sintaxe para vetores var <identificador> : array [li. . ls] OF tipo; onde: <identificador> o nome da varivel; li : limite inferior do intervalo de variao do ndice ls : limite superior do intervalo de variao do ndice ls>=li Sintaxe para matrizes var <identificador> : array [li1. . ls1, li2. .ls2] OF tipo; onde: <identificador> o nome da varivel composta; li1. . ls1, li2. .ls2: so os limites do intervalo de variao dos ndices Construir um programa que leia e escreva um vetor de tamanho 10. program EXEMPLO1; uses CRT; var A : array [1..10] of integer; I : integer; begin clrscr; for I : = 1 to 10 do read ( A[I] ); for I : = 1 to 10 do write ( A[I], ); DELAY (2000); end. Construir um programa que leia e escreva uma matriz de ordem 3x3. program EXEMPLO1; uses CRT; var A : array [1..10] of integer; I , J: integer; {VARIVEIS I, J SO NDICES DA MATRIZ} begin clrscr; for I : = 1 to 3 do for J : = 1 to 3 do read ( A[I , J] ); for I : = 1 to 3 do begin for J : = 1 to 3 do write ( A[I , J], ); writeln; end; DELAY (2000); end. OBS: Os elementos que formam as matrizes so conhecidos como variveis indexadas. Estas variveis alm de serem indexadas, podem ser utilizadas de todas as formas que so utilizadas as variveis comuns (clculos, impresses, etc...).

Declarao de outros tipos especiais de dados (type) - SCALAR (ESCALAR); - SUBRANGE(SUBINTERVALO); - SET(CONJUNTO); - RECORD (REGISTRO). SCALAR "SCALAR TYPE" um tipo de dado que se assemelha a um vetor com seus elementos ordenados, sendo que o prprio usurio pode definir os seus tipos de dados. Por exemplo, se criarmos dados do tipo Dias da Semana (DOMINGO, SEGUNDA, etc), significa que a varivel associada a este tipo, somente poder assumir os dados que so os Dias da Semana. Exemplo: program Prog31; type Semana = (DOMINGO,SEGUNDA,TERA,QUARTA,QUINTA,SEXTA,SABADO); var DIA : Semana; begin for DIA := DOMINGO to SABADO do begin .......... .......... .......... .......... end; end. OBS: - O comando type foi usado para a declarao (definio) do tipo. - O tipo de dado Semana composto pelos valores definidos no programa, que so os Dias da Semana (de DOMINGO a SBADO). - A varivel DIA assume valores que so os Dias da Semana e usada para controlar o comando for. - A repetio executada sete vezes e sero atribudas varivel DIA todas as sete possibilidades definidas. Um escalar definido pelo usurio no pode ser impresso atravs de um comando write ou writeln, devendo ser detectado de modo indireto como no exemplo a seguir., que se utiliza das 4 estaes do ano:

program Prog32; type Estacoes = (VERO, OUTONO, INVEMIO, PRIMAVERA); var EST : Estacoes; begin for EST := PRIMAVERA downto VERAO do begin case EST of VERO : begin Writeln('MUITO CALOR'); end; OUTONO : begin Writeln('AS FOLHAS CAEM'); end; INVERNO : begin Writeln('MUlTO FRIO'); end; PRIMAVERA : begin Writeln('MUITAS FLORES'); end; end; end; end. As sadas do programa anterior, sero as seguintes: MUITAS FLORES MUITO FRIO AS FOLHAS CAEM MUITO CALOR No exemplo acima no comando for foi utilizado a clusula downto, que inverteu a ordem de impresso dos dados tipo Estaes. SUBRANGE (SUBINTERVALO): Os tipos integer, real, byte, char e boolean tambm fazem parte dos ESCALARES, sendo que j esto PREDEFINIDOS. Todos os dados do tipo escalar apresentam subintervalos (subrange) em que a sua existncia VLIDA. O tipo de definio de dados conhecido como subrange (subintervalo) possui como caracterstica principal, a utilizao de apenas trechos de algo maior e mais completo. program Prog33. type Nalunos = 1..50; var ALUNO : Nalunos; begin writeln('DIGITE O NMERO DO ALUNO:'); readln(ALUNO); writeIn(ALUNO); end.

No programa anterior, suponha que o nmero de alunos que possam pertencer turma noturna de LPT1 seja 50, surgindo assim, a limitao do seu valor entre 1 e 50. Portanto, no existe a possibilidade de a varivel encarregada de controlar este nmero ultrapassar o limite inferior e o superior. Por esse motivo, declarou-se que o tipo de dados Nalunos est na faixa de 1..50 e que, a varivel ALUNO do tipo Nalunos. O tipo Nalunos um subintervalo de um ESCALAR predefinido. Outro Exemplo: prograrn Prog34; type Minusc = 'a'..'z'; Meses = (JAN,FEV,MAR,ABR,MAI,JUN,JUL,AGO,SET,OUT,NOV,DEZ); Prisemest = JAN..JUN; Segsemest = JUL..DEZ; OBS: - No exemplo anterior, o tipo de dados Minusc um subintervalo do escalar char (Letras minsculas do Alfabeto). - O tipo de dados Prisemest (meses do primeiro semestre) e Segsemest (meses do segundo semestre) so subintervalos de um tipo de dados definidos como Meses. -O Turbo Pascal checa a validade dos subintervalos somente quando a diretiva de compilao R estiver ativada. CONJUNTO SET: Os dados do tipo conjunto so reunies de diversos elementos do mesmo tipo (escalar), exceto os nmeros reais. Vejamos o exemplo abaixo: program Prog35 ; type Numeros = set of byte; var PRIMO, MPAR, PAR, FINAL1, FINAL2 : Numeros; begin PRIMO := [1,2,3,5,7]; MPAR := [1,3,5,7,9]; PAR := [2,4,6,8]; FINAL1 := PRIMO + MPAR; FINAL2 := PRIMO * PAR; end. O programa acima possui as seguintes caractersticas: - Define-se Numeros como do tipo de dado set of formado por nmeros do tipo byte. - Definem-se as variveis de conjunto PRIMO, MPAR, PAR, FINAL1 e FINAL2 como do tipo Numeros. - Atribuem-se os respectivos nmeros (maior que 0 e menor que 10). - Executa-se a operao de unio (+) e interseco (*) entre os conjuntos. - As variveis de conjunto FINAL1 e FINAL2, contero os seguintes elementos: FINAL1 : 1,2,3,5,7,9 FINAL2 : 2

- A operao dos conjuntos obedece s seguintes notaes: Decises lgicas com conjuntos: A = B ---> A igual a B A <> B ---> A diferente de B A >= B ---> A contm B A <= B ---> A est contido em B A in B ---> .A pertence aB Exemplo utilizando o operador in: program Prog36; var LETRA : char; begin write('DIGITE UMA LETRA MINSCULA ENTRE a e f :'); readln(LETRA); if LETRA in ['a'..'f] then begin writeIn('POSITIVO'); end else begin writeInI'NEGATIVO'); end; end. OBS: - O programa anterior imprime 'POSITIVO' se a letra digitada estiver conforme o que foi solicitado na mensagem. Caso contrrio, o comando if desvia o processamento para imprimir a mensagem 'NEGATIVO'. - Um detalhe importante que o set (conjunto) foi definido na prpria sentena do if. Poderia tambm ser declarado na forma normal, utilizando-se type e var.