Вы находитесь на странице: 1из 36

1 INTRODUO PROGRAMAO

1.1 Definio de Algoritmo

a descrio, de forma lgica, dos passos a serem executados no cumprimento de determinada tarefa. a forma pela qual descrevemos solues de problemas do nosso mundo, afim de serem implementadas utilizando os recursos do mundo computacional. Como este possu severas limitaes em relao ao nosso mundo, exige que sejam impostas algumas regras bsicas na forma de solucionar os problemas para que possamos utilizar os recursos de hardware e software disponveis.

1.1.1 Algoritmo x Programa Um algoritmo uma seqncia lgica de aes a serem executadas para se executar uma determinada tarefa. Um programa a formalizao de um algoritmo em uma determinada linguagem de programao, segundo suas regras de sintaxe e semntica, de forma a permitir que o computador possa entender a seqncia de aes.

1.2

Linguagem de Programao

Uma linguagem de programao um conjunto de smbolos ( comandos, identificadores, caracteres ASCII, etc. ... ) e regras de sintaxe que permitem a construo de sentenas que descrevem de forma precisa aes compreensveis e executveis para o computador.
LINGUAGEM DE PROGRAMAO = SMBOLOS + REGRAS DE SINTAXE

Uma linguagem de programao uma notao formal para descrio de algoritmos que sero executados por um computador. Como todas as notaes formais, uma linguagem de programao tem dois componentes: Sintaxe e Semntica. A sintaxe consiste em um conjunto de regras formais, que especificam a composio de programas a partir de letras, dgitos, e outros smbolos. Por exemplo, regras de sintaxe podem especificar que cada parnteses aberto em uma expresso aritmtica deve corresponder a um parnteses fechado, e que dois comandos quaisquer devem ser separados por um ponto-e-vrgula. As regras de semntica especificam o significado de qualquer programa, sintaticamente vlido, escrito na linguagem. 1.2.1 Tipos de Linguagens de Programao Existem diversas linguagens de programao, cada uma com suas caractersticas especficas e com nveis de complexidade e objetivos diferentes, como pode ser visto na tab. 1.1.

LINGUAGEM Linguagem de Mquina Linguagens de Baixo Nvel Linguagens de Alto Nvel

TABELA 1.1 TIPOS DE LINGUAGENS DE PROGRAMAO E SUAS CARACTERSTICAS

CARACTERSTICAS nica compreendida pelo computador. Especfica de cada computador. Utiliza mnemnicos para representar instrues elementares Ex.: Assembly Utiliza instrues prximas da linguagem humana de forma a facilitar o raciocnio. Ex.: Uso Cientfico : Fortran Propsito Geral : Pascal, C, Basic Uso Comercial : Cobol, Clipper Uso especfico : Lisp, Prolog

1.2.2 Processo de Criao e Execuo de um Programa Embora seja teoricamente possvel a construo de computadores especiais, capazes de executar programas escritos em uma linguagem de programao qualquer, os computadores, existentes hoje em dia so capazes de executar somente programas em linguagem de baixo nvel, a Linguagem de Mquina. Linguagens de Mquina so projetadas levando-se em conta os seguintes aspectos : rapidez de execuo de programas; custo de sua implementao; e flexibilidade com que permite a construo de programas de nvel mais alto. Por outro lado, linguagens de programao de alto nvel so projetadas em funo de : facilidade de construo de programas; e confiabilidade dos programas. O PROBLEMA : Como a linguagem de nvel mais alto pode ser implementada em um computador, cuja linguagem bastante diferente e de nvel mais baixo ? SOLUO: Atravs da traduo de programas escritos em linguagens de alto nvel para a linguagem de baixo nvel do computador. Para isso existem trs tipos de programas tradutores : Montadores, Interpretadores e Compiladores. Vejamos o que cada um deles representa. MONTADOR Efetua a traduo de linguagem de montagem ( Assembly ) para a linguagem de mquina, da seguinte forma: obtm a prxima instruo do Assembly; traduz para as instrues correspondentes em linguagem de mquina; 5

executa as instrues em linguagem de mquina; e repete o passo 1 at o fim do programa. INTERPRETADOR Efetua a traduo a de uma linguagem de alto nvel para linguagem de mquina da seguinte forma: obtm prxima instruo do cdigo-fonte em linguagem de alto nvel; traduz para as instrues correspondentes em linguagem de mquina; executa as instrues em linguagem de mquina; e repete o passo 1 at o fim do programa COMPILADOR Efetua a traduo de todo o cdigo-fonte em linguagem de alto nvel para as instrues correspondentes em linguagem de mquina, gerando o cdigo-objeto do programa. Em seguida necessrio o uso de um outro programa ( Link-Editor ) que responsvel pela juno de diversos cdigos-objeto em um nico programa executvel.
EDIO COMPILAO LINK-EDIO ALGORITMO CDIGO-FONTE CDIGO-OBJETO PROGRAMA EXECUTVEL

Possibilidades de Erros no Programa: Erros de Compilao : erros de digitao e de uso da sintaxe da linguagem. Erros de Link-Edio : erro no uso de bibliotecas de sub-programas necessrias ao programa principal. Erros de Execuo : erro na lgica do programa (algoritmo).

1.3

Critrios de Qualidade de um Programa Vejamos alguns critrios para escrevermos um programa com qualidade:

Integridade: refere-se preciso das informaes manipuladas pelo programa, ou seja, os resultados gerados pelo processamento do programa devem estar corretos, caso contrrio o programa simplesmente no tem sentido; Clareza: refere-se facilidade de leitura do programa. Se um programa for escrito com clareza, dever ser possvel a outro programador seguir a lgica do programa sem muito esforo, assim como o prprio autor do programa entend-lo aps ter estado um longo perodo afastado dele. O Pascal favorece a escrita de programas com clareza e legibilidade; Simplicidade: a clareza e preciso de um programa so normalmente melhoradas tornando seu entendimento o mais simples possvel, consistente com os objetivos do programa. Muitas vezes torna-se necessrio sacrificar alguma eficincia de processamento, de forma a manter a estrutura do programa mais simples;

Eficincia: refere-se velocidade de processamento e a correta utilizao da memria. Um programa deve ter performance SUFICIENTE para atender s necessidade do problema e do usurio, bem como deve utilizar os recursos de memria de forma moderada, dentro das limitaes do problema; Modularidade: consiste no particionamento do programa em mdulos menores bem identificveis e com funes especficas, de forma que o conjunto desses mdulos e a interao entre eles permite a resoluo do problema de forma mais simples e clara; e Generalidade: interessante que um programa seja to genrico quanto possvel de forma a permitir a reutilizao de seus componentes em outros projetos. 1.4 A Linguagem Pascal

1.4.1 Histrico Origem: desenvolvida nos anos entre 1968 e 1970 por Nicklaus Wirth na Universidade Tcnica de Zurique, Sua. Em 1970 disponibilizado o primeiro compilador para a linguagem. Objetivo: desenvolver uma linguagem de programao disciplinada de alto nvel para ensinar programao estruturada. Esta linguagem foi batizada com o nome de Pascal, em homenagem a Blaise Pascal, filsofo e matemtico francs que viveu entre 1623 e 1662. Padronizao: ANSI ( American National Standars Institute ) e IEEE ( Institute of Eletrical and Eletronics Engineers ) Padro de Fato: Borland International cria em 1983 o Turbo Pascal. Atualizaes: durante os ltimos anos foram lanadas diversas variaes da linguagem Pascal-Padro, implementando recursos que no so encontrados na estrutura padro da linguagem. Nas mos da Borland, j foram lanadas as verses 3.0, 4.0, 5.0 e 5.5 na dcada de 80. Durante a dcada de 90 foram lanadas as verses 6.0, 7.0 e o lanamento da linguagem Delphi, para programao em ambiente Windows. 1.4.2 O Turbo Pascal O Turbo Pascal mais que um simples compilador da linguagem Pascal, ele um Ambiente Integrado de Desenvolvimento ( IDE - Integrated Development Environment ), consistindo de um conjunto de ferramentas de desenvolvimento integradas. Entre as ferramentas que compem o Turbo Pascal temos:

Editor de Cdigo-Fonte Compilador Link-Editor Depurador Ajuda On-Line da Linguagem e do prprio IDE

Podemos citar alguns comandos principais do Turbo Pascal : Compilar o programa : ALT + F9 Compilar e Executar o Programa : CTRL + F9 Acessar o Menu : ALT + Letra realada. Criar um novo programa : menu FILE | NEW Salvar o programa atual : F2 Sair do Turbo Pascal : ALT + X Ver tela com os resultados do programa executado : ALT + F5

2 ESTRUTURA DE UM PROGRAMA EM PASCAL


Todo programa escrito em Pascal subdividido em trs reas distintas: cabealho do programa, rea de declaraes e corpo do programa. 2.1 Cabealho do Programa

Esta rea utilizada para se fazer a identificao do programa com um nome. O cabealho de um programa atribudo pela instruo program seguida de um nome. Ao final do nome deve-se colocar o smbolo ponto-e-vrgula ( ; ). No pode existir nenhuma varivel no programa que tenha o mesmo nome dado ao programa. Vejamos um exemplo: program CALCULA_AREA; Caso voc tenha atribudo ao programa o nome Soma e tambm tenha atribudo este nome a uma varivel no programa, quando for executado apresentar um mensagem de erro. 2.2 rea de Declaraes

Esta rea utilizada para validar o uso de qualquer tipo de identificador que no seja predefinido, estando subdividida em sete sub-reas: uses, label, const, type, var, procedure e function. Inicialmente, vamos estudar apenas a sub-rea var. As demais sero estudadas em captulos posteriores. A sub-rea var utilizada na declarao das variveis que sero utilizadas durante a execuo de um programa, bem como, tambm o seu tipo. Desta forma, a linguagem Pascal efetua a reserva de espao na memria para que as variveis sejam utilizadas. A declarao das variveis atribuda pela instruo var seguida da relao de variveis. Aps os nomes de cada varivel dever ser utilizado o smbolo dois-pontos ( : ), e aps estes mencionado o tipo de dado que a varivel ir receber, seguido de ponto-e-vrgula. Vejamos um exemplo: var NOME : string; IDADE : integer; ALTURA : real; Caso as variveis sejam de mesmo tipo, estas podero ser relacionadas separadas por vrgula. Vejamos um exemplo: A, B, C : integer;

2.3

Corpo do Programa

O programa propriamente dito em Pascal est escrito na rea denominada corpo do programa. esta rea tem incio com a instruo begin e finalizada pela instruo end seguida do smbolo ponto ( . ). O uso destas instrues caracteriza o que chamado de bloco, como indicado abaixo: begin instrues; (...) end. Na rea denominada corpo do programa, podero existir, dependendo da necessidade, vrios blocos. 2.4 Exemplo de um Programa em Pascal

Para se colocar em prtica o que foi explicado at este momento, considere o seguinte exemplo de um problema: Desenvolver um programa que efetue a leitura de dois valores numricos. Faa a operao de adio entre os dois valores e apresente o resultado obtido. Note que sempre estaremos diante de um problema, e que este dever ser resolvido primeiro por ns, para que depois seja resolvido por um computador. Primeiramente, voc deve entender bem o problema, para depois buscar a sua soluo dentro de um computador, ou seja, voc dever ensinar a mquina a resolver seu problema, atravs de um programa. Desta forma, o segredo de uma boa lgica est na compreenso adequada do problema a ser solucionado. Vejamos nosso problema citado acima: Algoritmo: 1. Ler um valor para a varivel A; 2. Ler outro valor para a varivel B; 3. Efetuar a soma das variveis A e B, colocando o resultado na varivel X; 4. Apresentar o valor da varivel X aps a operao de soma dos dois valores fornecidos. Completada a fase de interpretao do problema e da definio das variveis a serem utilizadas passa-se para a fase de codificao de nosso programa para a linguagem Pascal.

10

Programa em Pascal program ADICIONA_NUMEROS; var X : integer; A : integer; B : integer; begin readln(A); readln(B); X := A + B; writeln(X); end.

Entrada e Sada dos Dados Voc deve ter observado os comandos readln e writeln. Estes comandos so chamados de entrada e sada dos dados, respectivamente. A instruo readln permite a entrada de dados via teclado e a instruo writeln gera a sada de dados via vdeo. Poderiam tambm ser utilizadas as instrues write e read. Mas qual a diferena entre elas? muito simples: a colocao da ln indica line new, ou seja, nova linha. Ser realizado um pulo de linha aps a leitura ou exibio dos dados. As instrues write e read permitem manter o cursor na mesma linha, aps a exibio das mensagens ou leitura de dados.

11

3 VARIVEIS e CONSTANTES
3.1 Identificadores

Os identificadores so nomes a serem dados a variveis, tipos definidos, procedimentos, funes e constantes nomeadas. Devem seguir as seguintes regras de construo: iniciar sempre por uma letra (a - z , A - Z) ou um underscore ( _ ); o restante do identificador deve conter apenas letras, underscores ou dgitos (0 - 9). No pode conter outros caracteres; e pode ter qualquer tamanho, desde que os primeiros 63 caracteres sejam significativos. No existe distino entre letras maisculas e minsculas no nome de um identificador. Por exemplo, os nomes ALPHA, alpha e Alpha so equivalentes. Ateno para o fato de que identificadores muito longos so mais fceis de serem lidos pelas as pessoas quando se usa uma mistura de letras maisculas e minsculas; por exemplo, SalarioMinimo mais fcil de se ler do que SALARIOMINIMO. Vejamos alguns exemplos de identificadores vlidos: PAGAMENTO Soma_Total MaiorValor Media1 _Media e alguns exemplos de identificadores invlidos: %Quantidade 4Vendedor Soma Total O smbolo % no permitido No pode comear com um nmero No pode ter espaos entre as letras

Observao : Um identificador dever ficar inteiramente contido em uma linha do programa, ou seja voc no pode comear a digitar o nome do identificador numa linha e acabar em outro. 3.2 Palavras Reservadas

Pascal reconhece certo grupo de palavras como sendo reservadas. Essas palavras tem significado especial e no podem ser usadas como identificadores em um programa. A tab. 3.1 apresenta todas as palavras reservadas do Pascal Padro:

12

and array asm begin case const constructor destructor div do

TABELA 3.1 PALAVRAS RESERVADAS DO PASCAL

downto else End File For Foward Function Goto If implementation

In inline interface Label mod nil not object of or

packed procedure program record repeat set shl shr string then

to type unit until until uses var while with xor

3.3

Comentrios

Comentrios so textos escritos dentro do cdigo-fonte para explicar ou descrever alguns aspectos relativos ao mesmo. Os comentrios podem ser colocados em qualquer lugar do programa onde um espao em branco possa existir. Voc pode colocar comentrios de duas formas: ou envolvendo o texto entre chaves {..} ou entre (* .. *). Quando o compilador encontra o smbolo { ele salta todos os caracteres at encontrar um }. Da mesma forma, todos os caracteres que seguem (* so pulados at ser detectado o smbolo *). Como resultado disso, qualquer uma das formas pode ficar dentro da outra; por exemplo {...(*...*)...} um comentrio. 3.4 Tipos de Dados

Os dados so representados pelas informaes a serem processadas por um computado. Um tipo de dados especifica as caractersticas, ou seja os valores e operaes possveis de serem utilizados com um dado desse tipo. Toda varivel e constante usada em um programa tem um tipo associado a ela. A linguagem Pascal fornece ao programador um conjunto de tipos de dados predefinidos. 3.4.1 Tipos de Dados Inteiros So caracterizados tipos inteiros, os dados numricos positivos ou negativos, excluindo-se qualquer nmero fracionrio. Em Pascal, este tipo de dado pode ser referenciado por um dos seguintes identificadores: Tipo de dado inteiro shortint integer longint byte word Faixa de abrangncia de 128 at 127 de 32.768 a 32.767 de 2.147.483.648 a 2.147.483.647 de 0 at 255 de 0 at 65535 Tamanho(bytes ) 1 byte 2 bytes 4 bytes 1 byte 2 bytes

13

Vejamos um exemplo: var NumAlunos Cont,cont1 3.4.2 Tipos de Dados Reais O tipo de dado real permite trabalhar com nmeros fracionrios, tanto positivos como negativos, sendo sua capacidade de armazenamento maior que dos nmeros inteiros. Vejamos os tipos: Tipo de dado real real single double extended comp Vejamos um exemplo: var Nota : real; Salario, media : real; 3.4.3 Tipos de Dados Caracteres So considerados tipos caracteres, as seqncias contendo letras, nmeros e smbolos especiais. Uma seqncia de caracteres, em Pascal, deve ser representada entre apstrofos (). Este tipo de dado referenciado pelo identificador string, podendo armazenar de 1 at 255 caracteres. Podemos ainda especificar um tamanho menor do que os 255 caracteres permitidos. Vejamos a sintaxe para criarmos uma varivel do tipo string com tamanho limitado. Sintaxe: varivel : string[tamanho]; Vejamos um exemplo do uso de strings: var Frase : string; Nome : string[45]; Existe ainda o tipo char, utilizado da mesma forma que o tipo string, porm com uma pequena diferena: usado para strings de apenas um caracter. Vejamos um exemplo do tipo de dado char: var Sexo : char; 14 Faixa de abrangncia de 2.9 e-39 at 1.7 e38 de 1.5 e-45 at 3.4 e38 de 5.0 e-324 at 1.7e308 de 3.4 e-4.932 at 1.1 e4.932 de 9.2 e18 at 9.2 e18 Tamanho(bytes ) 6 bytes 4 bytes 8 bytes 10 bytes 8 bytes : integer; : integer;

3.4.4 Tipos Lgicos So caracterizados tipos lgicos, os dados com valores true (verdadeiro) e false (false). Este tipo de dado tambm e chamado de tipo boleano. Ele representado pelo identificador boolean. Vejamos um exemplo da utilizao do tipo de dado boolean: var Aprovado : boolean; Confirma : boolean; 3.5 Variveis

Varivel, no sentido de programao, uma regio previamente identificada, que tem por finalidade armazenar informaes (dados) de um programa temporariamente. Uma varivel armazena apenas um valor por vez. Sendo considerado como valor o contedo de uma varivel, este valor est associado ao tipo de dado da varivel. Sintaxe: var identif [ , identif ]... : tipo-de-dado; [identif [ , identif ]... : tipo-de-dado; ] ... onde: tipo-de-dado um dos tipos predefinidos ou um tipo definido pelo usurio: Vejamos um exemplo: var Soma, Total, Salario Idade, Contador 3.6 Constantes

: real; : integer;

Uma constante um valor que no pode ser alterado durante a execuo do programa, sendo que seu tipo definido por seu contedo. Sintaxe: const identificador = expresso; ... identificador = expresso; Vejamos um exemplo:

15

program Area_Circulo; { Programa para calcular a rea de um crculo. } const PI = 3.141519265; var Area, Comprimento, Raio : real; begin writeln( Digite o Raio : ); readln( Raio ); Area := PI * Raio * Raio; Comprimento := 2 * PI * Raio; writeln( rea = , Area ); writeln( Comprimento da Circunferencia = , end.

Comprimento );

16

4 OPERADORES E EXPRESSES
Um programa tem como caracterstica fundamental a capacidade de processar dados. Processar dados significa realizar operaes com estes dados. O uso de operadores permite a realizao de tais operaes. adio. Exemplo: o smbolo + um operador que representa a operao aritmtica de

Uma expresso um arranjo de operadores e operandos. A cada expresso vlida atribudo um valor numrico. Exemplo: 4 + 6 uma expresso cujo valor 10. Os operandos podem ser variveis, constantes ou valores gerados por funes. Os operadores identificam as operaes a serem efetuadas sobre os operandos. Cada tipo de dados possui um conjunto de operadores relacionados. Os operadores classificam-se em Unrios e Binrios, conforme tenham um ou dois operandos, respectivamente. 4.1 Prioridade das Operaes

Se vrios operadores aparecerem em uma expresso, a ordem de execuo das operaes ser dada segundo os critrios abaixo : pelo emprego explcito de parnteses; pela ordem de precedncia existente entre os operadores; e se existirem operadores de mesma ordem de precedncia, a avaliao ser feita da esquerda para a direita.. Vejamos a ordem de precedncia dos operadores ( da maior para a menor ): Operadores ( ) not * / div mod and or = <> < > <= >= Categoria Parntesis Operador Lgico Unrio Operadores Multiplicativos Operadores Lgicos Operadores Relacionais

4.2

Tipos de Expresses Existem trs tipos bsicos de expresses:

Numricas: uma expresso numrica quando os seus operandos so numricos ( inteiros ou reais ) e o resultado tambm um valor numrico. 17

Literais: Uma expresso literal quando os seus operandos so literais do tipo string (no pode ser char) e o resultado tambm um valor literal. S existe um nico operador para se usar em expresses literais, o operador Concatenao( + ). Boolenas: Uma expresso booleana quando seu resultado do tipo boolean (TRUE ou FALSE), podendo seu operando serem de qualquer tipo de dados. Nas expresses relacionais so usados os operadores Lgicos e os Relacionais. 4.3 Tipos de Operadores

Existem vrios operadores para a realizao de expresses em Pascal. Veremos agora algumas das mais importantes. 4.3.1 Operador de Atribuio O operador de atribuio utilizado para atribuir o valor de uma expresso a uma varivel. Sintaxe: identificador_varivel := expresso; Vejamos um exemplo: A := 10; Nome := Josias; 4.3.2 Operadores Aritmticos Os operadores aritmticos so utilizados para efetuar operaes aritmticas com nmero inteiros e reais. A tab. 4.1 apresenta os operadores aritmticos existentes em Pascal. Operador Subtrao Adio Multiplicao Diviso Real Diviso Inteira ( truncada ) Resto da Diviso Inteira Inverte Sinal Mantm Sinal Smbolo + * / div mod +

TABELA 4.1 OPERADORES ARITMTICOS

18

Vejamos um exemplo: var A, B : integer; C, D : real; begin A := 1; B := 3; C := 5; D := 10; A := 1 + B; A := B + D; B := 10 div A := 10 mod C := D / C; D := 10 div inteiros A := -1; B := 5 + A; B := -A; C := D * A; B := C * B; end.

{ errado, D real } 3; 3; C; } { errado, o operado div s para

{ errado, C real }

4.3.3 Operador de Concatenao O operador de concatenao efetua a juno de duas variveis ou constantes do tipo string. Vejamos um exemplo: var PreNome, SobreNome, NomeCompleto : string[ 30 ]; begin { Suponhamos o nome Josias Lima Santos } PreNome := Josias; SobreNome := Santos; NomeCompleto := PreNome + SobreNome; writeln( NomeCompleto ); NomeCompleto := Jose + Maria; writeln( NomeCompleto ); ... end.

19

4.3.4 Operadores Relacionais Os operadores relacionais so utilizados para efetuar a comparao entre dados de mesmo tipo. Os operadores relacionais existentes em Pascal podem ser vistos na tab.4.2. Operador Maior que Menor que Maior ou igual Menor ou igual Igual Diferente Smbolo

> < >= <= = <>

TABELA 4.2 OPERADORES RELACIONAIS

Vejamos um exemplo: var Nota1, Nota2 : real; NomeAluno1, NomeAluno2 : string[ 30 ]; A, B, C : integer; begin A := 2; B := 3; C := 1; if B = A + C then writeln( B ); Nota1 := 5.0; Nota2 := 10.0; if Nota1 < Nota2 then writeln( Nota1 ); NomeAluno1 := Maria Jose; NomeAluno2 := MariaJose; if NomeAluno1 < NomeAluno2 then writeln( NomeAluno1 ); end.

20

4.3.5 Operadores Lgicos Os operadores lgicos so utilizados para se analisar duas ou mais expresses interrelacionadas. A tab. 4.3 exibe os operadores lgicos existentes em Pascal. Operador E OU NO Smbolo and or not

TABELA 4.3 OPERADORES LGICOS

Vejamos um exemplo: var Nota1, Nota2 : real; NomeAluno1, NomeAluno2 : string[ 30 ]; A, B, C : integer; begin A := 2; B := 3; C := 1; NomeAluno1 := Maria Jose; NomeAluno2 := MariaJose;
if ( B = A + C ) and ( NomeAluno1 <> NomeAluno2 ) then

writeln( NomeAluno1, B ); if ( A = C ) or ( NomeAluno1 = NomeAluno2 ) then writeln( NomeAluno1 ); if not( A = C ) then writeln( NomeAluno1 ); end. Abaixo, segue trs tabelas, chamadas tabela-verdade, contendo o resultado do uso dos operadores lgicos sobre dois operandos. OPERADOR AND OPERANDO 1 TRUE TRUE FALSE FALSE

OPERANDO 2 TRUE FALSE TRUE FALSE

RESULTADO TRUE FALSE FALSE FALSE

21

OPERADOR OR OPERANDO 1 TRUE TRUE FALSE FALSE OPERADOR NOT

OPERANDO 2 TRUE FALSE TRUE FALSE

RESULTADO TRUE TRUE TRUE FALSE

OPERANDO TRUE FALSE

RESULTADO FALSE TRUE

4.4

Funes predefinidas

O Pascal oferece um conjunto de funes predefinidas (built-in functions), que so usadas com vrios tipos de dados simples. As funes, na maioria das vezes, necessitam de dados como parmetro (dados de entrada). Vejamos algumas dessas funes: Funes Matemticas: Nome Funo abs( x ) cos( x ) exp( x ) Objetivo Calcula o valor absoluto de x. Calcula o coseno de x em radianos x Calcula e , em que e=2.7182818 Tipo Parmetro inteiro ou real inteiro ou real inteiro ou real Tipo do Retorno o mesmo que x real real

sistema natural de logaritmos neperianos.

ln( x ) exp(ln(x)*y) sin( x ) sqr( x ) sqrt( x ) odd( x ) random( x ) pi

Calcula o logaritmo natural de x (x>0) Retorna x elevado a y {utilizando regras de logaritmos}. Calcula o seno de x em radianos Calcula o quadrado de x Calcula a raiz quadrada de x (x>=0) Determina se x par ou impar TRUE, X par / FALSE, X impar Retorna um nmero pseudo-aleatrio entre 0 e x. Se x no for especificado retorna um valor entre 0.0 e 1.0 Retorna o valor de PI (3.1415...)

inteiro ou real Inteiro ou real inteiro ou real inteiro ou real inteiro ou real inteiro inteiro Nenhum

real real real o mesmo que x real boolean real real

22

Funes Literais: Nome Funo length( x ) concat( x1, x2, x3,...) copy( x, y, z ) UpCase( x ) Objetivo Determina o nmero de caracteres de x Concatena duas ou mais strings (mx 255 caracteres) Retorna uma subcadeia da cadeia x, com z caracteres, comeando no caracter y. Retorna x convertido para maiscula Tipo Parmetro string string string, inteiro, inteiro char Tipo Retorno inteiro string string char

Funes para Converso: Nome Funo trunc( x ) int( x ) frac( x ) round( x ) chr( x ) Objetivo Trunca x para um nmero inteiro Retorna a parte inteira de x Retorna a parte fracionria de x Arredonda x para um inteiro Determina o caracter ASCII representado por x Tipo Parmetro real real real real inteiro Tipo Retorno inteiro real real inteiro char

Funes e Procedimentos de Uso Geral: Nome Funo sizeof( x ) gotoxy(x,y) Objetivo Retorna o nmero de byte de x Move o curso para a coluna x e linha y Tipo Parmetro qualquer tipo inteiro Tipo do Retorno inteiro

23

5 ESTRUTURAS DE DECISO
Imagine um programa que apresente a mdia escolar de um aluno. At aqui, muito simples; mas alm de calcular a mdia, o programa deve apresentar uma mensagem indicando se o aluno foi aprovado ou reprovado. Esta varivel, que at ento servia para clculos, agora passa a ser uma varivel de controle, onde partir dela poderemos tomar uma deciso sobre o status do aluno. Em Pascal existem duas instrues para efetuar tomadas de deciso e desvios de operaes: a instruo de deciso simples if...then; e a instruo de deciso composta if...then...else. 5.1 A instruo if..then

A instruo if...then tem por finalidade tomar uma deciso e efetuar um desvio no processamento, dependendo, claro, da condio atribuda ser verdadeira ou falsa. Sendo a condio verdadeira, ser executada a instruo que estiver escrita aps a instruo if..then. Se a instruo for falsa, sero executadas as instrues que estejam aps as instrues consideradas verdadeiras. Sintaxe: if <condio> then <instruo para condio verdadeira>; <instruo para condio falsa ou aps condio ser verdadeira>; Vejamos um exemplo de um trecho de programa com o uso da instruo if...then: ... if (x > 10) then writeln(O valor da variavel X e 10); ... Caso venha a existir mais de uma instruo verdadeira para uma determinada condio, estas devero estar inseridas em um bloco. Um bloco o conjunto de instrues estar entre begin e end. Sintaxe: if <condio> then begin <instruo para condio verdadeira> <instruo para condio verdadeira> <instruo para condio verdadeira> <instruo para condio verdadeira> end; <instruo para condio falsa ou aps condio ser verdadeira>

24

Observe que o end finalizado com um ponto-e-vrgula ( ; ) e no apenas ponto. O uso de ponto ao final de um end ocorre somente na finalizao de um programa. Vejamos um exemplo de um trecho de programa com a utilizao de um bloco de instrues: ... if (x > 10) then begin writeln(O valor da variavel X e 10); x : = x + 1; writeln(O valor da variavel X agora e11); end; ... Vejamos um exemplo completo de um programa com o uso da instruo if...then. Ler dois valores inteiros e independentemente da ordem em que foram inseridos, estes devero ser exibidos em ordem crescente, ou seja, se forem fornecidos 5 e 3 respectivamente, devero ser apresentados 3 e 5. O programa em questo dever efetuar a troca dos valores entre as duas variveis Algoritmo 1. Ler dois valores inteiros (estabelecer variveis A e B); 2. Verificar se o valor de A maior que o valor de B: a. se for verdadeiro, efetuar a troca de valores entre as variveis; b. se for falso, pedir para executar o que est estabelecido no passo 3; 3. Apresentar os valores das duas variveis. Programa em Pascal program ORDENA; var X, A, B : integer; begin write (Informe uma valor para a variavel A: ); readln(A); write (Informe uma valor para a variavel B: ); readln(B); writeln; if (A > B) then begin X := A; A := B; B := X; end; writeln(Os valores ordenados so: ); write(A, , B); end. 25

5.2

A instruo if...then...else

Assim como a instruo if...then, a instruo if...then...else tem por finalidade tomar uma deciso e efetuar um desvio no processamento. Se a condio for verdadeira ser executada a instruo logo abaixo do if. Sendo a condio falsa, ser executada a instruo que estiver posicionada logo aps a instruo else. O conceito de blocos de instrues vale tambm para esta instruo. Sintaxe: if <condio> then <instrues para condio verdadeira> else <instrues para condio falsa>; Caso venha a existir mais de uma instruo verdadeira ou falsa para uma condio, estas devero estar inseridas em um bloco. Sintaxe: if <condio> then begin <instrues para condio <instrues para condio end else begin <instrues para condio <instrues para condio end;

verdadeira>; verdadeira>;

falsa>; falsa>;

Observe que nos dois casos abordados acima, qualquer instruo que antecede a instruo else est escrita sem o ponto-e-vrgula (;). Isto ocorre pelo fato de a instruo else ser uma extenso da instruo if...then, e sendo assim, o final da condio somente ocorre aps o processamento da instruo else. Vejamos um exemplo: Ler dois valores numricos e efetuar a adio. Caso o valor somado seja maior ou igual a 10, este dever ser apresentado somando-se a ele mais 5. Caso o valor somado no seja maior ou igual a 10, esta dever ser apresentado subtraindo-se 7. Algoritmo 1. Ler dois valores (variveis A e B); 2. Efetuar a soma dos valores A e B, atribuindo o resultado da soma a uma varivel X; 3. Verificar se X maior ou igual a 10: a. se for verdadeiro, mostrar X+5; b. se for falso, mostrar X-7.

26

Programa em Pascal program ADICIONA_NUMEROS; var X, A, B : integer; begin write(Informe um valor para a variavel A: ); readln(A); write(Informe um valor para a variavel B: ); readln(B); writeln; X := A + B; write (O resultado equivale a: ); if (X>=10) then writeln(X+5) else writeln(X-5) end. Podemos trabalhar com o relacionamento de duas ou mais condies dentro da instruo if...then. Para estes casos, necessrio trabalhar com os operador lgicos, vistos anteriormente. Vejamos alguns exemplos : Operador AND program TESTA-LOGICA-AND; var NUMERO : integer; begin write(Informe um numero: ); readln(NUMERO); writeln; if (NUMERO >= 20) and (NUMERO <=90) then writeln(O numero esta na faixa de 20 a 90) else writeln(O numero esta fora da faixa de 20 a 90); end.

27

Operador OR program TESTA-LOGICA-OR; var A, B : integer; begin write(Informe um valor para a variavel A: ); readln(A); write(Informe um valor para a variavel B: ); readln(B); writeln; if (A>0) or (B>0) then writeln(Um dos numeros e positivo);

Operador NOT program TESTA-LOGICA-NOT; var A, B, C, X : integer; begin write(Informe um valor para a variavel A: ); readln(A); write(Informe um valor para a variavel B: ); readln(B); write(Informe um valor para a variavel X: ); readln(X); if not (X>5) then C := (A + B) * X else C := (A - B) * X; writeln(O resultado da variavel C corresponde a:, C); end.

28

6 ESTRUTURAS DE REPETIO (LOOPS)


Existem situaes onde necessrio repetir um determinado trecho de um programa um certo nmero de vezes. Imagine que voc tenha que executar um determinado bloco de instrues 5 vezes. Com os conhecimentos que voc tem at agora, seria necessrio repetir as instrues CINCO vezes, tornando seu trabalho muito cansativo. Assim, existem as estruturas de repetio, que permitem que voc execute estas tarefas de forma mais simplificada. Podemos chamar as estruturas de repetio de laos ou loops, sendo que podem existir dois tipos de laos de repetio: laos finitos: neste tipo de lao se conhece previamente o nmero de repeties que sero executadas; e laos infinitos: neste tipo de lao no se conhece previamente o nmero de repeties que sero executadas. So tambm chamados de condicionais, pelo fato de encerrarem sua execuo mediante uma determinada condio. 6.1 Instruo for

O comando FOR executa repetitivamente um comando enquanto atribudo uma srie de valores a uma varivel de controle (contador do FOR). Sintaxe : for variavel := <incio> to/downto <fim> do instruo; ou for variavel := <incio> to/downto <fim> do begin instruo1; instruo2; instruo3; end; Vejamos um exemplo da utilizao da estrutura de repetio for. Ler dois valores inteiros. Realize a adio destes nmeros, armazenando o resultado em uma terceira varivel. Apresente o valor encontrado. Repita esta operao 5 vezes. Algoritmo 1. 2. 3. 4. 5. Criar uma varivel para servir como contador, que ir variar de 1 at 5; Ler dois valores (variveis A e B); Efetuar o clculo, armazenando o resultado em R; Apresentar o valor calculado contido na varivel R; Repetir os passos 2, 3 e 4 at que o contador seja encerrado. 29

Programa em Pascal program EXEMPLO_FOR; var A, B, R, I : integer; begin for I := 1 to 5 do begin write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; end; end. Quando executado o programa, o conjunto de instrues situadas abaixo da instruo for sero executadas durante 5 vezes, pois a varivel I (varivel de controle) inicializada com o valor 1 incrementada com mais 1 a cada vez que o processamento passa pela instruo for. Este tipo de estrutura de repetio pode ser utilizado todas as vezes que se tiver necessidade de repetir trechos finitos, ou seja, quando se conhece o nmero de vezes que se deseja repetir tais instrues. 6.2 Instruo while...do

Esta estrutura de repetio se caracteriza por efetuar um teste lgico no incio de um loop, verificando se permitido executar o trecho de instrues abaixo dela. A estrutura while...do tem o seu funcionamento controlado por condio. Desta forma, poder executar um determinado conjunto de instrues enquanto a condio verificada permanecer verdadeira. No momento em que a condio se torna falsa, o processamento da rotina desviado para fora do loop. Sendo a condio falsa logo no incio do loop, as instrues contidas nele so ignoradas. Sintaxe: while <condio> do <instruo para condio verdadeira>; ou while <condio> do begin <instrues para condio verdadeira>; end;

30

Vejamos novamente o exemplo da adio de dois nmeros, utilizado agora a instruo while...do. Ler dois valores inteiros. Realize a adio destes nmeros, armazenando o resultado em uma terceira varivel. Apresente o valor encontrado. Repita esta operao 5 vezes. Algoritmo 1. Criar uma varivel para servir como contador, com valor inicial igual a1; 2. Enquanto o valor do contador for menor ou igual a 5, processar os passos 3, 4 e 5; 3. Ler dois valores (variveis A e B); 4. Efetuar o clculo, armazenando o resultado em R; 5. Apresentar o valor calculado contido na varivel R; 6. Acrescentar ao contador mais 1; e 7. Quando o contador for maior que 5, encerrar o processamento. Programa em Pascal program EXEMPLO_WHILE_DO1; var A, B, R, I : integer; begin while (I <= 5) do begin write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; I := I + 1; end; end. Alm da utilizao das variveis A, B e R, foi necessrio criar uma terceira varivel, no caso I, para controlar a contagem do nmero de vezes que o trecho de programa dever ser executado. Imagine ainda uma outra situao, onde o usurio deseja executar a rotina do programa vrias vezes, mas este no sabe quantas vezes ao certo dever executar o trecho de programa. Neste caso no seria conveniente manter um contador para controlar o looping, e sim, seria melhor que o programa fizesse ao usurio uma pergunta, solicitando se o mesmo deseja ou no continuar executando o programa. Vejamos o mesmo exemplo, agora sob esta nova situao: 31

Algoritmo 1. 2. 3. 4. 5. 6. Criar uma varivel para ser utilizada como resposta; Enquanto a resposta for sim, executar os passos 3, 4 e 5; Ler dois valores (variveis A e B); Efetuar o clculo, armazenando o resultado em R; Apresentar o valor calculado contido na varivel R; Quando resposta for diferente de sim, encerrar o processamento.

Programa em Pascal program EXEMPLO_WHILE_DO2; var A, B, R : integer; RESP : string; begin RESP := SIM; while (RESP = SIM) or (RESP = S) do begin write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; write(Deseja continuar ??); readln(RESP); end; end. No programa acima, o contador foi substitudo pela varivel RESP, que enquanto tiver o seu valor igual a SIM ou igual a S, executar as instrues contidas entre as instrues begin e end do comando while...do. 6.3 Instruo repeat...until

Esta estrutura caracteriza-se por efetuar um teste lgico no final de um looping, sendo parecida com a estrutura while...do. Seu funcionamento controlado tambm por deciso. Esta instruo ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de verificar a validade da condio estabelecida. Desta forma, repeat ir processar um conjunto de instrues, no mnimo uma vez, at que a condio se torne verdadeira. Para a estrutura repeat um conjunto de instrues executado enquanto a condio se mantm falsa e at que se torne verdadeira.

32

Sintaxe: repeat <instruo1 at que a condio seja verdadeira> ; <instruo1 at que a condio seja verdadeira> ; <instruo1 at que a condio seja verdadeira> ; until <condio>; Vejamos novamente nosso exemplo da adio, agora utilizando a instruo repeat...until: Algoritmo 1. 2. 3. 4. 5. 6. Criar uma varivel para servir como contador, com valor inicial igual a 1; Ler dois valores (variveis A e B); Efetuar o clculo, armazenando o resultado em R; Apresentar o valor calculado contido na varivel R; Acrescentar o contador com mais 1; Repetir os passos 2, 3 e 4 at que o contador seja maior que 5.

Programa em Pascal program EXEMPLO_REPEAT1; var A, B, R, I : integer; begin I := 1; repeat write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; I := I + 1; until (I > 5); end. Assim que o programa executado, a varivel contador inicializada com valor igual a 1. Em seguida a instruo repeat indica que todo trecho de instrues situado at a instruo until ser executado repetidas vezes at que sua condio se torne verdadeira, ou seja, at que I seja maior que 5. Vejamos o mesmo exemplo, agora considerando que o usurio encerrar a execuo segundo sua vontade.

33

Algoritmo 1. 2. 3. 4. 5. 6. Criar uma varivel para ser utilizada como resposta; Ler dois valores (variveis A e B); Efetuar o clculo, armazenando o resultado em R; Apresentar o valor calculado contido na varivel R; Perguntar ao usurio se deseja continuar executando o programa; e Repetir o passos 2, 3 e 4 at que a resposta do usurio seja no.

Programa em Pascal program EXEMPLO_REPEAT2; var A, B, R : integer; RESP : string; begin RESP := SIM; repeat write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); writeln; R := A + B; writeln(O resultado corresponde a: ,R); writeln; write(Deseja continuar Sim/No ??); readln(RESP); writeln; until (<RESP <> SIM) and (<RESP <> sim); end. Assim que o programa executado, a varivel RESP inicializada com o valor SIM. Em seguia, a instruo repeat indica que todas as instrues situadas at a instruo until devero ser executadas at que sua condio se torne verdadeira, ou seja que o usurio responda algo diferente de SIM, e tambm diferente de sim.

34

7 VETORES, MATRIZES E REGISTROS


Ao utilizamos variveis, podemos armazenar apenas um valor por vez. Agora, imagine um programa onde precisa-se armazenar as notas de 5 provas realizadas por um aluno. Com os conhecimentos que voc possui at agora, seria necessrio criar cinco variveis para armazenar as notas. Desta forma: NOTA1, NOTA2, NOTA3, NOTA4, NOTA5 : integer; Em Pascal existem estruturas que nos permitem agrupar vrias informaes dentro de uma mesma varivel. Estas estruturas so chamadas de vetores e matrizes. 7.1 Vetores

Este tipo de estrutura tambm chamado de matriz unidimensional. Um vetor representado por seu nome, tamanho e seu tipo. Sintaxe: <vetor> : array[tamanho] of <tipo_de_dado>;

onde: vetor o nome atribudo ao vetor, tamanho o tamanho atribudo ao vetor, em nmero de elementos e tipo_de_dado o tipo de elemento armazenado (inteiro, real...). Como j visto, uma varivel somente pode conter um valor por vez. No caso dos vetores, estes podero armazenar mais de um valor por vez, pois so dimensionados exatamente para este fim. aluno: Vejamos como poderamos declarar um vetor para armazenar as cinco notas do NOTAS : array[1..5] of real; A leitura e exibio de vetores so feitas indicando individualmente quais elementos se deseja ler ou imprimir. Vejamos como inserir as notas do aluno: NOTA[1] := 5.2; NOTA[2] := 8.0; NOTA[3] := 9.2; NOTA[4] := 7.5; NOTA[5] := 8.3; Observe que o nome um s, o que muda a informao indicada dentro dos colchetes. A esta informao d-se o nome de ndice, sendo este o endereo onde o valor est armazenado, ou seja, a nota do aluno. Podemos imaginar o vetor como uma tabela com cinco colunas: NOTA 5.2 8.0 9.2 7.5 8.3 35

Vamos analisar um programa com a utilizao de vetores: Desenvolver um programa que efetue a leitura de 10 elementos de um vetor A Construir um vetor B de mesmo tipo, observando a seguinte lei de formao: se o valor do ndice for par, o valor dever ser multiplicado por 5; sendo mpar, dever ser somado com 5. Ao final, mostrar os contedos dos dois vetores. Algoritmo 1. Iniciar o contador do ndice de um vetor (A), com valor 1 at 10; 2. Ler os 10 valores, um a um; 3. Verificar se o ndice par: a. Se for, multiplica por 5 e atualiza no vetor B; b. Se no for par, soma 5 e atualiza no vetor B. 4. Apresentar o contedo dos dois vetores. Programa em Pascal program EXEMPLO_VETOR; var A, B : array[1..10] of integer; I : integer; begin { *** Entrada dos Dados ***} for I := 1 to 10 do begin write(Informe o valor, I); readln(A[I]); end; { *** Teste Par ou mpar ***} for I := 1 to 10 do if (I mod 2 = 0) then B[I] := A[I] * 5 else B[I] := A[I] + 5; writeln; { *** Apresentao das matrizes ***} for I := 1 to 10 do writeln(A[, I:2,] = , A[I]:2, , B[, I:2, ] = , B[I]:2 ); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end. Vejamos um exemplo do uso de vetores de strings:

36

Ler e exibir o nome de 10 pessoas. Algoritmo 1. 2. 3. 4. Definir a varivel I do tipo inteira para controlar a repetio; Definir a matriz NOME do tipo string para 10 elementos; Iniciar o programa, fazendo a leitura dos 10 nomes; e apresentar, aps a leitura, os 10 nomes.

Programa em Pascal program LISTA_NOME; var NOME : array[1..10] of string; I: integer; begin writeln(Listagem de nomes); writeln; { *** Entrada dos Dados *** } for I := 1 to 10 do begin write(Digite o , I:2, o. nome: ); readln(NOME[I]); end; writeln; { *** Apresentao dos Nomes *** } for I := 1 to 10 do writeln(Nome: , I:2, --> , NOME[I]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

Uma forma mais organizada de apresentar o programa acima, seria exibir os nomes das pessoas em ordem alfabtica, contribuindo para uma pesquisa mais fcil. Vejamos como ficaria o programa desta forma:

37

Programa em Pascal program LISTA_NOME_ORDENADO; var NOME : array[1..10] of string; I, J: integer; X : string; begin writeln(Listagem de nomes); writeln; { *** Entrada dos Dados *** } for I := 1 to 10 do begin write(Digite o , I:2, o. nome: ); readln(NOME[I]); end; { *** Ordenao dos Nomes *** } for I := 1 to 9 do for J := I +1 to 10 do if (NOME[I] > NOME[J]) then begin X := NOME[I]; NOME[I] := NOME[J]; NOME[J] := X; end; { *** Apresentao dos Nomes *** } writeln; for I := 1 to 10 do writeln(Nome: , I:2, --> , NOME[I]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln;

end.

Observe o algoritmo da troca, utilizado junto da instruo if NOME[I] > NOME[J] then. Aps a verificao desta condio, sendo o primeiro nome maior que o segundo, efetua-se ento a sua troca com a seqncia: X := NOME[I]; NOME[I] := NOME[J]; NOME[J] := X;

38

Considere o vetor NOME[I] com o valor CARLOS e o vetor NOME[J] com o valor ALBERTO. Ao final, NOME[I] dever estar com ALBERTO e NOME[J] dever estar com o valor CARLOS. Para se conseguir este efeito necessria a utilizao de uma varivel de apoio, no caso X. Para que o vetor NOME[I] fique livre para receber o valor do vetor NOME[J], X dever receber o valor de NOME[I], assim sendo X passa a ter o valor CARLOS. Neste momento passa-se o valor de NOME[J] para NOME[I], no caso ALBERTO. Po fim, NOME[J] pode receber o valor de X para receber o valor CARLOS. 7.2 Matrizes

Vamos imaginar que queremos rescrever o programa das notas do aluno, agora mantendo o controle para cinco alunos ao invs de apenas um. Com os conhecimentos adquiridos at agora seria necessrio criar cinco vetores (matrizes unidimensionais), um para cada aluno. Esta uma soluo, e funciona, porm, torna nosso trabalho mais cansativo. Para facilitar o trabalho com estruturas deste porte, existem as chamadas matrizes (ou matrizes multidimensionais, se voc pensar que vetores so matrizes unidimensionais).A mais comum a matriz de duas dimenses. Uma matriz de duas dimenses estar sempre fazendo meno a linhas e colunas e ser representada por seu nome e seu tamanho. Sintaxe: <matriz> : array[dimenso_linha,dimenso_coluna] of <tipo_de_dado>; onde: matriz o nome atribudo matriz, dimenso_linha o tamanho da matriz em nmero de linhas, dimenso_coluna o tamanho da matriz em nmero de colunas e tipo_de_dado o tipo do elemento armazenado(inteiros, reais...). Vejamos como ficaria a matriz das notas dos nossos 5 alunos: Pedro Ana Joana Joao Mauro 8.5 5.0 7.0 8.5 5.5 9.0 6.8 7.5 8.0 8.0 7.8 8.7 7.8 9.2 7.2 8.9 6.5 6.5 7.9 7.0

E como ficaria sua declarao em Pascal: NOTAS : array[1..5,1..4] of real; Vamos ver o programa em Pascal para este exemplo para entenderemos melhor o conceito de matriz:

39

Вам также может понравиться