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

UNIVERSIDADE FERNANDO PESSOA

PROGRAMAO I
INTRODUO ALGORITMIA E ESTRUTURAS DE DADOS

Jos Vasconcelos Lus Paulo Reis

Engenharia do Ambiente Engenharia Civil Engenharia Informtica Engenharia da Qualidade

1 ANO Maro 2002

Programao I

Universidade Fernando Pessoa

ndice

1.

ALGORITMOS E A RESOLUO DE PROBLEMAS ......................................... 3 1.1. 1.2. 1.3. 1.4. RESOLUO DE PROBLEMAS ................................................................................... 3 APROXIMAO DESCENDENTE (TOP-DOWN APPROACH) ........................................... 4 NOO FORMAL DE ALGORITMO.............................................................................. 6 CARACTERSTICAS DE UM ALGORITMO ................................................................... 6

2.

ESTRUTURAS DE DADOS........................................................................................ 7 2.1. ESTRUTURAS DE DADOS PRIMITIVAS........................................................................ 8 2.1.1. Tipo de dados booleano.................................................................................. 8 2.1.2. Tipo de dados numrico ................................................................................. 8 2.1.3. Tipo de dados alfanumrico ........................................................................... 9 2.1.4. Representao dos dados ............................................................................... 9 2.2. ESTRUTURAS DE DADOS NO PRIMITIVAS .............................................................. 12 2.2.1. Vectores ........................................................................................................ 12 2.2.2. Matrizes .............................................................................................................. 13

3. NOTAO ALGORTMICA....................................................................................... 14 3.1. PSEUDOCDIGO ..................................................................................................... 14 3.1.1. Instruo de atribuio ................................................................................ 15 3.1.2. Leitura e escrita de dados ............................................................................ 16 3.1.3. Estrutura condicional................................................................................... 17 3.1.4. Instrues de repetio................................................................................. 18 3.1.5. Operaes e Expresses Aritmticas............................................................ 21 3.1.6. Operadores e operaes relacionais............................................................ 21 3.1.7. Operadores e operaes lgicas .................................................................. 22 3.2. ALGORITMOS PROPOSTOS ...................................................................................... 23 3.3. DIAGRAMAS DE FLUXO (FLUXOGRAMAS).............................................................. 30 3.3.1. Notao grfica ............................................................................................ 30 3.3.2. Fluxogramas vs. Estruturas de controlo ...................................................... 30 3.3.3. Algoritmo em pseudocdigo / Fluxograma .................................................. 33 4. PROVA E TESTE DE ALGORITMOS................................................................... 34

Programao I

Universidade Fernando Pessoa

Algoritmos e a Resoluo de Problemas


A programao de computadores uma disciplina na rea das cincias da computao e refere-se essencialmente ao estudo de estruturas de dados e a sua manipulao para a resoluo de problemas em diversos domnios do conhecimento. Um programa de computador envolve a definio de um algoritmo para a resoluo de um problema. Um algoritmo representado atravs de expresses simblicas de modo a descrever e a encontrar a soluo de problemas do mundo real. Um algoritmo representa uma sequncia finita e no ambgua de instrues elementares bem definidas, conducente soluo de um determinado problema, cada uma das quais pode ser executada mecanicamente numa quantidade finita de tempo. As estruturas de dados representam de modo simblico entidades e objectos do mundo real e definem a parte esttica de um algoritmo. A manipulao das estruturas de dados atravs de declaraes e instrues precisas de controlo definem a parte dinmica de um algoritmo. Este conjunto de estruturas de dados e de controlo constituem formalmente um algoritmo para a resoluo de problemas.

1.1. Resoluo de Problemas


A resoluo de um problema atravs de um algoritmo e consequente programa computacional refere-se ao processo de identificar e analisar um problema do mundo real e desenvolver a sua soluo de modo eficiente. Este processo constitudo pelas seguintes fases: (1) identificao e compreenso do problema (e objectivos), (2) conceptualizao da soluo, (3) definio do algoritmo para a resoluo do problema, e (4) implementao (codificao) da soluo atravs de um programa computacional. A tarefa de escrever um algoritmo pode ser simplificada atravs da decomposio e anlise de subproblemas. O processo de estruturao na resoluo de problemas reflecte-se num programa modular constitudo por diferentes partes que definem a soluo do problema (figura 1). Problema / Objectivo Subproblemas Sub-objectivos Passos de Resoluo Definio de mdulos

Figura 1: Abordagem para a resoluo de problemas

Programao I

Universidade Fernando Pessoa

1.2. Aproximao descendente (top-down approach)


A aproximao descendente (top-down) para a resoluo de problemas do mundo real permite raciocinar e estruturar a soluo de um problema em linguagem natural (ex.: Portugus). Este tipo de abordagem facilita o processo de compreenso do problema, assim como a conceptualizao do problema/objectivo em subproblemas/sub-objectivos e respectiva soluo. Os prximos exemplos (1 e 2) ilustram dois problemas simples e a notao Exemplo 1: Substituir uma lmpada fundida de um candeeiro.

Algoritmo Mudana de Lmpada


Passo 1 2 3 1.1 2.1 2.2 2.3 3.1 3.2 3.3 Descrio Seleccione uma nova lmpada Remova a Lmpada fundida Insira uma nova lmpada Seleccione uma lmpada da mesma potncia da fundida Posicione a escada em baixo do candeeiro Suba a escada at que possa atingir a lmpada Rode a lmpada no sentido contrrio ao dos ponteiros do relgio at que se solte Coloque a nova lmpada no orifcio correspondente Rode a lmpada no sentido dos ponteiros do relgio at que fique presa Desa da escada

Definio mais precisa para o passo 1.1 Seleccione uma lmpada candidata substituio Se a lmpada no da mesma potncia da antiga, ento repita at encontrar uma correcta: Pouse a lmpada seleccionada Seleccione uma nova lmpada

Programao I

Universidade Fernando Pessoa

Por exemplo, para os passos 2.2, 2.3, 3.2 e 3.3 poderiam tambm derivadas

descries mais precisas e detalhadas, do tipo: Repita ... at ...


Aumento do detalhe do algoritmo pode continuar quase indefinidamente. Grau de detalhe depende das necessidades do agente que vai executar o

algoritmo. Exemplo 2: Encontrar o nmero de telefone que corresponde a um dado nome numa lista telefnica.

Algoritmo Lista-Telefnica
Passo 1 2 Descrio Encontre a pgina da lista que contm o ltimo apelido do nome Encontre na pgina determinada no passo 1, o nome procurado

Aumentando o detalhe, obtemos instrues elementares no ambguas: 1.1 1.2 1.3 1.4 Coloque o marcador D (dedo) ao acaso na lista Abra a lista ltimo apelido est contido numa das pginas (esquerda ou direita)? Se sim, siga para o passo 2 ltimo apelido precede a pgina esquerda? Se sim, coloque o marcador atrs da pgina esquerda; se no, coloque o marcador frente da pgina direita. V para 1.2 (retome a sequncia de instrues no passo 1.2)

1.5

Eliminando formulaes mal definidas (ex.: coloque o marcador atrs): 1.1.1 1.1.2 1.1.3 1.2 1.3 1.4 1.5 Torne A igual ao apelido do nome a seleccionar (atribuio varivel A) Escolha uma posio n ao acaso no intervalo [1,N] (n representa o nmero de pginas til da lista) Torne D igual a n (atribua varivel D o valor n) Abra a lista no local seleccionado pelo marcador D A est contido numa das pginas (esquerda ou direita)? Se sim, siga para o passo 2. A precede o primeiro apelido da pgina esquerda? Se sim, faa n igual a (n+1)/2 (actualizao do valor de n); se no, faa n igual a (N+n)/2. V para 1.2 (retome a sequncia de instrues no passo 1.2)

Programao I

Universidade Fernando Pessoa

1.3. Noo formal de algoritmo


Um algoritmo um processo discreto (sequncia de aces indivisveis) e determinstico (para cada passo da sequncia e para cada conjunto vlido de dados, corresponde uma e uma s aco) que termina quaisquer que sejam os dados iniciais (pertencentes a conjuntos pr-definidos). Um algoritmo constitudo por um conjunto de expresses simblicas que representam aces (escolher, atribuir, etc.), testes de condies (estruturas condicionais) e estruturas de controlo (ciclos e saltos na estrutura sequencial do algoritmo) de modo a especificar o problema e respectiva soluo.

1.4. Caractersticas de um Algoritmo


Entradas Quantidades inicialmente especificadas (por exemplo, atravs de instrues de leitura). Sadas Uma ou mais sadas (habitualmente por instrues de escrita) Finitude A execuo deve terminar sempre num nmero finito de passos. Preciso Todos os passos do algoritmo devem ter um significado preciso no ambguo, especificando exactamente o que deve ser feito. Para evitar a ambiguidade das linguagens humanas (linguagens naturais), linguagens especiais (denominadas linguagens de programao) foram criadas para exprimir algoritmos. Eficcia Os passos devem conduzir resoluo do problema proposto. Devem ainda ser executveis numa quantidade finita de tempo e com uma quantidade finita de esforo. Eficincia Em muitos casos colocam-se questes de eficincia a um algoritmo.

Programao I

Universidade Fernando Pessoa

2. Estruturas de Dados
A resoluo de problemas atravs de algoritmos requer a representao de entidades e objectos reais em itens de dados. As diferentes formas nas quais os itens de dados so logicamente relacionados definem diferentes estruturas de dados (figura 2). Esta seco apresenta um conjunto de estruturas de dados classificadas como primitivas e no primitivas. Estruturas de dados primitivas so directamente manipuladas em linguagem mquina (binria), enquanto que estruturas de dados no primitivas (ou complexas) representam estruturas de informao em conjuntos (formados por estruturas de dados primitivas) logicamente relacionados.

Primitivas

Boolenas (lgicas) Numricas Ponteiros

Caracteres alfanumricos

Inteiros Reais

Estruturas de Dados
Comprimento fixo (variveis indexadas)

No Primitivas (Complexas)

Comprimento varivel (Listas adjacncia fsica) Ficheiros (memria secundria)

{ { { {{ {
Vector Matriz Lineares

Bidimensional ... Multi-indexado

Pilhas Filas Listas rvores No lineares Grafos Sequenciais Sequenciais indexados Directos

Figura 2: Estruturas de Dados

A representao de uma particular estrutura de dados na memria do computador designado por estrutura de armazenamento. fundamental saber distinguir estes dois conceitos: estrutura de dados vs. estrutura de armazenamento. Existem diferentes configuraes de armazenamento correspondentes a uma particular estrutura de dados. A preocupao desta disciplina centra-se na forma como representamos entidades e objectos reais atravs de estruturas de dados e no na forma como os armazenamos fisicamente na memria (primria ou secundria) do computador.

Programao I

Universidade Fernando Pessoa

A definio das estruturas de dados a utilizar por um algoritmo tem tambm subjacente as operaes a executar nos dados representados. Diferentes operaes podem ser executadas, tais como operaes para criar e eliminar estruturas de dados, operaes para inserir, alterar e eliminar elementos da estruturas de dados, e operaes para aceder a elementos da estrutura de dados. Em sntese, uma eficiente manipulao das estruturas de dados associadas resoluo de um problema e consequente construo de um algoritmo envolve uma anlise das seguintes questes: a) Compreender a relao entre os dados b) Decidir operaes a executar nos dados logicamente relacionados c) Representar os elementos dos dados de modo a: i. Manter as relaes lgicas entre os dados ii. Executar de forma eficiente as operaes nos dados d) Construir o algoritmo e escolher a linguagem de programao mais apropriada que permita de modo natural e expressivo representar as operaes a executar nos dados.

2.1. Estruturas de dados primitivas


Esta seco apresenta em conjunto de exemplos simples representativos de tipos de estruturas de dados primitivos: tipo booleano (ou binrio), tipo numrico (inteiros e reais) e tipo alfanumrico para o tratamento de cadeias de caracteres e consequente tratamento de texto.

2.1.1. Tipo de dados booleano


Este tipo de estrutura de dados permite representar dois (e s dois) estados: verdadeiro e falso. Este tipo pode ser representado atravs dos dois estados existentes na codificao binrio: 1 verdadeiro; 0 falso. Este tipo de dados usualmente aplicado em situaes reais que unicamente denotam dois estados possveis.

2.1.2. Tipo de dados numrico


Tipo de dados representativo de valores numricos no domnio dos nmeros inteiros e reais. Por exemplo, 37 um dado do tipo numrico inteiro. 2 (raiz quadrada de 2) um dado do tipo real.

Programao I

Universidade Fernando Pessoa

2.1.3. Tipo de dados alfanumrico


Um sistema de codificao designado por ASCII (American Standard Code for Information Interchange) foi criado para representar informao do tipo caracter. O conjunto de caracteres ASCII permite representar: 1) Alfabeto (letras minsculas e maisculas) {a,c,d,e,f,g,h, ...,z, A,B,...,Z} 2) Caracteres numricos decimais {0,1,2,3,4,5,6,7,8,9} 3) Operadores e caracteres especiais {+,-,*,/,>,=,<,#,$,%, ..., @,&,(,),...} 4) Caracteres de controlo. Por exemplo, DEL Delete, CR Carriage Return, HT- Horizontal Tab, etc.

2.1.4. Representao dos dados


Os tipos de dados referidos anteriormente so representados na memria principal do computador de diferentes formas. Os sistemas de computao digital utilizam vulgarmente trs tipos de dados:

Dados simblicos Dados Numricos Informao Contextual

Representao Simblica Smbolos Letras Dgitos Decimais Sinais de Operao Sinais de Pontuao Smbolos Especiais (a a z, A a Z) (0 a 9) +-*/ ,.;:?! #&%$|

Os smbolos so codificados em binrio com um cdigo de comprimento n. Os cdigos usuais tm 8 bits (n=8, 256 smbolos representveis), por exemplo o ASCII ou EBCDIC. Representao Numrica Os dados representam quantidades numricas no sistema de numerao binrio (ou num outro sistema codificado em binrio). 0101 1011 = = 0*27 + 1*26 + 0*25 + 1*24 + 1*23 + 0*22+ 1*21 + 1*20 = 64+16+8+2+1 = 91
9

Programao I

Universidade Fernando Pessoa

Informao Contextual Contedo informativo (significado) de um dado, depende do contexto. Por exemplo, o dado 0100 0001, pode representar: 65 41 A MOV A,B Numa operao utilizando binrio Numa operao utilizando BCD (Binary Coded Decimal) Smbolo (letra) ASCII Instruo do microprocessador INTEL 8080

O contexto pode depender do uso no problema particular, da posio numa sequncia de dados ou da posio fsica no sistema de computao. Tipo de dados vs. Variveis vs. Constantes A compreenso dos conceitos anteriores de fundamental importncia para a eficiente construo de algoritmos. Os seguintes exemplos descrevem a diferena entre estes conceitos e o relacionamento lgico entre eles. Exemplo 3 X 47 Esta expresso algortmica simples significa que varivel X foi atribudo o valor (ou constante) 47. Esta operao de atribuio tem por pressuposto (em termos algortmicos) o facto que X uma varivel do tipo inteiro. Exemplo 4 CAR G Esta expresso algortmica simples significa que varivel CAR foi atribudo o valor (ou constante) G. Esta operao de atribuio tem por pressuposto (em termos algortmicos) o facto que CAR uma varivel do tipo alfanumrico. Por conveno os valores alfanumricas so apresentadas entre plicas (ex.: CAR1 7 ou CAR2 J).

10

Programao I

Universidade Fernando Pessoa

Nomes de variveis Uma varivel uma entidade que representa um determinado valor e o seu nome escolhido de forma a reflectir o valor que representa (ex.: a varivel MAX pode representar o valor mximo de um conjunto de valores numricos). Por conveno, um nome de uma varivel no deve conter espaos, no deve iniciar por nmeros e no deve conter determinados caracteres especiais, tais como * , = ? , / * ; : . , } [ ] {, etc. O nome de uma varivel deve iniciar sempre por uma letra, seguido de um conjunto de caracteres incluindo letras, nmeros e alguns caracteres especiais, como o caso do caracter _ que pode ser utilizado para separar palavras que constituem o nome da varivel (ex.: NUM_ALUNO). As prximas variveis so consideradas vlidas: NUM N_ALUNO NOMEALUNO NOME_ALUNO X1 Y2 As prximas variveis so consideradas invlidas: 7NUM Y-Z T/4 U*VAR DUAS-PAL DUAS PALAVRAS

11

Programao I

Universidade Fernando Pessoa

2.2. Estruturas de dados no primitivas


As estruturas de dados no primitivas so definidas atravs de conjuntos de estruturas de dados primitivas. Conforme a figura 2, existem estruturas de comprimento fixo e de comprimento varivel a nvel da memria principal (ou primria) do computador, e existem estruturas de dados na forma de ficheiros de dados que so manipuladas na memria secundria (ou permanente) do computador. No contexto desta disciplina de introduo programao, sero estudadas as estruturas de dados de comprimento fixo (vectores e matrizes) e alguns exemplos de ficheiros de dados e suas aplicaes.

2.2.1. Vectores
Elementos de um vector (array) so representados atravs de conjuntos de variveis de um determinado tipo de dados. Um vector contem um nome ao qual est associado um tipo de dados em funo dos dados a manipular pelo vector, um ndice do tipo inteiro, e uma dimenso do tipo inteiro. Um vector apresentado atravs de um nome e de um ndice entre parntesis rectos. A figura seguinte ilustra a representao e a manipulao dos elementos de um vector.

I = 1 .. 8
1 2 3 4 5 6 7

N=8
8

VNUM [I]

34

121

78

90

15

VNUM [2] = 121 VNUM [7] = 3 VNUM [12] - indefinido

I <- 5 VNUM [I] = 0 I <- 1 VNUM [I] = 32

Figura 3: Representao e manipulao de vectores

O vector VNUM [I] representado na figura anterior um vector do tipo numrico (inteiro) com uma dimenso de 8 (varivel N) elementos. O acesso a elementos (valores) do vector so efectuados atravs da utilizao de um ndice (no exemplo anterior representado na varivel I). Por exemplo, o valor associado posio 6 do vector VNUM igual a 90.
12

Programao I

Universidade Fernando Pessoa

2.2.2. Matrizes
Uma matriz pode ser interpretada como um vector (array) bidimensional (com dimenso 2). A prxima figura ilustra como representar e manipular elementos de uma matriz. Uma matriz representada atravs de um nome e dois ndices que permitem indexar e aceder os elementos que constam na matriz.

ndice representativo das colunas da matriz

J
1 2 3 4 5

M=6
6

I
ndice representativo das linhas da matriz

1 2 3 4 5 6

55 121 34 56 34 76 43

12 67 4 12 21 32 221

72 17 71 12 15 78 321

8 78 7 7 8 78 77

15 12 54 56 0 56 45

99 123 212 33 79 7 7

MAT [ I , J ]

N=7

MAT [2,3] = 17 MAT [7,1] = 43 MAT [4,12] - indefinido

I <- 3 J <- 5 MAT [I,J] = 54

Figura 4: Representao e manipulao de matrizes

A matriz MAT[I,J] ilustrada na figura anterior contem 7 linhas e 6 colunas. O ndice I representa as linhas e o ndice J as colunas da referida matriz. A insero, acesso e a actualizao dos elementos da matriz efectua-se atravs da referncia da linha e da coluna. Por exemplo, MAT[3,6] = 212. Este tipo de estruturas de dados (vectores e matrizes) aplicado com notas explicativas em diversos exerccios e exemplos propostos nas seces do prximo captulo.

13

Programao I

Universidade Fernando Pessoa

3. Notao algortmica
Esta seco apresenta a notao algortmica a utilizar na construo de algoritmos para a resoluo de problemas (exerccios propostos). Na fase de desenvolvimento de um algoritmo podemos utilizar:

Linguagem auxiliar (pseudo-cdigo) linguagem de representao de alto nvel que pode ser traduzida em qualquer linguagem de programao. Diagrama de Fluxo (fluxograma) - notao grfica. Linguagens de Programao (ex.: C, C++, Java, Pascal, Basic, Fortran, ADA, etc.).

3.1. Pseudocdigo
O pseudocdigo uma notao algortmica muito prxima da linguagem natural. Um algoritmo identificado por um nome que dever ser elucidativo do problema em causa. Por conveno, o nome do algoritmo seguido por uma breve descrio (comentrio introdutrio) das tarefas executadas pelo algoritmo. Esta descrio poder tambm conter os nomes e tipos das variveis utilizadas no algoritmo. Um algoritmo construdo atravs de uma sequncia de passos numerados (exemplo 5). Cada um destes passos dever conter um comentrio explicativo da tarefa a executar no contexto global do algoritmo. O prximo exemplo apresenta um algoritmo que permite calcular o factorial de um nmero inteiro. Este algoritmo utiliza uma notao que ser utilizada nos restantes exemplos: 1. Nome do algoritmo em letras maisculas. 2. Breve comentrio das tarefas a desenvolver pelo algoritmo. 3. Conjunto de passos numerados e comentados. 4. Estruturas de dados, funes e subrotinas em letra maiscula. 5. Estruturas de controlo: primeira letra em maiscula. 6. O algoritmo termina com a instruo Exit (fim lgico). O smbolo representa o fim fsico do algoritmo. As prximas subseces apresentam instrues, estruturas de controlo, operaes e operadores (notao algortmica) que podem ser utilizadas na construo de algoritmos.

14

Programao I

Universidade Fernando Pessoa

Exemplo 5 Algoritmo FACTORIAL. Este algoritmo calcula o factorial de um nmero inteiro. 1. [Leitura do nmero] Read (N) 2. [Caso particular de N = ou N = 1] If N=0 Or N=1 Then FACT 1 3. [Outros nmeros] Else FACT N NUM N 1 Do For I = NUM To 1 Step 1 FACT FACT * I 4. [Impresso do resultado (N!)] Print (O Factorial de ,N, igual a ,FACT) 5. [Termina] Exit

3.1.1. Instruo de atribuio


A instruo de atribuio representada atravs do smbolo que colocado direita da varivel que recebe o valor da atribuio (ex.: FACT 1). Ter ateno a diferena entre o sinal de atribuio e o smbolo = que utilizado como operador relacional. Numa instruo de atribuio pode constar variveis, constantes, operadores e outras funes matemticas como indica o prximo exemplo. Exemplo 6 VAR 12 / 7 FACT FACT * NUM N MOD (NUM1,NUM2)

15

Programao I

Universidade Fernando Pessoa

3.1.2. Leitura e escrita de dados


Perante a notao algortmica possvel obter (ou ler) valores de variveis, assim como escrever (ou imprimir) os valores dessas variveis atravs de instrues de leitura (entrada de dados) e instrues de escrita (sada de dados). Leitura de dados Sintaxe: Read (<nome da variavel>) Exemplo 7 Read (N_ALUNO) Exemplo 8 Read (N_ALUNO) Do For I = 1 to N_ALUNO Read (NOME_ALUNO [ I ]) Sada de dados Sintaxe: Write (<nome da varivel>) ou Write (<texto>) ou Write (<nome da varivel>, texto ) ou Write (texto, <nome da varivel 1>, texto <nome da varivel 2>, texto, ...) Exemplo 9 Write (N_ALUNO) Write (s texto ...) Write (O nmero de alunos igual a , N_ALUNO) Write (O nmero ,N_ALUNO, refere-se ao n. de alunos da disciplina de programao) Exemplo 10 Read (N) Do For I = 1 to N Write (NOME_ALUNO [ I ])

16

Programao I

Universidade Fernando Pessoa

3.1.3. Estrutura condicional


If Statement If ... Then Else (Se Ento Seno) Esta declarao representa um teste de condio lgica (se ... ento ... seno) na qual executado um conjunto de instrues consoante a condio especificada for verdadeira ou falsa. A declarao If pode ter uma das seguintes formas: 1. If Condition Then ___________ ___________ 2. If Condition Then ___________ ___________ Else ___________ ___________ A seguir clausula Then um conjunto de instrues executado no caso da condio ser verdadeira. Caso contrrio (Else Seno), ser executado o conjunto de instrues a seguir clausula Else. Exemplo 11 If N > 10 Then X (X + 15) / 2 Print (X) Exemplo 12 If N > 10 Then X (X + 15) / 2 Print (X) Else X X * 5 Print (X)

17

Programao I

Universidade Fernando Pessoa

A declarao (If ... Then ... Else) pode conter um conjunto de instrues devidamente indentadas (exemplo 9) de modo a definir um conjunto mais extenso de estruturas condicionais. Exemplo 13 Read (X,Y) Then X (X + 15) / 2 If X > Y Then Print (X - Y) Else Print (Y - X) Else X X * 5 If X > Y/2 Then Print (X) Print (X/Y) Else Print (X*Y)

3.1.4. Instrues de repetio


Existem trs tipos de instrues que permitem controlar iteraes ou ciclos de processamento. As instrues de repetio podem ter uma das seguintes formas: 1. Do While <logical condition> 2. Repeat until <logical condition> 3. Do For INDEX = <numerical sequence> Do While (Fazer enquanto ...) A instruo Do While utilizada quando necessrio repetir um conjunto de passos em funo de uma determinada expresso lgica. Os referidos passos so repetidos enquanto a expresso lgica for verdadeira, ou seja, o ciclo de processamento termina quando a condio se tornar falsa. Sintaxe: Do While <logical condition> ___________ ___________

18

Programao I

Universidade Fernando Pessoa

Exemplo 14 Read (Z) X 15 Do While Z >= 135 XX5 Z (X *4) / 3 Print (X,Z) Repeat Until (Repetir at ) A instruo Repeat Until utilizada quando necessrio repetir um conjunto de passos em funo de uma determinada expresso lgica. Os referidos passos so repetidos at a expresso lgica se tornar verdadeira, ou seja, o ciclo de processamento termina quando a condio se tornar verdadeira. Sintaxe: Repeat Until <logical condition> ___________ ___________ Exemplo 15 1 [Inicializaes] K1 2. [Repetir at atingir o aluno 75] Repeat Until K > 75 Write (NOME_ALUNO [ K ]) KK+1

19

Programao I

Universidade Fernando Pessoa

Do For (Fazer para ) A instruo Do For utilizada quando necessrio repetir um conjunto de passos um determinado nmero de vezes. Sintaxe: Do For INDEX = N1 to N2 Step P ___________ ___________ INDEX indica o ndice que incrementado em cada ciclo de processamento. N1 e N2 referem dois nmeros inteiros representativos do intervalo inferior e superior da sequncia de nmeros a executar. A clausula Step determina o incremento na sequncia numrica. Por defeito, o Step tem valor 1. Exemplo 16 X 10 Do For I = 1 to 70 XX+5 Print (X) Exemplo 17 Read (Y) Do For J = 10 to 100 Step 10 Y Y + 25 Print (Y)

20

Programao I

Universidade Fernando Pessoa

Exemplo 18 X0 Do For I = 150 to 5 Step 5 Read (A[ I ]) X X + A[ I ] Write (X)

3.1.5. Operaes e Expresses Aritmticas


A notao algortmica inclui operaes e funes matemticas que permitem efectuar variados clculos aritmticos. Dois tipos de valores numricos so considerados: reais e inteiros. As regras de precedncia tm por base as regras padro das expresses matemticas. Deste modo, temos por ordem decrescente, os parntesis - ( ) - a exponenciao (), a multiplicao (*), a diviso (/), a adio (+) e finalmente a subtraco (-). Determinadas funes matemticas podem ser utilizadas na definio de expresses computacionais, tais como: mod(M,N) funo que retorna o resto da diviso de M por N. int(NUM) funo que retorna o parte inteira de um nmero real. sqr(NUM) funo que retorna a raiz quadrada de um nmero inteiro ou real. Exemplo 19 X (A+B) 3 (A-A/3)*B N mod(20,6) RNUM sqr(NUM)

3.1.6. Operadores e operaes relacionais


Os operadores matemticos relacionais (=, <, >, , , ) tm um conjunto de smbolos correspondentes a nvel computacional. A nvel computacional temos respectivamente os seguintes operadores relacionais: =, <, >, <=, >=, e <>. As expresses lgicas representam relaes entre valores do mesmo tipo de dados.

21

Programao I

Universidade Fernando Pessoa

O resultado da avaliao de uma expresso lgica pode ter um de dois valores possiveis: verdadeiro (true) ou falso (false). Exemplo 20 A 20 ( a varivel A tem atribudo o valor numrico 20) 1. A <= 10 / 3 + 5 2. A <> A + 10 A relao 1 tem valor falso e a relao 2 tem valor verdadeiro.

3.1.7. Operadores e operaes lgicas


A notao algortmica tambm inclui os seguintes operadores lgicos: Operador
Negao Conjuno Disjuno

Notao
not and or

Os operadores lgicos so utilizados em conjunto com os operadores relacionais e aritmticos. Deste modo, considerada a seguinte ordem de precedncia entre operadores.

Precedncia
1 2 3 4

Operador
Parntesis Aritmtico Relacional Lgico

Considere o seguinte exemplo assumindo que a varivel NUM tem o valor 1. 1. (NUM < 2) and (NUM < 0) 2. (NUM < 2) or (NUM < 0) 3. not(NUM < 2) As expresses 1,2,3 tm valores falso, verdadeiro, e falso respectivamente. A prxima seco prope um conjunto de algoritmos e respectiva resoluo.

22

Programao I

Universidade Fernando Pessoa

3.2. Algoritmos propostos

Algoritmo MAX_DIVISOR_COMUM Este algoritmo permite calcular o mximo divisor comum mdc(m,n) entre dois nmeros inteiros. 1. [Leitura dos valores (conjunto de valores vlidos: inteiros, 0)]
Read (M,N) If M < N Then MIN M Else MIN N

2. [Inicializaes]
MDC MIN FLAG Do While FLAG = R1 mod(M,MDC) R2 mod(N,MDC) If R1 = and R2 = Then FLAG 1 Else MDC MDC - 1

3. [Escrever o valor do mximo divisor comum]


Write(O mximo divisor comum de ,M,e,N, igual a ,MDC)

4. [Termina]
Exit

23

Programao I

Universidade Fernando Pessoa

Algoritmo MAIOR_VALOR_VECTOR
Este algoritmo determina o maior valor de um conjunto de valores referenciados no vector A. O vector A contem N elementos. O resultado a colocado na varivel MAX. 1. [Verificar se o vector contem elementos] If N < 1 Then Write(Vector vazio) Exit 2. [Inicializaes: assumir inicialmente A[1] como o maior elemento do vector] MAX A[1] I2 3. [Verificar todos os elementos do vector] Do While I <= N If MAX < A[I] Then MAX A[I] II+1 3. [Imprimir o maior elemento do vector A] Write(O maior elemento do vector ,MAX) 4. [Termina] Exit

Algoritmo SOMA_MDIA
Este algoritmo determina o somatrio e a mdia de um conjunto de valores referenciados no vector A. O vector A contem N elementos. 1. [Verificar se o vector contem elementos] If N < 1 Then Write(Vector vazio) Exit 2. [Inicializaes] ACUM 0 MED 0 3. [Verificar todos os elementos do vector] Do For I = 1 to N ACUM = ACUM + A[I] 4. [Determina a mdia de valores do vector] MED ACUM / N 4. [Imprime os resultados] Write(O somatrio igual a ,ACUM, e a mdia igual a ,MED) 5. [Termina] Exit
24

Programao I

Universidade Fernando Pessoa

Algoritmo DIAGONAL PRINCIPAL


Este algoritmo efectua a leitura de uma matriz quadrada com N linhas e colunas. A matriz constituda por nmeros inteiros. Determinar os seguintes valores: a) O somatrio da diagonal principal da matriz. b) O valor minimo da diagonal principal. c) O valor mximo da diagonal principal.

1. [Leitura da matriz quadrada] Read (N) Do For I = 1 to N Do For J = 1 to N Read (M[I,J]) 2. [Inicializaes] SOMA MIN M[1,1] MAX M[1,1] 3. [Tratar os elementos da primeira diagonal da matriz] Do For I = 1 to N [determina o somatrio] SOMA SOMA + M[I,I] [determina o valor minimo] If M[I,I] < MIN Then MIN M[I,I] [determina o valor maximo] If M[I,I] > MAX Then MAX M[I,I] 3. [Imprimir os resultados] Write(O somatrio dos elementos da primeira diagonal da matriz igual a ,SOMA) Write(O menor elemento da primeira diagonal da matriz igual a ,MIN) Write(O maior elemento da primeira diagonal da matriz igual a ,MAX) 4. [Termina] Exit

25

Programao I

Universidade Fernando Pessoa

Pesquisa e ordenao de vectores a) Ordenao por seleco Algoritmo ORDENAO VECTOR Dado um vector K com N elementos, este algoritmo ordena o vector por ordem crescente.
1. [Seleco sucessiva dos valores at ao ndice N-1] Do For PASS = 1 To N - 1 MIN PASS 2. [Obter o ndice do valor mnimo] Do For I = PASS + 1 To N If K[I] < K[MIN] Then MIN I 3. [Trocar os valores] If MIN <> PASS Then TEMP K[PASS] K[PASS] K[MIN] K[MIN] TEMP 4. [Termina] Exit

A prxima figura ilustra a forma como um determinado vector ordenado atravs da seleco e troca sucessiva de valores. Considere o seguinte vector K[ ] de nmeros inteiros e as respectivas passagens at obter a ordenao dos seus elementos.
1 2 3 4 5

K[ ]

5 1 1 1 1

3 3 2 2 2

7 7 7 3 3

2 2 3 7 5

1 5

1 Passagem

2 Passagem

5
3 Passagem

5 7
4 Passagem (vector ordenado)

Figura 5: Ordenao dos elementos de um vector por seleco

26

Programao I

Universidade Fernando Pessoa

b) Pesquisa linear Os prximos trs algoritmos representam trs verses para a resoluo do mesmo problema: pesquisar a existncia de um dado elemento num determinado vector. Pesquisa linear de elementos de um vector (verso 1.0) Algoritmo PESQUISA_LINEAR_V1.0 Dado um vector K com N elementos (N 1), este algoritmo permite verificar a existncia de um dado elemento (valor) representado pela varivel X. 1. [Iniciar a bandeira]
FLAG

2. [Pesquisar sucessivamente cada elemento do vector]


Do For I = 1 to N If K[I] = X Then Write (O valor ,X, foi encontrado na posio ,I) FLAG 1

3. [Verificar o sucesso da pesquisa]


If FLAG = Then Write(O valor ,X, no foi encontrado)

4. [Termina]
Exit

NOTA: esta verso pouco eficiente, na medida em que necessrio efectuar N testes at encontrar um determinado elemento do vector. Os prximos algoritmos (verso 1.1. e 1.2.) apresentam uma forma mais eficiente de resolver este problema.

27

Programao I

Universidade Fernando Pessoa

Algoritmo PESQUISA_LINEAR_V1.1 1. [Inicializaes]


I1 FLAG

2. [Pesquisar sucessivamente cada elemento do vector]


Do While I <= N AND FLAG = If K[I] = X Then Write (O valor ,X, foi encontrado na posio ,I) FLAG 1 II+1

3. [Verificar o sucesso da pesquisa]


If FLAG = Then Write(O valor ,X, no foi encontrado)

4. [Termina]
Exit

Algoritmo PESQUISA_LINEAR_V1.2 1. [Inicializaes]


I1

2. [Pesquisar sucessivamente cada elemento do vector]


Do While I <= N AND K[I] <> X II+1

3. [Verificar o sucesso da pesquisa]


If K[I] = X Then Write (O valor ,X, foi encontrado na posio ,I) Else Write(O valor ,X, no foi encontrado)

4. [Termina]
Exit

28

Programao I

Universidade Fernando Pessoa

Algoritmo VECTORES_ALUNOS_INFO Este algoritmo processa a informao relativa a um conjunto de alunos de um determinado estabelecimento de ensino. Este algoritmo efectua os seguintes procedimentos:
a) Leitura dos vectores representativos do nmero, nome, curso e turma de N alunos. b) Ordenao dos alunos e respectivos vectores por ordem alfabtica (crescente) do nome do aluno. c) Verificar a existncia de um determinado aluno. A pesquisa efectuada pelo nmero do aluno.
1. [Leitura de valores] Read (N) Do For I = 1 To N Read(NUM[I], NOME[I], CURSO[I], TURMA[I]) 2. [Ordenao dos alunos por nome] Do For PASS = 1 To N - 1 MIN PASS Do For I = PASS + 1 To N If NOME[I] < NOME[MIN] Then MIN I If MIN <> PASS Then TEMP NOME[PASS] NOME[PASS] NOME[MIN] NOME[MIN] TEMP [trocar os outros elementos dos restantes vectores] TEMP NUM[PASS] NUM[PASS] NUM[MIN] NUM[MIN] TEMP TEMP CURSO[PASS] CURSO[PASS] CURSO[MIN] CURSO[MIN] TEMP TEMP TURMA[PASS] TURMA[PASS] TURMA[MIN] TURMA[MIN] TEMP 2. [Pesquisa por nmero de aluno] Read(NALUNO) I1 Do While I <= N AND NUM[I] <> NALUNO I=I+1 If NUM[I] = NALUNO Then Write(O aluno existe) Else Write(O aluno no existe) 2. [Termina] Exit

29

Programao I

Universidade Fernando Pessoa

3.3. Diagramas de Fluxo (Fluxogramas)


Um diagrama de fluxo representa de uma forma grfica as instrues e respectivas operaes includas em determinado algoritmo. O objectivo principal de um diagrama de fluxo (ou fluxograma) facilitar a compreenso e desenvolvimento de algoritmos para a resoluo de problemas atravs da utilizao e composio de smbolos grficos.

3.3.1. Notao grfica


De modo a construir um fluxograma necessrio conhecer a notao grfica a utilizar e respectivo significado. A prxima tabela apresenta os smbolos (e respectivo significado) utilizados na construo de fluxogramas.

Smbolo

Significado Inicio / fim do algoritmo

Leitura e escrita (entrada e sada) de dados

Instrues de atribuio

Estrutura condicional

3.3.2. Fluxogramas vs. Estruturas de controlo


As estruturas de controlo (condicional e ciclos) apresentadas anteriormente podem ser representadas graficamente conforme os seguintes diagramas.

30

Programao I

Universidade Fernando Pessoa

ESTRUTURA If ... Then ... Else


IF C THEN A IF C THEN A ELSE B

False C

True

False C

True

Figura 6: Representao em fluxograma da estrutura If ... Then ... Else

ESTRUTURA Do While
WHILE C DO A

False C

True A

Figura 7: Representao em fluxograma da estrutura de controlo Do While

31

Programao I

Universidade Fernando Pessoa

ESTRUTURA Repeat Until


REPEAT A UNTIL C

True C

False

Figura 8: Representao em fluxograma da estrutura de controlo Repeat Until

ESTRUTURA For ... To


For I = X To Y Step P

IX

I <= Y I >= Y (P<0)

False

True A

II+P

Figura 9: Representao em fluxograma da estrutura de controlo Do For

32

Programao I

Universidade Fernando Pessoa

3.3.3. Algoritmo em pseudocdigo / Fluxograma


Considere os seguinte algoritmo em pseudocdigo e o respectivo fluxograma.

Algoritmo SOMA_VALORES Este algoritmo determina o somatrio de um determinado nmero de valores numricos a introduzir pelo utilizador.

Pseudocdigo
1. [Leitura de dados (nmero de valores)] Read (N de valores a somar: , N) 2. [Inicializao] SOMA 2. [Ciclo para efectuar o somatrio] Do For I = 1 To N Read (Introduza o N:, NUM) SOMA SOMA + NUM 3. [Imprimir o resultado] Write (O somatrio igual a , SOMA) 4. [Termina] Exit

Fluxograma
Inicio

SOMA 0

I1

False I <= N

True
NUM

SOMA SOMA + NUM

SOMA

Fim

33

Programao I

Universidade Fernando Pessoa

4. Prova e Teste de Algoritmos


A prova e teste de algoritmos e programas permite seguir a execuo de um algoritmo (ou programa) passo a passo e verificar a evoluo de todas as variveis. Este processo apresentado atravs de uma tabela em que deve constar todas as variveis, testes lgicos efectuados, entrada de dados e sada de resultados. Seguimento do Algoritmo Mximo Divisor Comum (mdc) para M=8 e N=20

M 8

N 20

MIN

mdc

R1

R2

FLAG=

R1=R2

Entrada/Sada Leia(8,20)

8 8 0 4 7 1 6 6 2 2 5 3 0 4 0 0 F V Escreve(4) V F V F V F V F

O seguimento (ou traagem) de algoritmos pode detectar a presena de erros mas no pode comprovar a sua ausncia (exceptuando em casos simples).

34

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