Documente Academic
Documente Profesional
Documente Cultură
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]
DADOS
PROCESSAMENTO
INFORMAO
DADOS INFORMAO
TI
GESTO DA INFORMAO
OUTROS RECURSOS
11
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
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
15
Primitivas:
Incio de fluxograma Aco Aco Estado com espera Estado sem espera
Condio
Deciso
Exemplo:
Recolher 1 Operando
Recolher Operao
Recolher 2 Operando
Efectuar Clculo
Apres. Resultado
17
Recolha de Operador
tem 2 Operando
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
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
Vantagens algoritmo
27
Deciso
Iterao
28
Iterao
Deciso Mltipla
29
Exemplo:
Recolher 1 Operando Recolher Operao Recolher 2 Operando Efectuar Clculo Apresentar Resultado
30
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
seno
imprimir No h zero
fim de se
4. Fim de programa
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
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
Primitivas (continuao):
IF <condio> THEN
<instrues a executar se condio verdadeira>
ELSE
<instrues a executar se condio falsa>
END IF
36
Primitivas (continuao):
WHILE <condio>
<instrues a executar enquanto a condio for verdadeira>
END WHILE
37
Primitivas (continuao):
DO
<instrues a executar enquanto a condio for verdadeira>
WHILE <condio>
38
END FOR
39
Primitivas (continuao):
FUNCTION <nome da funo> (parmetros da funo)
<instrues da funo>
END FUNCTION
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
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
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
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
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
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
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)
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] )
49
50
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
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
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
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:
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
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
73
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
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
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
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
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
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.
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.
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]
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
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.
84
MTODO Knut-Morris-Pratt
Pr-compilao
Primeira discrepncia: Palavra[p]<>Texto[t] No existe Ini nem Fim
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.
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.
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
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]
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]
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.
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) }
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)
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)
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#
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.
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
} DO
<aco>
WHILE <condio>
do {
Console.Write(Valor: + numero); numero = numero + 1;
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>
END FOR
99
C#
1. Linguagem Natural 2. Fluxograma 3. Diagrama de Chapin 4. Pseudo-Cdigo 5. C#
Primitivas
FUNCTION <nome> (parmetros)
<instrues>
} 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
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
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.
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;
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
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
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