Você está na página 1de 51

FIT - Faculdade de Informtica de Taquara Curso de Sistemas de Informao

Apostila da disciplina de PROGRAMAO I - Linguagem Pascal -

Profa. Flvia Pereira de Carvalho

Agosto de 2006

Apostila de Programao I - Linguagem Pascal

Sumrio Pgina
1 INTRODUO ............................................................................................................................................................3 2 PROGRAMAS E PROGRAMAO ..........................................................................................................................3 3 LINGUAGEM DO COMPUTADOR...........................................................................................................................4 4 LINGUAGENS DE ALTO NVEL ..............................................................................................................................5 4.1 LINGUAGEM PASCAL ...............................................................................................................................................6 4.2 TIPOS DE INSTRUES DE ALTO NVEL .....................................................................................................................6 5 CONVERSO DO PROGRAMA-FONTE..................................................................................................................8 6 SOFTWARE QUE VOC PRECISA TER OU CONHECER ....................................................................................9 7 TIPOS DE PROGRAMAS .........................................................................................................................................10 8 ESTRUTURA DE UM PROGRAMA........................................................................................................................11 9 TIPOS DE DADOS.....................................................................................................................................................12 10 OPERADORES ARITMTICOS............................................................................................................................14 11 EXPRESSES ARITMTICAS..............................................................................................................................14 11.1 FUNES NUMRICAS PREDEFINIDAS ...................................................................................................................15 12 FUNES DE FORMATAO DA TELA............................................................................................................16 13 EXPRESSES LGICAS........................................................................................................................................16 13.1 RELAES ...........................................................................................................................................................16 13.2 OPERADORES LGICOS .........................................................................................................................................17 13.3 PRIORIDADES .......................................................................................................................................................19 14 ESTRUTURA CONDICIONAL (SELEO)........................................................................................................20 14.1 IF-THEN-ELSE .................................................................................................................................................20 14.2 CASE.................................................................................................................................................................23 15 ESTRUTURAS DE REPETIO ...........................................................................................................................24 15.1 WHILE-DO........................................................................................................................................................24 15.2 REPEAT-UNTIL.................................................................................................................................................25 15.3 FOR-TO-DO .......................................................................................................................................................26 16 EXPRESSES LITERAIS.......................................................................................................................................28 17 FUNES PREDEFINIDAS ...................................................................................................................................29 18 DEFINIO DE CONSTANTES ............................................................................................................................31 19 DEFINIO DE TIPOS ..........................................................................................................................................32 20 ESTRUTURAS DE DADOS.....................................................................................................................................33 20.1 ARRAY ................................................................................................................................................................33 20.1.1 Como declarar e acessar VETORES em Pascal ............................................................................................33 20.1.2 Como declarar e acessar MATRIZES em Pascal...........................................................................................34 20.2 REGISTRO (RECORD) ...........................................................................................................................................37 20.2.1 Como declarar e acessar REGISTROS em Pascal.........................................................................................37 20.2.2 Exemplos de Registros .................................................................................................................................39 21 COMANDO WITH...................................................................................................................................................42 22 MODULARIZAO ...............................................................................................................................................43 22.1 PROCEDIMENTOS (PROCEDURE) ...........................................................................................................................43 22.1.1 Passagem de parmetros POR VALOR.........................................................................................................44 22.2 FUNES (FUNCTION) ..........................................................................................................................................46 22.2.2 Passagem de parmetros POR REFERNCIA..............................................................................................47 Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Apostila de Programao I - Linguagem Pascal

1 Introduo Um computador uma mquina que, para realizar algo, precisa que algum lhe indique o que fazer, de uma forma que ele entenda. Para que voc possa fazer isso, preciso que: Conhea o computador e os recursos disponveis; Saiba o que quer que o computador faa; Instrua o computador, atravs de um programa escrito em uma linguagem de programao.

Nesta introduo veremos informaes bsicas para se aprender uma linguagem de programao de computadores.

2 Programas e Programao O hardware do computador, constitudo de placas e dispositivos mecnicos e eletrnicos, precisa do software para lhe dar vida: programas, com finalidades bem determinadas, que faam o que os usurios querem ou precisam. H programas para editar um texto, para fazer clculos, jogos e literalmente milhares de outras finalidades. Alguns programas maiores, como processadores de texto, planilhas eletrnicas e navegadores da Internet, so de fato agrupamentos de dezenas de programas relacionados entre si. Programas so constitudos de instrues e comandos que o processador do computador entende do tipo: faa isso, faa aquilo. Esses comandos devem estar representados em uma linguagem. Voc talvez no esteja ciente de que est familiarizado com vrios tipos de linguagem. Alm do Portugus, h linguagens para inmeras finalidades: sinais, faixas e placas de trnsito, gestos com a mo e com a cabea, o Braille, a linguagem dos surdos-mudos etc. At para falar com bebs temos formas especficas! Tambm h formas de linguagem mais simples para nos comunicarmos com mquinas, como a televiso, o videocassete, a calculadora. Ningum "chama" verbalmente um elevador, nem "diz" TV qual canal sintonizar; se voc no fizer algo que os aparelhos entendam, no vai conseguir o que quer. Assim o computador: voc deve comand-lo de uma forma que ele entenda. Para que algo acontea no computador, no basta um programa; os comandos do programa devem ser executados. Programas de computador so como filmes: uma coisa a pelcula em um rolo, contendo uma seqncia de imagens. Outra coisa colocar o filme em um projetor e assisti-lo na telona. Os programas ficam guardados em arquivos no disco rgido ou CD, DVD, enfim, at que seja comandada (acionada) sua execuo. So ento carregados pelo Sistema Operacional para a memria e s ento acontece (exatamente) o que foi programado, e voc pode perceber o que o programa faz. Uma diferena entre mquinas em geral e o computador que este pode fazer muito mais coisas, portanto precisa de uma variedade maior de comandos. E outra diferena fundamental: o computador pode armazenar os comandos, agrupados em programas, para execuo posterior. Programar um computador , portanto, produzir comandos agrupados em programas, em uma linguagem que o computador entenda e que, quando executados, faam o computador produzir algum resultado desejado. Um bom programador treinado em algumas habilidades, sendo o nosso objetivo desenvolver na prtica essas habilidades, para isso usando uma linguagem de programao de computadores chamada Pascal.
Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Apostila de Programao I - Linguagem Pascal

3 Linguagem do Computador A atividade bsica de um computador consiste em executar instrues, atravs de um microprocessador ou simplesmente processador, s vezes tambm chamado de CPU (Central Processing Unit Unidade Central de Processamento). O processador, em ltima anlise, recebe instrues na forma de impulsos eltricos: em um determinado circuito, pode estar ou no fluindo corrente. Representamos cada impulso por 1 ou 0, conforme passe corrente ou no. Esta a menor unidade de informao que pode ser representada em um computador, e chamada bit. A CPU recebe instrues e dados na forma de bits agrupados de 8 em 8; cada conjunto de 8 bits chamado byte. De uma forma simplificada, um byte, ou seja, um conjunto de 8 impulsos eltricos (ou sua ausncia), constitui uma instruo ou um dado (na verdade, uma instruo pode ocupar mais de um byte). Representaremos essa unidade de informao pelo nmero correspondente no sistema decimal. Dessa forma, ao byte 00000001 associamos o nmero 1, ao byte 00000011 associamos o nmero 3, ao 00000100 o nmero 4 e assim por diante. Um byte pode armazenar, portanto, um nmero de 0 a 255 (11111111). A memria RAM, ou simplesmente memria, de um computador constituda de uma seqncia de milhares ou milhes de bytes, cada um identificado por um nmero que constitui o seu endereo (veja a Tabela 1). O processador tem a capacidade de buscar o contedo da memria e executar instrues ali armazenadas. A CPU tambm contm algumas unidades de memria, chamadas registradores, identificados por nomes como AX, CS e IP, que tambm armazenam nmeros e servem a vrias funes. 1 56 2 23 3 0 4 5 6 247 154 87 ... ...

Tabela 1: Esquema simplificado da memria RAM: endereos e respectivos valores.

Os nmeros armazenados na memria podem representar dados ou instrues. Quando representando instrues, tm significados especficos para a CPU. Por exemplo, a CPU em geral recebe comandos do tipo (mas no na forma): Armazene 9 no registrador DS Armazene 204 no endereo de memria 1.234.244 Some 5 ao contedo do registrador AL Se a ltima instruo deu resultado 0, passe a executar as instrues a partir do endereo de memria 457.552

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Apostila de Programao I - Linguagem Pascal

PUSH DS CLD MOV CX,0FFFFH XOR AL,AL NOT CX LES DI,Dest REP MOVSB MOV AX,DI MOV DX,ES DEC AX POP DS Este tipo de linguagem chamada linguagem de mquina ou assembly (veja ao lado um trecho de programa). As instrues so executadas na seqncia em que estiverem na memria, a menos que o fluxo de execuo seja redirecionado por alguma instruo apropriada. Nesta linguagem, mesmo para mostrar algo na tela necessrio colocar nmeros em certos endereos de memria, reservados para isso. No h indicao explcita do tipo nmero da linha ou da coluna da tela; devemos calcular esses dados.

4 Linguagens de Alto Nvel Escrever programas de computador em linguagem de mquina, apesar de os programas produzidos serem extremamente rpidos, pode ser muito difcil, trabalhoso e de alto custo, alm de exigir conhecimentos profundos sobre o computador. Para no termos que program-lo nessa linguagem difcil, foram desenvolvidas as linguagens de alto nvel. Estas nos permitem descrever o que queremos que o computador faa utilizando instrues mais prximas da nossa linguagem. Alm de facilitarem as descries dos processos a serem executados, as linguagens de alto nvel simplificam a utilizao da memria do computador, diminuindo a quantidade de detalhes com os quais deve ocupar-se o programador. Assim, ao invs de lidarmos com bits, bytes, endereos de memria e uma infinidade de outros detalhes, podemos pensar em "limpar a tela", "imprimir uma linha de texto", somar e subtrair variveis como na matemtica e tomar uma deciso na forma "se...ento". Veja um exemplo especfico - as instrues abaixo, na linguagem Pascal, determinam que a tela seja limpa, uma soma seja efetuada e o resultado desta mostrado na tela: ClrScr; Write (513 + 450 + 1200);

Uma linguagem de programao de alto nvel possui vrias caractersticas em comum com a nossa linguagem. Elas possuem um alfabeto (letras, nmeros e outros smbolos) e palavras. H palavras predefinidas na linguagem, mas tambm podemos formar as nossas prprias. Frases podem ser construdas com as palavras, respeitando-se certas regras. O conjunto de regras de construo de palavras e frases numa linguagem de alto nvel, assim como nas linguagens comuns, chama-se sintaxe.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Apostila de Programao I - Linguagem Pascal

4.1 Linguagem Pascal O PASCAL (no fale "pascoal"!) foi desenvolvido por Niklaus Wirth (http://www.cs.inf.ethz.ch/~wirth/) para ser a primeira linguagem de programao a ser aprendida. bem fcil de ensinar e aprender, e sua estrutura um pouco mais rgida do que a de outras linguagens, visando estimular maior organizao e disciplina no programador. Isso se justifica devido ao fato de que as linguagens, ao mesmo tempo em que permitem a elaborao de grandes solues, possibilitam que se cometa grandes erros, principalmente em programas maiores. Um programa pode estar sintaticamente correto e, no entanto conter erros como seqncia inadequada das instrues, valores incorretos ou tambm a sua execuo pode nunca terminar normalmente, porque as condies de terminao nunca so atingidas (esses erros so chamados bugs ou erros de lgica). Para a construo de programas grandes e com estrutura muitas vezes complexa demais para nossos limites atuais, foram (e ainda continuam sendo) criadas vrias tcnicas e metodologias de desenvolvimento e estruturao de programas mais fceis de serem testados, alterados ou corrigidos. Mas no se iluda: qualquer que seja a linguagem ou a metodologia, possvel produzir programas desorganizados, incompreensveis e repletos de erros ou que no fazem o que deveriam fazer. A qualidade final dos produtos depender predominantemente do programador.

4.2 Tipos de Instrues de Alto Nvel O que voc pode fazer dentro de um programa, utilizando uma linguagem de alto nvel? Vamos ver algumas analogias com outras mquinas. Um televisor possui vrios recursos: a tela, o alto-falante, o controle remoto, opes de configurao. Quando voc aperta ou gira um boto de controle, est de certa forma instruindo o televisor a fazer algo; uma forma rudimentar de linguagem. Em qualquer caso, voc est limitado a atuar sobre os recursos do seu televisor; no h meios de instrui-lo a gravar algo numa fita de vdeo. Da mesma forma, numa linguagem de programao voc no vai encontrar (a princpio) instrues para regular contraste ou temperatura. Uma categoria de instrues que voc pode esperar que existam so aquelas que vo lhe permitir interagir com os recursos disponveis: teclado e mouse (entrada), tela e impressora (sada), discos (entrada e sada), memria. Assim, h instrues para se ler algo do teclado e mostrar algo na tela. Sendo o disco rgido estruturado em pastas (diretrios) e arquivos, h instrues para se ler e gravar arquivos no disco rgido, e para se saber seu contedo. Tambm h instrues que declaram que voc quer usar a memria, e instrues para armazenar e consultar dados nela armazenados. Para poder executar uma gravao programada, seu videocassete precisa tomar pelo menos duas decises: quando inici-la e quando interromp-la. Assim num programa: em vrias situaes ser necessrio fazer verificaes e tomar decises de quando executar ou no um conjunto de instrues, ou executar um ou outro conjunto. Por exemplo, um programa que l uma nota que um aluno tirou em uma disciplina e deve informar se ele foi aprovado ou no. Ou o programa informa que o aluno passou ou que foi reprovado, mas nunca as duas coisas. Portanto, numa linguagem de alto nvel, tambm voc pode esperar que existam instrues para tomada de decises.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Apostila de Programao I - Linguagem Pascal

Para explorar a enorme capacidade de processamento de um computador, que tal deixarmos para ele fazer coisas que exigem a repetio de um procedimento uma certa quantidade de vezes, sejam duas ou milhes de vezes? Voc tambm encontrar numa linguagem instrues para programar repetio condicional de um grupo de instrues. Suponha que voc quer escrever um programa que escreva seu nome em cada linha da tela. Ao invs de escrever 25 instrues, uma para cada linha, voc pode usar uma instruo para repetir 25 vezes a instruo que mostra seu nome na tela. Em outros casos voc ter um padro a ser seguido, como no caso do clculo da mdia aritmtica: l o nmero, calcula a soma parcial, incrementa um contador, l outro nmero, calcula a soma parcial, incrementa um contador, e assim por diante; no final da leitura, divide a soma pelo contador. Uma vez identificado o padro, voc escreve apenas uma vez as instrues que se repetem e inclui um comando que controle a repetio. Para facilitar a vida do programador, as linguagens de alto nvel tambm contm vrios outros tipos de instrues: todas contm operaes matemticas bsicas (soma, subtrao, multiplicao e diviso) e tambm funes matemticas como seno, co-seno, logaritmo e exponencial. Algumas linguagens disponibilizam instrues grficas, para desenhar retas, crculos e outros objetos, colorir objetos e muitas outras. E o melhor dos mundos: voc tambm poder criar suas prprias instrues e funes, que depois de testadas e corretas, poder usar como se fizessem parte do repertrio da linguagem. Por exemplo, voc poder escrever uma instruo chamada RepeteMeuNome, que mostra seu nome na tela 25 vezes. Uma vez testada, correta e gravada, basta inserir o nome da instruo na posio apropriada do programa ("chamar" a instruo) para mostrar seu nome 25 vezes. E se quiser mostrar seu nome mais 25 vezes, basta "chamar" de novo a instruo. Para melhorar ainda mais, voc pode criar a instruo de forma que a quantidade de repeties seja definida somente quando o programa for executado.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Apostila de Programao I - Linguagem Pascal

5 Converso do Programa-Fonte Como o computador no entende as instrues de um programa-fonte (ou cdigo-fonte), para que este possa ser executado, ele precisa ser convertido para a linguagem que o computador reconhece, a linguagem de mquina. Uma instruo em uma linguagem de alto nvel pode corresponder a centenas ou at milhares de instrues em linguagem de mquina. A converso feita por programas apropriados, e pode ser feita antes ou durante a execuo do programa. Quando o programa-fonte todo convertido em linguagem de mquina antes da execuo, esse processo chamado de compilao, e os programas que o fazem so chamados compiladores. O programa resultante chamado programa-objeto (ou cdigo-objeto), que contm instrues em linguagem de mquina, mas ainda no pode ser executado; para que isso ocorra, necessria outra etapa chamada "linkedio" ou ligao, efetuada tambm por um programa apropriado chamado "linkeditor" ou ligador. Na linkedio, so juntados ao cdigo-objeto do programa outros cdigosobjeto necessrios sua execuo. Aps esta etapa, a converso est completa e produz finalmente um programa executvel, observe a Figura 1.

Figura 1: Etapas para Construo de um Programa Executvel pelo Computador

Quando a converso feita durante a execuo, o processo chamado de interpretao, e o programa conversor, interpretador. Neste caso, o interpretador permanece na memria, junto com o programa-fonte, e converte cada instruo e a executa, antes de converter a prxima. evidente, portanto, que a execuo de um programa interpretado mais lenta que a de um compilado. Note que no a linguagem em si que compilada e interpretada. Essa caracterstica depende da disponibilidade de um compilador ou um interpretador; pode haver ambos para uma linguagem, ou at nenhum.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Apostila de Programao I - Linguagem Pascal

6 Software que voc precisa ter ou conhecer Alguns programas so necessrios s atividades de um programador: Sistema Operacional: como programador, voc precisa ter um mnimo de informaes sobre o sistema ou ambiente operacional em que vai trabalhar, como por exemplo: Como executar programas Os nomes que voc pode dar aos arquivos

Como organizar seus arquivos em pastas ou subdiretrios Como listar, excluir, renomear e copiar arquivos

Se o computador em que voc trabalha est conectado a uma rede, voc vai precisar de um nome registrado, associado a uma senha, para poder acessar arquivos e programas da rede. Editor de Textos: um programa Pascal um texto simples, sem caracteres de controle do tipo negrito, tamanho de fonte, paginao etc. Voc vai precisar de um editor para digitar seu programa no computador. Editores que produzem tais textos so o Edit, que vem com o MS-DOS, o Bloco de Notas (NotePad), que vem com o Windows, e vrios outros. Textos formatados pelo Word ou WordPad, por exemplo, no servem. Os compiladores comerciais normalmente trazem um editor; us-los ser normalmente mais prtico. Compilador: uma vez que voc digitou o texto do programa, precisar convert-lo para linguagem de mquina. Para isso voc precisa de um compilador. Como compiladores

comerciais da linguagem Pascal temos por exemplo as vrias verses do Turbo Pascal, da Borland (http://www.borland.com.br), inclusive h verses para DOS e para Windows. H vrios outros, como o Free Pascal, que utilizaremos nesta disciplina e que voc pode transferir via Internet gratuitamente atravs do endereo: http://www.freepascal.org

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Apostila de Programao I - Linguagem Pascal

7 Tipos de Programas Talvez voc esteja familiarizado com programas para Windows, com barras de menus e de ferramentas, botes, cones, caixas de dilogos e outros tipos de objetos. Os programas que veremos no possuem a tela em modo grfico, como no Windows, e sim em modo texto. Neste modo a tela dividida em linhas e colunas, assim:

_ X X X X X X X X X X X X X X

| -

| -

X X

Figura 2: Imagem da Tela do Computador

Em cada posio da tela podemos apresentar um caractere, como A, i, !, ^, | e outros menos comuns. Toda tela em modo texto possui um cursor, que fica piscando em alguma posio. H diferentes modos texto, sendo que utilizaremos um dos padres: 80 colunas e 25 linhas.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

10

Apostila de Programao I - Linguagem Pascal

8 Estrutura de um Programa Os programas so divididos em quatro reas: 1a) Cabealho do programa 2a) rea de declarao de variveis 3a) rea de definio de procedimentos e funes 4a) Corpo do programa (algoritmo; comandos)

Na linguagem Pascal no tem diferena entre maisculas e minsculas. Mas uma boa prtica de programao utilizar a grande maioria dos caracteres em minsculo. Utiliza-se maisculas somente em casos especiais. Um texto escrito com a maioria das letras em maisculo torna-se pesado visualmente para o leitor!

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

11

Apostila de Programao I - Linguagem Pascal

Causa problemas no saber


* PROGRAM, begin e end so palavras reservadas; tm um significado para o compilador, e voc no pode us-las para outra finalidade (como por exemplo, nomes de variveis). * Ao final de todo comando ou declarao deve ter um ponto-e-vrgula, exceto antes de end. * O nome interno do programa criado por voc, no cabealho do programa, seguindo algumas regras: - deve comear com uma letra - a partir do segundo caractere, pode conter letras, dgitos ou o caractere sublinha ( _ ), mas no pode conter espaos - no so permitidas letras acentuadas

Exemplos de nomes vlidos de programas CalculaFatorial Calc_Dobro_versao_2 emite_som

Exemplos de nomes invlidos que impedem a compilao Calcula Fatorial 2_Calc_Dobro EmiteSom!

9 Tipos de Dados

INTEIRO: na linguagem Pascal h cinco tipos de inteiros pr-definidos. Cada tipo denota um subconjunto dos nmeros inteiros de acordo com a Tabela 2. Tipo Shortint Byte Integer Word Longint Faixa Numrica -128 a 127 0 a 255 -32768 a 32767 0 a 65535 -2147483648 a 2147483647 Tabela 2: Tipos de Dados Inteiros
Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

Nmero de Bytes 1 1 2 2 4

12

Apostila de Programao I - Linguagem Pascal

REAL: a Tabela 3 apresenta a faixa numrica, nmero de dgitos significativos e o tamanho do tipo Real. Tipo Real Faixa Numrica 2,9*10-39 a +1,7*1038 Nmero de Dgitos Significativos 11 a 12 Nmero de Bytes 6

Tabela 3: Tipo de Dado Real

CARACTERE: h duas maneiras de representar caracteres no Pascal. Veja a Tabela 4. Tipo Char String Caractersticas usado para armazenar caracteres ASCII 1 armazena uma seqncia de caracteres com um comprimento varivel entre 1 e 255. Tabela 4: Tipos de Dados Caractere

Inteiro ou string? Em alguns casos pode haver um dilema na representao de um dado que s contm dgitos: como string ou como inteiro? Esse o caso de um nmero de telefone. Outros dados possuem dgitos e sinais, mas o armazenamento dos sinais desnecessrio, como em um CEP ou um CPF. Em princpio, voc pode aplicar a regra: se no sero feitas operaes matemticas com o dado, use o tipo string, a menos que tenha um bom motivo para no faz-lo. Nessa questo (como em vrias outras), a experincia ser seu melhor professor ;-)

LGICO: variveis lgicas podem assumir os valores verdadeiro ou falso. Veja suas caractersticas na Tabela 5. Tipo Boolean Caractersticas pode assumir o valor TRUE (verdadeiro) ou FALSE (falso) Tabela 5: Tipo de Dado Lgico

ASCII (American Standard Code for Information Interchange) um conjunto de cdigos para o computador representar nmeros, letras, pontuao e outros caracteres. Surgido em 1961, um dos seus inventores foi Robert W. Bemer. ASCII uma padronizao da indstria de computadores, onde cada caracter manipulado na memria discos etc, sob forma de cdigo binrio. O cdigo ASCII formado por todas as combinaes possveis de 7 bits, sendo que exitem vrias extenses que abrangem 8 ou mais bits. Mais informaes em: http://pt.wikipedia.org/wiki/ASCII

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

13

Apostila de Programao I - Linguagem Pascal

10 Operadores Aritmticos A Tabela 6 apresenta os tipos de operadores aritmticos:

Smbolo

Significado

Tipo dos Operandos

inteiro * inteiro * multiplicao inteiro * real real * real inteiro / inteiro (sempre resulta real, inteiro / real diviso / indiferente dos real / real operandos) diviso inteira inteiro div inteiro inteiro div Exemplo: 11 div 4 = 2 resto da diviso inteiro mod inteiro inteiro mod Exemplo: 11 mod 4 = 3 Observao1: Soma e Subtrao so iguais a Multiplicao!!! Mas suas prioridades = 2

Tipo do Resultado inteiro real real real

Prioridade 1

1 1 1

Observao2: No existe sinal para a Potenciao e Radiciao, devendo-se indic-las com combinaes de produtos ou funes predefinidas (ver cap 11.1). Tabela 6: Operadores Aritmticos

11 Expresses Aritmticas As expresses aritmticas so escritas linearmente, usando-se a notao matemtica. A Tabela 7 apresenta dois exemplos de representao de expresses aritmticas em Pascal:

Tabela 7: Exemplo de Representao de Expresso Aritmtica em Pascal (Horizontalizao)

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

14

Apostila de Programao I - Linguagem Pascal

11.1 Funes Numricas Predefinidas Um programa, escrito em Pascal, pode fazer uso das seguintes funes numricas, que so consideradas preexistentes na linguagem e tm prioridade sobre qualquer operao: (EA = expresso aritmtica) Nome Ln (EA) Exp (EA) Abs (EA) Trunc (EA) Round (EA) Sqr (EA) SqRt (EA) Sin (EA) Cos (EA) ArcTan (EA) Resultado logaritmo neperiano de EA nmero e elevado a EA valor absoluto de EA trunca o valor real de EA arredonda o valor de EA quadrado de EA raiz quadrada de EA seno de EA co-seno de EA arco tangente de EA Tipo de Resultado real real real ou inteiro inteiro inteiro real ou inteiro real real real real

Tabela 8: Funes Numricas Predefinidas

Observao1: As funes Abs e Sqr podem receber um argumento real ou inteiro e produzem, respectivamente, resultado real ou inteiro. As funes Trunc e Round recebem argumento real e produzem resultado inteiro. As demais recebem argumentos reais ou inteiros e produzem resultados reais. Observao2: No confundir Sqr(X) com SqRt(X), que representam, respectivamente: e Note que: Sqr = Square (quadrado) SqRt = Square Root (raiz quadrada)

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

15

Apostila de Programao I - Linguagem Pascal

12 Funes de Formatao da Tela

TextBackground: seleciona a cor de fundo da tela. Valores vlidos vo de 0 a 7. Exemplo: textbackground (1) Observao: Este comando deve ser colocado antes do comando de limpar a tela (ClrScr).

TextColor: seleciona a cor do texto. Valores vlidos vo de 0 a 15. Exemplo: textcolor (14) Observao: Em vez de colocar o nmero correspondente a cor desejada, pode-se colocar o "nome" da cor em ingls. Exemplo: textcolor (red)

A Tabela 9 abaixo apresenta os valores (nmeros) correspondentes a cada cor: Black Blue Green Cyan Red Magenta Brown Lightgray 0 1 2 3 4 5 6 7 Darkgray Lightblue Lightgreen Lightcyan Lightred Lightmagenta Yellow White 8 9 10 11 12 13 14 15

Tabela 9: Valores que Representam as Cores

13 Expresses Lgicas Expresso lgica uma expresso cujos operadores so os operadores lgicos e cujos operandos so relaes e/ou variveis do tipo lgico.

13.1 Relaes Uma relao uma comparao realizada entre valores do mesmo tipo. Estes valores so representados na relao por constantes, variveis ou expresses do tipo correspondente. A natureza da comparao indicada por um dos operadores relacionais apresentados na tabela 10 a seguir:

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

16

Apostila de Programao I - Linguagem Pascal

Smbolo da Operao = <> <= < > >= in igual

Significado em Pascal

diferente menor ou igual menor maior maior ou igual contido em (conjunto)

O resultado de uma relao sempre um valor lgico, isto , true ou false Tabela 10: Operadores Relacionais Exemplo: X + Y = Z uma relao que ser falsa ou verdadeira dependendo da expresso aritmtica ter valor diferente ou igual ao valor da varivel Z.

13.2 Operadores Lgicos A lgebra das Proposies define trs conectivos usados na formao de novas proposies a partir de outras j conhecidas. Esses conectivos so os operadores nas expresses lgicas, veja na tabela abaixo: Operador and or not Funo conjuno disjuno negao

A Tabela 11 abaixo apresenta um resumo do operador lgico and, onde o resultado final ser true se todos os testes da expresso forem true. Teste true and true true and false false and true false and false Resultado true false false false

Tabela 11: Resumo do Operador and

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

17

Apostila de Programao I - Linguagem Pascal

A Tabela 12 abaixo apresenta um resumo do operador lgico or, onde o resultado final ser false se todos os testes da expresso forem false. Teste true or true true or false false or true false or false Resultado true true true false

Tabela 12: Resumo do Operador or

A Tabela 13 abaixo apresenta um resumo do operador lgico not. Teste not true not false Resultado false true

Tabela 13: Resumo do Operador not

Combinaes de Expresses Lgicas Quando for necessrio fazer uma ou mais verificaes combinadas, como "N1 = 0 e N2 = 0", "N < 0 ou N > 9". podemos juntar duas ou mais expresses lgicas atravs dos conectivos lgicos and (e) e or (ou). Para o operador and, uma expresso ser verdadeira somente quando todas as expresses que a compem forem avaliadas como verdadeiras. Para o operador or, toda a expresso verdadeira quando qualquer uma das expresses resultar verdadeira. Eles podem ser usados em expresses lgicas dos comandos if, while e qualquer outro que contenha expresses desse tipo. As expresses parciais sempre tm de estar entre parnteses. Por exemplo: Para saber se um nmero de um dgito: if (Numero >= 0) and (Numero <= 9) then {...}

No Pascal voc no pode construir expresses lgicas do tipo "0 Numero 9", como na Matemtica; voc deve usar and ou or.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

18

Apostila de Programao I - Linguagem Pascal

Para verificar se uma varivel do tipo caractere contm 'F' ou 'M': if (TipoPessoa = 'F') or (TipoPessoa = 'M') then {...}

Verificar se um nmero est entre duas faixas numricas: 0 a 100 ou 200 a 300: if ((Num>0) and (Num<100)) or (Num>200) and (Num<300)) then {...}

Um operador muito interessante e conciso o in, atravs do qual voc verifica se um valor ou resultado de expresso pertence a um conjunto, definido entre colchetes e no qual podem constar valores ou faixas numricas. Veja como os comandos acima ficam mais simples com esse operador: if if TipoPessoa Num in in [ 'F', 'J' ] 200..300 ] then ... then ...

[ 0..100,

13.3 Prioridades Pode-se ter mais de um operador lgico na mesma expresso, alm dos operadores de relao e dos operadores aritmticos. Em Pascal, a prioridade das operaes est dada na Tabela 14. Prioridade 1 2 3 4 not *, /, div, mod, and +, -, or =, < >, <, >, < =, > =, in Operadores

Tabela 14: Prioridade das Operaes

Vrios nveis de parnteses tambm podem ser usados em expresses lgicas para fixar entre os operadores uma ordem de execuo, diferente da indicada pela prioridade dada na Tabela 14. Sugesto: use parnteses para definir a ordem de execuo das operaes e durma tranqilo :-D

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

19

Apostila de Programao I - Linguagem Pascal

14 Estrutura Condicional (Seleo) Na linguagem Pascal existem duas estruturas de seleo: if-then-else e case, sendo que a primeira estrutura pode-se apresentar de duas formas (simples ou composta).

14.1 IF-THEN-ELSE a) Forma Simples (sem Else): if condio then begin seqncia A de comandos; end ; onde: if - then - so palavras-chaves condio - uma expresso lgica (teste) A seqncia A de comandos ser executada se a condio for verdadeira; caso contrrio, o comando a ser executado ser o que vier logo aps o end;. Ao ser mencionada "seqncia de comandos" est implcito que ela contm um ou mais comandos e pode conter uma ou mais estruturas. Quando a seqncia A de comandos constituda por um nico comando, o begin e o end podem ser omitidos. Exemplo1: program Teste_If_Simples_1; uses crt; var A, B, C : real; begin clrscr; write ('Digite um valor para A: '); readln (A); write ('Digite um valor para B: '); readln (B); write ('Digite um valor para C: '); readln (C); if (A + B < C) then writeln ('A soma de A com B menor do que C!') ; writeln ('Tchau...'); end.
Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

20

Apostila de Programao I - Linguagem Pascal

Exemplo2: program Teste_If_Simples_2; uses crt; var A, B, C : real; begin clrscr; write ('Digite um valor para A: '); readln (A); write ('Digite um valor para B: '); readln (B); write ('Digite um valor para C: '); readln (C); if (A + B < C) then begin writeln ('Eu calculei A + b < C e conclu que:'); writeln ('A soma de A com B menor do que C!'); end ; writeln ('Tchau...'); end.

b) Forma Composta (com Else): if condio then begin seqncia A de comandos; end else begin seqncia B de comandos; end ; onde: if - then - else - so palavras-chaves condio - uma expresso lgica Se a condio for verdadeira, a seqncia A de comandos executada e, a seguir, a estrutura abandonada, passando a execuo para o comando que vier logo aps o trmino da estrutura condicional composta e, neste caso, a seqncia B de comandos no ser executada. Se a condio for falsa, a seqncia A de comandos ser saltada (e no executada) e a seqncia B de comandos ser processada.
Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

21

Apostila de Programao I - Linguagem Pascal

Quando a seqncia A de comandos e/ou a seqncia B de comandos forem constitudas por um nico comando, o begin e o end, que as contm, podem ser omitidos. Exemplo1:
program Teste_If_Composto_1; uses crt; var A, B : real; begin clrscr; write ('Digite um valor para A: '); readln (A); write ('Digite um valor para B: '); readln (B); if (A = B) then writeln ('A igual a B') else writeln ('A no igual a B') ; writeln ('Tchau...'); end.

Exemplo2:
program Teste_If_Composto_2; uses crt; var A, B, X, Y : real; begin clrscr; write ('Digite um valor para A: '); readln (A); write ('Digite um valor para B: '); readln (B); if (A = B) then begin X := 1.5; Y := 2.5; end else begin X := -1.5; Y := -2.5; end ; writeln ('X= ', X:3:1,' Y= ', Y:3:1); {Formato de sada end. 3 = total de caracteres 1 = caracteres depois do ponto}

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

22

Apostila de Programao I - Linguagem Pascal

Observao: Observe que o ponto-e-vrgula que encerra o if ( o equivalente ao fim_se do portugus estruturado).

14.2 CASE case varivel of valordeCaso1 : seqncia A de comandos; valordeCaso2 : seqncia B de comandos; valordeCaso ... : seqncia C de comandos; else seqncia D de comandos; end; onde: case - of - else - end - so palavras-chaves valordeCaso - so os possveis valores que a varivel pode assumir

Como a estrutura IF, o comando CASE divide uma seqncia de possveis aes em sees de cdigo individuais. Para a execuo de um determinado comando CASE, somente uma dessas sees ser selecionada para execuo. A seleo est baseada numa srie de testes de comparao, sendo todos executados sobre um valor desejado. O comando ELSE opcional, ou seja, assim como no IF, pode no haver a opo ELSE. Exemplo:
program Teste_Case; uses crt; var numero: integer; begin clrscr; write ('Digite um nmero inteiro: '); readln (numero); case numero of 1 : writeln ('O nmero digitado foi 1'); 2 : begin writeln ('Eu sei qual o nmero que voc digitou'); writeln ('O nmero digitado foi 2'); end; 3,4 : writeln ('O nmero digitado foi 3 ou 4 '); 5..10 : writeln ('O nmero digitado est entre 5 e 10'); else writeln ('O nmero digitado no est entre 1 e 10 '); end; end.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

23

Apostila de Programao I - Linguagem Pascal

Observaes da Estrutura Case 1) Na linguagem Pascal, o Case s testa igualdade ( = ), ou seja, no possvel utilizar um teste com >= por exemplo. 2) Os testes (as comparaes) s podem ser feitas com constantes e no com variveis. 3) A varivel do Case deve ser do tipo: integer, char ou boolean. 4) A linguagem Pascal permite intervalos de nmeros no Case, por exemplo: case X of

1..5 : writeln (Azul); 20..30,45 : writeln (Vermelho); 10,5 : writeln (Amarelo);

15 Estruturas de Repetio Na linguagem Pascal, existem trs estruturas de repetio: while-do, repeat-until e for-to-do, sendo que esta terceira estrutura pode-se apresentar de duas formas. Veja abaixo as caractersticas e sintaxe das trs estruturas:

15.1 WHILE-DO while condio do begin seqncia A de comandos; end ; onde: while - do - so palavras-chaves condio - uma expresso lgica Nesta estrutura, a seqncia A de comandos ser repetida enquanto a condio for verdadeira. Quando isto no mais ocorrer, a repetio interrompida e a seqncia de comandos, que estiver logo aps o end; da estrutura, passa a ser executada.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

24

Apostila de Programao I - Linguagem Pascal

Exemplo: program Historia; uses crt; var Resp : char; begin clrscr; write ('Voc quer ler uma histria? [S]im ou [N]o '); readln (Resp); while (Resp = 'S') or (Resp = 's') do begin writeln ('Era uma vez um bolo ingls...'); writeln ('Quer que eu conte outra vez? [S]im ou [N]o '); readln (Resp); end ; writeln ('Tchau...'); end.

15.2 REPEAT-UNTIL repeat seqncia A de comandos; until condio; onde: repeat - until - so palavras-chaves condio - uma expresso lgica

Nesta estrutura, a seqncia A de comandos ser repetida at que a condio se torne verdadeira. Quando isto ocorrer, a repetio interrompida e a seqncia de comandos, que estiver logo aps a estrutura, passa a ser executada. Como o until um delimitador, no necessrio colocar-se um ponto-e-vrgula (;) aps o comando que o precede.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

25

Apostila de Programao I - Linguagem Pascal

Exemplo: program Historia_2; uses crt; var Resp : char; begin clrscr; repeat writeln ('Era uma vez um bolo ingls...'); writeln ('Quer que eu conte outra vez? [S]im ou [N]o '); readln (Resp); until (Resp = 'N') or (Resp = 'n'); writeln ('Tchau...'); end.

15.3 FOR-TO-DO for varivel := valor-inicial to valor-final do begin seqncia A de comandos; end ; onde: for - to - do - so palavras-chaves valor-inicial - o primeiro valor que a varivel assume valor-final - o valor mximo que a varivel pode assumir

Nesta estrutura, a varivel recebe o valor-inicial; verifica se ele ultrapassa o valor-final; se no ultrapassa, a seqncia A de comandos executada; a seguir, a varivel recebe o valor sucessor (o lao crescente); verifica se ele ultrapassa o valor-final; se no ultrapassa, a seqncia A de comandos executada; e assim sucessivamente.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

26

Apostila de Programao I - Linguagem Pascal

Outro modo de usar o for : for varivel := valor-inicial downTo valor-final do begin seqncia A de comandos; end ; onde: for - downTo - do - so palavras-chaves valor-inicial valor-final - o primeiro valor que a varivel-de-controle assume - o valor mximo que a varivel-de-controle pode assumir

Nesta estrutura, a varivel recebe o valor-inicial; verifica se ele ultrapassa o valor-final; se no ultrapassa, a seqncia A de comandos executada; a seguir, a varivel recebe o valor predecessor (o lao decrescente); verifica se ele ultrapassa o valor-final; se no ultrapassa, a seqncia A de comandos executada; e assim sucessivamente. Exemplo1: program Teste_For_To; uses crt; var i : integer; begin clrscr; for i := 1 to 10 do writeln (i) ; end. Exemplo2: program Teste_For_downTo; uses crt; var x : integer; begin clrscr; for x := 10 downTo 1 do writeln (x) ; end.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

27

Apostila de Programao I - Linguagem Pascal

Dica: At que tenha sido armazenado um valor pela primeira vez em uma varivel, seu contedo indefinido, e pode ser qualquer coisa; voc que deve cuidar disso inicializando (zerando) as variveis antes de utiliz-las, ok? ;-)

16 Expresses Literais As expresses do tipo char so formadas por uma constante, uma varivel ou a ativao de uma funo do tipo char. Existem, porm, funes predefinidas, tais como as apresentadas abaixo, na Tabela 15:

Nome

Resultado Fornecido o sucessor de X, no conjunto de caracteres considerado, se existir

Succ (X) Exemplo: Succ (A) = B ou Succ (1) = 2

O predecessor de X, no conjunto de caracteres considerado, se existir Pred (X) Exemplo: Pred (D) = C ou Pred (100) = 99

Ord X)

inteiro e indica a ordem de X (varivel ou constante do tipo Char), no conjunto de caracteres usado na implementao Exemplo: Ord (C) = 67 (cdigo ASCII)

Chr (EA)

Caractere que corresponde ordem, dada pelo valor da expresso aritmtica EA, se existir, no conjunto de caracteres utilizados Exemplo: Chr (65) = A (cdigo ASCII)

Tabela 15: Funes Literais Predefinidas

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

28

Apostila de Programao I - Linguagem Pascal

As funes Ord (X), Succ (X) e Pred (X) aplicam-se no apenas s variveis ou constantes do tipo char, mas de qualquer tipo predefinido, exceto real.

17 Funes Predefinidas

UpCase (X) - recebe um argumento X do tipo char e retorna uma verso em letras maisculas da
varivel X. Exemplo: program teste_upcase; uses crt; var letra : char; begin letra := 'a'; writeln (letra); writeln (upcase(letra); readln; end.

>> Os dois comandos writeln deste programa produzem as seguintes linhas na tela de sada: a A

ReadKey - uma outra importante funo localizada na unidade CRT. Esta funo espera que o usurio pressione uma tecla e depois retorna com um char da mesma.
Exemplo: program MostraTecla; uses crt; var tecla : char; begin writeln ('Pressione uma tecla'); tecla := ReadKey; writeln ('Voc pressionou a tecla ', tecla); writeln ('Pressione <Enter> para terminar'); readln; end.
Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

29

Apostila de Programao I - Linguagem Pascal

ReadKey uma funo que retorna o caractere correspondente tecla pressionada. Uma vantagem de usar ReadKey para ler um caractere que o usurio no precisa teclar Enter, como no Readln. Sendo uma funo, podemos chamar ReadKey dentro de um Write ou atribuir seu resultado a uma varivel.

Observao: O programa acima funcionar para teclas de caracteres normais, como alfabticos e numricos. Para teclas de funo ou normais alteradas por uma tecla de controle, como Shift, Alt e Control, ReadKey retornar zero e ser necessrio cham-lo novamente parar obter um segundo cdigo. Para tratar essa situao, so necessrias outras instrues.

IMPORTANTE: As funes UpCase e ReadKey, assim como outras existentes na linguagem Pascal, funcionam somente em alguns compiladores, ou seja, para que elas funcionem adequadamente, verifique se o compilador que voc est utilizando suporta tais funes.

Armazenando Caracteres na Memria Se em um byte de memria podemos apenas representar nmeros de 0 a 255, como ento representar letras e outros caracteres, que constituem os valores dos tipos de dados char e string? Letras e outros smbolos no numricos so armazenados na memria tambm na forma de nmeros, sendo a correspondncia feita atravs de tabelas que associam letras a cdigos numricos. Nos computadores padro PC usada a tabela ASCII (American Standard Code for Information Interchange), que vai de 1 a 255 (1 byte, portanto). Nela, alm de letras, nmeros e sinais de pontuao, existem cdigos numricos para caracteres de controle (por exemplo, o 13 corresponde ao ENTER e o 27 ao ESC) e desenhos de linhas simples e duplas (retas horizontais, verticais e cantos). Para letras, h cdigos distintos para maisculas e minsculas: o cdigo 66 corresponde a 'B', e o 98 corresponde a 'b'. H um cdigo tambm para o caractere 'espao', que o 32. Assim, o nmero 66 armazenado num byte de memria interpretado de forma diferente, conforme o tipo de dado com que foi definido a varivel ali armazenada. Se o dado for, por exemplo, de um tipo numrico que ocupa um byte, o nmero 66 mesmo. Se o byte for parte da representao de uma cadeia de caracteres, interpretado como o caractere 'B'. Para o compilador, letras no se misturam com nmeros. No caso de um dado do tipo cadeia de caracteres, mesmo se o nmero armazenado for 50, interpretado como o caractere '2', e no o nmero 2. Para representar a seqncia de caracteres '65', so necessrios 2 bytes: um para o '6' e outro para o '5'.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

30

Apostila de Programao I - Linguagem Pascal

18 Definio de Constantes Na seo Const, voc define identificadores que representam valores fixos de dados por toda a execuo de um programa. Esses identificadores podem ser usados como sinnimos de constantes, desde que tenham sido previamente definidos como tal. A forma geral para a definio de constantes apresentada a seguir:

const nomedaconst = valordaconst; nomedaconst2 = valordaconst2 ... onde: const - uma palavra-chave que inicia uma parte do programa para a definio de constantes nomedaconst - qualquer identificador permitido pela linguagem seguindo as mesmas regras para nomes de variveis valordaconst - um nmero (com ou sem sinal), um valor lgico, uma string etc.

O uso de identificadores como sinnimos de constantes recomendvel na medida em que aumenta a legibilidade do programa e ajuda na sua documentao. Alm disso, os programas que manipulam valores ganham maior flexibilidade, uma vez que estes valores, se agrupados no incio do programa, podem ser facilmente notados e/ou modificados (atualizados). Exemplo: program salario; uses crt; const salario_min = 180.00; {no precisa declarar o tipo da constante, pois um sinnimo p/ 180.00} var qtos_sal : integer; sal_total : real; begin write ('Quantos salrios mnimos voc recebe? '); readln (qtos_sal); sal_total := salario_min * qtos_sal; writeln ('Salrio total: ', sal_total:8:2); {"8:2" a formatao de sada do nmero} end.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

31

Apostila de Programao I - Linguagem Pascal

19 Definio de Tipos Embora a linguagem Pascal oferea uma variedade de tipos de dados predefinidos (integer, real, boolean, char, etc.), nem sempre os tipos de dados disponveis na linguagem atendem perfeitamente s necessidades do programa. Uma caracterstica da linguagem Pascal a possibilidade que o programador tem de declarar seus prprios tipos de dados. Uma vez criado o novo tipo, pode-se declarar quantas variveis quiser do tipo criado. Usa-se a palavra reservada Type para declarar um tipo de dado definido pelo programador.

A seo Type declarada antes da seo Var, pois na seo Var pode-se declarar as variveis que pertencem aos tipos padro e aos tipos definidos pelo usurio. Veja os exemplos a seguir: Exemplo1:

program exemplo_type; uses crt; type valor = real;

var salario : valor; begin salario := 200.00; ... Exemplo2: ... type tIdade = 1..120; {declarao de um tipo chamado tIdade que representa um range (conjunto) de 1 a 120} tMaiusc = 'A'..'Z'; var ... Exemplo3: ... type vet = array [1..10] of integer; {declarao de um tipo chamado vet que representa um vetor de 10 elementos inteiros} var ... x : vet; Idade : tIdade; Ch1, Ch2 : tMaiusc;

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

32

Apostila de Programao I - Linguagem Pascal

20 Estruturas de Dados Existem dois tipos importantes de estruturas de dados estudados nesta disciplina, os Arrays e os Registros. Um array uma estrutura que representa listas (vetores) ou tabelas (matrizes) de valores sob um nico nome de varivel. Um registro (record) uma estrutura que representa vrios tipos de dados distintos.

20.1 Array Variveis do tipo array so variveis compostas homogneas, ou seja, correspondem a posies de memria, identificadas por um nico nome, individualizadas por ndices e seu contedo de um mesmo tipo. Pode ser um Vetor ou uma Matriz. O nome de uma varivel composta segue as mesmas regras das variveis simples. O nome refere-se, coletivamente, a todos os elementos da varivel composta. Para referncia de um elemento, necessrio colocar o nome da varivel, seguido de um ou mais ndices, entre colchetes.

20.1.1 Como declarar e acessar VETORES em Pascal

>> Como declarar um VETOR: program exemplo_vetor; uses crt; var nota : array [1..10] of real; {declarao de um array com 10 elementos do tipo real, que representa um vetor, pois unidimensional}

>> Como acessar um VETOR: x := nota [3]; i := 4; {varivel x recebe o contedo armazenado na 3a posio do array nota}

{varivel i recebe o valor 4} {escreve o contedo armazenado na 8a posio do array nota} {escreve o contedo armazenado na 4a posio do array nota}

writeln (nota [8]); writeln (nota [i]);

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

33

Apostila de Programao I - Linguagem Pascal

Tenha em mente que cada elemento de um vetor uma varivel semelhante s outras, podendo sofrer atribuio, ser passado como parmetro ou participar como operando em expresses, desde que voc indique qual o elemento, atravs do ndice.

A forma de referenciar elementos de vetores idntica maneira de referenciar caracteres especficos de uma string; na verdade, strings so vetores do tipo char !

20.1.2 Como declarar e acessar MATRIZES em Pascal

>> Como declarar uma MATRIZ: program exemplo_matriz; uses crt; var x : array [1..2, 1..3] of integer; {declarao de um array com 2 linhas e 3 colunas do tipo integer, que representa uma matriz, pois multidimensional; neste exemplo bidimensional (linhas e colunas)}

Exemplo de uma matriz X de 2 linhas e 3 colunas:

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

34

Apostila de Programao I - Linguagem Pascal

>> Como acessar uma MATRIZ: a := x [2,1]; i := 2; {varivel A recebe o contedo armazenado na 2a linha e 1a coluna do array X}

{varivel I recebe o valor 2} {escreve o contedo armazenado na 1a linha e 3a coluna do array X}

writeln (x [1,3]); j := 3;

{varivel J recebe o valor 3} {escreve o contedo armazenado na 2a linha e 3a coluna do array X}

writeln (x [i,j]);

Observao: Veja abaixo um exemplo de leitura e escrita de uma matriz M de 2 linhas e 3 colunas em Pascal

Leitura da Matri M [2,3] for i := 1 to 2 do for j := 1 to 3 do begin writeln ('Digite um valor inteiro para a matriz: '); readln (M [i,j]); end ; ;

Escrita da Matriz M [2,3] for i := 1 to 2 do for j := 1 to 3 do begin writeln (M [i,j]); end ; ;

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

35

Apostila de Programao I - Linguagem Pascal

ATENO: As diferenas bsicas entre Vetores e Matrizes so: Na declarao de matrizes, devemos informar mais de um conjunto de ndices, ou seja, uma faixa numrica ("tamanho") para cada dimenso da matriz: Exemplo:
var M:array [1..10, 1..20, 1..5] of byte; {declarao de uma matriz com 3 dimenses}

Ao acessar um elemento de uma matriz, devemos informar um ndice para cada dimenso:

Exemplo: Matriz [1, 11, 2] := 77;

Readln (Matriz [9, 7, 1]); Writeln (Matriz [2, 5, 5] );

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

36

Apostila de Programao I - Linguagem Pascal

20.2 Registro (Record) Um record um conjunto de valores individuais de dados chamados campos. Uma varivel record , portanto, um identificador nico que representa todos os valores dos campos de um determinado record. A caracterstica mais importante de um record talvez seja a de que os diversos campos nomeados possam ter tipos de dados diferentes, por isso, variveis do tipo record so variveis compostas heterogneas. Existem duas maneiras de se definir uma varivel do tipo record: Definir a estrutura record em uma declarao TYPE e, depois declarar a prpria varivel em um comando VAR ou Definir a estrutura e a varivel record de uma s vez em um comando VAR

A primeira destas tcnicas , provavelmente, a mais clara e mais utilizada, mas vamos explorar as duas maneiras nesta disciplina.

20.2.1 Como declarar e acessar REGISTROS em Pascal

>> Como declarar um REGISTRO sem o uso do Type : program exemplo_registro; uses crt; var Cliente : record Nome, Ender : string [35]; Fone : string [20]; Sexo : char; Idade : byte; Salario : real; end; ... No exemplo acima, declarada uma varivel do tipo registro de nome Cliente que possui seis campos, onde os campos Nome, Ender e Fone so do tipo string, o campo Sexo do tipo char, o campo Idade do tipo byte e o campo Salario do tipo real.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

37

Apostila de Programao I - Linguagem Pascal

>> Como acessar o REGISTRO Cliente, declarado acima: write ('Nome: '); {pede que o usurio entre com um nome} {armazena o nome lido no campo nome do registro cliente} {o campo sexo do registro cliente recebe a letra F} {escreve o contedo do campo sexo do registro cliente}

readln (cliente.nome); cliente.sexo := 'F';

writeln (cliente.sexo);

>> Como declarar um REGISTRO com o uso do Type : program exemplo_registro; uses crt; type Pessoa = record Nome, Ender : string [35]; Fone : string [20]; Sexo : char; Idade : byte; Salario : real; end; var funcionario, aluno : Pessoa; ... No exemplo acima, declarado um tipo chamado Pessoa que representa um registro com seis campos, onde os campos Nome, Ender e Fone so do tipo string, o campo Sexo do tipo char, o campo Idade do tipo byte e o campo Salario do tipo real. Aps, so declaradas duas variveis: funcionrio e aluno, do tipo Pessoa definido antes pelo programador.

>> Como acessar o REGISTRO Pessoa, declarado acima: ... write ('Nome: '); {pede que o usurio entre com um nome} readln (funcionario.nome); {armazena o nome lido no campo nome da varivel funcionrio que do tipo Pessoa (que um registro)} aluno.sexo := 'F'; {o campo sexo da varivel aluno recebe a letra F} writeln (aluno.sexo); {escreve o contedo do campo sexo da varivel aluno} ...

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

38

Apostila de Programao I - Linguagem Pascal

20.2.2 Exemplos de Registros

Vetor de Registros
... type pessoa = record nome : string [30]; idade : byte; nota : real; end; turma = array [1..10] of pessoa; var aluno : turma; ...

Esse exemplo acima seria um cadastro mais ou menos assim: Nome 1 2 ... 10 Idade Nota

Atribuindo valores, por exemplo: aluno[1].nome := 'Joo'; aluno[1].idade := 20; aluno[1].nota := 8.5;

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

39

Apostila de Programao I - Linguagem Pascal

Registro dentro de Registro


... type regdata = record dia, mes, ano : word; end; regpessoa = record nome : string [30]; data_nasc : regdata; salario : real; end; var aluno : regpessoa; ...

Esse exemplo acima seria um cadastro mais ou menos assim: Nome Dia 1 2 ... 10 Data_Nasc Ms Salrio Ano

Atribuindo valores, por exemplo: aluno.data_nasc.dia := 10; aluno.data_nasc.mes := 02; aluno.data_nasc.ano := 1981;

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

40

Apostila de Programao I - Linguagem Pascal

Vetor dentro de Registro


... type regdata = record dia, mes, ano : word; end; regnotas = array [1..10] of real; regpessoa = record nome : string [30]; data_nasc : regdata; salario : real; notas : regnotas; end; regturma = array [1..10] of regpessoa; var aluno : regturma; begin ... aluno[1].notas[1] := 8.0; aluno[1].data_nasc.dia := 12; ...

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

41

Apostila de Programao I - Linguagem Pascal

21 Comando WITH um comando que permite abreviar os identificadores de campos usados dentro de um determinado bloco de comandos, ou seja, permite referncias abreviadas a campos de uma varivel do tipo registro. Por exemplo, digamos que se tenha declarado um registro da seguinte maneira: ... var endereco : record rua : string [30]; cidade : string [25]; estado : string [2]; end; ...

>> Acessando os campos deste registro declarado acima: ... write ('Digite a rua: '); readln (endereco.rua); write ('Digite a cidade: '); readln (endereco.cidade); write ('Digite o estado: '); readln (endereco.estado); ...

>> Agora, acessando os campos do registro "endereco", com o uso do comando WITH: with endereco do begin write ('Digite a rua: '); readln (rua); write ('Digite a cidade: '); readln (cidade); write ('Digite o estado: '); readln (estado); end ; Observao: Este comando WITH (assim como vrios outros) no funciona em todos os compiladores, somente em alguns :-(

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

42

Apostila de Programao I - Linguagem Pascal

22 Modularizao Resolver um problema complexo mais fcil se no precisarmos considerar todos os aspectos do problema simultaneamente, ou seja, podemos decompor o problema em subproblemas (mdulos). A linguagem Pascal nos oferece duas maneiras de criarmos programas modulares e estruturados que so: PROCEDIMENTOS e FUNES. So unidades (trechos) de cdigo de programa autnomas projetadas para cumprir uma tarefa particular. Para serem executados devem ser ativados por um programa principal, por outro procedimento ou por outra funo. A comunicao entre programa principal, procedimentos e funes ocorre atravs de "chamadas". Veja alguns objetivos (algumas vantagens) do uso de procedimentos e funes: Eliminar segmentos de programas usados vrias vezes Melhorar a clareza dos programas Facilitar a modificao (atualizao) dos programas

22.1 Procedimentos (Procedure) Exemplo: Escreva um procedimento que imprima uma linha de vinte asteriscos na tela. Utilizar a posio corrente do cursor. Aps a impresso dos asteriscos o cursor deve ficar posicionado no incio da linha seguinte. (Procedimento sem passagem de parmetros).

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

43

Apostila de Programao I - Linguagem Pascal

Como melhorar este procedimento? - Permitindo que seja impresso um nmero varivel de asteriscos.

Como passar dados (informaes) para o procedimento? - Atravs de passagem de parmetros.

Dentre os modos de transferncia de parmetros, pode-se destacar a passagem por valor e a passagem por referncia.

22.1.1 Passagem de parmetros POR VALOR

Exemplo: program exemplo; uses crt; var j: integer; {varivel global: acessvel por todos os mdulos do programa} { n um parmetro formal }

procedure linha (n: integer); var i: integer; begin for i := 1 to n do write ('*') ; writeln; end;

begin clrscr; linha (40); linha (20); {40 e 20 so parmetros reais } for j := 1 to 10 do linha (j) ; end.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

44

Apostila de Programao I - Linguagem Pascal

O procedimento deve ser definido ANTES do local onde chamado!!!

>> Parmetros: so canais pelos quais se estabelece uma comunicao bidirecional entre um procedimento e o programa chamador (procedimento ou programa principal). Parmetros Formais: so os nomes simblicos introduzidos no cabealho dos procedimentos, usados na definio dos parmetros dos mesmos. Parmetros Reais: so aqueles que substituem os parmetros formais na chamada de um procedimento.

Utilizando mais de um parmetro program exemplo; uses crt; var num: integer; car: char; procedure linha (n: integer; simb: char); var i: integer; begin for i := 1 to n do write (simb) ; writeln; end; begin clrscr; write ('Digite um nmero: '); readln (num); write ('Digite um caractere: '); readln (car); linha (num, car); end.

ATENO: Os parmetros usados na codificao do procedimento e os argumentos descritos na chamada do subprograma devem coincidir em nmero, ordem e tipo.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

45

Apostila de Programao I - Linguagem Pascal

>> Como o mdulo pode retornar um valor para o local onde foi chamado? Utilizando uma funo :-D

22.2 Funes (Function)

Caractersticas das funes: Calcular um resultado Retorna um valor ao ponto de sua chamada, sendo que este ser associado ao prprio nome que identifica o mdulo.

Exemplo: Funo Soma program exemplo_funcao; uses crt; var a, b, c: integer; function soma (x, y: integer): integer; var r: integer; begin r := x + y; soma := r; {retorno do valor} end; begin clrscr; write ('Digite um valor: '); readln (a); write ('Digite outro valor: '); readln (b); c := soma (a, b); writeln ('Resultado: ', c); end.

Observao1:

* O valor retornado pelo nome da funo * Dessa forma s possvel retornar um nico valor

Observao2: * Qualquer modificao feita, em parmetros passados por valor, dentro do procedimento, NO surtir efeito fora dele.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

46

Apostila de Programao I - Linguagem Pascal

>> Como permitir que a modificao de uma varivel dentro do procedimento tenha efeito em uma varivel fora do procedimento? Utilizando passagem de parmetros for referncia : -D

22.2.2 Passagem de parmetros POR REFERNCIA

Exemplos de utilizao da passagem por referncia:

Passando um valor vlido, permitindo a sua alterao dentro do mdulo

program exemplo; uses crt; var x, y: integer; procedure troca (var a, b: integer); var aux: integer; begin aux := a; a := b; b := aux; end; begin x := 10; y := 20; troca (x, y); writeln ('X= ', x, 'Y= ', y); end.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

47

Apostila de Programao I - Linguagem Pascal

Para retornar mais de um valor:

>> Passamos uma varivel com um valor indeterminado ("lixo") e retornamos o resultado desejado por ela. Veja exemplo a seguir. Exemplo: Funo divide que retorne o resultado da diviso e um cdigo que indique se ela foi ou no bem sucedida. (0 = diviso OK, 1 = erro: diviso por zero). program exemplo; uses crt; var x, y, cod: integer; r: real; function divisao (a, b: integer; var erro: integer): real; begin if b = 0 then erro := 1 else begin erro := 0; divisao := a/b; end ; end; begin clrscr; write ('Digite um nmero: '); readln (x); write ('Digite outro nmero: '); readln (y); r := divisao (x,y,cod); if cod = 1 then writeln ('Diviso por zero') else writeln ('Resultado: ', r) ; end.

Observao1: Passagem por referncia pode ser usada tanto em funes quanto em procedimentos. Observao2: Um procedimento s poder chamar outro que tenha sido declarado antes dele.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

48

Apostila de Programao I - Linguagem Pascal

Como fazer um programa que faa uma diviso, utilizando modularizao?

Veja os seguintes mdulos:

Obtm_Resposta Entrada: nenhuma Sada: resposta validada

Calcular_Diviso Entrada: nenhuma Sada: nenhuma

Obtm_um_Valor Entrada: nenhuma Sada: valor validado

Resolve_Problema Entrada: nenhuma Sada: nenhuma

Obtm_todos_Valores Entrada: nenhuma Sada: leitura dos dois valores

Veja como ficaria a programao destes mdulos: program exemplo; uses crt; {------------------------------------Funo para obter a resposta} function obtem_resposta: char; var resp: char; begin repeat readln (resp); until (resp = 'n') or (resp = 's'); obtem_resposta := resp; end;

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

49

Apostila de Programao I - Linguagem Pascal

{------------------------------------Funo para obter um valor} function obtem_um_valor: real; var b: real; begin repeat write ('B='); readln (b); if b = 0 then writeln ('Valor Invlido'); until b <> 0; obtem_um_valor := b; end;

{-----------------------------Procedimento para obter todos valores} procedure obtem_todos_valores (var a, b: real); begin write ('A='); readln (a); b := obtem_um_valor; end;

{------------------------------Procedimento para calcular a diviso} procedure calcula_divisao; var a, b, r: real; x: char; begin repeat obtem_todos_valores (a,b); write ('Dados corretos (S/N)? '); x := obtem_resposta; until x = 's'; r := a/b; writeln ('Resultado: ', r); end;

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

50

Apostila de Programao I - Linguagem Pascal

{-----------------------------Procedimento para resolver o problema} procedure resolve_problema; var c: integer; x: char; begin c := 0; repeat calcula_divisao; c := c + 1; write ('Novo Clculo (S/N)? '); x := obtem_resposta; until x = 'n'; writeln ('Foram calculadas ', c, ' divises'); end; {------------------------------------Programa principal} begin clrscr; resolve_problema; end.

Profa. Flvia Pereira de Carvalho - fpereira@faccat.br - http://fit.faccat.br/~fpereira

51

Você também pode gostar