Você está na página 1de 37

Algoritmia

e Programao em Pascal

(Texto atualizado para ps -acordo)

Hlio Vilas Braga Junho de 2001

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

Eng. Hlio Vilas

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

Eng. Hlio Vilas

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.

Eng. Hlio Vilas

Pgina 4

Manual de Programao

Introduo Algoritmia

1.2. O Mtodo Top-Down


A abordagem de um problema segundo uma conceo descendente, em ingls top-down, um mtodo de tratamento de problemas do geral para o particular, em que se parte dos pontos mais gerais e por simplificao (anlise) se chega aos aspetos mais particulares. Diz-se ento que o mtodo Top-Down consiste na diviso de um problema em problemas cada vez mais pequenos at se obter um nvel de especificao considerado aceitvel (dividir para reinar). Poder-se- afirmar que se atingiu um nvel de especificao considerado aceitvel sempre que as operaes encontradas na anlise top-down possam ser implementadas diretamente usando as instrues da linguagem algortmica (nvel da linguagem algortmica). Um problema a ser resolvido num computador, poder sempre ser dividid o em pelo menos trs subproblemas: 1- entrada de dados, 2- clculos e 3- apresentao de resultados. Haver ainda um quarto que diz respeito terminao do programa e que dever existir em todos os algoritmos. Para uma melhor compreenso do mtodo top-down observe-se o seguinte exemplo:

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);

subproblemas obtidos. Faltam especificar

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.

Eng. Hlio Vilas

Pgina 5

Manual de Programao

Introduo Algoritmia

1.3. Tipos de Dados


1.3.1. Variveis, Constantes e Identificadores
O objetivo principal da utilizao de um computador a manipulao de dados 1 ou informao2. Os dados num programa podem ser usados sob a forma de constantes ou variveis: Constantes so valores que se mantm inalterados durante a execuo de um programa; Variveis so entidades que podem assumir diferentes valores ao longo da execuo de um programa.

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.3.2. Regras para a construo de Identificadores


Os identificadores (nomes de variveis ou constantes) tm que obedecer s seguintes regras: 1. O primeiro carcter tem que ser uma letra (a..z, A..Z); 2. Os restantes caracteres podem ser letras, algarismos ou o carcter de ligao _ ; 3. O nome no pode conter espaos; 4. As palavras reservadas das linguagens de programao no podem ser usadas; 5. No podem ser usados caracteres acentuados (ex.: , , , , , etc.). Combinando variveis, constantes e operadores obtm-se expresses. As variveis e constantes esto sujeitas s operaes possveis de acordo com os seus tipos de dados.

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.

Eng. Hlio Vilas

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

1.3.3. Classificao dos Tipos de Dados


Consideram-se os seguintes tipos de dados:

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

Eng. Hlio Vilas

Pgina 7

Manual de Programao

Introduo Algoritmia

1.4. Operadores, Operaes Elementares e Expresses


Os operadores dividem-se em 5 grupos: 1 Aritmticos; 2 Relacionais (ou de comparao); 3 Lgicos; 4 de Cadeias de Caracteres; 5 Funcionais.

1.4.1. Operadores Aritmticos


Designao
Multiplicao (asterisco) Diviso (barra slash) Adio Subtrao Diviso Inteira (Truncada) Resto da Diviso

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.

1.4.2. Operadores Relacionais (de comparao)


Designao
Igual Diferente Menor Menor ou igual Maior Maior ou igual

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

1.4.3. Operadores Lgicos


Designao
Negao Conjuno (e lgico) Disjuno (ou lgico)

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

1.4.4. Operadores de Cadeias de Caracteres


Designao
Concatenao Todos os Relacionais Exemplos Infor + mtica = Informtica Al + ca + chofra = Alcachofra Nota: Nas operaes de comparao de cadeias de caracteres so utilizados os seguintes critrios: 1 a ordem alfabtica, 2 a quantidade de caracteres e 3 valor do cdigo ASCII (apenas em algumas linguagens de programao). Boa Noite < Bom dia (Verdadeiro) Ol < Oi (Falso)

Operador
+ =, <>, <, <=, >, >=

1.4.5. Operadores Funcionais ou Funes.


Designao
Quadrado (Square) Raiz Quadrada (Square Root) Mdulo (valor absoluto) Seno Concatenao de duas strings

Operador
SQR( ) SQRT( ) ABS( ) SIN( ) CONCAT( )

Eng. Hlio Vilas

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.

1.4.6. Expresses: Escrita comum e em Programao


Na escrita corrente de expresses vulgar omitirem-se os operadores por serem considerados implcitos (alis isso mesmo ensinado na matemtica), em programao todos os operadores tm de ser explicitados ou ocorrero situaes de erro inesperadas. Ento vejamos, a expresso matemtica 2ab2 em programao ser escrita da forma: 2*a*b*b. Exemplo Escrita Comum 3(2a+b2) 3c 2a em programao 3*(2*a+b*b)/(3*c-2*a)

1.4.7. Prioridade dos Operadores


Quando numa expresso figuram variados operadores, torna-se necessrio conhecer as regras de prioridade (ou precedncia) na execuo das operaes de forma a obter result ados esperados. As regras de prioridade dos operadores nas Linguagens de Programao so as mesmas que na Matemtica, primeiro os parnteses e depois conforme a tabela seguinte:

Mais Alta

Not * /

(Operadores Unrios)

Div Mod And

+ Or Mais Baixa = <> < > <= >=

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;

Eng. Hlio Vilas

Pgina 10

Manual de Programao

Introduo Algoritmia

2 Os parnteses alteram a ordem das operaes, funcionando dentro dos parnteses a regra anterior.

1.5. Noes de Lgica


Os operadores lgicos estabelecem uma relao entre os operandos, tendo como resultado um valor lgico que ou verdadeiro ou falso.

1.5.1. Negao (NOT)


A negao um operador unrio que opera sobre um valor lgico e d o seu valor negado. Vejamos a Tabela de Verdade da Negao: Para designar o operador negao so tambm utilizados os smbolos: ~, e Propriedade da negao: ~( ~( a) ) = a

a
1 0

~a
0 1

1.5.2. Conjuno (AND)


A conjuno um operador lgico binrio (opera sobre dois operandos) que s d resultado verdadeiro quando os dois operandos tiverem valor verdadeiro. Para designar o operador conjuno so tambm utilizados os smbolos: e Propriedades da Conjuno: i) a b = b a (Comutativa) ii) (a b) c = a (b c) (Associativa) iii) a 1 = 1 a = a (Elemento Neutro) iv) a 0 = 0 a = 0 (Elemento Absorvente) v) a a = a (Idempotncia)

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

1.5.3. Disjuno (Or)


A disjuno um operador binrio que s d resultado Falso quando os dois operandos tiverem valor Falso.

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)

1.6. Atribuio, Entrada e Sada de dados


1.6.1. Atribuio
A operao de atribuio consiste em atribuir a uma varivel um valor. Este pode ser um valor constante ou uma expresso. Esta operao representa-se em Algoritmia pelo smbolo . Supondo que uma varivel j contem um valor, ao ser-lhe atribudo um outro valor, o segundo vai sobrepor-se ao primeiro ficando armazenado na varivel o segundo valor. Assim o valor armazenado numa varivel ser sempre o ltimo valor atribudo a essa varivel. Z 4, significa que a varivel Z possui a partir deste momento o valor 4. Se tivermos agora cubo Z * Z * Z, a execuo ser a seguinte: primeiro calculado o valor da expresso (64) e em seguida atribudo varivel cubo, ou seja, primeiro calculado o segundo membro e s depois efetuada a atribuio.

1.6.2. Entrada de dados


Outra forma de atribuir valores a variveis pela entrada de dados atravs dos perifricos de entrada sendo o mais utilizado o Teclado. Quando num programa so introduzidos dados estes tm que ser armazenados em variveis (endereos de memria) para poderem ser processados. A funo Ler() da linguagem algortmica, atribui a uma varivel o valor lido de um perifrico de entrada. Esta funo funciona tal como a atribuio, de forma destrutiva para os valores que as variveis a ler possuam.

1.6.3. Sada de dados


Para visualizar dados ou resultados no exterior, eles tero que ser enviados para um dos perifricos de sada sada de dados, vulgarmente Monitor e/ou Impressora. A funo algortmica Escrever( ) permite realizar essa ao. Pode-se assim, mostrar os valores que as variveis possuem em

Eng. Hlio Vilas

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

identificadores repetidos, o nome da varivel e nome do algoritmo (neste caso).

Eng. Hlio Vilas

Pgina 13

Manual de Programao

Introduo Algoritmia

1.7. Traagem de algoritmos


Como sabe um algoritmo uma sequncia de instrues ( aes) a serem executadas numa ordem bem definida, sendo cada instruo clara e sem ambiguidades. Um algoritmo constitudo por um nome (ttulo) que seja sugestivo em relao funo que ele implementa, a sequncia de aes que resolvem o problema (ver exemplo anterior, algoritmo Soma2), cada passo deve ter uma descrio e caso tenha mais que uma instruo elas sero executadas pela ordem que aparecem. O algoritmo termina com a palavra sair. Pe-se ento a questo: como saber se o algoritmo resolve o que se pretende? Uma forma de verificar sem a implementao do algoritmo em nenhuma linguagem de programao ser execut-lo manualmente atravs da simulao das instrues constituintes. Este processo designa-se por traagem (do ingls dry running). A traagem consiste na construo de uma tabela com os seguintes elementos po r colunas: Passo, Iterao (a ver no prximo captulo), Variveis e a Sada. Arbitrando valores de entrada para dos quais se sabe a sada a obter, inicia-se a execuo do algoritmo sequencialmente registando em cada linha da tabela os valores: o passo, a i terao, os valores das variveis e atribuies, a(s) sada(s) que vo acontecendo at se atingir o final do algoritmo, verificando-se assim se resolveu ou no o problema. Voltemos a analisar o algoritmo Soma2 e realizando a respetiva traagem tomando 15 e 23 para valores dos operandos. Algoritmo Soma2 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 Obs. O valor esperado para a sada 38, dado que a soma dos dois operandos 38. Analisemos: Traagem Passo 1 2 3 Op1 15 Op2 23 38 A Soma : 38 Soma Sada

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.

Eng. Hlio Vilas

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

Processamento de dados ................................................

Caixa de Deciso .............................................................

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

Eng. Hlio Vilas

Pgina 15

Manual de Programao

Introduo Algoritmia

1.9. Exerccios Propostos


1 Identifique o tipo de cada um dos seguintes dados: Maria dos Prazeres - 2345 Falso 3.500$00 8,7345E22 45340

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)

7(ab2 +1) ab2

52 x 2ab a+b2

Algoritmo; Mtodo Top-Down;

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);

Eng. Hlio Vilas

Pgina 16

Manual de Programao

Introduo Algoritmia

CAP 2. ESTRUTURAS DE CONTROLO


Na resoluo de um problema frequente surgirem situaes que vo alm do uso sequencial de instrues. Como por exemplo: 1 - Analisar uma condio ou condies de forma a determinar qual ou quais as aes a executar; 2 - Repetir um conjunto de instrues um determinado nmero de vezes, ou at que se verifique uma condio ou ainda enquanto se verificar uma condio; 3 - Conjuntos de instrues que se repetem em diversos pontos do programa, havendo interesse em transforma-las num subprograma, por forma a ser invocado apenas pelo nome e

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

Simples Dupla Mltipla

Se ... Ento Se ... Ento Seno Caso ... Seja

De Controlo
Repetitivas (ou Cclicas) Repetir ... At

Enquanto ... Fazer Para ... Fazer

2.1. Estrutura Sequencial


A estrutura de controlo sequencial, consiste na ordenao das instrues de um algoritmo de modo a que sejam executadas em sequncia sem possibilidade de omitir nenhuma. Ao lado encontra-se o Fluxograma tpico desta estrutura. Exemplos deste tipo de estrutura so todos os algoritmos vistos at aqui dado que todas as instrues so executadas sequencialmente.

Inicio

Aco 1

Aco n

Fim

Eng. Hlio Vilas

Pgina 17

Manual de Programao

Introduo Algoritmia

2.2. Estruturas Condicionais


As estruturas condicionais realizam uma instruo ou conjunto de instrues ( aes) dependendo do cumprimento ou no de uma condio ou instruo booleana, i.., consoante o valor da condio verdadeiro (V) ou falso (F). Existem trs tipos bsicos de estruturas condicionais: simples, dupla e mltipla.

2.2.1. Estrutura Condicional Simples (Se .. Ento)


Esta estrutura caracterizada pela avaliao ou teste de uma condio, i.: se a condio verdadeira executa uma ao ou conjunto de aes; se a condio falsa, no efetua qualquer ao e sai do bloco (passa ao seguinte). apresentado em seguida o fluxograma genrico desta estrutura bem como o algoritmo contemplando a situao de termos uma instruo ou um conjunto de instrues. Algoritmo (Sintaxe ) Uma Instruo Conjunto de Instrues ... ... Se (cond) Ento Ao ... ... Nota: Repare na utilizao dos delimitadores incio e fim quando a estrutura engloba um conjunto de aes a realizar, situao comum a todas as estruturas exceo da Repetir At(cond). Exemplo: dados dois nmeros calcular o maior. Algoritmo Maior 1- [Leitura de dados] Escrever(Primeiro nmero:) Ler(a) Escrever(Segundo nmero:) Ler(b) 2- [Clculo e apresentao do maior] Se (a > b) Ento Escrever(O maior :, a) Se (a < b) Ento Escrever(O maior :, b) Se (a = b) Ento Escrever(Os nmeros so iguais) 3- [Terminar] Sair Se (cond) Ento Inicio Aco1 ... Aco n Fim

F Cond V Aco 1

Aco n

Eng. Hlio Vilas

Pgina 18

Manual de Programao

Introduo Algoritmia

2.2.2. Estrutura Condicional Dupla (Se .. Ento .. Seno)


Esta estrutura caracterizada pela avaliao ou teste de uma condio, i.: se a condio verdadeira executa uma ao ou conjunto de aes; se a condio falsa, executa uma outra ao ou conjunto de aes. apresentado em seguida o fluxograma genrico desta estrutura bem como o algoritmo contemplando a situao de termos uma instruo ou um conjunto de instrues. Algoritmo (Sintaxe )
F Cond V Aco 1 Aco i

Uma Instruo

Conjunto de Instrues ... Se (cond) Ento Inicio Aco1 Aco n Fim Seno Inicio Aco i Aco x Fim ...

... Se (cond) Ento Aco1 Seno Aco x ...

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

2.2.3. Estrutura Condicional Mltipla (Caso .. Seja)


A estrutura condicional mltipla caracterizada pela avaliao do valor de uma varivel que pode ter como resultado n (finito) valores distintos (1, 2, 3, ... n) seguindo-se a execuo de uma das n sequncias de aes distintas. Sintaxe de uma estrutura refere-se forma que essa estrutura pode tomar (ou algoritmo genrico).
Eng. Hlio Vilas Pgina 19

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

Sem Seno Caso (Var) Seja 1: S1

Com Seno Caso (Var) Seja 1: S1 2: S2 n: Sn Seno Sx fim

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

2.3. Estrutura Repetitivas (ou Cclicas)


As estruturas repetitivas (tambm chamadas de cclicas ou iterativas) so indicadas quando existem tarefas com carcter repetitivo, aplicando tratamento idntico a conjuntos homogneos d e dados. Basta indicar uma vez a sequncia de operaes (aes a realizar) e repeti-las as vezes necessrias.

Eng. Hlio Vilas

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.

2.3.1. Estrutura Enquanto .. Fazer


Esta estrutura caracteriza-se pela execuo repetida de um processo (ao ou conjunto de aes) enquanto se verifica o valor lgico verdadeiro de uma condio. Quando o valor lgico for falso terminar o processamento iterativo. Pode ainda acontecer que a sequncia de aes nunca seja executada caso a condio seja falsa partida. O teste da condio feito no incio do ciclo. Apresenta-se a seguir o fluxograma e algoritmo respetivo: Algoritmo (Sintaxe) Uma Instruo ... Enq (cond) Fazer Aco1 ... ... Conjunto de Instrues ... Enq (cond) Fazer Inicio Aco1 Aco n Fim

F Cond V Aco 1 Aco n

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

2.3.2. Estrutura Repetir .. At


Esta estrutura permite que um conjunto de aes se repita at que uma determinada condio se verifique (seja verdadeira). Como o conjunto de aes executado antes do teste da condio, ser executado pelo menos uma vez. Esta estrutura a aconselhada sempre que se quer fazer a validao de uma entrada de dados (por exemplo: um nmero positivo). Fluxograma e algoritmo respetivo: Algoritmo (Sintaxe) Uma Instruo
Aco 1

Conjunto de Instrues ... Repetir Aco1 Aco n At (cond) ...

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

Eng. Hlio Vilas

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

Resto x Mod 10 Escrever(Resto) x x Div 10

Fim

Ainda o mesmo exemplo mas transformando o nmero num outro escrito por ordem inversa dos seus algarismos

Eng. Hlio Vilas

Pgina 23

Manual de Programao

Introduo Algoritmia

Exemplo3: o nmero 123 d o nmero 321.

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

2.3.3. Estrutura Para .. Fazer


Esta estrutura realiza a repetio da execuo de um conjunto de aes, sendo controlado automaticamente o nmero de vezes que o ciclo vai executar. a estrutura adequada sempre que se conhece previamente o nmero de vezes que o ciclo vai executar (o nmero de iteraes). Para o referido controlo automtico necessrio definir uma varivel numrica, o seu valor inicial e final (o incremento fixo e realizado pela prpria estrutura). O ciclo termina quando o valor da varivel ultrapassar o valor final previamente definido. A condio avaliada no incio de cada iterao. Vejamos o Algoritmo e respetivo fluxograma.

Algoritmo (Sintaxe) i 1 at n
V F

Uma Instruo ... Para i 1 at n Fazer Aco1 ...

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.

Eng. Hlio Vilas

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.

Eng. Hlio Vilas

Pgina 25

Manual de Programao

Introduo Algoritmia

2.4. Exerccios Propostos


Para os problemas seguintes desenvolva: o algoritmo, fluxograma e traagem (arbitrando valores que lhe paream aceitveis):

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-

Ler um nmero inteiro positivo N e escrever todos os nmeros mpares inferiores a N;

4-

Calcular a soma e mdia de uma sequncia de n nmeros (fim = 0);

5-

Dada uma sequncia de n nmeros inteiros contar o nmero de zeros, pares e mpares;

6-

Calcular o valor de uma potncia dados a base e o expoente pertencentes a Z;

7-

Ler um nmero na base 10 e convert-lo para base 2;

8-

Ler um nmero na base 2 e convert-lo para base 10;

9-

Ler um nmero inteiro positivo e verificar se primo;

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.

Eng. Hlio Vilas

Pgina 26

Manual de Programao

Introduo Algoritmia

CAP 3. ESTRUTURAS DE DADOS


At aqui, apenas se tem falado e trabalhado com dados de tipos simples (inteiro, real, carcter e booleano ou lgico), ou seja, dados em que cada varivel opera apenas com um determinado valor de cada vez. No entanto, possvel agrupar um conjunto de dados numa mesma varivel, estando assim na presena de dados estruturados. Uma estrutura de dados um conjunto caracterizado pela sua organizao e pelas operaes que se podem executar sobre a referida estrutura. Os dados estruturados sobre os quais vai incidir o nosso estudo so os seguintes: Algoritmia 1- Matriz ou Vetor 2- Cadeia de Caracteres 3- Registo 4- Conjunto 5- Ficheiro Pascal 1- Array 2- String 3- Record 4- Set 5- File

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)

3.1. Vetores e Matrizes Arrays


Este tipo de dados estruturado o mais comum. Na traduo para portugus pode ser designado como vetor ou matriz. Um array (vetor ou matriz) um tipo de dados que agrupa numa mesma varivel um conjunto de valores do mesmo tipo (inteiro, real, booleano, carcter, cadeia de caracteres, array ou registo). Pode ser definido como sendo uma estrutura de armazenamento de dados (em memria logo voltil), ou ainda, um conjunto finito e ordenado de elementos homogneos (do mesmo tipo). Quando se refere ordenado significa que possvel identificar qualquer um dos seus elementos, i., o 1, 2, 3, etc.

Eng. Hlio Vilas

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.

3.1.1. Operaes sobre Vetores


Sobre vetores podem realizar-se as seguintes operaes: 1. Atribuio Fazendo: Num[2] 0 e Num[n] -11 passamos a ter: 7 Num[1] 2. Leitura/Escrita Escrever(Insira o 5 elemento do Array:) Ler(Num[5]); Na posio 5 do array ficar armazenado o valor introduzido pelo utilizador. Escrever (Num[1]) apresentar no monitor o valor: 7 Escrever (Num[2]) apresentar no monitor o valor: 15 3. Atualizao: insero, alterao e eliminao de elementos As operaes de insero, alterao e eliminao podem ser efetuadas atravs da leitura ou atribuio de valores s posies do array. 4. Pesquisa de um elemento 5. Ordenao dos elementos As operaes de pesquisa e de ordenao so efetuadas atravs de um conjunto de aes e de algoritmos prprios, como se descreve nas pginas seguintes. 0 Num[2] -2 Num[3] ... Num[...] -11 Num[n]

Eng. Hlio Vilas

Pgina 28

Manual de Programao

Introduo Algoritmia

3.1.2. Pesquisa de um elemento num Vetor


O algoritmo seguinte permite ler os n (n valor genrico) elementos de um vetor A e em seguida l um outro elemento que ser pesquisado no vetor, i.., verifica se ele existe.

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

3.1.3. Ordenao dos elementos de um Vetor


Veremos agora como ordenar de forma ascendente ou descendente os elementos de um vetor, supondo o vetor j preenchido com os respetivos valores.
Eng. Hlio Vilas Pgina 29

Manual de Programao

Introduo Algoritmia

Algoritmo Ordena (ordenao Ascendente ou Crescente)


1- [Ordenao do vetor] Para i 1 at n-1 Fazer Para j i + 1 at n Fazer Se (A[i] > A[j]) Ento incio Aux A[i] A[i] A[j] A[j] Aux fim 2- [Apresentao do vetor ordenado] Para i 1 at n Fazer Escrever(A[i]) 3- [Terminar] Sair

3.1.4. Matrizes Arrays Multidimensionais


At ao momento temos tratado de arrays unidimensionais ou vetores, mas pode haver necessidade de usar arrays bidimensionais ou mesmo multidimensionais. Os arrays bidimensionais (tabelas) possuem os seus elementos dispostos como se v a seguir e so identificados por dois ndices, podemos mesmo considerar uma tabela como sendo um vetor de vetores. Aspeto genrico de uma matriz: A[1,1] A[2,1] Esta matriz diz-se que uma matriz de ordem n x m (ler n por m), i., tem n linhas e m colunas A[3,1] A[4,1] ... A[n,1] A[1,2] A[2,2] A[3,2] A[4,2] ... A[n,2] A[1,3] A[2,3] A[3,3] A[4,3] ... A[n,3] A[1,4] A[2,4] A[3,4] A[4,4] ... A[n,4] ... ... ... ... ... ... A[1,m] A[2,m] A[3,m] A[4,m] ... A[n,m]

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

Eng. Hlio Vilas

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)

Eng. Hlio Vilas

Pgina 31

Manual de Programao

Introduo Algoritmia

3.2. Cadeias de Caracteres strings


Uma cadeia de caracteres uma sequncia de caracteres (letras, algarismos e caracteres especiais e de controlo, incluindo o espao vazio carcter 255 da tabela ASCII), vulgarmente delimitada por apstrofes (ou plicas). Uma cadeia de caracteres que no possua nenhum carcter, diz -se uma cadeia vazia. Ao nmero de caracteres de uma string chama-se comprimento da string. Em Pascal uma string pode ter comprimento fixo ou varivel, vejamos um exemplo: Nome1 : String[10]; a declarao em Pascal de uma string com comprimento fixo de 10; Nome2: String; a declarao de uma string com comprimento varivel, 1 a 255 caracteres; uma string em Pascal pode tambm ser tratada como um array de caracteres.

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

Eng. Hlio Vilas

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

3.2.1. Vetores de Cadeias de Caracteres Arrays de Caracteres


Um vetor, como j foi dito anteriormente, pode armazenar dados do tipo, entre outros, carcter ou cadeia de caracteres. Quando o vetor do tipo carcter, armazena em cada posio um elemento desse tipo ou seja um carcter ascii de 0 a 255. Porm, se o vetor do tipo cadeia de caracteres armazena em cada posio uma cadeia de caracteres, podendo tambm ser acedidos individualmente. Esta particularidade pode, numa primeira abordagem, parecer de pouca mas se pensarmos em termos da entrada/sada de dados do tipo cadeia de caracteres (ex. nomes, moradas, ...) torna -se mais percetvel a sua importncia. Seria razoavelmente desagradvel elaborar um algoritmo (programa) para lidar com entrada/sada de dados deste tipo fazendo o processamento carcter a carcter, seno vejamos um problema exemplo: Ler os nomes e idades de n alunos de uma turma e orden-los por ordem ascendente de nome.

Eng. Hlio Vilas

Pgina 34

Manual de Programao

Introduo Algoritmia

Algoritmo NomeIdade (ordenao Ascendente)


1- [Leitura do nmero de alunos] Repetir Escrever(Nmero de alunos da turma: ) Ler(n) At (n > 0) Nota: 2- [Leitura dos Nomes e Idades] Para i 1 at n Fazer incio Escrever(Nome do Aluno n,i,: ) Ler(Nome[i]) Repetir Escrever(Idade do Aluno n,i,: ) Ler(Idade[i]) At ((Idade[i]) > 0) (Idade[i]) < 100)) fim 3- [Ordenao dos Nomes e Idades] Para i 1 at n-1 Fazer Para j i + 1 at n Fazer Se (Nome[i] > Nome[j]) Ento incio NomAux Nome[i] Nome[i] Nome[j] Nome[j] NomAux IdadAux Idade[i] Idade[i] Idade[j] Idade[j] IdadAux fim 4- [Apresentao Nomes e Idades Ordenados] Para i 1 at n Fazer Escrever(Nome[i],..........., Idade[i]) 5- [Terminar] Sair O nome do aluno lido de uma s vez, ou seja, o vetor Nome aqui tratado como um vetor de cadeias de caracteres ( lida uma cadeia de caracteres de cada vez um nome). Se assim no fosse os nomes teriam que ser lidos carcter a carcter o que alm de fastidioso exigiria um algoritmo

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.

Eng. Hlio Vilas

Pgina 35

Manual de Programao

Introduo Algoritmia

3.3. Exerccios Propostos


Para os problemas seguintes desenvolva: o algoritmo e respetivo fluxograma:
1-

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.

Eng. Hlio Vilas

Pgina 36

Manual de Programao

Introduo Algoritmia

CAP 4. INTRODUO LINGUAGEM PASCAL


BREVEMENTE!!!

Pgina 37