Você está na página 1de 0

Tcnicas de programao com PASCAL

Prof. Eng Luiz Antonio Vargas Pinto


www.vargasp.net




A linguagem PASCAL ............................................................ 4
Estrutura do Programa ......................................................... 4
Prof. Eng Luiz Antonio Vargas Pinto 1
Declarando tipos [ Type ] ..................................................... 5
Declarando variveis [ Var ] .................................................. 5
Declarando Constantes [ Const ] ............................................... 5
Loop .......................................................................... 5
For ......................................................................... 6
Repeat ...................................................................... 6
While ....................................................................... 8
Comandos de deciso .......................................................... 10
Comando de atribuio ........................................................ 11
Comando de leitura ........................................................... 12
Comando de Leitura ........................................................... 12
Comando de posio de cursor em tela texto ................................... 13
Comando para limpar uma linha a partir do cursor ............................. 13
Comando para limpar a tela ................................................... 13
Funes Matemticas .......................................................... 13
Subrotina (Procedure) ........................................................ 15
Variveis Globais e Locais ................................................... 16
Parmetro .................................................................... 16
Funo ( Function ) .......................................................... 17
Registro ( Record ) .......................................................... 17
Estruturas de dados .......................................................... 17
Ponteiro ( Pointer ) ......................................................... 18
Exerccios ................................................................... 18
Programas exemplo ............................................................ 19
1- Fatorial ................................................................ 19
2- Razes por Newton-Raphson ............................................... 20
3- Fila encadead ........................................................... 21


Programar: Desenvolver uma seqncia ordenada de comandos para
atingir um fim ou alguns; [O poder da programao mximo em tare-
fas repetitivas ]

Criar - a capacidade de inventar novas maneiras aprimorando-as.






Prof. Eng Luiz Antonio Vargas Pinto 2

Varivel: Posio da memria RAM Utilizada para guardar dados. Em termos de com-
putao o local onde armazenamos dados. Exemplo: A:=3 (Isto significa
que foi guardado o valor 3 na varivel A). So usadas para operao l-
gica ou aritmtica. Devem ser declaradas na forma:

Nome_da_varivel:Tipo_da_varivel;


Exemplo: Se A=7 e B=4 e fizermos A=B ,ento A=4 e B=4 pois apenas alteramos o
destino e nunca a origem. Nessa situao, dizemos que A e B so adi-
mensionais porqu servem para armazenar dados simples (nico).


Vetores: So variveis mais complexas que permite armazenar mais que uma infor-
mao na mesma varivel, desde que estas sejam do mesmo tipo. Existem
duas formas padronizadas para o tratamento de ndice de armazenamento
em vetor.

Exemplo: Seja o vetor M com 6 posies onde guardamos letras:


Onde o acesso processado da seguinte forma:

Exemplo: M[6]:= A;
write(Linha[3]);

Estas so denominadas de variveis dimensionais porqu requerem reserva de me-
mria, isto , necessrio dimensionar a quantidade mxima de memria que ire-
mos consumir, mesmo que no a utilizemos na totalidade. Um vetor uma matriz
linha, isto , uma linha e n colunas ao passo que a matriz possui linhas e colu-
nas.

Exemplo: Seja a matriz A com 4 linhas e 4 colunas, 4 x 4 (l-se 4 por 4) totali-
zando 16 posies onde guardamos nmeros inteiros.



Prof. Eng Luiz Antonio Vargas Pinto 3
Onde o acesso processado da seguinte forma:



Exemplo: A[2,3]:=B; {trata-se de uma varivel de nome "B" cujo contedo um
nmero inteiro }
Write(Linha[7,1]);

Como o acesso feito por meio de ndices, tambm podemos acessar informa-
es usando variveis como ndice:



Existem duas formas padro de controlar ndices de acesso de matrizes e vetores:

a)Pr-Indexada: Quando o ponteiro aponta para a ltima posio usada, isto ,
sempre que for preciso colocar um novo valor primeiro avanamos
o ponteiro.

b)Ps-Indexada: Quando o ponteiro aponta para uma posio livre, e no armazena-
mento, primeiro o dado entra e depois o ponteiro avana.
A linguagem PASCAL

Prof. Eng Luiz Antonio Vargas Pinto 4



Criada por Nicklaus Wirth em 1968, na Sua com o propsi-
to de instituir uma linguagem algortmica e estruturada de
acordo com a nova gerao de computadores que estava em de-
senvolvimento.





Estrutura do Programa



Prof. Eng Luiz Antonio Vargas Pinto 5
Declarando tipos [ Type ]
Para que declarar um tipo? Para organizar melhor o programa. usual decla-
rarmos matrizes e vetores, assim como registros com uso de tipos. Declaramos no
incio do programa precedido da palavra reservada Type.
Exemplo:
Type
X=Array [1..7] of Byte;
Var
S:x;

1-Byte: valores compreendidos entre 0 e 255 [numrico-inteiro]
2-Integer: valores compreendidos entre -32768 e 32767 [numrico-inteiro]
3-Word: valores compreendidos entre 0 e 65.535 [numrico - inteiro]
4-Shortint: valores compreendidos entre -128 e 127 [numrico - inteiro]
5-Longint: valores compreendidos entre -2.147.483.648 e 2.147.483.647
[numrico - inteiro]
6-Real: valores fracionrios e exponenciais entre 2.9E-39 a 1.7E38
[numrico - fracionrio]
7-Char: ocupa 1 byte, mas s guarda caractere. [alfanumrico]
8-Boolean: lgico - True/False [Booleano]
Declarando variveis [ Var ]
Exemplo:

Program Teste;
Var
X: Real;
A,B,C: Integer;
Nome: String [10];
Teste: Boolean;
Declarando Constantes [ Const ]
A grande diferena entre o uso de constantes e variveis reside no fato de
que a varivel mantm os dados ali guardados indefinidamente, porm podem ser
alterados infinitas vezes durante o curso de um programa. Quando precisamos de
valores de referencia ento nos valemos de uma declarao ao compilador sobre
este fato mencionando o valor de referncia. So sempre precedidas da palavra
reservada Const.

Exemplo:
Const
Soma=40;
Nome='Luiz';
Loop
Um dos melhores momentos em que o computador aparentemente supera a mente
humana reside justamente na sua capacidade de executar tarefas, mesmo elementa-
res, muito rpida e eficientemente. Aqui tambm reside talvez o maior de seu
desempenho. Computadores so extremamente eficientes em tarefas repetitivas, por
esta mesma razo existem muitas opes de laos (LOOPs) nas linguagens de pro-
gramao.

For
Caractersticas: Automtico, step unitrio inteiro crescente/decrescente;
Sintaxe:
For varivel_contadora := incio to fim do
Begin


end;

Fluxo:


Prof. Eng Luiz Antonio Vargas Pinto 6
Descrio: O comando For utilizado quando desejamos efetuar uma ou algumas ope-
raes num certo nmero finito (limitado) de vezes sem interrupo
o chamado Loop automtico, onde a atualizao da varivel contadora
feito pelo prprio comando. No possvel a interrupo do loop, a
menos aps o vencimento do limite final do contador. Em Pascal, o in-
cremento unitrio positivo (crescente) ou negativo (decrescente). A
varivel utilizada como contador deve ter seu nome declarado pelo
programador no comando For e deve ser declarada no incio do programa
como algum tipo numrico inteiro.

Exemplo:



Repeat
Caractersticas: Manual, Step controlado pelo programador podendo ser inteiro, l-
gico ou Fracionrio, busca condio de sada.

Sintaxe:
Repeat


Until < condies > ;



Fluxo:

Descrio: Um dos comandos de repetio. manual porqu o controle sobre o nme-
ro de vezes que este comando executa um ou uma srie de comandos est
sob o controle do programador. Alm disso, por essa razo podemos in-
terromper um lao apenas determinando a condio de sada. Note que,
da prpria descrio do comando ele repete um nmero finito de coman-
dos at encontrar uma condio de sada de lao e que esta condio
estabelecida pelo programador.

Exemplo:

Prof. Eng Luiz Antonio Vargas Pinto 7


Exemplo: Ler "A" at que A seja diferente de ZERO (0).







While

Caractersticas: Manual, Step controlado pelo programador podendo ser inteiro, l-
gico ou Fracionrio, busca condio de permanncia.

Sintaxe:
While < condies > Do
Begin

end;
Fluxo:

Prof. Eng Luiz Antonio Vargas Pinto 8

Descrio: o outro comando de repetio manual. Semelhante ao Repeat porm com
caractersticas prprias. O nmero de vezes que ele controla est sob
o controle do operador. Sua principal caracterstica que o Loop
testado na sua condio de permanncia no loop enquanto o Repeat pro-
cura a condio de sada do loop. Inclusive, no primeiro encontro da
linha de comando, este testa inclusive se existe condio de entrada
no loop.

Exemplo:


Observe que se o contador foi iniciado com valor 11, por exemplo, o loop
no ser executado porqu o teste permite a permanncia no loop somente enquanto
i for diferente de 11 o que no seria o caso (pois i=11).





Podemos utilizar qualquer comando de repetio indistintamente, salvo quan-
do certas condies assim exigirem. incorreto afirmarmos que um deles mais
rpido que o outro. Na verdade o procedimento que podemos adotar deve respeitar
os limites de cada comando. por essa razo que os comandos existem, e so
trs:

Repeat Busca condio de encerramento do lao (loop) mas pode interromper
[ Controle Manual ]
While Busca condio de permanncia no lao mas pode interromper
[ Controle Manual ]
For Repete um nmero pr determinado de vezes e no pode interromper
[ Controle Automtico ]

Exemplo: Colocar o valor A sendo que este deve ser diferente de zero. Veja que o
comando For seria indicado para este loop, mas neste caso ele est
comprometido, pois as condies exigem um nmero indefinido de tenta-
tivas. Isto est de acordo com o descrito anteriormente na definio
das condies.
Prof. Eng Luiz Antonio Vargas Pinto 9

Comandos de deciso
Como basicamente um programa consiste de uma seqncia lgica de "passos
serem executados", em ordem tal que essas execues de comandos podem resultar
num trabalho til, perfeitamente aceitvel que um programa "tome" ao longo de
sua execuo decises lgicas. Alguma coisa assim como uma equao do 2 Grau, o
teste do resulta maior ou menor que zero. Isto acarreta efeitos diferentes na
seqncia de execuo.
Note que o surgimento da deciso divide o programa. Aqui comeam os pro-
blemas do programador: A velocidade em que a mente processa as informaes ,
com toda certeza, muito superior a aquele dos movimentos musculares, o que con-
seqentemente faz com que pensar seja muito mais rpido que escrever. Claro que,
desenvolver um programa no um caso de velocidade, afinal, eu posso parar para
pensar. Mas acontece que o aparecimento da deciso, de forma anloga a velocida-
de, impede o raciocnio formal. A deciso tornou-se o ponto fraco da programa-
o. E o que se esperaria que este fizesse. Mas no o faz. Por qu? Qual o
caminho a seguir?
Prof. Eng Luiz Antonio Vargas Pinto 10
possvel verificar que ele
incapaz de optar. Algo assim como
se no fosse possvel optar por um
dos ramos sem olhar os outros. Tec-
nicamente denominamos a esse ramo
da anlise o estudo do raciocnio
humano. Padro comum em enxadris-
tas, a viso externa, alm de mui-
tos nveis a frente dessa primeira
deciso: Eurstica, que a anlise da lgica da mente humana. Caso tpico do jogo
da velha, Torres de Hani, Damas e Xadrez, e jogos e sistemas onde apenas a viso do
n (situao) presente no suficiente.
Assim considerando, claro que seguir esse tipo de raciocnio invivel
para um algoritmo, pois enquanto o raciocnio se aprofunda na anlise, o algo-
ritmo computacional conduz todas as decises ao fim do programa. Por essa razo
tambm claro que a nica forma coerente de criar um fluxograma optar por um
nico caminho em cada deciso ignorando o outro e seguir por este at a prxima
deciso, se houver, ou at o final do programa. Aps ao qual devemos retornar
aos nveis deixados em aberto e recomear este processo at que todos os ns
estejam totalmente fechados. razovel que todo programa possui uma linha cen-
tral de procedimento a qual chamamos de coluna vertebral do programa. Veja o
seguinte diagrama:




Observe que existem trs solues para o fluxo de dados (as vezes muito
mais). Mas observem que estes poderiam ter sido desenvolvidos por programadores
diferentes. claro que a 1 soluo a melhor delas mas isto no significa que
comear por alguma das outras duas seria errado.
Pascal por ser uma linguagem estruturada adota com freqncia estruturas em
rvore binria. Isto o mesmo que dizer que uma deciso tem somente duas alter-
nativas como soluo e a ocorrncia de uma delas (condio) implica a adoo de
uma das alternativas da mesma forma que a no satisfao da condio faa o flu-
xo seguir pela outra alternativa. Isto a execuo de um comando else. Os co-
mandos de decises podem ser:



Observe que a ocorrncia de x=0 implica no incremento unitrio da varivel
Soma. Note tambm que o incremento um efeito de condicional em condio favo-
rvel e que neste caso a no ocorrncia dessa condio favorvel no acarreta
nenhuma atuao sobre a varivel Soma. Em outras palavras, a ocorrncia pode ser
tratada como exclusividade.

Prof. Eng Luiz Antonio Vargas Pinto 11


Observe que neste caso o comando pura e simplesmente expressa um comando em
estrutura de rvore binria. A condio favorvel causou um "desvio" no fluxo
seguindo para o comando (1). Entretanto, caso esta condio no seja satisfeita,
obrigatoriamente o fluxo desviado para o comando (2). Note que o comando (1)
no executado
Comando de atribuio
Atribuir carregar um valor em uma ou algumas posies de memria dispon-
veis. Cada posio de memria que equivale a um endereo de memria armazena um
(01) Byte.
Sintaxe: nome_do_destinatario := objeto;

Exemplo:
S:=3;


Prof. Eng Luiz Antonio Vargas Pinto 12
Comando de leitura
Este comando serve para passarmos uma informao ao computador atravs dos
dispositivos de entrada. A sua condio default (leia "def") feita para te-
clado. Em comandos de arquivo (breve) voltaremos a usar os comandos read.

Sintaxe: Read (varivel_l); ou varivel_1 := ReadKey;
Exemplo:
Read (a); { onde a varivel tipo char }

Esse comando, nessa condio (ainda), l o teclado e o aguarda a tecla <En-
ter>. possvel passar diretamente sobre o teclado usando o parmetro "Kbd"
(keyboard) ou com o comando ReadKey.

Exemplo:
Read (kbd,a); { Opo vlida no Turbo Pascal com uso de USES Turbo3 }
a:=ReadKey; { Opo vlida no Turbo Pascal com uso de USES CRT }

No aguarda o E e os caracteres no so ecoados no vdeo. H ainda a
restrio de que o programa deve ser notificado disto com o uso da palavra re-
servada "USES".

Exemplo:
Program Teste;
Uses Turbo 3; {Libera o uso do "kbd".}

Outra variao desse comando :

Sintaxe: ReadLn (varivel_1);

O efeito que ao receber o dado, coloca o cursor na linha seguinte, na
primeira coluna.

Observao: Os comandos Read/Readln no possuem proteo, isto , se a varivel
"a" do exemplo for de algum tipo numrico qualquer, e se o usurio
ao dar entrada teclar uma letra ou qualquer caractere no numrico,
o comando interrompido e o programa retorna ao DOS. E ainda mais,
estes comandos apresentam problemas quando no uso de variveis tipo
String. Quando um string lido, um flag interno sinaliza o compila-
dor e qualquer outra leitura de outro String logo a seguir no ser
efetuada.
Comando de Leitura
Sintaxe: Write (varivel_1); ou Writeln (varivel_1);
Este comando foi destinado a escrita. E escrita no modo computacional, sig-
nifica escrever um dispositivo (Tela, impressora, sada serial e disco). No modo
default (leia "def") para escrita na tela. Quando desejamos escrever na im-
pressora devemos:

1) Declarar os Uses correto:
Program Teste;
Uses Printer;

2) Usar o parmetro "Lst":
Write(Lst,'Eu');


Observaes: Este comando tambm no possui proteo e, por exemplo, uma tenta-
tiva de escrita em um dispositivo no liberado acarreta um erro
grave e o retorno ao Dos inevitvel. Tanto o Read como o Write
possuem comandos adicionais contra esses "acidentes" que veremos
posteriormente. O comando Writeln (varivel_1); procede da mesma for-
ma que o comando Readln quanto tela.
Comando de posio de cursor em tela texto
Sintaxe: GoToXY(Coluna,Linha);
Posiciona o cursor em uma tela tipo texto com 25 linhas e 80 colunas.
Comando para limpar uma linha a partir do cursor
Sintaxe: ClrEol; Obs.: o cursor no sai da posio.
Comando para limpar a tela
Sintaxe: ClrScr; Obs.: o cursor reinicia na posio (1,1).
Funes Matemticas
1- Operaes lgicas ou aritmticas:
Pascal permite o uso de equaes matemticas. Por ser uma linguagem cientfi-
ca pode executar operaes bsicas, binrias, e lgicas.

a) Soma: +
b) Subtrao: -
c) Diviso: /
d) Multiplicao: *

A operao "/" necessariamente do tipo Real. Isto se deve ao fato de que
uma diviso nem sempre resulta em valores inteiros. Dessa forma a varivel re-
sultante em valores inteiros. Dessa forma a varivel resultante deve aceitar
nmeros em ponto flutuante (Exponencial).

Exemplo:
S:=A / B; { S necessariamente Real }
S:=S / 4; { Se S <> Real o compilador recusa montar o programa }
Um fato interessante que Pascal permite agrupamento, respeitando a hierarquia
matemtica.

Exemplo:

Entretanto, algumas vezes necessrio obtermos apenas a parte inteira de
uma diviso. Podemos usar:

e)DIV diviso real
Exemplo:

Prof. Eng Luiz Antonio Vargas Pinto 13

e se usarmos DIV poderemos declarar S como: Integer, Word, LongInt.

f)MOD o resto da diviso

Exemplo:



g)SHR Shift Right (operao binria) - deslocamento para a direita.


h)SHL Shift Left (operao binria) - deslocamento para a esquerda.
Exemplo:


i)AND executa a operao lgica AND e tem dois modos de operar:

i.1)AND binrio :
Exemplo:


i.2)AND Lgico:
Exemplo:
:
:
If (A > 0) AND (S > 7) Then write('Ok');
:
:
Aplicado em condicionais.

j)OR executa a operao lgica OR (opera de modo anlogo ao AND)
j.1)OR binrio:
Exemplo:

j.2)OR Lgico:
Exemplo:
:
:
If (A > 0) OR (S > 7) Then write('Ok');
:
:

Prof. Eng Luiz Antonio Vargas Pinto 14

k)NOT executa a operao lgica NOT
k.1)NOT binrio:
Exemplo:

k.2)NOT Lgico:
Exemplo:
:
Repeat
:
:
Until (Not Teste); {onde Teste uma varivel Booleana}
:

l)XOR normalmente representa a operao lgica XOR, onde:
Exemplo:



de onde podemos afirmar que se duas condies so verdadeiras (ambas) ou se am-
bas so falsas ento sinalizado FALSO.
Prof. Eng Luiz Antonio Vargas Pinto 15
Pascal possui uma biblioteca matemtica que aceita funes matemticas tais
como:
Seno .............................. Sin(x);
Cosseno.......................... Cos(x);
Tangente ........................ Tan(x);
Raiz Quadrada................. SQRT(x);
Logaritimo Neperiano........ Ln(x);
X
2
.................................. SQR(x);
Subrotina (Procedure)
Definio: um conjunto de comandos separados do programa principal e que satis-
fazem duas condies bsicas:
1- Reduzem os cdigos do programa fonte;
2- Permitem programao estruturada.

Estrutura:




Observao: O programa principal no consegue olhar dentro de suas procedures e
function mas o contrrio vlido, isto , a procedure pode olhar
para as variveis do programa principal.
Variveis Globais e Locais
Uma varivel dita Global quando declarada no programa principal e por-
tanto de acesso universal por todas demais as partes componentes de um progra-
ma. J aquela que declarada dentro de uma Procedure ou Function dita local,
pois acessada exclusivamente pela prpria Procedure/Function ou elementos de-
clarados dentro da mesma e no por partes do programa Principal. Muitas vezes
necessrio que construamos uma ou mais procedures em um dado programa, no entan-
to existe casos onde a diferena entre determinadas procedures pequena e para
otimizarmos essas procedures tornando-a uma s, usamos o artifcio de passar
mais informaes procedure que ser a nica englobando as outras antigas. A
essas informaes extras chamamos parmetro. Tecnicamente falando, existem duas
formas de passagem de parmetros: Com retorno e sem retorno.
Parmetro
Definio:So dados adicionais usados para simplificar uma function ou procedure,
agrupando mais de uma function e/ou procedure e com isto melhorando o
desempenho de uma dada function e/ou procedure.

Conforme j dissemos, parmetros em Pascal podem ser de dois tipos:

a)Sem retorno: As informaes adicionais so passadas a procedure e/ou function e
o originante permanece inalterado.
Prof. Eng Luiz Antonio Vargas Pinto 16

b)Com retorno: As informaes so passadas a procedure e/ou function e o origi-
nante ser alterado.

Podemos tambm definir parmetro segundo o conceito computacional, ou seja:
o uso de passagem de informao entre reas de programa. Vejamos agora atravs
de um diagrama:



De acordo com a figura, a informao que desejamos passar colocada na va-
rivel a na procedure_1. Em seguida essa informao transferida para a Proce-
dure_2 na rea destacada como sendo a varivel b. Assim, podemos reafirmar que
aps a chamada para a Procedure_2, b=a, isto , o mesmo valor de a. Aps a con-
cluso da procedure as alteraes efetuadas b que uma varivel que pertence
exclusivamente a procedure_2 pode ou no retornar a a no programa principal sob
o controle do programador.
E, nessa condio b chamada Local e a chamada Global. Em Pascal no
permitido declarar variveis com o mesmo nome em um mesmo nvel. Por exemplo

Prof. Eng Luiz Antonio Vargas Pinto 17
duas variveis "A" Globais. Quando o compilador monta uma procedure, este veri-
fica se as variveis pertencentes procedure foram declaradas nesta. Se afirma-
tivo a compilao prossegue e em caso contrrio este verifica se a varivel esta
declarada no programa principal. Se l estiver a compilao prossegue e caso
contrrio para e informa que no conhece a varivel.
Funo ( Function )
Estrutura similar a procedure, diferindo apenas na forma da chamada e na
colocao no programa. Enquanto a procedure simplesmente substitui uma parte do
programa, a function como o prprio nome diz, tem uma funo especfica. O uso
de funes est relacionado ao processo de clculos sendo freqentemente empre-
gado em programas cientficos. Da mesma forma que as procedures, as functions
aceitam o uso de parmetros.
Registro ( Record )
No uso de elementos de memria sempre surgem casos tipo:

a) Elementos de armazenamento so diferentes;
b) No possvel determinar o nmero mximo de elementos que necessitaremos.

O uso de vetores e matrizes permite um controle mais aprimorado, mas apre-
senta o inconveniente de exigir elementos iguais (mesmo tipo). Embora o uso de
ndice facilite a elaborao de loops e lgica de acesso, ainda no permite in-
sero de tipos diferentes no meio do vetor ou matriz. Entretanto, este ainda
no o ponto crtico da questo, pois este pode ser solucionvel de forma sa-
tisfatria da seguinte forma:

Tabela1 : Array [1..3] of String[40]; {nomes}
Tabela2 : Array [1..3] of Real; {notas}
Tabela3 : Array [1..3] of Byte; {idades}

Fazendo dessa forma podemos utilizar o ndice como se fosse o cdigo do a-
luno e atravs dele obter as informaes necessrias. Considere o ndice como
sendo uma varivel do tipo byte onde ndice=2. Dessa forma, se fizermos o acesso
ao aluno nmero2 teremos todas as informaes sobre ele. At aqui, tudo est sob
controle. Ocorre, que na prtica, ao declararmos uma matriz ou um vetor, obriga-
toriamente o compilador reserva memria para todas suas variveis, mesmo que
estas no sejam utilizadas. Isto limita o sistema e impossvel alterarmos isto
"On Line". Assim devemos proceder "Reserva" pensando no mximo possvel, se
pudermos. Pascal, permite a criao de uma estrutura que no somente resolve o
problema de espao mas tambm a criao de um tipo de armazenador nico para
vrios diferentes: "Record".
Estruturas de dados
a)Listas: Consistem de uma relao de algum tipo de objeto ou artigos ou quais-
quer outras coisas relacionadas.

exemplos: - Lista de Compras
- Lista Telefnica
- Lista de Classificao.

Em computao uma lista torna-se bastante til quando serve para armazenar
informaes, quer seja na forma matricial quer seja na forma de registros.




Prof. Eng Luiz Antonio Vargas Pinto 18
b)Fila: Caracterizada por uma estrutura tipo FIFO:
First
In
First
Out

c)Pilha: Caracterizada por uma estrutura tipo LIFO
Last
In
First
Out

A implementao de uma lista encadeada segue princpios rgidos de estrutu-
ra de dados e programao. Como o conceito utiliza ponteiros de memria o que
exige preciso nas rotinas sob a pena de perder o controle de sistema.
Ponteiro ( Pointer )
O uso de ponteiros de memria alm da velocidade dinmica de memria, ocu-
pando espao necessrio apenas ao seu uso, isto , se o armazenamento necessitar
uma expanso da rea ocupada esta vai sendo ocupada na medida da necessidade,
assim como se houver diminuio da memria consumida o "sistema se contrai" li-
berando memria. Em Pascal o tipo Pointer e suas operaes so as novidades.
Podemos declarar um Pointer para uso com Record e posteriormente uma lista enca-
deada.

Exemplo:

Ponta = ^Seta;
Seta = Record
Ponteiro: Ponta;
Name: String[40];
end;

Exerccios

1) Faa um fluxograma para um programa que recebendo 3 notas, organiza-as em
ordem crescente.

2) Faa o fluxograma para um programa que inverte a posio de um vetor, isto
, o primeiro no ltimo e o ltimo no primeiro e isso sucessivamente. O ve-
tor tm 1.000 posies.

3) Faa um fluxograma que identifica em uma lista de 2.000 nmeros o maior, o
menor e calcula a mdia. Nmeros inteiros e maiores que zero. Obs:O maior
nmero 65.535.

4) Faa um fluxograma para um programa que elimina os dados repetidos de dentro
de um vetor com 200 posies. Sendo que esses dados so nmeros inteiros,
positivos e maiores que zero.

5) Fazer um fluxograma para imprimir os dados de um vetor com 2.000 posies e
que so maiores que zero ou mltiplos de 3.

6) Faa um fluxograma para calcular as razes da equao do 2 grau, mesmo com-
plexas.

Prof. Eng Luiz Antonio Vargas Pinto 19

7) Faa um programa que contm uma subrotina que recebe o valor de (a) verifica
se 0, e em caso positivo emite uma mensagem avisando o operador do erro.
Considere o exerccio para clculo das razes da equao do 2 grau.

8) Refaa o exerccio 7 usando uma Function.
Programas exemplo

1- Fatorial
Definio: O Fatorial de um nmero obtido por:

N!=N.(N-1).(N-2).(N-3)...(N-M).1

onde N inteiro e positivo.

Exemplo:
3! = 3x2x1 = 6
5! = 5x4x3x2x1 = 120

Lgica: se queremos n! ento procedemos (n-1) multiplicaes.

Program Fat;
Uses CRT;
Var
Fator:LongInt;
N,i:Byte;
Z:Char;
Begin
ClrScr;
Fator:=1;
GoToXY(4,2);
write('Nmero:');
Readln(N);
If N<0 Then
Begin
writeln('No existe !');
end else
Begin
If N>1 Then
Begin
For i:=1 to N do Fator:=Fator * i;
end;
end;
writeln ('Fatorial de ',N,' = ',Fator);
z:= Readkey;
end.


2- Razes por Newton-Raphson
Este algoritmo permite determinar com
excelente preciso a raiz de uma funo con-
tnua em um intervalo [a,b] desde que f(x) e
f'(x) sejam no nulas nesse intervalo e que
a raiz esteja nesse intervalo. Utilizamos
este algoritmo pelo fato de que podemos a-
plic-lo a clculo da funo raiz quadrada,
que neste caso de nosso interesse alm do
que este algoritmo vastamente utilizado
pela maioria dos aparelhos de clculo e com-
piladores de linguagens de programao exis-
tentes. um processo de clculo numrico e
portanto perfeitamente aplicvel computa-
dores.
Prof. Eng Luiz Antonio Vargas Pinto 20
Dada a curva:

ento x
2
=a de onde x
2
-a = 0 , e dado um ponto
genrico P
0
pertencente a curva, resultante
em f(x) e passando uma reta tangente ao pon-
to P
0
(x
0
,y
0
) determinamos o tringulo APB re-
tngulo, Da:


E portanto deduzimos que:


ou seja, x
1
obtido a partir de x
0
e esta mais prximo da raiz x. Este processo
interativo repetido infinitas vezes, ou tanto quanto mais prximo do valor
desejado (preciso). Todo processo numrico tratado dessa forma, isto , ns o
processamos at obtermos um valor o mais prximo possvel do desejado, tantas
vezes quanto for necessrio. um processo extremamente rpido, chegando ao re-
sultado desejado em poucas interaes.

Program SQRoot;
Uses CRT;
Var
Erro,X,Sup,Atual,Dif,Ref,Ant:Real;
Z:Char;
Begin
ClrScr;
GoToXY(5,2);
write('Raz:');
Read(X);
If X>0 Then
Begin
Erro:=0.00001;
Ref:=4*X;
Ant:=0;
Dif:=1;
While Dif>Erro do
Begin
Atual:=Ref-(Ref*Ref-X)/(2 * Ref);

Prof. Eng Luiz Antonio Vargas Pinto 21
Dif:=ABS(Atual-Ant);
Ant:=ABS(Atual);
Ref:=Ant;
end;
Atual:=ABS (Atual);
Dif:=SQRT(X)-Atual;
Writeln ('A raz de ',X:4:8,'= ',Atual:4:8);
write ('A diferena do algortimo do compilador PASCAL de ',Dif);
end else
Begin
write('No existe raz par de nmero negativo..');
end;
z:=Readkey;
end.

3- Fila encadead

Program fila_encadeada;
Uses CRT;
Const
Max_Reg=3;
Type
Ponta = ^Pointer;
Pointer = Record
Apt:Ponta;
Nome:String[10];
Code:Integer;
end;
Var
Prilin,Newlin,NextLin,Freelin:Ponta;
i:Byte;
z:Char;
Begin
ClrScr;
Prilin:=Nil;
For i:=1 to Max_reg do
Begin
New(Newlin);
Write('Product:..');
Readln(Newlin^.Nome);
write('Code:.....');
Readln(Newlin^.Code);
If Prilin=Nil Then
Prilin:=Newlin
else
NextLin^.Apt:=Newlin;
NextLin:=Newlin;
NextLin^.Apt:=Nil;
end;
Freelin:=Prilin;
Repeat
write('Name of Product =');
writeln(FreeLin^.Nome);
write('Code of Product =');
writeln(Freelin^.Code);

Prof. Eng Luiz Antonio Vargas Pinto 22
Freelin:=Freelin^.Apt;
Until Freelin=Nil;
Z:=ReadKey;
end.