You are on page 1of 115

Algoritmos

CET ugi_@hotmail.com
1

OBJECTIVOS DA CADEIRA
Fornecer aos alunos os conhecimentos bsicos de algoritmia, capacitando-os para o desenho e documentao dos algoritmos de suporte a programas informticos e/ou procedimentos genricos que venham a ser necessrios. Adicionalmente os alunos ficaro capacitados com conhecimentos gerais de programao conducentes implementao de algoritmos simples recorrendo linguagem de programao

PROGRAMA DA CADEIRA
Conceitos bsicos Problemas computacionais e consequente organizao de um computador e necessidades de processamento de dados. Anlise do problema. Tcnicas de programao. Tipos de dados. Algoritmos. Conceitos avanados Desenvolvimento de um algoritmo. Estruturas de repetio, seleco simples e mltipla. Estruturas de dados pilhas, listas de espera, listas de prioridade, rvores.
3

PROGRAMA DA CADEIRA
Ferramentas de desenho Fluxogramas. Diagramas de Fluxo de Dados. Algoritmos elementares Manipulaes de dados inseres, remoes e buscas. Algoritmos de ordenao quicksort, shellsort, bubblesort e heapsort. Manipulao de strings algoritmos Knuth-Morris-Pratt e BoyerMoore. Manipulao de matrizes mono, bi e multi-dimensionais.

PROGRAMA DA CADEIRA
Programao Estruturao de um programa. Programao por eventos. O ambiente de desenvolvimento Visual Studio. A linguagem de programao C#.

BIBLIOGRAFIA
Baase, S. & Gelder, A. V. Computer Algorithms Introduction to Design & Analysis. Addison-Wesley Neto, J. P. (2004). Programao, Algoritmos e Estrturas de Dados. Lisboa: Escolar Editora Salvetti, D. D. & Barbosa, L. M. Algoritmos. Makron Books

SISTEMAS DE INFORMAO
Sistema de Informao um sistema que rene, guarda, processa e faculta informao relevante para a organizao (...), de modo que a informao acessvel e til para aqueles que a querem utilizar, inclundo gestores, funcionrios, clientes, (...). Um Sistema de Informao um sistema de actividade humana (social) que pode envolver ou no, a utilizao de computadores.
[Buckingham, et al. 1978]

Sistema de Informao uma combinao de procedimentos, informao, pessoas e Tecnologias de Informao, organizadas para o alcance de objectivos de uma organizao.
[Alter 1992] 7

TI-TECNOLOGIAS DE INFORMAO
Tecnologias de Informao, so o conjunto de equipamentos e suportes lgicos (hardware e software) que permitem executar tarefas como aquisio, transmisso, armazenamento, recuperao e exposio de dados.
[Alter 1992]

Exemplos de T I Hardware Software de sistema Software aplicacional Comunicaes Ferramentas de desenvolvimento


8

DADOS VS. INFORMAO


Dados, so elementos primitivos, com os quais e atravs de algum tipo de processamento, se obtm a informao.

DADOS

PROCESSAMENTO

INFORMAO

GESTO DO SISTEMA DE INFORMAO

DADOS INFORMAO

TI

GESTO DA INFORMAO

OUTROS RECURSOS

GESTO DO SISTEMA DE INFORMAO


10

GESTO DO SISTEMA DE INFORMAO


Gesto de Sistemas de Informao a gesto do recurso informao e de todos os recursos envolvidos manuteno do SI.
[Amaral, Varajo 2000]

no planeamento , desenvolvimento, explorao e

Investir em TI no significa investir nos Sistemas de Informao

11

EXERCCIO: GESTO DE STOCKS


Contexto Empresa que no pretende adquirir computadores tem a finalidade de automatizar e normalizar a gesto do armazm. Todos os procedimentos tm de ser executados manualmente no recorrendo a quaisquer meios informticos.

Perguntas a responder Como controlar os stocks existentes na empresa? Como controlar as entradas e saidas dirias? Como controlar as encomendas a efectuar? Como controlar os monos (produtos sem movimento mais de 90 dias)?

12

ALGORITMOS
Algoritmo uma sequncia ordenada e finita de operaes bem definidas, que partido de informao fornecida previamente, produz, num tempo finito, um resultado que a soluo de um determinado problema, ou em alternativa a indicao de que a soluo no pode ser obtida.

Caracteristicas Principais [Horowitz e Sahni 82]: Limitao Definio Entradas Sadas Eficincia
13

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Vantagens De universal entendimento Desvantagens Pode gerar Ambiguidades Exemplo: Mquina de calcular simples para a execuo das operaes de x, :, + e Verificar se a mquina est ligada, seno ligar Limpar memria do visor Recolher 1 operando Recolher operao Recolher 2 operando Efectuar clculo Apresentar Resultado
14

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Vantagens Visual e Simples

Desvantagens Inadequado para problemas complexos

15

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas:
Incio de fluxograma Aco Aco Estado com espera Estado sem espera

Condio

Deciso

Fluxo Fim de fluxograma n Elemento de ligao


16

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Exemplo:

Recolher 1 Operando

Recolher Operao

Recolher 2 Operando

Efectuar Clculo

Apres. Resultado

17

EXERCCIO: Mquina de calcular


Pretende-se desenvolver um programa para a realizao de operaes aritmticas.
Recolha 1 Operando
Operador

Recolha de Operador

tem 2 Operando

Recolha 2 Operando Efectuar calculo

Apresentar resultado N

Deseja sair

Exerccio: Multiplicao
Recolhe dois valores do utilizador e efectua a sua multiplicao recorrendo apenas operao de soma.

19

Exerccio: Multiplicao
Multiplicao usando apenas somas
Recolha X Recolha Y

R=0

X=X-1

X>0

Apresentar R

R=R+Y

20

Exerccio: Multiplicao
Troca do maior pelo menor (reduzindo o nmero de ciclos a efectuar)
Recolha X Recolha Y

X=Y

Aux=X

X>Y

N Y=Aux R=0

X=X-1

X>0

Apresentar R

R=R+Y

21

EXERCCIO: Factorial
Pretende-se desenvolver um programa que dado um determinado nmero clcule o seu factorial F = N! = N x (N-1) x (N-2) x x (N-(N-1)) O factorial de um nmero obtido pela sucessiva multiplicao do nmero por ele prprio diminuido de uma unidade, at atingir a unidade. definio corrente matemtica que um factorial s pode ser clculado para nmeros inteiros positivos, o que no sendo explicito no enunciado condiciona o nosso algoritmo a nvel da validao dos dados.

EXERCCIO: Factorial
F = N! = N x (N-1) x (N-2) x x (N-(N-1))
Recolha X

X <= 0

msg erro

N R=1 R=R*X
X>1

Apresentar R

S X=X-1

EXERCCIO: Signos
Pretende-se dada uma certa data de nascimento indicar o signo correspondente. No contexto deste problema consideraremos que existem 12 signos num ano, sendo o primeiro entre 15 de Janeiro e 14 de Fevereiro, o segundo entre 15 de Fevereiro e 14 de Maro, , o dcimo primeiro entre 15 de Novembro e 14 de Dezembro e o dcimo segundo entre 15 de Dezembro e 14 de Janeiro.
24

EXERCCIO: Signos
Recolher ano Msg erro 1 N
1<=D<=31

Recolher ms Msg erro 2 N

S
1<=M<=12

Recolher dia

S
D<=31 M{1,3,5,7, 8,10,12}

N
D<=30 M{4,6,9,11}

N Msg erro 3 N
D<=29 M=2 A=bsxt

25

EXERCCIO: Signos
1 N S

D>=15

Signo M-1=0

Signo M-1

Signo 12

Signo M

26

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Vantagens algoritmo

Visual e simples, pelo que

facilita o entendimento global do

Facilita a representao do encapsulamento e da recursividade em relao ao fluxograma

Desvantagens Inadequado para problemas complexos

27

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas (mais comuns):


Processo

Deciso

Iterao

28

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas (mais comuns):

Iterao

Deciso Mltipla

29

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Exemplo:

Recolher 1 Operando Recolher Operao Recolher 2 Operando Efectuar Clculo Apresentar Resultado

30

EXERCCIO: Linguagem natural


Clculo do zero da equao ax+b=0

Incio de programa Ler a, b Se a diferente de 0 ento


calcula o valor de x (ax+b=0 <=> x=-b/a) imprimir valor de x

Se no
imprimir No h zero

Fim de programa

EXERCCIO: Fluxograma
Clculo do zero da equao ax+b=0
Ler a Ler b

No h 0

a <> 0

x=-b/a

Mostra x

EXERCCIO: Pseudo-cdigo
Clculo do zero da equao ax+b=0

1. Incio de programa 2. ler a, b 3. se a 0 ento


x=-b/a imprimir valor do zero x

seno
imprimir No h zero

fim de se

4. Fim de programa

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Vantagens Permite a representao de um algoritmo, tanto ao seu nvel mais abstracto ou ao seu nvel mais especfico. Simplicidade, Legibilidade e Exactido.

Desvantagens Pode esconder os problemas de eficincia face a linguagem de mais baixo nvel.

34

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas:
START Identificao do ponto inicial do algoritmo END Identificao do ponto final do algoritmo INPUT <varivel> Primitiva para recolha de dados do utilizador OUTPUT <varivel> Primitiva para apresentao de dados ao utilizador SET <varivel> = <expresso> Atribuio do resultado da expresso varivel indicada
35

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas (continuao):
IF <condio> THEN
<instrues a executar se condio verdadeira>

ELSE
<instrues a executar se condio falsa>

END IF

36

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas (continuao):
WHILE <condio>
<instrues a executar enquanto a condio for verdadeira>

END WHILE

37

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas (continuao):
DO
<instrues a executar enquanto a condio for verdadeira>

WHILE <condio>

38

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas (continuao): FOR <condio inicial> TO <condio final> [STEP <incremento>


<instrues a executar enquanto a condio final for verdadeira>

END FOR

39

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Primitivas (continuao):
FUNCTION <nome da funo> (parmetros da funo)
<instrues da funo>

END FUNCTION

CALL <nome da funo> (parmetros da funo)


VAR <nome da varivel> <tipo da varivel> [,] CONST <nome da const.> <tipo da const.> [,] STRUCT <nome da varivel> <tipo da varivel> [,] [<nome da varivel> <tipo da varivel>] END STRUCT
40

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Variveis:
INTEGER
inteiro

DECIMAL(n,m)
decimal com n dgitos dos quais m direita da virgula, por exemplo DECIMAL(4,1) poder representar nmeros do tipo com valores entre 999,9 e +999,9

DATE
data com qualquer formato, por exemplo yyyy-MM-dd

TIME
hora com qualquer formato, por exemplo hh:mm:ss

41

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Variveis (continuao):
STRING(n)
cadeia de caractres com comprimento n maior que 0, um caso particular ser o STRING(1)

CHAR
letra, correspondente a STRING(1)

LONG STRING
cadeia de caractres sem comprimento definido

BOOLEAN
dado s com duas ocorrncias, verdadeiro (TRUE) e falso (FALSE)

POINTER
tipo especial de varivel que utilizado para apontar para outras variveis, tipicamente utilizado nas listas e rvores

42

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Exemplo: Mquina de calcular


START DECIMAL(10,2) Op1 DECIMAL(10,2) Op2 Char Oper DECIMAL(10,2) R

OUTPUT Introduza o 1 operando INPUT Op1 OUTPUT Introduza o operador INPUT Oper IF Oper necessita 2 operador THEN OUTPUT Introduza o 2 operando INPUT Op2 END IF CALL EfectuarCalculo (Op1, Oper, Op2, R) OUTPUT O RES. da operao :, R END
43

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Exerccio: Factorial (WHILE)


START DECIMAL(10,0) X INT R

OUTPUT Introduza o valor de N! INPUT X IF X<=0 THEN OUTPUT Mensagem de Erro ELSE R=1 WHILE X>=1 R=R*X X=X-1 END WHILE OUTPUT O factorial + R END IF END
44

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Exerccio: Factorial (DO)


START DECIMAL(10,0) X INT R

OUTPUT Introduza o valor de N! INPUT X IF X<=0 THEN OUTPUT Mensagem de Erro ELSE R=1 DO R=R*X X=X-1 WHILE X>1 OUTPUT O facturial , R END IF END
45

FORMAS DE REPRESENTAO 1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo

Exerccio: Factorial (FOR)


START DECIMAL(10,0) X INT R

OUTPUT Introduza o valor de N! INPUT X IF X<=0 THEN OUTPUT Mensagem de Erro ELSE R=1 FOR INT i=X TO i=1 STEP -1 R=R*i END FOR OUTPUT O factorial + R END IF END

46

OUTRAS NOTAES
for i := 1,...., n do for j := 1,...., n do cij := 0 for k := 1,...., n do cij := cij + aik bkj

Szwarcfiter e Markenzon ( [SM94] )

for i 1 at n do for j 1 at n do cij 0 for k 1 at n do cij cij + aik bkj

Terada ( [Ter91] )

OUTRAS NOTAES
for i for j c(i,j) for k c(i,j) 1 to n by 1 do 1 to n by 1 do 0 1 to n by 1 do c(i,j) + a(i,k) b(k,j)

Horowitz e Sahni ( [HS82] )

1 set i 1 2 set j 1 set c[i,j] 0 3 set k 1 c[i,j] c[i,j] + a[i,k] b[ if k <= n then go to 3 if j <= n then go to 2 if i <= n then go to 1

Knuth ( [Knu73] )

EXERCCIOS ESTRUTURAS DE REPETIO < WHILE >


TAMANHO RELATIVO DE DOIS NMEROS Para dois nmeros inteiros positivos, determinar quantas vezes o primeiro divide exactamente o segundo. Se o primeiro no divide o segundo, ento o nmero de vezes zero. Implementar um algoritmo para a resoluo do problema apresentado, atravs de um fluxograma e em pseudo-cdigo.

49

EXERCCIOS ESTRUTURAS DE REPETIO < DO >


MXIMO DE UM CONJUNTO DE N ELEMENTOS Elabore um algoritmo que determine o valor mximo de um conjunto de N nmeros inteiros positivos introduzidos pelo utilizador. O conjunto de valores terminado com o valor zero. Implementar um algoritmo para a resoluo do problema apresentado, atravs de um fluxograma e em pseudo-cdigo.

50

EXERCCIOS ESTRUTURAS DE REPETIO < FOR >


SEQUNCIA DE FIBONACCI Partindo-se de um nico casal de coelhos recm-nascidos e supondo que um casal se torna frtil aps dois meses de vida e, a partir de ento, produz um novo casal a cada ms e que os coelhos nunca morrem , a quantidade de casal de coelhos aps n meses dada pelo n-simo termo da sequncia abaixo. Esta sequncia caracteriza-se pela seguinte formula recorrente: F[k] = F[k-2] + F[K-1], com F[0] = 1 e F[1] = 1
51

EXERCCIO: MQUINA DE BILHETES


Pretende-se desenvolver um algoritmo que faculte a venda automtica de bilhetes de comboio com base nas definies apresentadas de seguida. Apresentar o respectivo fluxograma e pseudo-cdigo. S existem quatro destinos e o preo dos bilhetes de X; 1.5X; 2.4X e 4X respectivamente. O valor X definido a 1 de Janeiro de cada ano sendo fixo ao longo de todo o ano; possvel a venda de bilhetes para crianas sendo neste caso o valor reduzido a metade; Por opo o utente pode adquirir bilhetes de ida e volta; A mquina dever dar trocos em Euros mediante a entrega de notas de 50 , 20 , 10 , e 5 e moedas de 2 , 1 , 50 c, 20 c, 10 c e 5 c. Os trocos inferiores a 5 c. no so entregues.

ARRAYS
ARRAY Tabela unidimensional, que permite guardar um conjunto de variveis todas com mesmo tipo e aceder a cada uma delas atravs de um index.

ARRAYS
Ex: Representar numa tabela de tamanho n o conjunto de valores T {3,12.5, 10, 4, 3}
array 3 12. 5 10 4.2 3 0 0 0

...

n-2

n-1

Inde x

1 elemento Ou seja: T[0] = 3 T[1] = 12.5 T[2] = 10 T[3] = 4.2 T[4] = 3 ... T[n-2] = 0 T[n-1] = 0

ltimo elemento

EXERCCIO: MQUINA DE BILHETES


Optimizao: Utilizar um Array com as vrias notas/moedas que a mquina comporta de forma a optimizar o algoritmo desenhado
M[0] M[1] M[2] M[3] M[4] 50 20 10 5 2 M[5] M[6] M[7] M[8] M[9] 1 50 c 20 c 10 c 5c

Ou seja uma varivel array M[k] de tamanho 10, onde kvaria de 0 a 9

EXERCCIO MQUINA DE BILHETES OPTIMIZADA


BOAS PRTICAS
Lista de Grandezas Constantes e Variveis

Grandezas X PB D TP TV T M[] k

Descrio Valor base do bilhete Preo do bilhete Destino Tipo do bilhete Tipo da Viagem Troco Array com notas/moedas utilizadas no troco ndice utilizado no array M[]

56

CONSTANTES E LITERAIS
Constante Grandeza que se mantm invarivel durante a exec. de um algoritmo (programa). e.g.: So constantes, no Algoritmo da mquina de venda de bilhetes, X e M[]. Em C# se quisermos definir uma constante para o valor de Pi, fazemos, Const double PI = 3.1415926535

VARIVEIS
Variveis Grandezas que variam ao longo da execuo do algoritmo (programa) e.g.: So variveis, no Algoritmo da mquina de venda de bilhetes, PB, T, D, etc. Em C#, int i = 0 while ( i<=10){ Console.WriteLine(O valor de x {0}, i); i = i + 1; }

LITERAIS
Literal Designamos por literal um valor, quando este atribudo a uma varivel e.g.: int x = 15 int k = 0x0f string saudacao = Bom dia Em C# os valores literais podem ser indicados em base decimal ou hexadecimal

TIPOS SIMPLES DE DADOS


Tipos Numricos Tipo sbyte byte short ushort int uint long ulong Valores Permitidos no intervalo [a, b] Inteiros entre -128 e 127 Inteiros entre 0 e 255 Inteiros entre -32768 e 32767 Inteiros entre 0 e 65535 Inteiros entre -2147483648 e 2147483647 Inteiros entre 0 e 4294967295 Inteiros entre -9223372036854775808 e 9223372036854775807 Inteiros entre 0 e 18446744073709551615

TIPOS SIMPLES DE DADOS


Tipo float double decimal Min m 0 0 0 Mx m 224 253 296 Min e -149 -1075 -26 Mx e 104 970 0 Val Min aprox. 1.5x10 -45 5.0x10 -324 1.0x10 -28 Val Mn aprox. 3.4x10 -38 1.7x10 308 7.9x10 28

Nota: Com float e double armazenados na forma m x 2e e decimal armazenado na forma m x 10e

Outros Tipos Simples Tipo char bool string Valores Permitidos Carcter nico em Unicode, arm como inteiro entre 0 e 65535 Valor Boleano, Verdadeiro (True) ou Falso (False) Uma sequncia de caracteres

EXERCCIO MQUINA DE BILHETES


PSEUDO-CDIGO
Abordagem Macro Tratamento Tipo Destino Tratamento Tipo Bilhete Tratamento Tipo Viagem Tratamento do Troco

START VAR DECIMAL(10,2) PB

CALL RecolhaDados() CALL CalculaValor() OUTPUT O preo do bilhete : , PB CALL RecolhaPagamento() CALL CalculaTroco() CALL EntregaBilhete() END
62

EXERCCIO: Arrays
Elabora um algoritmo que imprima todos os valores de um array. Elabora um algoritmo que some todos os elementos de um array unidimencional. Elabora um algoritmo que some todos os elementos de um array bidimencional. Dado um determinado array, encontra o ndice do maior e do menor valor.
63

EXERCCIO: Ordenao
Elabora um algoritmo que ordene os valores de um array.

64

ALGORITMO de ORDENAO
Quick sort Bubble sort Merge sort Selection sort Heapsort Insertion sort Shell sort Radix sort Gnome sort Count sort Bogosort Bucket sort Cocktail sort

Quicksort
Mtodo de ordenao muito rpido e eficiente Possui uma complexidade ptima O(n.log(n)) para o caso mdia ao invs de O(n2) Inventado por C.A.R. Hoare em 1960. Foi publicado em 1962 aps uma srie de alteraes. Funcionamento:
Divide a tarefa de ordenar o vector em dois problemas de ordenao menores; Os problemas menores so ordenados de forma independente; E os resultados so combinados para produzir a soluo do problema todo; Os dois arrays so processados de modo a distribuir os menores valores para um array e os maiores para o outro.

65

ALGORITMO de ORDENAO
Quick sort Bubble sort Merge sort Selection sort Heapsort Insertion sort Shell sort Radix sort Gnome sort Count sort Bogosort Bucket sort Cocktail sort

Quicksort
Array a ordenar:

Coloca-se os menores valores na metade esquerda e os maiores na metade direita;

Divide-se o array em dois para serem ordenados;

Aps a ordenao de ambas as metades;

No final voltam-se a unir de modo a compor a resposta ao problema inicial.

66

ALGORITMO de ORDENAO
Quick sort Bubble sort Merge sort Selection sort Heapsort Insertion sort Shell sort Radix sort Gnome sort Count sort Bogosort Bucket sort Cocktail sort

Quicksort
Como se separam os menores valores para a esquerda e os maiores para a direita? escolhido um valor aleatrio, Pivot, normalmente a meio do array; Valores menores que o Pivot sero colocados esquerda, enquanto que valores maiores sero colocados direita; Ini e Fim apontam respectivamente para o incio e para o fim do array; Ini e Fim avanam em direco do Pivot; Cada par de valores nas metades incorrectas sero trocados.

3
Ini

5
Pivot

0
Fim

67

ALGORITMO de ORDENAO
Quick sort Bubble sort Merge sort Selection sort Heapsort Insertion sort Shell sort Radix sort Gnome sort Count sort Bogosort Bucket sort Cocktail sort

Quicksort
Ini avana para a direita at encontrar um elemento maior que Pivot; Fim avana para a esquerda at encontrar um valor menor que Pivot;

9
Ini

5
Pivot

0
Fim

Neste momento d-se a troca dos valores;

0
Ini

5
Pivot

9
Fim

6
Ini

5
Pivot

2
Fim

9 68

ALGORITMO de ORDENAO
Quick sort Bubble sort Merge sort Selection sort Heapsort Insertion sort Shell sort Radix sort Gnome sort Count sort Bogosort Bucket sort Cocktail sort

Quicksort
3 0 2 7
Ini

4
Fim

4
Ini

7
Fim

Ini Fim

9
69

Ini Fim

ALGORITMO de ORDENAO
Quick sort Bubble sort Merge sort Selection sort Heapsort Insertion sort Shell sort Radix sort Gnome sort Count sort Bogosort Bucket sort Cocktail sort

Quicksort
3 0 6 4 1 5 7 2 8 9

Fim Ini Quando o valor de Fim menor que o valor de Ini o processo de separao termina e inicia-se a resoluo dos subproblemas;

70

ALGORITMO de ORDENAO
Quick sort Bubble sort Merge sort Selection sort Heapsort Insertion sort Shell sort Radix sort Gnome sort Count sort Bogosort Bucket sort Cocktail sort

Quicksort - C#
class Quicksort { private static void swap(int[] Array, int Ini, int Fim) { int temp = Array[Ini]; Array[Ini] = Array[Fim]; Array[Fim] = temp; }

71

ALGORITMO de ORDENAO
Quick sort Bubble sort Merge sort Selection sort Heapsort Insertion sort Shell sort Radix sort Gnome sort Count sort Bogosort Bucket sort Cocktail sort

Quicksort - C#
public static void sort (int[] Array, int Ini, int Fim) { int LHold = Ini; int RHold = Fim; Random ObjRan = new Random(); int Pivot = ObjRan.Next(Ini, Fim); swap(Array, Pivot, Ini); Pivot = Ini; Ini = Ini + 1; while (Fim >= Ini) { if (Array[Ini] >= Array[Pivot] && Array[Fim] < Array[Pivot]) swap(Array, Ini, Fim); else if (Array[Ini] >= Array[Pivot]) Fim = Fim - 1; else if (Array[Fim] < Array[Pivot]) Ini = Ini + 1; else { Fim = Fim - 1; Ini = Ini + 1; } } swap(Array, Pivot, Fim); Pivot = Fim; if (Pivot > LHold) sort(Array, LHold, Pivot); if (RHold > Pivot + 1) sort(Array, Pivot + 1, RHold); } }

72

EXERCCIO: Algoritmo de Procura


Dado uma determinada palavra e um dado texto, determina se a referida palavra aparece em algum lugar no texto.

73

EXERCCIO ALGORITMO DE PROCURA


Fora Bruta
Exemplificao O pior caso Cdigo C# (1) Cdigo C# (2)

Fora Bruta
Consiste em comparar a Palavra com o Texto, no sentido da esquerda-direita, comparando caracter a caracter. Os ndices p e t correm respectivamente a Palavra e o Texto partindo da posio 0. Quando houver coincidncia numa letra os lavores de p e t so incrementados. A Palavra deslocada 1 posio em relao ao Texto sempre que Palavra[p]<>Texto[t], sendo p=0 e t=t+1.

74

EXERCCIO ALGORITMO DE PROCURA


Fora Bruta
Exemplificao O pior caso Cdigo C# (1) Cdigo C# (2)

Exemplificao
Texto = O nosso texto! Palavra = osso 1 2 3 4 5 6 7 8 9 0 1 2 3 4 T P O o s o o o s s o n o s s o t e x t o ! 1 2 3 4

75

EXERCCIO ALGORITMO DE PROCURA


Fora Bruta
Exemplificao O pior caso Cdigo C# (1) Cdigo C# (2)

O pior caso
Se a Palavra no existe no Texto, para cada valor de t entre 0 e TamT-TamP+1 so efectuadas, no mximo, TamP+1 comparaes.
1 2 3 4 5 6 7 8 9 0 T P a a a a a a a a a a a a a b a a a b a a a b a a a b a a a b a a a b a a a b 5 5 5 5 5 5 5 35
TamT-TamP+1 = 10-4+1 = 7 ciclos (TamP+1)(TamT-TamP+1) = 5*7 = 35 comparaes Para valores elevados de TamP e TamT a FB torna-se 76 invivel

1 2 3 4 5 6 7

EXERCCIO ALGORITMO DE PROCURA


Fora Bruta
Exemplificao O pior caso Cdigo C# (1) Cdigo C# (2)

int t, p; string[] Texto; Texto = new string[14] { "O", " ", "n", "o", "s", "s", "o", " ", "t", "e", "x", "t", "o", "!" }; string[] Palavra = new string[4] { "o", "s", "s", "o" }; t = 0; p = 0; while (t < Texto.Length) { while (p < Palavra.Length) { Console.Write(" " + Palavra[p] + " - " + Texto[t + p] + "\n"); if (Palavra[p]==Texto[t+p]) { p += 1; if (p == Palavra.Length) { Console.Write("Palavra encontrada no Texto!"); t = Texto.Length; // Para sair do while } } else { p = Palavra.Length; // Para sair do while } } p = 0; t += 1; Console.Write("\n\n"); }

77

EXERCCIO ALGORITMO DE PROCURA


Fora Bruta
Exemplificao O pior caso Cdigo C# (1) Cdigo C# (2)

int t, p; string[] Texto; Texto = new string[14] { "O", " ", "n", "o", "s", "s", "o", " ", "t", "e", "x", "t", "o", "!" }; string[] Palavra = new string[4] { "o", "s", "s", "o" }; for (t=0; t != Texto.Length; t++) { p = 0; while (t + p != Texto.Length && p != Palavra.Length && Texto[t + p] == Palavra[p]) { p = p + 1; if (p == Palavra.Length) { Console.Write("\nEncontrou uma combinao"); } } }

78

MTODO Knut-Morris-Pratt

Mtodo Knut-Morris-Pratt (KMP)


Mtodo apresentado em 1970, acelera a procura de cadeias porque, para cada discrepncia de caracteres entre a Palavra e o Texto, efectua deslocamentos sempre de mais de um caracter. O deslocamento depender de Palavra. No algoritmo KMP, aps cada discrepncia, o ciclo comea na posio mais favorvel da Palavra, mantendo-se o Texto na mesma posio ou na seguinte. t nunca retrocede. A reinicializao do ndice p depende apenas de Palavra, pois depende se existe uma repetio de uma sub-Palavra na prpria Palavra.

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

79

MTODO Knut-Morris-Pratt

Estratgia
1. Pr-compila a Palavra, isto , calcular uma tabela D de nmeros associados s posies dos caracteres da Palavra. Cada nmero proporciona a localizao do ndice da Palavra no prximo ciclo. Efectua ciclos no Texto sequencialmente enquanto houver coincidncias com a Palavra, e na ocorrncia de uma discrepncia utiliza a tabela construda na pr-compilao.

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

2.

80

MTODO Knut-Morris-Pratt

Pr-compilao
Exemplo 1 Ini e Fim representam respectivamente as sub-Palavras no incio e no fim de Palavra. Ini e Fim possuem o mesmo tamanho com todos os caracteres correspondentes iguais. Coin representa a subcadeia de coincidncias no Texto.

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

Palavra

Ini

Fim
... Coin

Texto

81

MTODO Knut-Morris-Pratt

Pr-compilao
Primeira discrepncia: Palavra[p]<>Texto[t] A sub-Palavra Ini coincide com a sub-Palavra Fim, excepto na posio p: Ini[a]<>Fim[p]

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

Palavra Texto

Ini
Coin

Fim
... t

82

MTODO Knut-Morris-Pratt

Pr-compilao
A Palavra deve ser deslocada em relao ao Texto de modo que Ini passe a ocupar a posio anterior de Fim. Pode-se justificar isto com a possibilidade de Palavra[a] poder ser igual a Texto[t].
0 a p

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5

Palavra Texto

Ini

Fim
... t

p=a

Palavra Texto

Ini
... t

Fim

Para o prximo ciclo, o ndice t mantm o mesmo valor e o ndice p o valor de a. Na tabela D dever existir o valor de a associado 83 posio de p em Palavra.

MTODO Knut-Morris-Pratt

Pr-compilao
Exemplo 2 Este exemplo mostra como ser feito o deslocao quando Ini no ocorre em Texto. Este tambm o caso onde Ini e Fim coincidem completamente (Ini=Fim=Palavra). Palavra dever ser deslocado em ralao ao Texto para a primeira posio direita daquela onde ocorreu a primeira discrepncia, reiniciando as comparaes a partir do primeiro caracter da Palavra.

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

84

MTODO Knut-Morris-Pratt

Pr-compilao
Primeira discrepncia: Palavra[p]<>Texto[t] No existe Ini nem Fim

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

p g x x b c g x x b d t

Palavra Texto

x b c d d e f x b c d d e f

85

MTODO Knut-Morris-Pratt

Pr-compilao
O ndice t avana para t+1 e o ndice p recomea na posio 0. D dever ter o valor 1 associado posio p de Palavra.

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

p g x x b c

Palavra Texto
x b c d d e f g x x b d

x b c d d e f t+1

86

MTODO Knut-Morris-Pratt

Pr-compilao
Para cada caracter de Palavra est associado um nmero que d a posio do ndice para Palavra depois de cada discrepncia. D ser a tabela associada a Palavra. O calculo dos valores de D tem o nome de Prcompilao.

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

87

Tabela D Pr-compilao
Para mostrar que a deslocao depende de Palavra vamos supor que a primeira discrepncia acontece em Palavra[4].
P[0] P[1] P[0] P[2] P[1] P[0] P[3] P[2] P[1] P[0] P[4] P[3] P[2] P[1] P[0] P[4] P[3] P[2] P[1] P[4] P[3] P[2] P[4] P[3] P[4] Tam 3 2 1 0 D[4] 3 2 1 0

Palavra[4] sempre diferente do ltimo caracter de Ini. Cada linha da tabela mostra a deslocao de Palavra de modo que Ini coincida com a posio anterior de Fim. P[0]=P[1]=P[2]=P[3] e P[3]<>P[4] Sempre que Palavra[4] igual ao ultimo caracter de Ini, no faz sentido deslocar a Palavra para a posio indicada em D, porque certamente a discrepncia ser mantida. Nestes casos Palavra deve ser deslocado para t+1 e p=0. Ini e Fim no ocorrem ou tm tamanho 0.
88

MTODO Knut-Morris-Pratt

Pr-compilao

Exemplo 3
Ini e Fim de tamanho 2 (posio 0 e 1) Texto = NESTE MOMENTO IDILICO Palavra = IDILIO O ciclo anterior comea com p=0 e t=14 e termina em p=5 e t=19 quando Palavra[5]<>Texto[19]. O prximo ciclo recomea com p=1 e t=19. Palavra desloca-se 4 posies. t mantm-se e p de Palavra posiciona-se em 1 (tamanho de Ini e Fim)
p

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

0 Palavra Palavra (deslocao) Texto I I

1 D D

2 I I

3 L L

4 I I I

5 O D C
t=19

I O

L ?

I ? 89

O ?

MTODO Knut-Morris-Pratt

Pr-compilao
Exemplo 4
p 0 B 0 1 O 1 2 T 1 3 U 1 4 C 1 5 A 1 6 T 1 7 U 1 Palavra[p] D[p]

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

90

MTODO Knut-Morris-Pratt

Pr-compilao
Exemplo 5
p 0 A 0 1 B 1 2 C 1 3 D 1 4 A 0 5 B 0 6 C 0 7 E 3 Palavra[p] D[p]

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

91

MTODO Knut-Morris-Pratt

Desenvolvimento do Algoritmo
D associa a cada posio de Palavra um valor numrico que indica a nova posio do ndice p aps a primeira discrepncia.

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

d[0]=0; i=1; While(i<m) { d[i] = deslocamento(palavra); // funo de deslocamento i = i+1; }

Deslocamento() procura em Palavra a ocurrncia de Ini que coincide com Fim at penltima posio deste.

92

MTODO Knut-Morris-Pratt

Desenvolvimento do Algoritmo
Funo Deslocamento(Palavra, p) Objectivo: determinar o valor inicial do ndice p de Palavra para a prxima comparao aps ocorrer Palavra[p]<>Texto[t]. Entrada: Palavra (string), p (inteiro) Sada: deslocamento (inteiro)
iniciob = 1; deslocamento = 0; do{ a = 0; b = iniciob; while(Palavra[a]=Palavra[b] and b<p){ a = a+1; b = b+1; } if(Palavra[a]<>Palavra[b] and b=1) { deslocamento=a; } else{iniciob = iniciob+1;} }while(deslocamento<>0 or iniciob>p) }

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

function Deslocamento(Palavra, p){

93

MTODO Knut-Morris-Pratt

Desenvolvimento do Algoritmo
Funo Precompilacao(m, Palavra, D) Objectivo: construir a tabela de deslocamentos para Palavra. Entrada: m (inteiro), Palavra (string) Sada: D (array de inteiros)

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

function Precompilacao(Palavra, m){ D[0] = 0; for (int p = 1; p < m; p++) { D[p] = Deslocamento(Palavra, p); } }

94

MTODO Knut-Morris-Pratt

Desenvolvimento do Algoritmo

Algoritmo KMP
Objectivo: determinar o loca, em Texto, da primeira ocorrncia de Palavra. Local = 0 se a Palavra no ocorre no Texto. Entrada: m e n (inteiro), Palavra e Texto (string) Sada: local (inteiro) Funes auxiliares: Deslocamento(Palavra, p) e Precompilacao(m, Palavra, D)

Mtodo KMP (Knut-Morris-Pratt)


Estratgia Pr-compilao Exemplo 1 Exemplo 2 Exemplo 3 Exemplo 4 Exemplo 5 Desenvolvimento do Algoritmo

function KMP(m, Palavra, n, Texto, local){ Precompilacao(m, Palavra, D); int p = 0; int t = 0; while(p<m and t<n){ while(p>0 and Palavra[p]<>Texto[t]){ p = D[p]; } p = p+1; t = t+1; } if(p>m) {local = t-m;} else {local = 0;} }

95

C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#

C# uma linguagem de programao simples e orientada por objectos.

Visual C# proporciona ferramentas de programao visual e suporte para o desenvolvimento de aplicaes cliente/servidor e aplicaes web atravs do Framework .NET (verso 2).
http://www.microsoft.com/ http://msdn.microsoft.com/vstudio/express/ http://msdn2.microsoft.com/en-us/vcsharp/default.aspx

96

C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#

Primitivas
START - END {} Qualquer classe, funo, ciclo ou condio comea com { e terminam com }. Console.Read();
Funo do tipo INT

INPUT <varivel>

Console.ReadLine();
Funo do tipo STRING

OUTPUT <varivel>

Console.Write(Texto a escrever.);
Funo do tipo VOID Recebe como parmetro de entrada variveis como Int, String, DateTime, Boolean, etc.

VAR <nome> TIPO

Int numero; String texto; Boolean verdadeiro_ou_falso;

97

C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#

Primitivas
IF <condio> THEN
<aco 1>

if (numero == 1)
Console.Write("Valor: " + numero);

ELSE
<aco 2>

END IF

else {
numero = numero + 1; Console.Write("Valor: " + numero);

} WHILE <condio>
<aco>

END WHILE

while (numero < 10) {


Console.Write(Valor: + numero); numero = numero + 1;

} DO
<aco>

WHILE <condio>

do {
Console.Write(Valor: + numero); numero = numero + 1;

} while (numero < 10);

98

C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#

Primitivas
FOR <condio inicial> TO <condio final> [STEP] <incremento>
<aco>

for (int numero = 0; numero < 10; numero ++) {


Console.Write(Valor: + numero);

END FOR

99

C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#

Primitivas
FUNCTION <nome> (parmetros)
<instrues>

END FUNCTION CALL <nome> (parmetros)

static void ola(string texto) {


Console.Write(Ol + texto);

} ola(mundo);

100

C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#

Variveis
VAR <nome> <tipo> string texto = "ol mundo"; int num1 = 0, num2; num2 = 0; const int numero = 0; const string texto = "Ol marte"; string char bool Boolean byte DateTime Decimal Double float Guid

CONST <nome> <tipo> int Int16 short Int32 Int64 long

101

C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#

Operadores
+ Operador de soma ou de concatenao int + int = int string + string = string string + int = string Operadores aritmticos Operador de atribuio Operadores de comparao Operador e e ou if (num1 == 1 && num2 == 1)
Console.Write(Nmero 1 e nmero 2");

+, -, *, / = ==, >=, <=, <> &&, ||

if (num1 == 1 || num2 == 1)
Console.Write(Nmero 1 ou nmero 2");

102

C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#

Conversores
Convert ToIntX ToChar ToString ToDateTime ToBoolean ToDecimal Classe que permite converter variveis de um determinado tipo noutro Converso para inteiro (x = 16, 32, ou 64) Converso para caracter Converso para string Converso para DateTime Converso para true ou false Converso para decimal int numero; numero = Convert.ToInt16("16"); Boolean verdadeiro; verdadeiro = Convert.ToBoolean(1);

103

Ficha Prtica 1: C#
Cria um programa em C# que (cada alnea dever ser uma funo):
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Dados dois nmeros, escreva a sua mdia; Dados dois nmeros, identifique o maior; Dado um nmero, escreva o seu valor absoluto; Dado um nmero, escreva o seu quadrado; Dado um nmero, indique se par ou impar; Dado um nmero, determine se menor, igual ou maior que zero; Dado um ano, determine se comum ou bissexto; Dados dois nmeros, escreva-os por ordem crescente; Dado trs nmeros, escreva-os por ordem crescente; Dados dois nmeros, indicar se o primeiro menor que 50 ou maior que 100, e ao mesmo tempo se o segundo for menor ou igual ao primeiro; Receber um tempo dado em horas, minutos e segundos e escrever o total de segundos equivalentes; Com base no ano de nascimento de algum, determinar a sua idade actual; Criar um menu que represente todas estas funes.
104

11. 12. 13.

Ficha Prtica 2: C#
Cria um programa em C# que permite obter os seguintes resultados (cada alnea dever ser uma funo):
1. 2. 3. 4. 5. Escrever todos os nmeros inteiros positivos de 1 a X. X dado pelo utilizador; Escrever todos os mpares inteiros positivos entre dois nmeros dados pelo utilizador; Altera a funo 2 de modo a que o primeiro nmero no seja superior ao segundo; Altera a funo 2 de modo a que caso o primeiro seja superior ao segundo haja a troca de valores; Elabora uma funo que receba o valor de um limite positivo e uma sequencia de nmeros inteiros positivos ou negativos at que o utilizador escreva um zero ou at que o somatrio dos valores introduzidos ultrapasse o limite fornecido; Elabora uma funo que calcule o valor de 2e, sendo e fornecido pelo utilizador;

6.

105

Ficha Prtica 3: C#
Cria um programa em C# que (cada alnea dever ser uma funo):
1. 2. 3. Factorial; Mquina de bilhetes; Signos;

106

Funo RECURSIVA
Uma funo recursiva uma funo que se refere a si prpria. A ideia consiste em utilizar a prpria funo que estamos a definir na sua definio. Em todas as funes recursivas existe:
Um passo bsico (ou mais) cujo resultado imediatamente conhecido. Um passo recursivo em que se tenta resolver um sub-problema do problema inicial.

107

RECUSRIVIDADE

Algoritmo Factorial
Funo no Recursiva
static int factorial(int n) { if (n <= 1) return 1; else { int r = 1; do { r = r * n; n = n - 1; } while (n > 1); return r; } }

Algoritmo Factorial
Funo no Recursiva Funo Recursiva

108

RECUSRIVIDADE

Algoritmo Factorial
Funo Recursiva

O caso bsico o teste de igualdade a zero, onde o resultado imediato 1, e o passo recursivo :
(n * (factorial_recursivo (n - 1))).

Algoritmo Factorial
Funo no Recursiva Funo Recursiva

Uma funo recursiva dever possuir uma expresso condicional. A execuo de uma funo recursiva consiste em ir resolvendo subproblemas sucessivamente mais simples at se atingir o caso mais simples de todos, cujo resultado imediato. Desta forma, o padro mais comum para escrever uma funo recursiva :
Comear por testar os casos mais simples. Fazer chamada (ou chamadas) recursivas com subproblemas cada vez mais prximos dos casos mais simples.

Dado este padro, os erros mais comuns associados s funes recursivas so:
No detectar os casos simples. A recursividade no diminuir a complexidade do problema. 109

RECUSRIVIDADE

Algoritmo Factorial
Funo Recursiva

Algoritmo Factorial
Funo no Recursiva Funo Recursiva

No caso de erro em funo recursivas, o mais comum a recursividade nunca parar. O nmero de chamadas recursivas cresce indefinidamente at esgotar a memria, e o programa gera um erro. A recursividade infinita o equivalente aos ciclos infinitos do tipo do-while, whie e for.

static int factorial_recursiva(int n) { if (n <= 1) return 1; else return n * factorial_recursivo(n - 1); }

110

EXERCCIO
Elabora um programa que:
Leia valores de um array; Introduza valores num array numa determinada posio; Retire valores de uma dada posio.

111

Lista Linear

Lista Linear

Conjunto de informaes de qualquer tipo, organizadas sequencialmente; As operaes bsicas em listas lineares so:
Busca: Tem por objectivo a localizao de elementos na lista; Insero: Tem por objectivo acrescentar um novo elemento lista; Remoo: Tempo por objectivo remover um elemento da lista;

Lista Linear Exemplo 1 Exemplo 2 Lista de Registos Armazenamento


a)

Os elementos de uma lista so denominados de ns; Um elemento de uma lista pode conter uma ou mais informaes:
Listas de elementos com uma nica informao Exemplo: Lista de nmeros inteiros, nmeros reais, caracteres, strings; Listas de elementos com vrias informaes: Exemplo: Lista de notas de DPM. Para cada aluno existir um campo para o nome, o nmero e a nota, existindo assim 3 campos por n.

b)

112

Lista Linear

Exemplo 1
As notas dos alunos da turma de DPM para a cadeira de Algoritmos formam uma lista se forem organizadas da seguinte maneira: Nmero Nome Nota N 1 Nmero Nome Nota N 2 N 3

Lista Linear Exemplo 1 Exemplo 2 Lista de Registos Armazenamento

Cada registo da lista contm campos com as seguintes informaes: Nmero de matrcula, nome do aluno e respectiva nota a Algoritmos.

113

Lista Linear

Exemplo 2
Um polinmio de trs variveis x, y, e z descrito por meio de uma sequencia de termos, em que cada termo constituido por um coeficiente (nmero real) e os trs expoentes (nmeros inteiros) das trs variveis x, y, e, z. Coeficiente Expoente X Expoente Y Expoente Z N 1 Coeficiente Expoente X Expoente Y Expoente Z N 2 N 3

Lista Linear Exemplo 1 Exemplo 2 Lista de Registos Armazenamento

Cada registo da lista contm 4 campos. Exemplo prtico: P(x, y, z) = 4x5-3x3y+6x2y2+10y5-2xyz+5z5 4 5 0 0 N 1 -3 3 1 0 N 2 6 2 2 0 N 3 10 0 5 0 N 4 -2 1 1 1 N5 5 0 0 5 N 6


114

Lista Linear

Lista de Registos
Um polinmio de trs variveis x, y, e z descrito por meio de uma sequencia de termos, em que cada termo constituido por um coeficiente (nmero real) e os trs expoentes (nmeros inteiros) das trs variveis x, y, e, z. Coeficiente Expoente X Expoente Y Expoente Z N 1 Coeficiente Expoente X Expoente Y Expoente Z N 2 N 3

Lista Linear Exemplo 1 Exemplo 2 Lista de Registos Armazenamento

Cada registo da lista contm 4 campos. Exemplo prtico: P(x, y, z) = 4x5-3x3y+6x2y2+10y5-2xyz+5z5 4 5 0 0 N 1 -3 3 1 0 N 2 6 2 2 0 N 3 10 0 5 0 N 4 -2 1 1 1 N5 5 0 0 5 N 6


115