Você está na página 1de 22

Tcnicas de programao com PASCAL

Prof. Eng Luiz Antonio Vargas Pinto www.vargasp.net

A linguagem PASCAL ............................................................ 4 Estrutura do Programa ......................................................... 4 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

Prof. Eng Luiz Antonio Vargas Pinto

Programar: Desenvolver uma seqncia ordenada de comandos para atingir um fim ou alguns; [O poder da programao mximo em tarefas repetitivas ] Criar - a capacidade de inventar novas maneiras aprimorando-as.

Prof. Eng Luiz Antonio Vargas Pinto

Varivel: Posio da memria RAM Utilizada para guardar dados. Em termos de computao o local onde armazenamos dados. Exemplo: A:=3 (Isto significa que foi guardado o valor 3 na varivel A). So usadas para operao lgica 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 adimensionais porqu servem para armazenar dados simples (nico). Vetores: So variveis mais complexas que permite armazenar mais que uma informao 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 memria, isto , necessrio dimensionar a quantidade mxima de memria que iremos 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 colunas. Exemplo: Seja a matriz A com 4 linhas e 4 colunas, 4 x 4 (l-se 4 por 4) totalizando 16 posies onde guardamos nmeros inteiros.

Onde o acesso processado da seguinte forma:

Prof. Eng Luiz Antonio Vargas Pinto

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 informaes 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 armazenamento, primeiro o dado entra e depois o ponteiro avana.

A linguagem PASCAL

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

Estrutura do Programa

Prof. Eng Luiz Antonio Vargas Pinto

Declarando tipos [ Type ]


Para que declarar um tipo? Para organizar melhor o programa. usual declararmos 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: 2-Integer: 3-Word: 4-Shortint: 5-Longint: 6-Real: 7-Char: 8-Boolean: 0 e 255 [numrico-inteiro] -32768 e 32767 [numrico-inteiro] 0 e 65.535 [numrico - inteiro] -128 e 127 [numrico - inteiro] -2.147.483.648 e 2.147.483.647 [numrico - inteiro] valores fracionrios e exponenciais entre 2.9E-39 a 1.7E38 [numrico - fracionrio] ocupa 1 byte, mas s guarda caractere. [alfanumrico] lgico - True/False [Booleano] valores valores valores valores valores compreendidos compreendidos compreendidos compreendidos compreendidos entre entre entre entre entre

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 elementares, 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 programao. Prof. Eng Luiz Antonio Vargas Pinto 5

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

Descrio: O comando For utilizado quando desejamos efetuar uma ou algumas operaes 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 incremento 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, lgico ou Fracionrio, busca condio de sada. Sintaxe: Repeat Until < condies > ; 6 Prof. Eng Luiz Antonio Vargas Pinto

Fluxo:

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

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

Prof. Eng Luiz Antonio Vargas Pinto

While
Caractersticas: Manual, Step controlado pelo programador podendo ser inteiro, lgico ou Fracionrio, busca condio de permanncia. Sintaxe: While < condies > Do Begin end; Fluxo:

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 procura 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).

Prof. Eng Luiz Antonio Vargas Pinto

Podemos utilizar qualquer comando de repetio indistintamente, salvo quando 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 tentativas. 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 problemas do programador: A velocidade em que a mente processa as informaes , com toda certeza, muito superior a aquele dos movimentos musculares, o que conseqentemente 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 velocidade, impede o raciocnio formal. A deciso tornou-se o ponto fraco da programao. E o que se esperaria que este fizesse. Mas no o faz. Por qu? Qual o caminho a seguir? possvel verificar que ele incapaz de optar. Algo assim como se no fosse possvel optar por um dos ramos sem olhar os outros. Tecnicamente denominamos a esse ramo da anlise o estudo do raciocnio humano. Padro comum em enxadristas, a viso externa, alm de muitos 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 algoritmo 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 central de procedimento a qual chamamos de coluna vertebral do programa. Veja o seguinte diagrama:

10 Prof. Eng Luiz Antonio Vargas Pinto

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 alternativas 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 fluxo seguir pela outra alternativa. Isto a execuo de um comando else. Os comandos 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 favorvel 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.

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 disponveis. 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 11

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 teclado. 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 <Enter>. 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 reservada "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 compilador 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, significa escrever um dispositivo (Tela, impressora, sada serial e disco). No modo default (leia "def") para escrita na tela. Quando desejamos escrever na impressora devemos: 1) Declarar os Uses correto: Program Teste; Uses Printer; 2) Usar o parmetro "Lst": Write(Lst,'Eu'); 12 Prof. Eng Luiz Antonio Vargas Pinto

Observaes: Este comando tambm no possui proteo e, por exemplo, uma tentativa 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 forma 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 cientfica 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 resultante 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'); : : 14 Prof. Eng Luiz Antonio Vargas Pinto

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 ambas so falsas ento sinalizado FALSO. 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); X2 .................................. SQR(x);

Subrotina (Procedure)
Definio: um conjunto de comandos separados do programa principal e que satisfazem duas condies bsicas: 1- Reduzem os cdigos do programa fonte; 2- Permitem programao estruturada. Estrutura:

Prof. Eng Luiz Antonio Vargas Pinto

15

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 portanto de acesso universal por todas demais as partes componentes de um programa. J aquela que declarada dentro de uma Procedure ou Function dita local, pois acessada exclusivamente pela prpria Procedure/Function ou elementos declarados dentro da mesma e no por partes do programa Principal. Muitas vezes necessrio que construamos uma ou mais procedures em um dado programa, no entanto 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. b)Com retorno: As informaes so passadas a procedure e/ou function e o originante 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 varivel a na procedure_1. Em seguida essa informao transferida para a Procedure_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 concluso 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 16 Prof. Eng Luiz Antonio Vargas Pinto

duas variveis "A" Globais. Quando o compilador monta uma procedure, este verifica se as variveis pertencentes procedure foram declaradas nesta. Se afirmativo 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 empregado 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 apresenta 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 insero 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 satisfatria 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 aluno 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, obrigatoriamente 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 quaisquer 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

17

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 estrutura 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, ocupando 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" liberando memria. Em Pascal o tipo Pointer e suas operaes so as novidades. Podemos declarar um Pointer para uso com Record e posteriormente uma lista encadeada. 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 vetor 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 complexas. 18 Prof. Eng Luiz Antonio Vargas Pinto

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.

Prof. Eng Luiz Antonio Vargas Pinto

19

2- Razes por Newton-Raphson


Este algoritmo permite determinar com excelente preciso a raiz de uma funo contnua 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 aplic-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 compiladores de linguagens de programao existentes. um processo de clculo numrico e portanto perfeitamente aplicvel computadores. Dada a curva: ento x2=a de onde x2-a = 0 , e dado um ponto genrico P0 pertencente a curva, resultante em f(x) e passando uma reta tangente ao ponto P0(x0,y0) determinamos o tringulo APB retngulo, Da:

E portanto deduzimos que:

ou seja, x1 obtido a partir de x0 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 resultado 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); 20 Prof. Eng Luiz Antonio Vargas Pinto

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

21

Freelin:=Freelin^.Apt; Until Freelin=Nil; Z:=ReadKey; end.

22 Prof. Eng Luiz Antonio Vargas Pinto