Vous êtes sur la page 1sur 56

Curso Bsico de Lgica de Programao

INTRODUO NOES DE LGICA O que Lgica? A Lgica trata da correo do pensamento. Como filosofia, ela procura saber por que pensamos assim e no de outro jeito. Como arte ou tcnica, ela nos ensina a usar corretamente as leis do pensamento. Poderamos dizer tambm que a Lgica a arte de pensar corretamente e, visto que a forma mais complexa do pensamento o raciocnio, a Lgica estuda ou tem em vista a "correo do raciocnio". Podemos ainda dizer que a Lgica tem em vista a "ordem da razo". Isto d a entender que a nossa razo pode funcionar desordenadamente, pode pr as coisas de pernas para o ar. Por isso a Lgica ensina a colocar Ordem no Pensamento. Exemplo: Todo mamfero animal. Todo cavalo mamfero. Portanto, todo cavalo animal. Algoritmo Um algoritmo a descrio de um padro de comportamento, expressado em termos de um repertrio bem definido e finito de aes primitivas, das quais damos por certo que elas podem ser executadas. Linguagem de Programao Linguagem de Programao - o conjunto de smbolos e regras que associamos semnticas utilizadas para programar computadores. Em toda linguagem, as frases construdas envolvem dois aspectos: a sintaxe e a semntica. A sintaxe tem a ver a forma e a semntica. Bloco Conjunto de aes com uma funo definida para delimitar utilizamos: Incio e Fim. 1.1.1.1 Representao de Algoritmos: Linguagens de Programao A representao de algoritmos em uma pseudo-linguagem mais prxima s pessoas bastante til principalmente quando o problema a ser tratado envolve um grande nmero
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

de passos. No entanto, para que esses passos possam ser entendidos pelo computador necessrio representar tal algoritmo em uma linguagem de programao.

Pascal Fortran C C++

As linguagens de programao obrigam o uso de formas rgidas na especificao de seus passos, ou seja, obrigam as pessoas a detalharem as operaes que devero ser executadas. Uma dica aqui refinar a soluo do problema de um nvel mais abstrato at chegar ao nvel de detalhamento que deve ser representado em uma linguagem de programao. Essa prtica, alm de prover um tipo de documentao, tambm ajuda muito no tratamento dos erros que eventualmente possam surgir. Compilador traduz o programa escrito em uma linguagem de programao para linguagem de mquina. verifica se as formas rgidas na especificao dos passos foi seguida corretamente. compiladores so relacionados diretamente com a mquina para a qual ser feita a traduo. gera um arquivo executvel do programa descrito. 2 Portugol Portugus + Algoritmo = Portugol

2.2 Declarao de Variveis tipos Bsicos Temos quatros tipos de bsicos: Inteiro Qualquer nmero inteiro. Ex: -3, 0, 239. Real Qualquer nmero real. Ex: -3, 0.001, 10. Caracter Qualquer conjunto de caracteres alfanumricos. Ex: abc, @ , #.
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Lgico Conjunto de valores FALSO ou VERDADEIRO proposio lgica. Obs: so definidos trs conectivos usados na formao de novas proposies a partir de outras j conhecidas. e - para conjuno ou - para a disjuno no - para a negao A conjuno de duas proposies verdadeira se e somente se ambas a proposies so verdadeiras. p q p^q V V V V F F F V F F F F A disjuno de duas proposies verdadeira se e somente se, pelo menos, uma delas for verdadeira. p q pvq V
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

V V V F V F V V F F F

2.3 Definio de Variveis Definimos como um reserva de lugar que daremos um nome a este lugar e restrio no tipos a ser armazenado. EX: Declarao de variveis Declare lista de variveis

tipo

tipo

inteiro real caractere lgico

Inteiro : x1; Real: a,b: Caracter: frase, nome; Lgico: TEM;

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

2.4 Constantes Um dado que no sobre variao ou alterao no decore do tempo. Ex: 2.5 Operadores 2.5 .1 Operadores Aritmticos Chamamos de operadores aritmticos o conjunto de smbolos que representa as operaes bsicas da matemtica, a saber: + * / ** // Usaremos outras Mod Div Exemplo: 15 15 27 27 div div 7 5 resulta em 2 resulta em 1 resulta em 5 resulta em 2 mod 7 mod 2 Adio Subtrao Multiplicao Diviso Exponenciao Radiciao operaes matemticas no-convencionais cujos nomes dos

operadores so: (resto da diviso) (quociente da diviso inteira)

2.6 FUNES MATEMTICAS Alm das operaes bsicas anteriormente citadas, podemos usar nas expresses aritmticas algumas funes da matemtica: Sem(x) Cos(x)Tg(x) Arctg(x) Arccos(x) Arcsen(x) Abs(x)seno de x tangente de x arco cuja tangente x arco cujo cosseno x arco cujo seno x cosseno de x

valor absoluto (mdulo) de x

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Int(x) Frac(x)

a parte inteira de um nmero fracionrio a parte fracionria de x

Onde x pode ser um nmero, varivel, expresso aritmtica ou tambm outra funo matemtica. 2.7 EXPRESSES LGICAS Denominamos expresso lgica aquela cujos operadores so lgicos e/ou relacionais e cujos operandos so relaes e/ou variveis e/ou contantes do tipo lgico. 2.7.1 OPERADORES RELACIONAIS Utilizamos os operadores relacionais para realizar comparaes entre dois valores de mesmo tipo primitivo. Tais valores so representados por constantes, variveis ou expresses aritmticas. Os operadores relacionais so: == > < <> >= <= (igual a) (maior que) (menor que) (diferente de) (maior ou igual a) (menor ou igual a)

COMANDO DE ATRIBUIO O comando de atribuio que usaremos ser ( = ). Exemplo: Declara A: Inteiro; Declara B: Lgico; A = 10 B = verdadeiro 3 Outras Representaes

C1 C2 C3

CHAPIN
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

TRADICIONAL INCIO

FIM

PORTUGOL Incio <declaraes de variveis> <comados> Fim

3.1

ESTRUTURAS DE CONTROLE

Na criao de algoritmos, utilizamos os conceitos de bloco lgico, entrada e sada de dados, variveis, constantes, atribuies, expresses lgicas, relacionais e aritmticas, bem como comandos que traduzam estes conceitos de forma a representar o conjunto de aes. Para que esse conjunto de aes se torne vivel, deve existir uma perfeita relao lgica intrnseca ao modo pelo qual essas aes so executadas, ao modo pelo qual regido o fluxo de execuo. Atravs das estruturas bsicas de controle do fluxo de execuo - sequenciao, seleo, repetio - e da combinao delas, poderemos criar um algoritmo para solucionar qualquer problema. ESTRUTURA SEQUENCIAL o conjunto de aes primitivas que sero executadas numa sequncia linear de cima para baixo e da esquerda para a direita, isto , na mesma ordem em que foram escritas.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao


Incio {comeo do algoritmo} {declarao de variveis} comando a comando b comando c . . . comando n {fim do algoritmo}

fim

Exemplo: Construir um algoritmo que calcule a mdia aritmtica entre quatro notas quaisquer fornecidas pelo usurio. 1. Dados de entrada: quatro notas bimestrais (N1, N2, N3, N4) 2. Dados de sada: mdia aritmtica anual (MA) 3. O que devemos fazer para transformar quatro notas bimestrais numa mdia anual? Resposta: Somar as quatro notas e dividir o resultado por 4. Algoritmo:
Incio Declare N1, N2, N3, N4, MA : Real Leia (N1) Leia (N2) Leia (N3) Leia (N4) MA = (N1+N2+N3+N4)/4 Escreva (MA) Fim {incio do algoritmo} {Declarao das variveis} {Entrada de dados}

{Processamento} {Sada de dados} {Trmino do algoritmo}

3.2

ESTRUTURA DE SELEO

Uma estrutura de seleo permite a escolha de um grupo de aes e estruturas a ser executado quando determinadas condies, representadas por expresses lgica, so ou no satisfeitas. 3.2.1 SELEO SIMPLES
Se <condio> ento Comando a Comando b .................. Fimse {Bloco verdade}

<condio> uma expresso lgica, que, quando inspecionada, pode gerar um resultado falso ou verdadeiro.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Se <condio> for verdadeira, as aes sob a clusula ento (comando a, b, ...) sero executadas; caso contrrio (<condio> for falsa), encerra o comando (Fimse), neste caso, sem executar nenhum comando. Podemos agora melhorar o algoritmo do item anterior avaliando a situao do aluno quanto aprovao. Se a mdia for igual ou superior a 7,0 o mesmo estaria aprovado. Teramos ento como informao e sada a mdia anual e uma informao adicional, se o aluno for aprovado. Algoritmo:
Incio Declare N1, N2, N3, N4, MA : Real Leia (N1) Leia (N2) Leia (N3) Leia (N4) MA = (N1+N2+N3+N4)/4 Escreva (MA) Se MA >= 7 ento Escreva("Aluno Aprovado!") Fimse Fim {incio do algoritmo} {Declarao das variveis} {Entrada de dados}

{Processamento} {Sada de dados} {Verifica se a mdia >= 7} {Trmino do algoritmo}

3.2.2 SELEO COMPOSTA


Se <condio> ento Comando a Comando b .................. Seno Comando F Comando G .................. Fimse {Bloco verdade} {Fim do bloco verdade} {Bloco Falso} {Fim do bloco Falso}

Observamos que a existncia do bloco verdade continua, sendo que este ser executado caso <condio> (expresso lgia) for verdadeira. Porm, a seleo agora composta, pois, caso o resultado seja falso, teremos a execuo dos comandos F, G,... que segue a clusula seno. Incluiremos agora, no exemplo anterior, a informao que provm do resultado falso da condio (MA >= 7), ou seja, a reproduo do aluno. Algoritmo:
Incio Declare N1, N2, N3, N4, MA : Real Leia (N1) Leia (N2) Leia (N3) {incio do algoritmo} {Declarao das variveis} {Entrada de dados}

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao


Leia (N4) MA = (N1+N2+N3+N4)/4 Escreva (MA) Se MA >= 7 ento Escreva("Aluno Aprovado!") Seno Escreva("Aluno Reprovado!") Fimse Fim {Processamento} {Sada de dados} {Verifica se a mdia >= 7}

{Trmino do algoritmo}

3.2.3 SELEO COMPOSTA Quando, devido necessidade de processamento, agruparmos vrias selees, formaremos uma seleo encadeada. Normalmente tal formao ocorre quando uma determinada ao ou bloco deve ser executado se um grande conjunto de possibilidades ou combinaes de situaes for satisfeito. 3.2.3.1 SELEO ENCADEADA HETEROGNEA

Podemos construir uma estrutura de seleo (se) de diversas formas, sendo que, ao encadearmos vrias selees, as possibilidades de construo diferentes tendem a um nmero elevado. Quando no conseguimos identificar um padro lgico de construo em uma estrutura de seleo encadeada, dizemos que esta uma estrutura de seleo encadeada heterognea.
Se <condio 1> ento Se <condio 2> ento Comando a Comando b Fimse Seno Se <condio 3> ento Comando C Comando D Seno Se <Condio 4> ento Se <condio 5> ento Comando E Fimse Seno Comando F Fimse Fimse Fimse

3.2.3.2

SELEO ENCADEADA HETEROGNEA

Chamamos de seleo Encadeada Homognea quando a construo de diversas estruturas de seleo encadeadas segue um determinado padro lgico.
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao


Se <condicao 1> ento Se <condiao 2> ento Se <condiao 3> ento Se <condio 4> ento Comando A Fimse Fimse Fimse Fimse

3.2.4 SELEO DE MULTIPLA ESCOLHA


Escolha X Caso V1: C1 Caso V2: C2 Caso V3: C3 Caso V4: C4 Caso Contrrio: Cx Fimescolha

Caso o contedo da varivel X seja igual ao valor Vn, ento o comando Cn ser executado; caso contrrio ser inspecionado at se encontrar a igualdade ou terminarem os casos. Caso termine a inspeo sem encontrar a igualdade o comando na clausula Caso contrrio ser executado. Exemplo: Construa um algoritmo que, tendo como dados de entrada o preo de um produto e um cdigo de origem, emita o preo junto de sua procedncia. Caso o cdigo no seja nenhum dos especificados, o produto deve ser encarado como importado. Cdigo de Origem: 1 - Sul 2 - Norte 3 - Leste 4 - Oeste
Incio Declare Preco : Real Declare Origem : Inteiro Leia (Origem) Leia (Preco) Escolha Origem Caso 1: Escreva (Preco, " - Produto do Sul") Caso 2: Escreva (Preco, " - Produto do Norte") Caso 3: Escreva (Preco, " - Produto do Leste") Caso 4: Escreva (Preco, " - Produto do Oeste") Caso 5: Escreva (Preco, " - Produto do Nordeste") Caso 6: Escreva (Preco, " - Produto do Sudeste") Caso 7: Escreva (Preco, " - Produto do Centro-Oeste") Caso Contrrio : Escreva (Preco, "Produto Importado") Fimescolha Fim

5 - Nordeste 6 - Sudeste 7 - Centro-Oeste

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

ESTRUTURAS DE REPETIO

Voltando ao algoritmo da mdia aritmtica, quantas vezes ele ser executado? Do modo no qual se encontra o processamento, s realizado uma nica vez e para um nico aluno, e se forem mais alunos? Como j vimos, podemos solucionar esse problema escrevendo o algoritmo em questo uma vez para cada aluno. Ou seja, se forem 50 alunos, teramos de escrev-lo 50 vezes. Trata-se de uma soluo simples, porm invivel. Outro modo de resolver essa questo seria utilizar a mesma sequncia de comandos novamente, ou seja, teramos de realizar um retrocesso - ao incio dos comandos - para cada aluno, fazendo, portanto, com que o fluxo lgico fosse uma repetio de certo trecho do algoritmo, o que nesta aplicao corresponderia a repetir o mesmo trecho 50 vezes, sem no entanto ter de escrev-lo 50 vezes. A esses trechos do algoritmo que so repetidos damos o nome de laos de repetio ou loops. O nmero de repeties pode ser indeterminado, porm necessariamente finito. Para construir um lao finito, podemos proceder de dois modos: Calcular a mdia enquanto a quantidade de mdias calculadas for menor ou igual a 50. Calcular a mdia at que o nmero de mdias calculadas atinja 50. 4.1.1 REPETIO COM TESTE NO INCIO Consiste numa estrutura e controle do fluxo lgico que permite executar diversas vezes um mesmo trecho do algoritmo, porm, sempre verificando antes de cada execuo se "permitido" repetir o mesmo trecho. Para realizar a repetio com teste no incio, utilizamos a estrutura enquanto, que permite que um bloco ou uma ao primitiva seja repetida enquanto uma determinada <condio> for verdadeira.
Enquanto <condio> faa Comando A Comando B .................. Comando N FimEnquanto

Quando o resultado de <condio> for falso, o comando abandonado. Se j da primeira vez o resultado for falso, os comandos no so executados nenhuma vez.
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Para inserir o clculo da mdia dos alunos em um lao de repetio - utilizando a estrutura enquanto - que <condio> utilizaramos? A condio seria que a quantidade de mdias calculadas fosse menor ou igual a 50; porm, o que indica quantas vezes a mdia foi calculada? A estrutura (enquanto) no oferece este recurso; portanto, devemos estabelecer um modo de contagem, o que pode ser feito atravs de um contador representado por uma varivel com um dados valor inicial, o qual incrementado a cada repetio. Algoritmo:
Incio {incio do algoritmo} Declare N1, N2, N3, N4, MA : Real {Declarao das variveis} Declare Contador : Inteiro Contador = 0 {Inicia contador com Zero} Enquanto Contador < 50 faa {Teste da condio} Leia (N1) {Entrada de dados} Leia (N2) Leia (N3) Leia (N4) MA = (N1+N2+N3+N4)/4 {Processamento} Escreva (MA) {Sada de dados} Se MA >= 7 ento {Verifica se a mdia >= 7} Escreva("Aluno Aprovado!") Seno Escreva("Aluno Reprovado!") Fimse Contador = Contador + 1 FimEnquanto {Trmino do algoritmo}

Fim

4.1.2 REPETIO COM TESTE NO FINAL

Para realizar a repetio com teste no final, utilizamos a estrutura repita, que permite que um bloco ou ao primitiva seja repetido at que uma determinada condio seja verdadeira.
Repita Comando A Comando B Comando C ................... Comando N At <condio>

Pela sintaxe da estrutura, percebemos que o bloco (Comando A ......Comando N) executado pelo menos uma vez, independente da validade da condio. Isto ocorre porque a inspeo da condio feita aps a execuo do bloco.
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Algoritmo:
Incio {incio do algoritmo} Declare N1, N2, N3, N4, MA : Real {Declarao das variveis} Declare Contador : Inteiro Contador = 0 {Inicia contador com Zero} Repita Leia (N1) {Entrada de dados} Leia (N2) Leia (N3) Leia (N4) MA = (N1+N2+N3+N4)/4 {Processamento} Escreva (MA) {Sada de dados} Se MA >= 7 ento {Verifica se a mdia >= 7} Escreva("Aluno Aprovado!") Seno Escreva("Aluno Reprovado!") Fimse Contador = Contador + 1 At Contador=50 {Teste da condio} {Trmino do algoritmo}

Fim

4.1.3 REPETIO COM VARIVEL DE CONTROLE Nas estruturas de repetio vistas at agora, ocorrem casos em que se torna difcil determinar quantas vezes o bloco ser executado. Sabemos que ele ser executado enquanto uma condio for satisfeita - enquanto -, ou at que uma condio seja satisfeita - repita. A estrutura para repete a execuo do bloco um nmero definido de vezes, pois ela possui limites fixos:
Para V de vi at vf passo p faa Comando A Comando B Comando C ................... Comando N FimPara

Onde: V a varivel de controle; Vi o valor inicial da varivel V; Vf o valor final da varivel V, ou seja, o valor at o qual ela pode chegar; P o valor do incremento dado varivel V. Possumos ento um contador de forma compacta, em que sempre temos uma inicializo (vi) da varivel de controle (V), um teste para verificar se a varivel atingiu o

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

limite (vf) e um acrscimo (incremento de p) na varivel de controle aps cada execuo do bloco de repetio. Algoritmo:
Incio {incio do algoritmo} Declare N1, N2, N3, N4, MA : Real {Declarao das variveis} Declare Contador : Inteiro Para Contador = 1 at 50 Faa Leia (N1) {Entrada de dados} Leia (N2) Leia (N3) Leia (N4) MA = (N1+N2+N3+N4)/4 {Processamento} Escreva (MA) {Sada de dados} Se MA >= 7 ento {Verifica se a mdia >= 7} Escreva ("Aluno Aprovado!") Seno Escreva ("Aluno Reprovado!") Fimse FimPara {Trmino do algoritmo}

Fim

Vetores

Uma cadeia de varveis do mesmo tipo com um limite definido e monodimencional. Ex:
NOTAS

5,0

3,0

4,0

8,0

Como fazer locao de vetores Tipo v = vetor{li:ls]<tipo bsico> Ex:


Tipo v vetor{1:80]real; V: Notas;

Matrizes

Uma cadeia de variveis do mesmo tipo com limite definido e bidicional. Ex:
Mat

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao


Tipo v = matriz[li1:ls1,li2:ls2]<tipo bsico> M: nome; Tipo m = matriz[1:3,1:4]real; M = mat;

7 Ex:

Registro

Uma cadeia de variveis de tipos heterogneos com limite definido.

Tipo r = registro Caracter: nome, endereo, cidade, estado; Real: salrio; R: Func; Func

Procedimentos e funes 1. Considerando que a passagem de parmetro feita por referncia, na execuo das duas linhas X1 2; S(X1); A varivel X1 recebe o valor 2 e passado por referncia ao procedimento S em cima do parmetro A. Ou seja, se A for alterado dentro do procedimento, a varivel utilizada como parmetro voltar alterada para o programa principal. Assim, na execuo das linhas do procedimento S: procedimento S(var inteiro: A); incio inteiro: T; T 1; T T + A; A T; fim; { T recebe 1 } { T recebe 1 + 2, que 3 } { A recebe T, que 3. E, assim, o X1 tambm fica igual a 3 } { A recebe o valor de X1, que 2 }

E o raciocnio segue para as variveis X2 e X3, que voltam do procedimento iguais a 6 e 4, e o valor final impresso ser 3, 6 e 4. Se X1, X2 e X3 fossem passados por valor, seus valores ficariam iguais a 2, 5 e 3 na volta.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

2.

incio inteiro: x, result; procedimento Divis(inteiro: n, var inteiro: soma); incio inteiro: i; soma 1; para i de 2 at (n div 2) faa se n mod i = 0 ento soma soma + i; fim se; fim para; fim; leia(x); Divis(x, result); imprima(result); fim.

program divisores; uses wincrt; var x, result:integer; procedure Divis(n:integer; var soma:integer); var i: integer; begin soma:=1; for i:=2 to (n div 2) do if n mod i = 0 then soma := soma + i; end; begin write('digite um nmero: '); readln(x); while x <> -1 do begin Divis(x, result); writeln('O resultado da soma dos divisores : ',result); write('digite outro nmero: '); readln(x); end; end.

3. incio inteiro: x; funo intervalo(inteiro: n, inf, sup):lgico; intervalo} incio se n >= inf e n <= sup ento intervalo verdade; seno intervalo falso; fim se; fim; leia(x); se intervalo(x, -50, 50) = verdade ento imprima(x, est no intervalo); seno imprima(x, no est no intervalo); fim se;
Escola Tcnica de Braslia

{esta soluo serve para qq

Curso Bsico de Lgica de Programao

fim. 6. a) X(10, 8, -1) = 10 b) X(1, 3, 5) = 1 c) X(5, 2, -1) = 5 d) X(X(10, 8, -1), 6 * X(1, 3, 5), 2) = X(10, 6, 2) = 10 Introduo ao pascal 8 Programao Pascal

Abordaremos aqui, a utilizao dos conceitos de programao pascal por meio de exemplos. 1. Estrutura principal A estrutura principal de um programa em pascal se apresenta da seguinte forma: program cabealho; declaraes begin comandos end. As palavras em negrito so palavras reservadas ou palavras chave da linguagem, que no podem ser declaradas como identificadores. Elas definem o tipo de dados ou estrutura que se deseja utilizar. 2. Palavras Chaves (reservadas): and, array, begin, case, const, div, do, downto, else, end, file, for, function, goto, if, in, label, mod, nil, not, of, or, packed, procedure, program, record, repeat, set, then, to, type, until, var, while, with 3. Identificador
o

Um identificador formado por uma nica letra, ou ento por uma letra seguida de letras ou dgitos, em qualquer nmero.

Considera-se dois identificadores como distintos quando considerados seus oito primeiros caracteres.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

1. Comentrios Os comentrios so identificados por estarem delimitados pelos caracteres { e }, ou pelo caracteres (* e *). Comentrios so ignorados pelo compilador na fase de traduo do programa. Comentrios so teis no sentido de destacar ou documentar o programa, para torn-lo mais legvel e fcil de entender o seu objetivo, quando retomado para correo ou alterao aps determinado tempo. Declaraes A parte de declaraes em um programa est relacionada a alocao de memria para os dados que sero utilizados no decorrer do programa. O montante do memria alocada est relacionada ao tipo de dado a ser utilizado. Podem ser declarados aqui regies de memria que podem ter seu contedo alterado (variveis), regies de memria que no so permitidos a alterao de seu contedo, e tambm outros tipos alm dos prdefinidos pela linguagem. 1. Tipos pr-definidos da linguagem Pascal:
o o o o

integer char boolean (TRUE, FALSE) string

1. Variveis
o

Variveis so entidades que so representadas por identificadores. Sintaxe: var Lista-de-Identificadores : tipo; Lista-de-Identificadores : tipo; Exemplo: var

nota, A12 : real; i, codigo : integer; flag, Sim : boolean; letra1, letra2: char; 1. Constantes
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Define identificadores que no se alteram durante a execuo do algoritmo. Exemplo: const pi = 3,1415 2. Declarao de outros Tipos Alm dos tipos pr-definidos pela linguagem Pascal, h a possibilidade de se definir outros tipos. Exemplo: type LETRASMA = A .. Z; INDICES = 0 .. 100; DIAS = (dom, seg, ter, qua, qui, sex, sab); var diasemana : DIAS; 1. Expresses Aritmticas A tabela seguinte mostra as operaes aritmticas bsicas da linguagem com sua prioridade de execuo quando agrupadas em um expresso aritmtica. Prioridade Operadores 12 * / div mod + -

div(a,b) retorna o valor inteiro do quociente de a/b. a/b retorna o valor real do quociente de a/b mod(a,b) retorna o valor do resto da diviso a/b. Pode-se definir a prioridade de execuo das operaes com a utilizao de parnteses. Exemplos: a =1, b = 2, c = 3 a + b * c = 9 c / b * a = 0.5 c div b = 1 c mod b 1 2. Funes Numricas Predefinidas Em Pascal h algumas funes numricas pr-definidas. Veja a tabela a seguir. ln(ea) logaritmo neperiano exp(ea) abs(ea) trunc(ea)
Escola Tcnica de Braslia

nmero e elevado a ea valor absoluto valor truncado

Curso Bsico de Lgica de Programao

round(ea) sqr(ea) sqrt(ea) sin(ea) cos(ea) arctan(ea)

valor arredondado quadrado raz quadrada seno coseno arco tangente

Exemplos: exp(y*(b+2)-6) ln(sqrt(a+2*b)-b)

Expresses Lgicas Expresso lgica uma expresso cujos operadores so os operadores lgicos e cujos operandos so relaes e/ou variveis. 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 operador relacional que pode ser: = igual <> <= < >= > IN Diferente menor ou igual Menor maior ou igual Maior contido em (conjunto)

O resultado de uma relao sempre um valor lgico: TRUE ou FALSE Exemplos: a <> b nome = Maria x * y + 5 * b > 0 x = 10

Operadores Lgicos

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

And Conjuno or not Exemplos: (a + b = 0) and (c <> d) sim or (a * b > c) not verdade and cor = verde Prioridades Pascal permite a construo de expresses compostas de vrias pequenas expresses, desde que os tipos de dados das expresses sejam os mesmos, a ordem em que a expresso escrita tambm levada em considerao. Veja o exemplo: x*y*z Neste exemplo em particular, a ordem em que a expresso foi escrita irrelevante, numa multiplicao, no importa a ordem, o resultado sempre o mesmo. Mas isto no verdade para todas as operaes, algumas expresses do resultados diferentes, dependendo de qual operao realizada primeiro. Veja o exemplo x + y / 100 Usando parnteses ( ), voc pode direcionar o compilador Pascal para executar uma operao primeiro. Por exemplo, para a expresso do exemplo anterior deixar de ser ambgua, voc deveria escrever ( x + y ) / 100. Sem parnteses, o compilador vai efetuar as operaes na ordem em que aparecem e seguindo uma certa prioridade, operaes com maior prioridade so efetuadas primeiro. equivalente a: x + ( y / 100) Para tornar seu cdigo mais fcil de ler e manter, recomendvel, deixar explcito e indicado com parnteses qual a operao que deve ser realizada primeiro. Segue abaixo uma tabela de prioridades. disjuno negao

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Prioridade Operadores Not *, /, div, mod, and +, -, or =, <> , <, <=, >, >=, in

1234

Comando de Atribuio Um comando de atribuio altera o contedo de um identificador (lado esquerdo) pelo valor resultante da expresso (lado direito). A varivel e a expresso devem ser do mesmo tipo, exceto no caso em que a varivel do tipo real e o resultado da expresso do tipo inteiro, quando o valor inteiro da expresso transformado em real. identificador := expresso Exemplos: var a, c, n, soma, x , y : integer; k, media, total: real; cod, sim,teste : boolean; cor : string; k := 1; cor := verde; teste := FALSE; a := b; media := soma/n; cod := sqr(n) + 1 >= 5; sim := (x=0) and (y <> 2); total := sqrt(n) + sqr(x) + y; n := x/y; {no vlida}

Comandos de Entrada e Sada read(lista-de-identificadores) readln(lista-de-identificadores) write(lista-de-identificadores e/ou constantes e/ou expresses) writeln(lista-de-identificadores e/ou constantes e/ou expresses)

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

READ e READLN so os comandos de entrada usados em Pascal. lista-deidentificadores so os nomes das variveis do tipo STRING, INTEGER, CHAR, ou REAL, cujos valores sero lidos na unidade de entrada. Os identificadores contidos na lista, devem estar separados por vrgula. A diferena entre estes dois comandos de entrada que o comando READ l os valores das variveis da lista deixando o valor seguinte desta linha, se houver, disponvel para o prximo comando de entrada. Ao contrrio, o comando READLN l os valores das variveis da lista e salta, se houver, os valores restantes da linha. Assim o prximo comando de entrada no receber esses valores adicionais contidos na linha. Os valores de entrada devero estar separados por espao(s) ou por fim de linha. WRITE e WRITELN so os comandos de sada usados em Pascal. lista-deidentificadores so os nomes das variveis do tipo STRING, INTEGER, CHAR, REAL ou BOOLEAN, cujos valores sero lidos na unidade de entrada. Os identificadores contidos na lista, devem estar separados por vrgula. Constantes e expresses de mesmo tipo podem aparecer nos comandos de sada. A diferena entre estes dois comandos que o comando WRITE escreve os valores numa ou mais linhas, deixando que o prximo comando de sada continue escrevendo na ltima linha, se ainda houver espao. Ao contrrio, o comando WRITELN escreve os valores em uma ou mais linhas, de modo que o prximo comandos de sada comece a escrever aps a ltima linha. Exemplos: read(x); readln(nome, n ,y); write(k, soma); writeln(21, Nome, n); write(Tabela de Preos); writeln(n, sqrt(n));

Formatao Podemos generalizar as comandos de sada do Pascal da seguinte forma: write(p1, ...,pn) writeln(p1, ...,pn) onde pi um parmetro com uma das formas: -e - e : e1 - e : e1 : e2

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

sendo e, e1, e2 expresses. e representa o valor a ser escrito e pode ser do tipo INTEGER, REALM, CHAR, STRING ou BOOLEAN, podendo ser uma constante ou uma expresso. e1 representa um valor inteiro positivo e indica o nmero mnimo de caracteres a ser escrito. Se e1 for insuficiente para representar o valor escrito, ento ser alocado mais espao. Se e1 for excessivo, o espao excedente ser preenchido com brancos. e2 s se aplica de e for do tipo REAL. e2 um valor inteiro positivo e especifica o nmero de dgitos que devem ser escritos aps o ponto decimal. Se e2 for omitido, ento o valor real ser escrito no formato exponencial. Exemplo: program exe1; var a, b : real; k : char; begin a := 3.2; b := 5.81; k := *; writeln('resultado: ', a:5, ' + ', b:5, ' = ', a+b:5, k); writeln('resultado: ',a:5:1, ' + ', b:5:1, ' = ', a+b:5:1, k:1); writeln('resultado: ',a:5:2, ' + ', b:5:2, ' = ', a+b:5:2, k:2); writeln('resultado: ',a:5:3, ' + ', b:5:3, ' = ', a+b:5:3, k:3); end. Sada: resultado: 3.2e+00 + 5.8e+00 = 9.0e+00* resultado: 3.2 + 5.8 = 9.0* resultado: 3.20 + 5.81 = 9.01 * resultado: 3.200 + 5.810 = 9.010 *

Estrutura Condicional
if condio then comando1 Neste caso, comando1 s ser executado se a condio for verdadeira. A condio deve ser uma expresso lgica. O comando pode ser um comando
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

simples ou um comando composto. Um comando composto formado por diversos comandos (simples ou compostos), delimitados pelas palavras BEGIN e END, alm das estruturas de controle (condicional e de repetio). if condio then comando1 else comando2 Neste caso, se a condio for verdadeira, ser executado o comando1. Caso contrrio ser executado o comando2. Exemplos: program condicional; var i, j: integer; begin
o

i := 1;

j := 3; if i < j then

writeln('i maior do que j');

else
o

writeln('j maior do que i');

if (i+j) > 0 then


o

writeln('soma de i com j maior do que 0');

end.

Estrutura de repetio 1. Condio no Incio while condio do comando Essa estrutura significa que enquanto a condio for verdadeira, o comando ser executado repetidamente. Se a condio for falsa, ento a repetio ser interrompida. Comando pode ser simples ou composto e condio uma expresso lgica.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Exemplo: program repeticaoinicio; var i, soma : integer; begin


o

i := 1; soma := 0; while (soma < 100) do


begin i := i * 2;

soma := soma + i; end; writeln(soma); end. 1. Condio no Fim repeat comando until condio Nessa estrutura o comando executada, e em seguida verificado a condio. Se a condio for falsa, ento repete-se a execuo do comando. Se for verdadeira, ento o lao interrompido. Comando pode ser simples ou composto e condio uma expresso lgica. Nesta estrutura o comando executado pelo menos uma vez. Um ponto interessante para colocarmos aqui a questo da condio. Exemplo: program repeticaofim; var i, soma : integer; begin
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao


o

i := 1;

soma := 0; repeat

i := i * 2;

soma := soma + i; until (soma >= 100); writeln(soma); end. 1. Nmero de Repeties Conhecido for var-controle := valor-inicial to valor-final do comando for var-controle := valor-inicial downto valor-final do comando O significado dessas repeties : a var-controle recebe o valor-inicial; verifica-se se o valor de var-controle ultrapassa o valor-final; se no ultrapassa, o comando ser executado; a seguir, var-controle recebe o valor seguinte (no caso do for-to) ou valor anterior (no caso for-downto); verifica-se se ultrapassa o valor-final; se no ultrapassar, o comando ser executado; e assim sucessivamente. Exemplo: program repeticaofor; { Esse programa calcula 2 elevado n } var i, n, s : integer; begin
o

s := 0; read(n); for i:= 1 to n do

s := s * 2;

writeln(s); end.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

8.1.1.1

Estrutura de Dados

Vimos anteriormente como um identificador referencia um tipo, como inteiro, real, char, boolean e string. A linguagem Pascal tambm dispe meios para que um mesmo identificador referencie vrios dados, do mesmo tipo ou de tipos diferentes. Isso conhecido em Pascal como varivel estruturada. H dois tipos dessas variveis:

Variveis Compostas Homogneas Variveis Compostas Heterogneas Variveis Compostas Homogneas

So variveis conhecidas em Pascal como arrays (vetores), e correspondem a um conjunto de dados de um mesmo tipo. Essas variveis podem ser unidimensionais ou multidimensionais, ou seja, dependem da quantidade de ndices necessrios para individualizao de cada elemento do conjunto. Variveis Compostas Homogneas Unidimensionais So variveis compostas que necessitam de somente um ndice para individualizar um elemento do conjunto. A criao desse tipo de varivel feita com a seguinte declarao: lista-de-identificadores : ARRAY[k] OF t; lista-de-identificadores so nomes associados s variveis que se deseja declarar. k da forma k1..k2, em que l1 o ndice inferior do intervalo de variao do ndice e l2 o limite superior. t o tipo dos componentes da varivel. Para se declarar uma varivel nota do tipo real com 10 elementos basta escrever nota : array[1..10] of real; Os ndices para a varivel nota esto no intervalo 1,2,3,...,10. Para acessar um elemento i dessa varivel basta referenci-lo como nota[i]. Por exemplo, nota[1], nota[10], que referenciam respectivamente o valor do primeiro e o valor do dcimo elemento da varivel nota. Utilizando-se, por exemplo um varivel i do tipo inteiro, tem-se a possibilidade de acesso a qualquer um dos elementos. Seja nota[i] uma referncia em um programa. Antes da varivel nota ser consultada, a varivel i seria substituda pelo seu contedo no dado instante. Se i=2, ento o elemento da acessado seria nota[2]. Os elementos da varivel nota podem ser referenciados por expresses como por exemplo nota[i+1] e nota[i+j+1].

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Exemplo 4.1: nota 80 70 75 100 85 92 68 80 90 75 1 nota[1] = 80 nota[2] = 70 . . . nota[10] = 75 program array_uni; { L dez notas e calcular a mdia} var

10

nota : array[1..10] of real; soma, media : real; i : integer;

begin

soma := 0; writeln('Digite os valores das 10 notas:'); for i:= 1 to 10 do


o

read(nota[i]); for i:= 1 to 10 do

soma := soma + nota[i]; media := soma/10; writeln('Mdia das notas: ',media:2:2);

end. Sada:

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Digite os valores das 10 notas: 80 70 75 100 85 92 68 80 90 75 Mdia das notas: 81.50 Variveis Compostas Homogneas Multidimensionais So variveis compostas que necessitam de mais de um ndice para individualizao de seus elementos. A criao desse tipo de varivel feita com a seguinte declarao: lista-de-identificadores : ARRAY[k] OF t; lista-de-identificadores so os nome que sero associados s variveis multidimensionais. k da forma l11..l12,l21..l22, ... ,ln1..ln2, que so limites do intervalo de variao de cada um dos n ndices da varivel. t o tipo a que pertencem os componentes do conjunto. Por exemplo, para criar uma varivel notas2, contendo as notas de alunos em cada disciplina, onde as linhas representam os alunos e as colunas representam as disciplinas, faz-se o seguinte notas2 : array[1..10,1..5] of real; Isso indica que temos 10 alunos e 5 disciplinas, ou o contrrio, conforme a conveno que se adotar para linha e para coluna. Para acessar a nota do aluno 3 na disciplina 5 basta referenci-lo por nota2[3,5] ou nota[3][5]. Outros exemplos de acesso aos elementos neste tipo de varivel so: notas2[3,4], notas2[5,5], notas2[i,j] ou notas2[3][4], notas2[5][5], notas2[i][j] Exemplo 4.2: program matrizes; { Calcular a mdia das notas de cada aluno e as mdias das notas em cada disciplina } var

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

notas2 : array[1..10,1..5] of real; media_aluno : array[1..10] of real; media_disc : array[1..5] of real; i, j : integer; soma, media : real;

begin { preenche a matriz notas2, linha a linha (aluno) }

for i:= 1 to 10 do
o

for j:= 1 to 5 do

read(notas2[i,j]);

{ calculando as mdias das notas dos alunos}

for i:= 1 to 10 do
o

begin

soma := 0; for j:= 1 to 5 do

soma := soma + notas2[i,j]; media := soma/5; media_aluno[i] := media; end;

{ calculando as mdias das notas em cada disciplina }

for j:= 1 to 5 do
o

begin

soma := 0; for i:= 1 to 10 do

soma := soma + notas2[i,j]; media := soma/10; media_disc[j] := media;

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

end; { Imprimindo os resultados }

writeln('Mdia das notas dos alunos:'); for i:= 1 to 10 do


o

writeln('Aluno[', i:2, '] = ', media_aluno[i]:3:2); writeln('Mdia das notas em cada disciplina:'); for j:= 1 to 5 do

writeln('Disciplina[', j:2, '] = ', media_disc[j]:3:2);

end. Variveis Compostas Heterogneas I. Registros So conjuntos de dados logicamente relacionados, mas de tipos diferentes (inteiro, real, literal, ...). Para se utilizar estruturas desse tipo, deve-se declar-las da seguinte forma:
o

lista-de-identificadores so os nomes que esto sendo associados aos registros que se deseja declarar. componentes so declaraes de variveis, separadas por ponto-e-vrgula.

Exemplo 4.3: Para se declarar um registro com os campos abaixo, faz-se o seguinte:

o o o o o o o

Cadastro -------------------------------------------------|Nome |

-------------------------------------------------|Rua | Nmero | CEP |

-------------------------------------------------|RG |CPF |Nascimento |Sexo |

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao


o

-------------------------------------------------Var

cadastro : record

nome : string[30];

rua : string[40]; numero: integer; cep: real; rg : real; cpf:real; nascimento: string[10]; sexo : char;

end;

possvel tambm, declarar um registro como um tipo. No exemplo abaixo o registro endereo declarado como um tipo. Na declarao das variveis a varivel cadastro (que um registro) tem como um dos seus componentes a varivel do tipo endereo, referenciado pela varivel ender. Type endereo = record
o

rua

: :

string[40]; integer;

numero CEP : real;


o o o Var ...

end;

cadastro : record

nome : :

: real;

string[30]; endereo; char; : real;

ender CPF: Sexo nascimento rg : real;


Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao


o

end;

Para se referencia a cada campo (ou componente) de um registro utiliza-se a seguinte notao: identificador.varivel Por exemplo, do registro cadastro acima, imprimimos os valores de cada campo da seguinte forma: writeln(cadastro.nome); writeln(cadastro.ender.rua); writeln(cadastro.ender.numero); writeln(cadastro.ender.CEP); writeln(cadastro.CPF); writeln(cadastro.Sexo); writeln(cadastro.nascimento); writeln(cadastro.rg);

Conjunto de Registros Assim como pode ter conjuntos de dados de mesmo um tipo referenciados por um mesmo identificador, e individualizados por ndices, temos a possibilidade de fazer isso com registros. Nos exemplos abaixo exibimos duas formas de declarar estes tipos de estruturas em Pascal. A primeira como a declarao do registro junto com a declarao do vetor(array), e a segunda como declarao do tipo cadastro (que um registro) e a sua utilizao em um vetor do tipo cadastro. Exemplo 4.4: bd : array[1..10] of record
o

nome : :

: real;

string[30]; endereo; char; : real;

ender CPF: Sexo nascimento rg : real;


o

end;

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

----------------------------------------

Type cadastro = record


o

nome : :

: real;

string[30]; endereo; char; : real;

ender CPF: Sexo nascimento rg : real;


o . . .

end;

var bd : array[1..10] of cadastro;

Embora a tenham o mesmo sentido quanto a utilizao, nesses dois tipos de declarao com vetores de ndices as variveis so referenciados de maneira diferente. Por exemplo, no primeiro caso basta acrescentar um ponto e o nome da varivel para referenciar o devido campo. No segundo caso deve-se colocar o nome do tipo do vetor. A seguir, so mostrados os exemplos desses dois casos, quando imprimindo-se os valores do registro do vetor da posio i. Exemplo 4.5: Caso writeln(bd[i].nome); writeln(bd[i].ender.rua); writeln(bd[i].ender.numero); writeln(bd[i].ender.CEP); writeln(bd[i].CPF); writeln(bd[i].Sexo); 1

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

writeln(bd[i].nascimento); writeln(bd[i].rg);

Caso 2 writeln(bd[i].cadastro.nome); writeln(bd[i].cadastro.ender.rua); writeln(bd[i].cadastro.ender.numero); writeln(bd[i].cadastro.ender.CEP); writeln(bd[i].cadastro.CPF); writeln(bd[i].cadastro.Sexo); writeln(bd[i].cadastro.nascimento); writeln(bd[i].cadastro.rg); Arquivos Em Pascal estruturas de dados manipuladas fora do ambiente do programa so conhecidas como arquivos. Considera-se como ambiente do programa a memria principal, onde nem sempre possvel ou conveniente manter certas estruturas de dados. Um arquivo, armazenado num dispositivo de memria secundria, como discos e disquetes, pode ser lido ou escrito por um programa atravs de registros. Antes de se declarar arquivos em um programa, deve ser declarar primeiramente o seu tipo. As formas das declaraes a seguinte: type identificador-do-tipo = file of tipo; lista-de-identificadores : identificador-do-arquivo; type uma palavra-chave; identificador-de-tipo o identificador associado ao novo tipo; file of so palavras reservadas; tipo o tipo a que pertencem os registros do arquivo; lista-de-identificadores so nomes associados aos arquivos. Operaes com Arquivos
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

As operaes bsicas realizadas sobre um arquivo so abertura, leitura, escrita e fechamento. A abertura de arquivos corresponde ao de se associar o arquivo declarado no programa com o arquivo fsico. O primeiro registro do arquivo fica disponvel para leitura atravs do seguinte comando: reset(nome-do-arquivo); Caso o arquivo j exista, para comear a escrever novamente no arquivo, ignorando-se os registros anteriores, utiliza-se o seguinte comando: rewrite(nome-do-arquivo); O nome-do-arquivo o identificador do arquivo no programa. Para se fazer uma associao desta identificao interna com a identificao externa, usa-se o comando assign, cuja forma : assign(nome-do-arquivo,'nome-externo'); nome-externo o nome pelo qual o arquivo conhecido externamente ao programa. O comando assign deve anteceder a abertura do arquivo e nunca deve ser utilizado quando o arquivo j estiver sendo manipulado. O fechamento do arquivo desvincula o arquivo do programa, atualizando as informaes do arquivo no ambiente do sistema operacional. Para se fechar um arquivo, usa-se o comando: close(nome-do-arquivo); Para ler um arquivo, ou seja ler o seu contedo, utilizado o seguinte comando: read(nome-do-arquivo,registro); Esse comando l o contedo do registro corrente do arquivo associado nome-doarquivo e armazena-o em na varivel registro, que deve ser do mesmo tipo do arquivo. Aps a execuo desse comando, o registro corrente lido, e o prximo passa a ser o registro corrente. Para escrever em um arquivo, utilizado o seguinte comando: write(nome-do-arquivo,registro);
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Esse comando, quando executado, grava no registro corrente do arquivo associado nome-do-arquivo o contedo da varivel registro. Usando somente os comandos read e write, os registros esto acessveis somente seqencialmente, ou seja, um registro ser acessado somente aps todos os seus anteriores sejam acessados. possvel acessar um registro qualquer do arquivo diretamente, desde que se saiba a sua posio fsica no arquivo. Esse tipo de acesso conseguido pelo comando: seek(nome-do-arquivo,n); Com esse comando possvel acessar o n-simo registro do arquivo associado nomedo-arquivo, caso n seja menor que o nmero de registros do arquivo. O primeiro registro o de nmero 0 (zero). Para se obter o nmero de registros de um arquivo, utiliza-se o comando: filesize(nome-do-arquivo); Com a utilizao dos comandos seek e filesize temos um outro tipo de organizao ou acesso aos arquivos: a organizao direta. Neste caso temos que escolher uma chave para indexar os registros, ou seja, essa chave ser utilizada para indicar em que posio no arquivo um registro ser armazenado. Exemplo 4.7: program sequencial; type endereo = record rua : string[40]; numero : integer; CEP : real; end; cadastro = record nome : string[30];
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

ender : endereo; CPF: real; Sexo : char; nascimento : real; rg : real; end; arqcad = file of cadastro; var arq_in, arq_out : arqcad; reg: cadastro; begin assign(arq_out,'sample.dat'); {associando nome interno com nome externo} rewrite(arq_out); {abrindo arquivo para gravao} write('Nome: '); readln(reg.nome); while (reg.nome <> 'fim') do begin write('Rua: '); readln(reg.ender.rua); write('Numero: '); readln(reg.ender.numero); write('CEP: '); readln(reg.ender.CEP); write('CPF: ');
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

readln(reg.CPF); write('Sexo(M/F): '); readln(reg.Sexo); write('Data de Nascimento(dd/mm/aaaa): '); readln(reg.nascimento); write('RG: '); readln(reg.rg); write(arq_out,reg); {grava registro aps o ltimo registro do arquivo} readln(reg.nome); end; close(arq_out); assign(arq_in,'sample.dat'); {associando nome interno com nome externo} reset(arq_in); {abrindo arquivo para leitura} read(arq_in,reg); while (not EOF(arq_in)) do begin write(reg.ender,rua,' '); write(reg.ender.numero,' '); write(reg.ender.CEP,' '); write(reg.CPF,' '); write(reg.Sexo,' '); write(reg.nascimento,' '); writeln(reg.rg,' '); end; writeln('O nmero de registros do arquivo : ',filesize(arq_in)); end.
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Este programa a seguir exemplifica a utilizao dos comando seek. Neste caso assumimos que as chaves esto no intervalo entre 1 e 100. program acesso_direto; type endereo = record rua : string[40]; numero : integer; CEP : real; end;

cadastro = record chave : integer; nome : string[30]; ender : endereo; CPF: real; Sexo : char; nascimento : real; rg : real;

end;

arqcad = file of cadastro; tammax = 100;

var

arq_out : arqcad; reg : cadastro;

begin

assign(arq_out,'sample.dat'); {associando nome interno com nome externo} rewrite(arq_out); {abrindo arquivo para gravao} write('Chave: '); readln(reg.chave); while (reg.chave <> 0) do

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao


begin if (reg.chave >= 1) and (reg.chave <= 100) then begin write('Nome: '); readln(reg.nome); write('Rua: '); readln(reg.ender.rua); write('Numero: '); readln(reg.ender.numero); write('CEP: '); readln(reg.ender.CEP); write('CPF: '); readln(reg.CPF); write('Sexo(M/F): '); readln(reg.Sexo); write('Data de Nascimento(dd/mm/aaaa): '); readln(reg.nascimento); write('RG: '); readln(reg.rg); seek(arq_out,chave-1); write(arq_out,reg); { grava registro aps o ltimo registro do arquivo} end else
o

begin

writeln('Chave deve estar no

intervalo [1,100].'); end; write('Chave: '); readln(reg.chave); end; close(arq_out);


Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

end.

8.1.2 Arquivos texto Os arquivos gerados pelo programa exemplo 4.7 so arquivos binrios. Esse tipo de arquivo no legvel s pessoas, embora seja til para fins de armazenamento de informaes, visto que os dados so armazenados de forma comprimida, que diminui o tamanho do arquivo, e tambm restringe o acesso s informaes contidas no arquivo. A linguagem Pascal tambm prov meios para lidar com um arquivo texto. A seguir mostramos como tratar arquivos em Pascal. As operaes de abertura, de associao entre o nome interno e externo, de fechamento, de leitura, de escrita de um arquivo texto so as mesmas que dos arquivos binrios. No entanto, para se declarar um arquivo texto utiliza-se uma outra notao: lista-de-identificadores:text lista-de-identificadores so nomes associados aos arquivos declarados como texto. Outra diferena com relao s operaes a possibilidade de utilizao dos comandos readln e writeln sobre arquivos texto, o que no possvel sobre arquivos binrios, visto que estes no possuem marca de final de linha. A diferena entre os comandos read e readln, write e writeln basicamente a mesma quando utilizados como comandos de entrada e sada. Os comandos read e write operam sobre campos, enquanto que os comandos readln e writeln operam sobre linhas. Exemplos Esse programa l um arquivo texto, exibe o seu contedo na tela e o nmero de linhas do arquivo. program le_arquivo_texto; var

entrada : text; linha : string[100]; nlinhas : integer;

begin
Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

nlinhas = 0; assign(entrada,'arq1.txt'); reset(entrada); readln(entrada,linha); {l cada linha do arquivo} while (not EOF(entrada)) do
o

begin

writeln(linha); readln(entrada,linha); nlinhas := nlinhas + 1; end;

writeln('Nmero de linhas do arquivo: ',nlinhas); close(entrada); end. O prximo programa l 10 linhas contendo trs campos do tipo inteiro, l 10 linhas contendo trs campos do tipo real, somando os valores de cada linha e colocando o resultado em um arquivo de sada. O programa assume que o arquivo de entrada j esteja no formato correto. program le_valores_inteiro_real; var

arq_in, arq_out : text; vi1, vi2, vi3, somai : integer; vr1, vr2, vr3, somar : real; i : integer;

begin

assign(arq_in,'dados.txt'); assign(arq_out,'saida.txt'); reset(arq_in); rewrite(arq_out); for i:= 1 to 10 do


o

begin

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

readln(arq_in,vi1,vi1,vi3); somai := vi1 + vi2 + vi3; writeln(arq_out,'linha ',i ,' - soma = ',somai); end;

for i:= 1 to 10 do
o

begin

readln(arq_in,vr1,vr1,vr3); somar := vr1 + vr2 + vr3; writeln(arq_out, 'linha ',i+10 ,' - soma = ',somar:10:4); end;

close(arq_in); close(arq_out); end. Exemplo do contedo do arquivo dados.txt: 10 13 16 19 22 25 28 31 34 37 11 14 17 20 23 26 29 32 35 38 12 15 18 21 24 27 30 33 36 39 51.10 54.40 57.70 60.00 63.30 66.60 69.90 72.20 52.20 55.50 58.80 61.10 64.40 67.70 70.00 73.30

50.00 53.30 56.60 59.90 62.20 65.50 68.80 71.10

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

74.40 77.70

75.50 78.80

76.60 79.90

8.1.3 Modularizao A linguagem Pascal oferece facilidades necessrias no tocante a modularizao de programas, por meio de procedimentos e funes, que permitem a confeco de programas modulares e bem estruturados. A idia principal do conceito de modularizao, informalmente falando, dividir o programa em sub-programas, o que torna o trabalho de desenvolvimento e manuteno menos desgastante. Em Pascal o conceito de modularizao implementado por meio de sub-rotinas. Um mdulo em Pascal definido como sendo uma procedure ou uma function. Esses mdulos podem ter variveis prprias ou utilizar as variveis declaradas no programa principal. E possvel a declarao de variveis com o mesmo identificador em mdulos diferentes no mesmo nvel ou em mdulos aninhados (um mdulo dentro do outro). Conforme o contexto em est inserido, uma varivel pode ser considerada uma varivel local ou um varivel global. Por exemplo: as variveis declaradas em um mdulo A so consideradas locais A, porm so consideradas variveis globais aos sub-mdulos contidos em A. Dessa forma, todas as variveis declaradas no programa principal so consideradas globais as procedimentos. Variveis locais com o mesmo identificador declaradas em mdulos diferentes e no mesmo nvel so invisveis umas para o outras, ou seja, no causam conflito. Quando os mdulos esto aninhados, as variveis declaradas em cada mdulo, podem ser vistas e/ou utilizadas pelos respectivos sub-mdulos. Porm, no sero utilizadas se forem declaradas variveis com o mesmo identificador em seus sub-mdulos, onde valer somente as variveis locais. Ou seja, se forem declaradas variveis locais em um mdulo A com o mesmo identificador que as variveis globais A, valer as variveis locais. Isso define as regras de escopo das variveis, ou seja, at onde as variveis podem ser utilizadas e/ou visveis outros mdulos. No caso de existirem variveis locais e globais com o mesmo nome, alteraes feitas nas variveis locais no afetam as globais. J no caso onde um varivel global modificada, o prximo instruo que acess-la ir encontrar o valor dessa ltima atualizao. Exemplo: program { declarao de var m, n : real;
Escola Tcnica de Braslia

A; variveis }

Curso Bsico de Lgica de Programao

procedure B; { declarao de variveis } var i, j : integer; begin { corpo do procedimento B } end; procedure C; { declarao de variveis } var i, j : integer; k, l : real;
o

procedure D; { declarao de variveis } var k, l : integer; begin { corpo do procedimento D } end; begin { corpo do procedimento C } end;

begin { corpo do programa principal } end.

As variveis i e j declaradas nos procedimentos A e B so invisveis entre si, portanto no causam conflito.

As variveis k e l so vlidas como inteiros em C. Apesar de serem globais, so invisveis a D, pois foram redeclaradas como tipo real. como se k e l fossem declaradas com outros identificadores.

As variveis i e j declaradas em C so globais a D, assim como as variveis m e n so globais todos os procedimentos.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

8.1.3.1

Procedimentos

Convencionamos aqui que mdulos do Pascal como procedimentos do Pascal. Procedimento um trecho do programa que possui seus objetos (varives, arquivos, etc.) e comandos prprios e que para ser executado deve ser ativado por um programa principal ou por outro procedimento. A criao de um procedimento em Pascal feita atravs de sua declarao em um programa, ou seja, o procedimento um objeto da linguagem que deve ser declarado, como os demais objetos, no incio do programa ou de outro procedimento. Um procedimento em Pascal pode, por sua vez, conter outros procedimentos, que s sero conhecidos dentro do mesmo. A declarao de um procedimento em Pascal constituda de um cabealho e de um corpo. O cabealho identifica o procedimento atravs de um nome, e o corpo contm as declaraes dos objetos locais, alm de comandos e estruturas do procedimento. A ativao de um procedimento, atendidas s condies de escopo, feita atravs da referncia ao seu nome em algum ponto do programa. Em Pascal existem dois tipos de procedimentos: procedure e function. No confunda procedimento com a traduo de procedure, pois esta ltima uma palavra reservada do Pascal, que define um tipo de procedimento. Procedimentos - Procedure O objetivo de se declarar uma procedure associ-la a um identificador para que a mesma possa ser ativada por um comando do programa. A sua declarao feita da seguinte forma: procedure nome; declarao dos objetos locais procedure BEGIN comandos da procedure END; A chamada ou ativao de uma procedure feita referenciando-se o seu nome no local do programa onde a mesma deve ser ativada, ou seja, onde a sua execuo deve ser iniciada. Ao terminar a execuo dos comandos de um procedure, a seqncia do programa retorna sempre instruo seguinte que provocou a sua chamada. A nvel de execuo, a chamada de uma procedure valeria como se fosse feita uma cpia dos comandos do procedimento no local do programa onde foi ativada, ajustando-se os objetos locais para atender as regras de escopo.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Exemplo: program var { declarao das variveis do programa principal }

procedimentos;

procedure entrada_de_dados; var { declarao das variveis do procedimento entrad_de_dados } begin { comandos do procedimento entrada_de_dados } end; procedure processa_dados; var { declarao das variveis do procedimento processa_dados } begin { comandos do procedimento processa_dados } end; procedure imprime_resultados; var { declarao das variveis do procedimento imprime_resultados } begin { comandos do procedimento imprime_resultados } end;

begin { corpo programa principal } entrada_de_dados; processa_dados; imprime_resultados; end. Este exemplo ilustra como procedimentos podem facilitar o entendimento do programa. Neste caso, o corpo do programa principal se constitui apenas de trs chamadas procedimentos.

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Funes - Functions As functions so como procedimentos. No entanto, so distintas pela caracterstica de retornar um valor. Isso caracteriza o fato de uma function ser ativada na avaliao de expresses, como as funes matemticas. Como vimos, a linguagem Pascal possui algumas funes pr-definidas, o que faz com que o programador no tenha que implement-las. A declarao de uma function tem como objetivo associ-la a um identificador para que possa se ativada em uma expresso do programa. A declarao de uma function feita da seguinte forma: function nome: t declararo dos objetos locais function BEGIN comandos da function
. . .

nome := X; END; t tipo que a funo ir retornar. X o valor do mesmo tipo t que ser retornado pela funo. Vemos aqui que o corpo da funo precisa necessariamente conter um comando de atribuio no qual o nome da function aparece esquerda do sinal de atribuio. A ativao de uma function feita posicionando-se o nome da mesma em uma expresso de mesmo tipo. Exemplo: program var N : integer;

exemplo_function;

{ program que calcula o fatorial de N com a utilizao de uma funo }

function fatorial : integer; var i, acumul : integer; begin


o

acumul := 1; i := 1; while (i <= N) do begin acumul := acumul * i;

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

i := i + 1; end; fatorial := acumul; end; begin write('Digite o valor de N: '); readln(N); writeln('O valor do Fatorial de ',N , ' = ', fatorial); end. Vimos que as procedures e functions utilizam objetos (variveis, arquivos, etc) locais (declarados em seu corpo) e objetos globais (declarados nos nveis mais externos). Variveis globais servem para implementar um mecanismo de transmisso de informaes de um nvel mais externo para um nvel mais interno, como o exemplo do fatorial acima. Analogamente, o mesmo mecanismo pode ser usado inversamente para transmitir informaes de dentro para fora dos procedimentos, ou seja, quando se altera o contedo de uma varivel global dentro de um procedimento, a prxima instruo aps o trmino do procedimento ter disponvel o valor da ltima atualizao dentro do procedimento. A utilizao de variveis globais, no entanto, no constitui uma boa prtica de programao, visto que podem amarrar os procedimentos (tornando-os dependentes) e quebrar a questo de modularidade. Em um procedimento, as suas variveis locais tem vida somente durante a sua execuo. ou seja, so criadas e alocadas quando no momento da ativao, e liberadas quando de seu trmino. Alm do mais, essas variveis no podem ser acessadas pelos nveis externos ao procedimento. Ento, para transmisso de informaes de dentro para fora dos procedimentos a linguagem Pascal utiliza o mecanismo de parmetros. Por meio dos parmetros faz-se a comunicao de fora para dentro e de dentro para fora de um procedimento, o que torna o mdulos independentes e reutilizveis em outros programas. Os parmetros so objetos utilizados dentro do procedimento e representam os objetos do nvel mais externo (parmetros de definio). Para declarar procedures e functions que utilizam parmetros basta acrescentar ao cabealho a lista de parmetros a ser utilizada, que dever estar entre parnteses. Isso feito da seguinte forma:

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

procedure nome(lista-de-parametros); function nome(lista-de-parametros); lista-de-parametros da forma: parmetro1 : tipo, parmetro2 : tipo, ..., parmetron: tipo. A ativao de um procedimento se faz por meio de uma referncia a seu nome seguido pela lista de parmetros envolvida por parnteses. Esses parmetros so conhecidos por parmetros de chamada, e podem ser constantes, variveis ou expresses dos mdulos externos cujos valores sero transmitidos para os parmetros de definio do procedimento e aps a sua execuo recebero de volta, ou no, os valores contidos no parmetros de definio. Dependendo de como so declarados os parmetros de definio no procedimento, determinado se os parmetros de chamada contero ou no os valores contidos nos parmetros de definio. Isso define o modo de passagem dos parmetros: passagem por referncia e passagem por valor. Quando se declara um parmetro como sendo de referncia, as atribuies ele so refletidas no parmetro de chamada correspondente, aps a execuo do procedimento o parmetro de chamada conter o mesmo valor que o parmetro de definio correspondente. Para especificar se um parmetro ter passagem por referncia, a sua declarao dever ser precedida pela palavra-chave var. Caso a declarao no seja precedida por var, ento o parmetro possui passagem por valor. Neste caso, os parmetros de definio contero os mesmos valores de seus parmetros de chamada correspondente no momento da ativao, mas alteraes nos parmetros de definio no sero refletidas nos parmetros de chamada correspondente. Pode-se dizer tambm que um parmetro com passagem por referncia um parmetro de entrada e sada, enquanto que um parmetro com passagem por valor um parmetro de entrada. Exemplo: program com var N : integer;

exemplo_function_2; passagem de parmetros }

{ program que calcula o fatorial de N com a utilizao de uma funo

function fatorial(fat : integer): integer; var i, acumul : integer; begin

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

acumul := 1; i := 1; while (i <= fat) do begin acumul := acumul * i; i := i + 1; end; fatorial := acumul; end; begin write('Digite o valor de N: '); readln(N); writeln('O valor do Fatorial de ',N , ' = ', fatorial(N)); end. program exemplo_procedure_2; { programa que utiliza uma procedure para ler os valores em uma matriz N x M e uma procedure que imprime os valores de uma matriz M x N } const M = 10; N = 10; type matriz = array[1..M,1..N] of integer; var a : matriz; numlin, numcol : integer;

procedure le_matriz(var mat : matriz; lin, col : integer); var i, j : integer; begin for i:= 1 to lin do for j := 1 to col do read(mat[i,j]); end; procedure imprime_matriz(mat : matriz; lin, col : integer); var

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

i, j : integer; begin for i:= 1 to lin do begin for j := 1 to col do write(mat[i,j]:10,' '); writeln; end; end; begin write('Entre write('Entre { com com o o programa nmero nmero de de linhas colunas readln(num_lin); da matriz (<',N, '): '); readln(num_col); le_matriz(a,num_lin,num_col); imprime_matriz(a,num_lin, end. Tipo Apontador (Ponteiro) Um das caractersticas mais marcantes do pascal permitir a criao e destruio de variveis durante a execuo do programa. O uso dessas variveis possibilita a implementao das estruturas de dados dinmicas. Essas variveis criadas e destrudas durante a execuo do programa so chamadas variveis dinmicas. Uma varivel dinmica no declarada na parte de declarao de variveis porque esta ainda no existe antes do seu tempo de execuo, ela no possui sequer um nome, ficando a cargo dos ponteiros desempenhar esta funo de nome. Uma varivel dinmica sempre referenciada indiretamente por um apontador, ou seja, para cada varivel dinmica criada deve existir um apontador, que literalmente aponta para ela, permitindo a sua manipulao. Listas Encadeadas Conceito Esta classe de estruturas de dados foi inspirada numa forma de armazenamento bastante comum na nossa vida cotidiana, pois, desde eras bastantes remotas, o homem utiliza-se da idia de listar coisas com o objetivo de melhor organiz-las. num_col); principal da matriz } (<',M, '): ');

Escola Tcnica de Braslia

Curso Bsico de Lgica de Programao

Baseado nesse conceito bastante simples (listagem) a estrutura de dados lista foi concebida, onde, cada elemento da lista armazena uma informao til e uma, ou mais, referencia(s) para outro elemento (limitao do mundo computacional) e assim por diante, desta forma, com o auxlio dos ponteiros, pode-se acrescentar ou retirar elementos conforme a necessidade. Listas encadeadas geralmente so utilizadas para criar vetores de extenso de memria desconhecida, pela sua caracterstica dinmica, permitindo que o vetor (lista) tenha sempre o tamanho necessrio. Filas Definio Uma fila uma lista linear de informao que acessada na seguinte ordem, o primeiro que entra, primeiro que sai (FIFO). Uma fila no permite acesso a um elemento que no seja o primeiro. Aplicao Normalmente as filas so utilizadas na administrao de recursos compartilhados, impondo uma prioridade por ordem de chegada. Um bom exemplo so as filas de impresso, onde, cada documento espera sua vez para ser impresso. Operaes Bsicas (Incluso e Excluso) Existem, basicamente, duas operaes bsicas a serem implementadas na filas : adicionar e remover. comum a utilizao de um ponteiro para o incio e outro para o fim da fim, facilitando assim as operaes. Pilhas Definio Anlogo estrutura fila, a estrutura pilha tambm pr-define a posio de insero e remoo dos elementos, sendo que, a estratgia ltimo que entra, primeiro que sai (LIFO) Aplicao Um bom exemplo da aplio das pilhas a gerencia das chamadas as sub-rotinas utilizadas pela maioria dos compiladores das linguagens de programao. Operaes Bsicas (Incluso e Excluso) Por razes histricas, as duas operaes primrias de pilha - insero e retirada - so normalmente chamadas de push e pop, respectivamente.

Escola Tcnica de Braslia

Vous aimerez peut-être aussi