Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
e Programao em Pascal
Manual de Programao
Introduo Algoritmia
Indce
Cap 1. ALGORITMIA ................................................................................................................................ 4 1.1. O que um Algoritmo? ..................................................................................................................... 4 1.2. O Mtodo Top-Down ........................................................................................................................ 5 1.3. Tipos de Dados ................................................................................................................................. 6 1.3.1. Variveis, Constantes e Identificadores ...................................................................................... 6 1.3.2. Regras para a construo de Identificadores................................................................................ 6 1.3.3. Classificao dos Tipos de Dados................................................................................................. 7 1.4. Operadores, Operaes Elementares e Expresses ........................................................................... 8 1.4.1. Operadores Aritmticos ............................................................................................................. 8 1.4.2. Operadores Relacionais (de comparao) ................................................................................... 8 1.4.3. Operadores Lgicos .................................................................................................................... 9 1.4.4. Operadores de Cadeias de Caracteres ......................................................................................... 9 1.4.5. Operadores Funcionais ou Funes............................................................................................. 9 1.4.6. Expresses: Escrita comum e em Programao .......................................................................... 10 1.4.7. Prioridade dos Operadores ....................................................................................................... 10 1.5. Noes de Lgica ............................................................................................................................ 11 1.5.1. Negao (NOT) ......................................................................................................................... 11 1.5.2. Conjuno (AND) ...................................................................................................................... 11 1.5.3. Disjuno (Or) .......................................................................................................................... 11 1.6. Atribuio, Entrada e Sada de dados ............................................................................................... 12 1.6.1. Atribuio ................................................................................................................................ 12 1.6.2. Entrada de dados ...................................................................................................................... 12 1.6.3. Sada de dados.......................................................................................................................... 12 1.7. Traagem de algoritmos .................................................................................................................. 14 1.8. Fluxogramas ................................................................................................................................... 15 1.9. Exerccios Propostos ....................................................................................................................... 16 Cap 2. ESTRUTURAS DE CONTROLO........................................................................................................ 17
2.1. Estrutura Sequencial ....................................................................................................................... 17 2.2. Estruturas Condicionais................................................................................................................... 18 2.2.1. Estrutura Condicional Simples (Se .. Ento) ............................................................................... 18 2.2.2. Estrutura Condicional Dupla (Se .. Ento .. Seno) ..................................................................... 19
Pgina 2
Manual de Programao
Introduo Algoritmia
2.2.3. Estrutura Condicional Mltipla (Caso .. Seja) ............................................................................. 19 2.3. Estrutura Repetitivas (ou Cclicas) ................................................................................................... 20 2.3.1. Estrutura Enquanto .. Fazer ....................................................................................................... 21 2.3.2. Estrutura Repetir .. At ............................................................................................................. 22 2.3.3. Estrutura Para .. Fazer ............................................................................................................... 24 2.4. Exerccios Propostos ....................................................................................................................... 26 Cap 3. ESTRUTURAS DE DADOS .............................................................................................................. 27
3.1. Vetores e Matrizes Arrays............................................................................................................. 27 3.1.1. Operaes sobre Vetores ......................................................................................................... 28 3.1.2. Pesquisa de um elemento num Vetor ....................................................................................... 29 3.1.3. Ordenao dos elementos de um Vetor .................................................................................... 29 3.1.4. Matrizes Arrays Multidimensionais ........................................................................................ 30 3.2. Cadeias de Caracteres strings ....................................................................................................... 32 3.2.1. Vetores de Cadeias de Caracteres Arrays de Caracteres .......................................................... 34 3.3. Exerccios Propostos ....................................................................................................................... 36 Cap 4. INTRODUO LINGUAGEM PASCAL .......................................................................................... 37
Pgina 3
Manual de Programao
Introduo Algoritmia
CAP 1. ALGORITMIA
1.1. O que um Algoritmo?
Do Latim Algorithmu, palavra usada para designar o conjunto de fases de pormenor por que preciso passar para chegar soluo de um problema. Em Informtica o seu significado similar, i.e., Algoritmo o conjunto ordenado de passos (instrues) para a resoluo sequencial de um problema . Um computador uma mquina sequencial (executa instrues sequencialmente), pois s inicia a execuo de uma instruo aps ter terminado a anterior, assim, um algoritmo pode ser visto como a descrio numa linguagem quase natural (chamada linguagem algortmica, pseudocdigo ou ainda Portugus estruturado) da sequncia de instrues a ser executada pelo computador para a resoluo de um problema. Dado um problema, a sua resoluo num computador ser objeto de um conjunto de fases at se obter a soluo final. Podemos considerar as trs fases seguintes: 1Anlise do problema que implica a compreenso e real definio do problema, o que realmente se pretende, que dados so fornecidos, desses, quais os necessrios e que outros teremos que considerar, que resultados iremos obter; 2Elaborao do Algoritmo (e/ou Fluxograma) recorrendo ao mtodo de anlise Top-Down e s estruturas algortmicas adequadas (apresentadas mais frente). 3Implementao do Algoritmo obtido numa Linguagem de Programao (no nosso caso a linguagem Pascal), e sucessivos testes e correes da implementao at se obter a soluo final ou programa . Nota: Sendo o mbito deste curso a formao de tcnicos de informtica, cujas funes podero ser, entre outras, a de programador, ser importante realar que um programador tem como funo resolver problemas que lhe so propostos (prestao de um servio). Nesta cptica, a especificidade da implementao de um problema dever ser transparente para o utilizador final pois a ele s interessam a entrada de dados (input) e a sada de resultados (output) devendo estas operaes ser suficientemente claras e objetivas.
Pgina 4
Manual de Programao
Introduo Algoritmia
Exemplo:
Problema: Dados os valores de dois operandos, calcular a sua soma. Na anlise do problema constatamos que o utilizador do programa ter que introduzir os dois valores (quaisquer) dos operandos (entrada de dados) dos quais pretende obter a soma, o computador assimila esses valores e realiza as operaes necessrias ao clculo do resultado. Note-se que no enunciado no feita qualquer referncia sada de resultados, no entanto esta ter que existir para que o resultado da operao possa ser visualizado pelo utilizador. Aplicando o mtodo top-down o problema fica com o seguinte especto: Note que numerados e entre parnteses rictos temos a descrio dos vrios blocos ou as Algoritmo Soma
1 [Entrada de dados] Leitura dos dois operandos; 2 [Clculos] Clculo da soma; 3 [Apresentao de resultados] Apresentao da soma ao utilizador; 4 [Terminar] Sair (do programa);
operaes a realizar nos blocos 1, 2 e 3, no entanto estas operaes podero ser implementadas
diretamente em Linguagem Algortmica atravs de instrues simples tal como veremos mais adiante.
Pgina 5
Manual de Programao
Introduo Algoritmia
As constantes podem ser escritas sob a forma de valores diretos ou associadas a identificadores. As variveis so sempre associadas a identificadores (que por sua vez esto associados a tipos de dados). Os identificadores so nomes que se atribuem a constantes, variveis ou outros elementos usados dentro de um programa.
Nota: De uma forma simplista, uma varivel, pode ser vista como um recetculo onde armazenado um dado valor.
1 2
- Dados so elementos primrios, designaes ou representaes simblicas de factos ou medidas. - Informao so dados estruturados ou organizados entre si em conjuntos significativos.
Pgina 6
Manual de Programao
Introduo Algoritmia
Exemplos: Identificadores Vlidos nome Max_Min EB110 Contador i W52 soma idade Identificadores Invlidos Joo B3#C !cont Read Var Begin Va lor1 3soma
Tipos de Dados
1- Inteiro 1 Simples 2- Real 3- Carcter 4- Booleano (Lgico) 2 Cadeia de Caracteres 1- Matriz ou Vetor 3 Estruturados 2- Registo 3- Conjunto 4- Ficheiro
Em Pascal
- Integer - Real - Char - Boolean String - Array - Record - Set - File
Gama de Valores
-32768 a 32 767 2,9E-39 a 1,7E38 Todos os caracteres ASCII True (V) ou False (F) 1 a 255 caracteres ASCII A ver mais frente neste manual (Captulo 3 e seguintes)
A gama de valores em cada tipo de dados pode ainda variar consoante a linguagem de programao utilizada. Exemplos 325 Inteiro -3457 Inteiro 34574 Real (ultrapassa a gama dos inteiros) 2,45E12 Real 2,3*10E-3 Invlido a Carcter Carcter (espao) Falso Lgico bota gel Cadeia de caracteres Green Ville Cadeia de caracteres
Pgina 7
Manual de Programao
Introduo Algoritmia
Operador
/ + DIV MOD
As operaes entre dados do tipo inteiro apresentam resultados inteiros exceo da diviso de dois inteiros cujo resultado pode ser um real. Os resultados de operaes entre valores reais so sempre valores reais.
Operador
= <> < <= > >=
Todos os tipos de dados podem ser sujeitos a operaes relacionais (ou de comparao), o resultado assume sempre um de dois valores possveis: verdadeiro (V) ou Falso (F).
Eng. Hlio Vilas Pgina 8
Manual de Programao
Introduo Algoritmia
Operador
NOT AND OR
Tal como nas operaes relacionais, o resultado das operaes lgicas assume sempre um de dois valores possveis: verdadeiro (V) ou Falso (F).
Operador
+ =, <>, <, <=, >, >=
Operador
SQR( ) SQRT( ) ABS( ) SIN( ) CONCAT( )
Pgina 9
Manual de Programao
Introduo Algoritmia
Os operadores funcionais fazem parte da linguagem Pascal e encontram-se reunidos em unidades (Units bibliotecas de funes ou procedimentos) consoante o assunto a que dizem respeito, por exemplo a Unit Dos engloba funes e procedimentos relativos ao sistema operativo. Algumas funes e procedimentos de mbito geral no esto includas em nenhuma biblioteca em particular fazendo parte da prpria linguagem.
Mais Alta
Not * /
(Operadores Unrios)
H ainda que considerar duas regras: 1 quando aparecem dois ou mais operadores com igual precedncia, as operaes devem ser executadas pela ordem apresentada, da esquerda para a direita;
Pgina 10
Manual de Programao
Introduo Algoritmia
2 Os parnteses alteram a ordem das operaes, funcionando dentro dos parnteses a regra anterior.
a
1 0
~a
0 1
a
0 0 1 1
b
0 1 0 1
ab
0 0 0 1
b
0 1 0 1
a+b
0 1 1 1
Pgina 11
0 0 1 1
Eng. Hlio Vilas
Manual de Programao
Introduo Algoritmia
Para designar o operador disjuno so tambm utilizados os smbolos: + e V Propriedades da Disjuno: i) a + b = b + a (Comutativa) ii) (a + b) + c = a + (b + c) (Associativa) iii) a + 0 = 0 + a = a (Elemento Neutro) iv) a + 1 = 1 + a = 1 (Elemento Absorvente) v) a + a = a (Idempotncia)
Pgina 12
Manual de Programao
Introduo Algoritmia
determinado instante ou alertar o utilizador para determinado facto atravs do envio de uma mensagem (constante do tipo cadeia de caracteres). Observemos um exemplo para melhor compreenso. Exemplo Escrever(Quais as notas dos dois testes) escrita no ecr a mensagem (cadeia de caracteres) avisando o utilizador sobre introduo de valores Ler(nota1, nota2) O computador fica espera que sejam fornecidos dois valores que guarda nas variveis Med (nota1+ nota2)/2 Somam-se os valores das variveis, o resultado dividido por 2 e guardado na varivel Med Escrever(A mdia :, Med) Escreve no monitor a mensagem (cadeia de caracteres) e o valor da varivel Med
Obs. As funes Ler e Escrever podem manipular um conjunto de uma ou mais variveis
(separadas por vrgulas) tal como se pode ver nas instrues seguintes: Ler(a) Ler(b, c) Escrever(a, b) Escreve(valor de, c) lida uma varivel; so lidas duas variveis (os seus valores); so apresentados os valores de duas variveis apresentado o valor de uma varivel. Algoritmo Soma2 Estamos agora em condies de rescrever o algoritmo visto atrs (exemplo da soma de dois nmeros) usando as instrues algortmicas adequadas e segundo o mtodo de anlise topdown. Nota: Repare na alterao do nome do algoritmo para Soma2, pois no podem existir 1 [Entrada de dados] Escrever(Primeiro operando:) Ler(Op1) Escrever(Segundo operando:) Ler(Op2) 2 [Clculo da Soma] Soma Op1 + Op2; 3 [Apresentao de Resultados] Escrever(A Soma :, Soma) 4 [Terminar] Sair
Pgina 13
Manual de Programao
Introduo Algoritmia
No passo 1 foram lidos os valores dos operandos, no passo 2 e na coluna correspondente foi colocado o carcter para designar que os valores dos operandos se mantm, ou seja, se pretendesse -mos usar alguma dessas variveis noutra operao o valor seria o que foi atribudo no passo 1. O passo 4, Sair, no registado na traagem.
Pgina 14
Manual de Programao
Introduo Algoritmia
1.8. Fluxogramas
Os Fluxogramas, tambm chamados de diagramas de fluxo, so uma representao grfica de um algoritmo, descrevendo-o de forma simples e fcil de entender. Esta representao, que utiliza um conjunto de smbolos, conhecida universalmente, tambm uma das mais antigas e mais utilizadas embora o seu uso tenha diminudo significativamente com o aparecimento das linguagens de programao estruturadas. No desenho de fluxogramas usa-se um conjunto de smbolos dos quais se apresentam apenas os principais (com interesse a este nvel): Funo Incio Retorno .......................................................................... Retorno Entrada e Sada de dados ................................................ Smbolo
Vejamos agora o fluxograma correspondente ao nosso, j clebre, algoritmo Soma2. Inicio Temos assim o nosso fluxograma constitudo por cinco smbolos: 1 Incio do fluxograma 2 Entrada de dados 3 Processamento 4 Sada de resultados 5 Fim do fluxograma Nota: Repare que no 2 smbolo podiam omitir-se as instrues Escrever(), ficariam s as instrues Ler(Op1) e Ler(Op2).
Escrever(Primeiro operando:) Ler(Op1) Escrever(Segundo operando:) Ler(Op2) Soma Op1 + Op2 Escrever(A Soma :, soma) Fim
Pgina 15
Manual de Programao
Introduo Algoritmia
2 Qual o resultado de cada uma das seguintes operaes? 34 Mod 10 23 Div 4 18 > 14,5 3,437 = 422 15 <= -27 7*4
3 Transforme as expresses de modo a poderem ser usadas em programao. 3x 2 + 7 (x-2) 2 4 Diga o que entende por:
a) b)
52 x 2ab a+b2
5 Para os problemas seguintes desenvolva: o algoritmo, fluxograma e traagem (arbitrando, neste ltimo, valores que lhe paream aceitveis):
a) b) c)
Dada a medida do lado de um quadrado, calcular a rea (rea = l x l = l 2) Para um aluno, dadas as notas dos trs perodos calcular a mdia final do ano; Calcular a rea e permetro de um retngulo, dadas as medidas do comprimento e da largura (rea = comp x larg e Permetro = 2 x comp + 2 x larg);
d) e) f) g)
Calcular a rea do tringulo dada a medida da base e a altura (rea = b x h /2); Calcular a rea e o permetro de um crculo (rea = Pi x r2 e Permetro = 2 x Pi x r); Dados dois operandos calcular a Soma e o Produto; Calcular a rea do trapzio dadas as medidas das bases e a altura (rea = (B + b)/2 x h);
Pgina 16
Manual de Programao
Introduo Algoritmia
parmetros respetivos (a tratar posteriormente neste manual). Temos assim apresentadas as estruturas de controlo usadas em programao. Para melhor compreenso vejamos o quadro seguinte: Sequencial ordenao sequencial de instrues
Estruturas
Condicionais
De Controlo
Repetitivas (ou Cclicas) Repetir ... At
Inicio
Aco 1
Aco n
Fim
Pgina 17
Manual de Programao
Introduo Algoritmia
F Cond V Aco 1
Aco n
Pgina 18
Manual de Programao
Introduo Algoritmia
Uma Instruo
Conjunto de Instrues ... Se (cond) Ento Inicio Aco1 Aco n Fim Seno Inicio Aco i Aco x Fim ...
Aco n
Aco x
Exemplo: dado um nmero verificar se positivo, negativo ou zero. Algoritmo Sinal 1- [Leitura de dados] Escrever(Qual o nmero:) Ler(x) 2- [Verificao do sinal] Se (a = 0) Ento Escrever(O nmero zero) Seno Se (a > 0) Ento Escrever(O nmero positivo) Seno Escrever(O nmero negativo) 3- [Terminar] Sair
Manual de Programao
Introduo Algoritmia
Embora no contemplado por alguns autores ser importante realar que esta estrutura pode conter um clusula Seno que ser executada quando o valor da varivel no coincidir com nenhum dos n valores (constantes) possveis. apresentado em seguida o fluxograma genrico desta estrutura bem como o algoritmo com e sem a clusula Seno. Algoritmo (Sintaxe)
Var
=1 =2 =n Seno
S1
S2
Sn
Sx
2: S2 n: Sn fim
Var uma varivel e S1, S2, Sn e Sx representam uma instruo ou conjunto de instrues. A estrutura Caso embora no use delimitador incio necessita ter delimitador fim. Exemplo: Ler um dia da semana de 1 a 7 e apresentar o respetivo nome. Algoritmo Dias 1- [Leitura de dados] Escrever(Qual o dia:) Ler(dia) 2- [Apresentao do nome do dia] Caso (dia) Seja 1: Escrever(Domingo) 2: Escrever(Segunda) 3: Escrever(Tera) 4: Escrever(Quarta) 5: Escrever(Quinta) 6: Escrever(Sexta) 7: Escrever(Sbado) Seno Escrever(Dia Errado!!!) fim 3- [Terminar] Sair
Pgina 20
Manual de Programao
Introduo Algoritmia
de extrema importncia a correta definio do controlo do ciclo (nmero de iteraes a efetuar) podendo mesmo ocorrer um nmero de iteraes dif erente do previsto originando naturalmente resultados errados. A cada ciclo est associada uma condio cujo valor permitir, ou no, terminar a repetio de aes. O valor lgico da condio de controlo do ciclo deve ser suscetvel de alterar no decorrer do processamento, permitindo a paragem (fim do ciclo) caso contrrio estaremos perante um ciclo infinito que executar um nmero infinito de vezes.
Exemplo: Dado um inteiro positivo, calcular a soma de todos os nmeros at esse nmero. Algoritmo SomaSeq 1- [Inicializaes] Soma 0 I1 2- [Leitura do nmero] Escrever(Um nmero positivo:) Ler(N) 3- [Clculo da Soma] Enq (I < N) Fazer Incio Soma Soma + I I I +1 fim 4- [Apresentao da Soma] Escrever(A Soma :, Soma) 5- [Terminar] Sair
Eng. Hlio Vilas Pgina 21
Manual de Programao
Introduo Algoritmia
...
Aco n
Repetir Aco1
Cond F V
At (cond) ...
Nota: Esta estrutura mesmo quando engloba um conjunto de aes no usa incio e fim. Exemplo1: Dada uma sequncia de n inteiros positivos, calcular o mximo e a sua posio.
Algoritmo MaxSeq
1- [Inicializaes] Max 0 I1 2- [Leitura do n de elementos da sequncia] Repetir Escrever(N de elementos da seq:) Ler(N) At (N > 0) 3- [Leitura da seq. e clculo do mximo] Repetir Repetir Escrever(I, elemento:) Ler(x) At (x > 0) Se (x > Max) Ento incio Max x Pos I fim II+1 At (I > N) 4- [Apresentao do Mximo] Escrever(O Mximo :, Max) 5- [Terminar] Sair
Pgina 22
Manual de Programao
Introduo Algoritmia
Repare na necessidade de inicializar o mximo com um valor suficientemente pequeno de forma que o primeiro nmero lido (positivo) seja superior a ele.
Vejamos outro exemplo, usando agora as estruturas repetir e enquanto com o Fluxograma respetivo: Exemplo2: Ler um inteiro positivo e escrever os seus algarismos por ordem inversa. (Ex. 123 > algarismos: 3, 2 e 1).
Algoritmo DaAlgarismos
1- [Leitura do nmero] Repetir Escrever(Qual o nmero:) Ler(x) At (x > 0)
F
Fluxograma
Incio Ler(x)
x >0
V
2- [Decomposio e apresentao do n em algarismos] Enq (x > 0) Fazer incio Resto x Mod 10 Escrever(Resto) x x Div 10 fim 3- [Terminar] Sair
V
x >0
F
Fim
Ainda o mesmo exemplo mas transformando o nmero num outro escrito por ordem inversa dos seus algarismos
Pgina 23
Manual de Programao
Introduo Algoritmia
Algoritmo InvNum
1- [Inicializaes] Inv 0 2- [Leitura do nmero] Repetir Escrever(Qual o nmero:) Ler(x) At (x > 0) 3- [Decomposio do n e clculo do invertido] Enq (x > 0) Fazer incio Resto x Mod 10 Inv Inv * 10 + Resto x x Div 10 fim 4- [Apresentao do n invertido] Escrever(O n invertido :, Inv) 5- [Terminar] Sair
Algoritmo (Sintaxe) i 1 at n
V F
Conjunto de Instrues ... Para i 1 at n Fazer Incio Aco1 Aco n fim ...
Aco 1 Aco n
Nota:
Para i 1 at n Fazer, deve ler-se: para i igual a (ou, a tomar o valor) 1 at n fazer.
Pgina 24
Manual de Programao
Introduo Algoritmia
Toda a estrutura Para .. Fazer pode ser convertida numa Enq .. Fazer. O inverso s verdadeiro se a condio de sada da estrutura Enq .. Fazer for expressa por uma varivel numrica de incremento constante (unitrio). Caso se transforme uma estrutura Para .. Fazer numa Enq .. Fazer necessrio inicializar a varivel de controlo e efetuar o incremento. Exemplo: Dado um inteiro positivo, calcular a soma de todos os nmeros de 1 at esse nmero. Algoritmo SomaSeq 1- [Inicializaes] Soma 0 2- [Leitura do nmero] Repetir Escrever(Um nmero positivo:) Ler(x) At (x > 1) 3- [Clculo da Soma] Para i 1 at x Fazer Soma Soma + I 4- [Apresentao da Soma] Escrever(A Soma :, Soma) 5- [Terminar] Sair
Obs. Este exerccio foi resolvido atrs quando da apresentao da estrutura Enq .. Fazer.
Traagem do algoritmo anterior. Valores 0, -1 e 5. Passo 1 2 1 2 3 1 2 3 4 5 1 2 3 4 5 0 -1 5 Iterao i x Soma 0 1 3 6 10 15 A Soma : 15 Sada
Caso a varivel de controlo de um ciclo comece em 1 com incrementos unitrios verificamos que o valor da varivel coincide com o valor da iterao parecendo esta coluna desnecessria, isto porm, nem sempre acontece.
Pgina 25
Manual de Programao
Introduo Algoritmia
1-
Dados trs nmeros calcular o maior (se forem iguais deve avisar para esse facto);
2-
Dados dois operandos e uma operao (+, -, / e *) implementar uma calculadora de quatro operaes (0/n = Erro, sugesto: estrutura caso ... seja);
3-
4-
5-
Dada uma sequncia de n nmeros inteiros contar o nmero de zeros, pares e mpares;
6-
7-
8-
9-
10 -
Dado um nmero inteiro N calcule todos os nmeros primos inferiores a N. Nota: um nmero primo se no tiver divisores entre 2 e
n.
Pgina 26
Manual de Programao
Introduo Algoritmia
O tipo cadeia de caracteres pode tambm ser considerado um tipo de dados estruturados pois um construdo custa de um conjunto de dados do tipo carcter (1 a 255 caracteres ASCII). Neste captulo vo ser abordados apenas os tipos Matriz e Cadeia de Caracteres (os restantes sero abordados no Captulo 5 e seguintes)
Pgina 27
Manual de Programao
Introduo Algoritmia
Entende-se por vetor, um array unidimensional que constitudo por uma lista de dados ordenados segundo um ndice, ndice esse que identifica o nmero de ordem ou posio que cada elemento ocupa na lista. O seu armazenamento na memria do computador feito em posies ordenadas e adjacentes, podendo assim, cada elemento ser considerado como uma varivel simples atribuda a uma posio de memria. Exemplo: Vejamos o array Num de n posies. 7 Num[1] 15 Num[2] -2 Num[3] ... Num[...] 22 Num[n]
Por exemplo: o valor do array Num na posio 2 referenciado como Num[2] e igual a 15.
Pgina 28
Manual de Programao
Introduo Algoritmia
Algoritmo Pesquisa
1- [Inicializaes] Enc Falso k1 2- [Leitura do Array] Para i 1 at n Fazer incio Escrever(i, elemento:) Ler(A[i]) fim 3- [Leitura do elemento a pesquisar] Escrever(Elemento a pesquisar:) Ler(x) 4- [Pesquisa] Enq (( ~ Enc) ( k <= n)) Fazer incio Se (x = A[k]) Ento incio Enc Verdadeiro Pos k fim kk+1 fim 5- [Apresentao do resultado da pesquisa] Se (Enc) Ento Escrever(Elemento encontra-se na posio:, Pos) Seno Escrever(O elemento, x ,no existe no array!!!) 6- [Terminar] Sair -2 Iteraes i -2 -2 -2 -2 7 0 0 0 0 Para se realizar uma ordenao Descendente ou decrescente basta trocar o operador relacional na condio do Se de > para <. Numa traagem com 6 elementos: 7, -2, 0, 150, 18 e 92 obtm-se as seguintes sequncias at sequncia final (a sombreado) Iteraes j 0 7 7 7 7 150 150 150 18 18 18 18 18 150 92 92 92 92 92 150
Manual de Programao
Introduo Algoritmia
Em que A[i,j] se refere ao elemento que se encontra matriz A na linha i e na coluna j. Para a matriz X podemos afirmar: X[1,1]= 7 X[1,2]= -5 X[1,3]= 14 X[2,1]= 2 X[2,2]= 0 X[2,3]= 18 e por a adiante. X 7 2 8 -5 0 9 14 18 -1
Pgina 30
Manual de Programao
Introduo Algoritmia
Exemplo de um problema envolvendo Matrizes. Problema: Pretende-se um algoritmo que dadas duas matrizes A nxm e Bnxm da mesma ordem (mesmo n de linhas e o mesmo n de colunas) calcule a matriz Cnxm = Anxm + Bnxm.
Algoritmo SomaMat
1- [Leitura das Matrizes A e B] Para i 1 at n Fazer Para j 1 at m Fazer incio Escrever(Elemento a,i,j,: ) Ler(A[i,j]) fim Para i 1 at n Fazer Para j 1 at m Fazer incio Escrever(Elemento b,i,j,: ) Ler(B[i,j]) fim 2- [Clculo da matriz C] Para i 1 at n Fazer Para j 1 at m Fazer C[i,j] A[i,j] + B[i,j] 3- [Apresentao da matriz C] Para i 1 at n Fazer Para j 1 at m Fazer Escrever(C[i,j]) 4- [Terminar] Sair Nota: As matrizes bidimensionais so sempre por linhas (o mesmo
processadas
acontecendo com o seu armazenamento em memria). Assim, e por exemplo, para a leitura dos elementos de uma matriz Anxm (n linhas e m colunas) encaixado. O ciclo exterior percorre a matriz por linhas (de 1 at n). O ciclo interior percorre todos os elementos de uma linha (que igual ao nmero de temos dois ciclos Para..Fazer
colunas). A Multiplicao de Matrizes poder ser tema de um trabalho prtico a implementar mais tarde em linguagem Pascal.
Note que, para multiplicar duas matrizes condio necessria que o nmero de colunas da primeira matriz seja igual ao nmero de linhas da segunda, i.., se tivermos as matrizes: Anxm e Bpxm pela multiplicao A x B iremos obter a matriz Cnxm. Poder considerar 100 como valor limite para linhas e colunas (uma matriz A100x100 de inteiros ocupa 20.000 Bytes de memria)
Pgina 31
Manual de Programao
Introduo Algoritmia
O tipo String no um tipo standard, est contemplado no Turbo Pascal mas no Pascal Padro designa-se porque Packed Array, tendo no entanto algumas diferenas. Caracteres da Tabela ASCII: Alfabticos (a, b, c, ..., z, A, B, ..., Z); Numricos (0,1,2,3, ..., 9); Especiais (+, -, %, $, #, &, ..., <, >, ...); De Controlo (no se escrevem ou imprimem non printable mas desempenham funes especiais, por exemplo: 7 Bell, 10 Line Feed, 13 Carriage Return, 27 - Escape).
Exemplo: NovaLinha: String[2] = #13#10; Escrever a string NovaLinha equivalente a carregar em Enter, pois a string contem 2 caracteres de controlo (13 e 10): #13 Carriage Return pe o cursor no incio da linha atual (coluna 1); #10 Line Feed muda o cursor para uma nova linha (mantendo a coluna).
Algumas Operaes possveis sobre cadeias de caracteres: 1 - Atribuio () Nome Natasha Marisa dos Prazeres e Morais; atribudo o nome entre plicas varivel do tipo string Nome. 2 - Entrada/Sada Ler( ) e Escrever( ) Escrever(Escreva o seu apelido:); apresentada a string Escreva o seu apelido: Ler(Apelido); guardado o nome introduzido na varivel Apelido;
Eng. Hlio Vilas Pgina 32
Manual de Programao
Introduo Algoritmia
3 - Clculo de Comprimento Comp(str) Comp(str) d como resultado o nmero de caracteres da string; Comp(Nome) = 36; Nome a varivel usada em 1. Comp(Maria) = 5 4 - Comparao (usando os operadores relacionais: =, <>, <, <=, >, >=) Duas cadeias A e B so iguais se: tiverem o mesmo comprimento; os caracteres homlogos so iguais;
Obs. Note que o carcter A (ascii 65) diferente do carcter a (ascii 97).
5 - Concatenao + Esta operao consiste em reunir duas ou mais cadeias de caracteres numa s, conservando, no entanto, a ordem dos caracteres no interior de cada uma. O operador atua como um operador aritmtico adicionando a segunda cadeia primeira de forma adjacente. A Bora l, B estudar, C TLP, SA ++B++C Escrever(S); daria como resultado: Bora l estudar TLP 6 - Extrao de parte(s) de uma cadeia Sub( ) Sub(cadeia, incio, comprimento) d a subcadeia da cadeia de caracteres comeando na posio incio e com o comprimento estabelecido. Exemplos: Sub(Algoritmo,1,5); daria como resultado: Algor Sub(Algoritmo,3,4); daria como resultado: gori 7 - Pesquisa Pos( ) Pos(cadeia1, cadeia2) pesquisa a cadeia2 na cadeia1 e d resultado 0 se no encontrar ou diferente de zero que ser a posio de incio da cadeia2. Pos(Algoritmo, algor); daria como resultado: 0 Pos(Algoritmo, Algor); daria como resultado: 1 Pos(O Manel e Maria foram festa, x); daria como resultado: 0 Pos(O Manel e Maria foram festa, foram); daria como resultado: 17
Pgina 33
Manual de Programao
Introduo Algoritmia
8 - Insero Inserir( ) Inserir(cadeia1, posio, cadeia2) insere a cadeia2 na cadeia1 a partir da posio especificada. Inserir(Quem tolo,5, d tudo o que tem ); resultado: Quem d tudo que tem tolo Inserir(Hoje cinema, 5, vou ao ); resultado: Hoje vou ao cinema 9 - Eliminao Apagar( ) Apagar(cadeia, posio, comprimento) apaga o comprimento de caracteres na cadeia a partir da posio especificada. Apagar(Penso, logo existo!!,11,7); daria o resultado: Penso, logo!! 10 - Converso Valor( ) e Cadeia( ) Valor(cadeia) converte a cadeia para um valor; em pascal Val(s, v, c); Cadeia(nmero) converte o nmero numa cadeia; em pascal Str(v, s); Sendo: s string; v Value; c - code; Exemplos: Valor(1234) transforma a string 1234 no valor 1234; Cadeia(456) transforma o nmero 456 na string 456
Pgina 34
Manual de Programao
Introduo Algoritmia
consideravelmente mais elaborado por forma a simular esta facilidade. A idade do aluno validada num intervalo que vai de zero a cem anos (por exemplo). Repare ainda na ordenao, ordenado o nome e a respectiva idade, i.., quando trocado um nome tem que ser efectuada a troca na idade respectiva. A apresentao de dados feita numa s linha, nome e idade.
Existe ainda um outro tipo de vetores, os vetores de registos, que sero analisados mais frente neste Manual quando da apresentao do tipo de dados Registo.
Pgina 35
Manual de Programao
Introduo Algoritmia
Ler um vetor de 20 elementos e um valor a pesquisar nesse vetor. Efetuar a pesquisa e avisar o utilizador se o elemento existe ou no no vetor e a sua posio.
2-
Ler o total de vendas mensal (em unidades monetrias) de duas lojas durante seis meses e verificar qual das lojas teve maior volume de vendas nesse semestre.
3-
Dada uma sequncia de n nmeros calcular: o mximo, o mnimo, a diferena entre o mximo e o mnimo. Dever ainda contar as ocorrncias de elementos da sequncia iguais a essa diferena;
4-
Num concurso para admisso de empregados administrativos, os 100 candidatos selecionados tero de prestar uma prova de dactilografia com a durao de 5 minutos. Pretende-se elaborar um algoritmo que dado o nome, o nmero de palavras e o nmero de erros de cada candidato determine a pontuao e resultado obtidos sabendo que: Pontuao = [nmero de palavras (12 x nmero de erros)] / 5 e o resultado do teste tem os seguintes valores: Pontuao < 45 ....................................................Reprovado 46 < Pontuao < 52 .............................................Novo Teste Pontuao > 52 ....................................................Aprovado
5-
Ler um texto de no mximo 200 caracteres (palavras separadas por um espao) e contar o nmero de palavras, de vogais e espaos.
6-
Dados dois vetores V1[] e V2[] com 20 elementos cada, adicionar os elementos de ndice impar colocando o resultado da operao num terceiro vetor Res[]. Caso o ndice seja par, a operao a realizar deve ser a subtrao.
7-
Ler os nomes dos 20 alunos de uma turma e as notas dos trs perodos e calcular a mdia final dando indicao sobre o resultado final, aprovado ou reprovado. Um aluno ter como resultado aprovado se a mdia for maior ou igual a 9.45.
Pgina 36
Manual de Programao
Introduo Algoritmia
Pgina 37