You are on page 1of 43

Escola Sec. de S.

Joo do Estoril Novembro de 1998

Ensino Recorrente - Programao de Computadores

Algoritmo
Para iniciar este captulo vamos falar de culinria. Algo que, aparentemente, no ter nada a ver com programao. Vamos, ento, analisar uma receita culinria. Para iniciar, verificamos que composta de duas partes: uma que descreve os ingredientes e a outra (preparao) que explica como confeccionar os scones. A preparao consiste na descrio sequencial dos passos da confeco. Observemos que a descrio dos passos da preparao ordenada, isto , tem de ser feita na ordem apresentada. Ningum amassa tudo e s depois peneira a farinha. Este tipo de descrio pode ser aplicada a muitas outras situaes do dia-a-dia. Por exemplo, na montagem de um kit seja de mobilirio, seja de modelismo; Receita de Scones trazem sempre instrues de montagem que mostram a ordem ingredientes: farinha de trigo - 12 colheres de sopa das peas a montar. acar refinado - 3 colheres de sopa Encontra, ainda, no manual da leite - 6 colheres de sopa manteiga - 1 colher de sopa sua impressora quando explica a fermento em p - 1 colher de sopa mudana da fita, do cartucho de 1 ovo inteiro uma pitada grande de sal tinta ou do toner conforme o tipo Preparao: de impressora que se trata. a farinha com o fermento para um alguidar. A este tipo de apresentao d- Peneira-secima todas as outras coisas e amassa-se Pe-se em se o nome de algoritmo. Assim, a muito ligeiramente, s para ligar tudo, sem bater nem receita de scones apresentada o cansar a massa. e colocam-se num tabuleiro forrado Fazem-se bolinhas algoritmo da sua confeco. As de alumnio. instrues de montagem de um kit Depois de cozidos, abrem-se de lado e mete-se-lhes um bocado de manteiga. so o algoritmo da montagem desse kit. Se analisarmos os diversos algoritmos, verificamos que contm caractersticas comuns. So elas: - descrio sequencial (ordenada), cada passo corresponde a uma aco elementar clara, no devendo ocasionar ambiguidade na sua interpretao; - tem um nmero finito de passos. apresentado, seguidamente, o algoritmo do clculo do mltiplo de um nmero.

Algoritmo do clculo dos mltiplos de um nmero: 1. Anotar o limite dos mltiplos (limite) 2. Anotar o nmero do qual se quer saber os mltiplos (nmero) 3. O primeiro mltiplo o prprio nmero (mltiplo = nmero) 4. Enquanto o mltiplo for menor que o limite indicado fazer: 4.1. Anotar o mltiplo 4.2. O novo mltiplo ser igual ao mltiplo anterior mais o nmero (mltiplo = mltiplo + nmero) 5. Fim do algoritmo.

Alexandre Alcobia

Unidade 1 - Algoritmia

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Criar um programa de computador


Do que foi dito anteriormente, conclui-se que para fazer um programa devemos ter claro o algoritmo do nosso problema. Portanto, primeiro h que estudar o problema e elaborar o seu algoritmo. Uma vez estabelecido o seu algoritmo podemos, ento, passar para a sua implementao numa linguagem de programao e assim testar o programa no computador. Concluindo, a construo de um programa comporta duas fases (ver figura): - fase de resoluo do problema consiste na formulao do algoritmo eficaz para a resoluo do problema posto; - fase de implementao - consiste na traduo do algoritmo para a linguagem de programao escolhida.

Algoritmo do clculo dos mltiplos de um nmero num computador: 1. Entrar pelo teclado o limite dos mltiplos (limite) 2. Entrar pelo teclado o nmero do qual se quer saber os mltiplos (nmero) 3. O primeiro mltiplo o prprio nmero (mltiplo = nmero) 4. Enquanto o mltiplo for menor que o limite indicado fazer: 4.1. Apresentar no ecr o mltiplo 4.2. O novo mltiplo ser igual ao mltiplo anterior mais o nmero (mltiplo = mltiplo + nmero) 5. Fim do algoritmo. program Multiplos (input,output); {Este programa est escrito num dialcto do PASCAL}; uses Crt; var Limite : integer; Numero : integer; Multiplo : integer; begin clrscr; write (Qual o valor de que se quer achar os mltiplos ); readln (Numero); write (Qual o limite da sequncia? ); readln (Limite); writeln ( Os mltiplos de ,Numero:3:2, so: ); Multiplo := Numero; while Multiplo < Limite do begin writeln (Multiplo:3:2); Multiplo := Multiplo + Numero; end; end.

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Exerccios
1. Construa o algoritmo para calcular a rea de um rectngulo.
Algoritmo rea do rectngulo 1. Entrar pelo teclado o valor do lado1 2. Entrar pelo teclado o valor do lado2 3. Calcular a rea A = lado1 x lado2 4. Apresentar no ecr o valor da rea

2. Algoritmo do calculo da hipotenusa de um tringulo rectngulo.


Temos que saber a frmula:

hipot = cateto12 + cateto22


Alm da frmula, temos que dar ao computador os valores dos catetos do tringulo.

3. Algoritmo da transformao dos valores da temperatura de graus Fahrenheit para graus Clsius.
Tente o leitor resolver este problema, sabendo que a frmula a aplicar ser:

celsius =

5 ( fahr 32) 9

4. Explique o que entende por algoritmo.

Alexandre Alcobia

Unidade 1 - Algoritmia

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Linguagem algortmica
Temos vindo a usar a linguagem comum como a linguagem de desenvolvimento de algoritmos. A linguagem algortmica deve ser formal, isto , a descrio tem de obedecer a regras de lgica precisas e sem ambiguidades. Mas por outro lado, no se torna necessrio que o cdigo seja muito rgido como acontece na linguagem do computador podendo, por exemplo, as frases serem escritas em letras maisculas ou minsculas e as expresses matemticas escritas na forma vulgar. Assim, vamos estabelecer algumas regras e criar uma linguagem algoritmica que conhecida por pseudolinguagem ou pseudocdigo. A par da pseudolinguagem existe uma outra forma, esta grfica, de representao de algoritmos. Esta baseia-se na utilizao de determinados smbolos para fazer uma descrio grfica do algoritmo.

Pseudolinguagem
A pseudolinguagem pode ser visto como a tentativa de fundir a expressividade da linguagem natural e o rigor lgico de esquemas como o fluxograma. A pseudolinguagem permite a descrio do algoritmo de uma forma linear, fcil de ler e fcil de compreender. Vamos aplicar esta linguagem algoritmica, reformulando um algoritmo anteriormente tratado. O algoritmo deve estar enquadrado entre dois indicadores que possibilitem determinar onde o algoritmo comea e acaba. Assim, aparecem as instrues Incio e Fim.

Atribuio
Esta operao tem por objectivo atribuir um valor a uma varivel. A varivel funciona como um recipiente em que vo ser colocados dados. Temos de criar tantas variveis (recipientes) quantas as forem necessrias para o correcto funcionamento do algoritmo. A operao de atribuio coloca o dado na varivel. Exemplo: x -b/a (na varivel x colocado o valor de -b/a)

Introduo e sada de dados


A instruo Sair utilizada para apresentar os dados ao utilizador. Exemplo: Sair O valor da rea , rea A instruo Entrar utilizada para introduzir dados no computador atravs do operador. Estes dados so afectados a variveis. Exemplo: Entrar a, b Posteriormente, trataremos dos tipos de dados a declarar e das estruturas de deciso.

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Peguemos no algoritmo da circunferncia e vamos reformular a sua apresentao:


Algoritmo circunferncia [Este algoritmo d as caractersticas de uma circunferncia] inteiro raio real rea, permetro PI 3,14159 Incio Entrar raio rea PI x raio2 permetro 2 x PI x raio Sair rea, permetro Fim

Num algoritmo, podemos definir trs seces:

Cabealho
O cabealho a seco onde dado o nome ao algoritmo. Comea com a palavra "Algoritmo".

Declaraes
Nesta, apresentada a descrio das variveis usadas.

Corpo
Esta seco contm a sequncia dos passos (aces) do algoritmo. Inicia-se com a palavra "Incio" e termina com "Fim". Existe um tipo de objecto de grande importncia na clarificao de um algoritmo. So os comentrios que ajudam muito sua compreenso.

Comentrios
Cada passo do algoritmo pode iniciar com um comentrio entre dois parnteses rectos. Estes comentrios do uma breve descrio do passo ou dum grupo de passos seguintes. Os comentrios so uma parte importante do algoritmo. Eles servem para tornar a leitura, do algoritmo, mais fcil e clara.

Alexandre Alcobia

Unidade 1 - Algoritmia

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Fluxogramas
Esta tcnica surge para representar, graficamente, o desenvolvimento de algoritmos. O fluxograma mostra a lgica do algoritmo dando uma apresentao global das interligaes entre os diversos passos. Actualmente, a utilizao do fluxograma restringe-se a um apoio complementar na documentao do algoritmo, valendo pela vantagem grfica da apresentao das interligaes.
Alguns smbolos usados na construo de fluxogramas

Limites do algoritmo

Processamento

Entrada ou sada de dados

Incio Isto um comentrio num fluxograma

Ligao entre partes do fluxograma

raio

Deciso

rea PIxraio2

permetro 2xPIxraio

perimetro area

Fim

Exerccios
Aproveitando os exerccios anteriores, apresente os algoritmos em pseudolinguagem e faa os respectivos fluxogramas.

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Estrutura de deciso I
At agora temos estado a lidar com algoritmos puramente sequnciais, isto , as instrues so cumpridas uma aps outra at chegar ao fim do algoritmo. No entanto existem estruturas que permitem a tomada de decises em funo de condies estabelecidas e assim, o algoritmo apresenta aces alternativas. Estas condies podem ser verdadeiras ou falsas; conforme esse valor o algoritmo segue uma aco ou segue outra em alternativa. Estas estruturas no so mais que instrues complexas, geralmente, compostas por vrias palavras, mas formando um todo. A primeira que vamos usar de deciso simples e tem o formato Se condio ento aco1 seno aco2 fim se Esta ser a sua forma em pseudolinguagem.

Sim

condio

No

aco1

aco2

Alexandre Alcobia

Unidade 1 - Algoritmia

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Exerccios
1. Faa a discusso da equao do 1 grau
A equao do primeiro grau do tipo Ax+B=0. Sabe-se, tambm, que a sua soluo dada pela expresso

x=

B A

Temos de analisar esta expresso em funo de A ser igual a zero ou no. Caso seja no se pode determinar. Ento, temos:

1. 2. 3. 4.

Entrar pelo teclado o valor A e B Verificar para A=0 ou para A<>0 Sair para o ecr o resultado Fim do algoritmo

Desenvolvendo o ponto 2, temos:


2. Se A=0 Se B=0 - Sair no ecr: "Equao indeterminada" ( x = 0 ) Se B<>0 - Sair no ecr: "Equao impossvel" ( x = Se A<>0 Calcular o valor de x ( x = Sair no ecr: x
B ) A
0

B ) 0

2. Calcule as ajudas de custo a um funcionrio de uma empresa


Pretende-se calcular as ajudas de custo a pagar aos funcionrios de uma empresa que tenham de se deslocar em viatura prpria para servio da empresa. O valor em funo da distncia percorrida e do valor por quilmetro que, por sua vez, funo da motorizao do veculo (cilindrada do motor), como se indica a seguir: - motor de cilindrada inferior a 2000cm3 ser financiado a 3$00 por quilmetro - motor de cilindrada superior ou igual a 2000cm3 ser financiado a 3$50 por quilmetro. A frmula para o clculo do valor ser: ajuda de custo = valor por quilmetro * distncia percorrida

3. Calcule o salrio semanal de um operrio que trabalha por turnos (I)


Pretende-se calcular o salrio semanal de um operrio em funo do turno realizado e do nmero de horas de trabalho nessa semana. Sabemos que no turno de dia ser pago a 750$00 por hora. No turno da noite ser pago a 1000$00 por hora.

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

4. Calcule o salrio semanal de um operrio que trabalha por turnos (II)


Pegando no problema anterior, vamos considerar a possibilidade do operrio poder fazer horas extraordinrias. Se realizar acima de 35 horas semanais, as restantes horas so consideradas trabalho extraordinrio e ser pago pelos seguintes valores: - turno de dia - cada hora extraordinria vale 1000$00; - turno de noite - cada hora extraordinria vale 1250$00.

5. De entre dois valores dados, verificar qual deles o maior


O que se pretende a construo de um algoritmo que permita verificar qual o maior de dois nmeros. O algoritmo ser:
1. Entrar pelo teclado os dois valores 2. Compara os dois valores 3. Sair no ecr o maior

O ponto 2 pode ser desenvolvido do seguinte modo:


2. Se primeiro valor for maior que o segundo Guardar o primeiro valor Se segundo valor for maior que o primeiro Guardar o segundo valor

O algoritmo completo, em pseudolinguagem,


Algoritmo O valor mais elevado I [Vamos trabalhar s com nmeros inteiros] Inteiro: val1, val2, maior Incio Entrar val1 Entrar val2 Se val1>val2 Ento maior val1 Seno maior val2 Fim se Sair maior Fim

6. De entre trs valores dados, verificar qual deles o maior


Partindo do algoritmo anterior, propomos ao leitor a construo de um algoritmo para fazer a verificao para trs valores.

7. De que formas podemos representar um algoritmo?

8. Construa os fluxogramas dos algoritmos dos exerccios anteriores.

Alexandre Alcobia

Unidade 1 - Algoritmia

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Tipos de dados
O leitor j sabe que as variveis usadas num programa tm que ser definidas num determinado tipo de dado. Ora, as linguagens apresentam um nmero pr-definido de tipos de dados. So estes tipos que passaremos a apresentar. As diferentes linguagens apresentam diferentes tipos de instrues para definirem esses tipos de dados.

Inteiros
Estes correspondem a todos os nmeros inteiros quer positivos, quer negativos. Ex.: 16, 7, -5

Reais
Estes correspondem aos nmeros com decimais. Ex.: 23,8; -56,321; 0,35 Neste caso, tambm, aparecem diversos tipos de reais conforme a preciso que se pretende. Os dados numricos (reais ou inteiros) quando muito compridos so, normalmente, representados no que se chama vrgula flutuante, isto , a vrgula decimal sempre colocada imediatamente antes do primeiro algarismo significativo. Exemplo: nmero vrgula flutuante 386 321 457 0,386 321 x 109 0,000 000 326 72 0,327 x 10-6 Assim, quando so muito compridos decide-se quantos algarismos significativos exactos escolhemos (preciso), arredonda-se o ltimo e utiliza-se uma potncia de dez necessria (ver exemplos acima).

Lgicos / Booleanos
Os dados lgicos consistem nos valores verdadeiro e falso (1 e 0). Estes valores so usados para fazer operaes lgicas. Estes dados so, tambm, conhecidos como booleanos em homenagem a um matemtico chamado Boole.

10

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Caracteres (alfanumricos)
Estes dados so cadeias de caracteres alfanumricos (character string). Estes caracteres podem ser quaisquer caracteres reconhecidos pelo computador. Uma cadeia de caracteres representada nos programas como uma coleco destes caracteres comeando e acabando por um carcter especial - aspas () - para que saibamos onde a cadeia comea e onde acaba. Estas aspas so designadas como delimitadores da cadeia de caracteres. Exemplos: Rua Almirante; 333+444 d 777.

Alexandre Alcobia

Unidade 1 - Algoritmia

11

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Estratgia Top-Down
Nos problemas anteriores, temos vindo a aplicar uma estratgia para a construo do algoritmo que consiste em fazer um primeiro desenvolvimento genrico do algoritmo e s depois, desenvolver os passos mais complexos. Esta estratgia conhecida pelo nome Top-Down. O seu princpio baseia-se na diviso de um problema complexo em problemas menores para os quais mais fcil encontrar a soluo. Deste modo parte-se da construo de um algoritmo genrico com um nmero mnimo de passos genricos. Vai-se, sucessivamente, construindo algoritmos mais detalhados (refinao do genrico). uma estratgia a aplicar resoluo de problemas em geral e, no s, informticos. Como exemplo vamos desenvolver um algoritmo da pesagem de 1kg de arroz para uma tigela. Definimos um algoritmo genrico que corresponda soluo que pretendemos:
1. Trazer os materiais 2. Pesar a arroz 3. Guardar os materiais

Vamos refinar o primeiro passo do algoritmo genrico:


1.1 Trazer o saco da arroz 1.2 Trazer a balana 1.3 Trazer a tigela

O segundo passo poderia ser:


2.1 Pesar a tigela e memorizar o seu peso 2.2 Pr alguma arroz na tigela 2.3 Enquanto o peso indicado no for igual ao peso da tigela sozinha mais 1kg: Se o peso da tigela mais arroz menor que o peso da tigela mais 1kg, Adiciona algum arroz tigela Doutro modo, retira algum arroz da tigela

O terceiro passo do algoritmo seria:


3.1 Guardar o saco de arroz 3.2 Guardar a balana

Existe a estratgia Bottom-Up em contrapartida com a Top-Down. Consiste em partir do particular para o genrico. uma estratgia usada na resoluo de erros.

12

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Operaes elementares
Embora no algoritmo possamos apresentar as operaes da forma habitual, nas linguagens de programao essas notaes so, geralmente, diferentes. Assim, apresentamos seguidamente as notaes habituais nas linguagens de programao, alm de outras operaes tpicas.

Adio e subtraco
A adio e a subtraco so representados da forma habitual. Ex: 3+5; a+25.

Multiplicao e diviso (x * y) (x/y)


Estas operaes apresentam-se em notaes diferentes das usuais. A multiplicao assinalada por um asterisco em vez do "x" ou ponto. Ex: 4 * 30=120; x * y. no A diviso representada por x / y em vez de x : y ou y . Isto quer dizer que algo como 2 pode ser escrito. Em vez disso, usamos 3/2 que o computador entender por 1,5.
x 3

Diviso truncada (x div y)


Quando pretendemos que o resultado da diviso de dois nmeros d um inteiro, utiliza-se a operao div, a qual d como resultado um nmero inteiro truncado. Diz-se que o resultado truncado quando se despreza a parte decimal. Exemplo: real truncado 2,5 2 0,62 0 Assim, 1 div 2 d 0 ao contrrio de 1/2 que daria 0,5; 14 div 7 = 2, do mesmo modo 14,2 div 7 =2.

Resto da diviso de inteiros (x mod y)


Esta operao d-nos o resto da diviso de dois inteiros. Assim, 6 mod 3 = 0 e 5 mod 2 = 1

Potenciao (x^y)
A potenciao representada por uma simbologia diferente. Deste modo, utiliza-se 3^2 em vez de 32.

Alexandre Alcobia

Unidade 1 - Algoritmia

13

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Operadores lgicos
Definies
a e b so proposies 0 - valor falso 1 - valor verdadeiro Exemplos: a = O Sol uma estrela b = O gato um mamfero Vamos analisar as operaes lgicas fundamentais

Negao
A negao da proposio a representa-se por: A negao de a l-se: O Sol no uma estrela

Conjuno
A conjuno de a e b representa-se por: a = O Sol uma estrela b = O Sol emite energia A conjuno de a com b l-se: a e b, ou seja: O Sol uma estrela e o Sol emite energia

Disjuno inclusiva
A disjuno inclusiva de a e b representa-se por: a = Antnio mdico b = Antnio professor A disjuno inclusiva de a com b l-se: a e/ou b, ou seja: Antnio mdico e/ou Antnio professor

Disjuno exclusiva
A disjuno exclusiva de a e b representa-se por: a = Antnio mdico; b = Antnio professor A disjuno exclusiva de a com b l-se: ou a ou b, ou seja: ou Antnio mdico ou Antnio professor

Leis de De Morgan
Estas leis do-nos as seguintes transformaes:
~ (a b ) =~ a ~ b ~ (a b ) =~ a ~ b

14

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Prioridade das operaes


Consideremos a seguinte expresso: A 3+6*13 Que valor atribuir varivel A? O valor desta varivel depender da ordem utilizada na realizao das operaes. Assim, da esquerda para a direita ser A=117; da direita para a esquerda ser A=81. Para se evitarem estas ambiguidades temos que respeitar a prioridade das operaes, pois ela vai garantir a correco do resultado.

A multiplicao tem prioridade em relao adio Como se pode verificar, o valor correcto 81. Pode-se alterar a prioridade das operaes, utilizando parnteses:

A primeira prioridade vai para as operaes includas entre parnteses. Dum modo global temos: mais alta prioridade para a potenciao; segue-se em igualdade a multiplicao e a diviso; finalmente, temos a adio e subtraco. Consideremos a seguinte expresso: -3 * 7 + 2^3 div 4 - 6 As operaes devero ser realizadas como se mostra a seguir:

Alexandre Alcobia

Unidade 1 - Algoritmia

15

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Estrutura de deciso II
H casos em que se tem de optar entre vrias opes que uma varivel pode dispor, pelo que se ter de recorrer a vrias estruturas SE encadeadas. O encadeamento das estruturas SE traz dificuldade na interpretao do algoritmo. Neste caso, temos uma estrutura de deciso composta ou deciso mltipla que vai tornar a leitura do algoritmo mais fcil. Essa estrutura conhecida pela estrutura CASO. Em pseudocdigo, apresentar a seguinte forma: Caso varivel opo1: aco1 opo2: aco2 ... Fim caso

Deciso

opo1

opo2

opo3

aco1

aco2

aco3

Vejamos o seguinte exemplo:


Algoritmo Seleco [caracterizao de algumas letras do alfabeto] Carcter letra, frase Incio Entrar letra Caso letra a,b: frase Primeiras letras k,w,y: frase Alfabeto ingls z: frase ltima letra Seno frase Outras letras do alfabeto Fim caso Sair frase Fim

16

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Exerccio
1. Descreva o que faz o seguinte algoritmo.
Algoritmo nmeros Inteiro nmero Caracter frase Incio Entrar nmero Se nmero > 10 ento frase maior de 10 Seno Se nmero < 10 ento frase menor de 10 Seno frase igual a 10 Fim se Fim se Sair frase Fim

2. Construa o algoritmo da discusso da equao do segundo grau usando a estrutura CASO.


A equao do segundo grau apresenta-se na forma ax 2 + bx + c = 0 A resoluo desta equao baseada na utilizao do binmio discriminante b 2 4ac . Assim, temos trs situaes: - binmio discriminante > 0 Tem soluo dada por

x=
- binmio discriminante < 0 No tem soluo nos reais. -binmio discriminante = 0 Tem soluo dada por

b b 2 4ac 2a

x=

b 2a

3. Construa um algoritmo que disponha do clculo do valor da rea de trs figuras geomtricas. O utilizador escolher uma das trs figuras disponveis a tratar e o algoritmo produzir o valor da rea.
A partir de um menu em que so apresentadas as figuras geomtricas disponveis, o utilizador escolher a pretendida. De seguida, ser-lhe-o pedidos os dados referentes figura e produzir-se- o clculo do valor da rea que ser apresentado no ecr.

4. Construa os fluxogramas dos algoritmos dos exerccios anteriores.

Alexandre Alcobia

Unidade 1 - Algoritmia

17

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Estruturas de Repetio
Os computadores so particularmente bem adaptados a aplicaes nas quais uma dada operao - ou uma srie de operaes - repetida muitas vezes, ou seja, a produo de ciclos. As estruturas de repetio so construes fundamentais e podem ocorrer numa variedade de formas.

REPETIR ... AT
Apresentar o seguinte formato: Repetir aco at condio
Aco
A aco ser repetida at que a condio seja verdadeira. A condio ser testada depois de realizada a aco. Portanto, a aco realizar-se- pelo menos uma vez.

No Condio Sim

Algoritmo mltiplos inteiro Nmero, Limite, Mltiplo

Apresentamos um exemplo. Trata-se de um algoritmo para o clculo dos mltiplos de um nmero at um determinado valor definido por Limite

Incio Entrar Nmero, Limite Mltiplo Nmero Repetir SAIR Mltiplo Mltiplo Mltiplo + Nmero at Mltiplo >= Limite Fim

18

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

ENQUANTO ... REPETIR


Esta apresenta a seguinte formulao em pseudocdigo: Enquanto condio fazer aco repetir
Neste caso, a aco repete-se enquanto a condio for verdadeira. A condio testada antes de se iniciar a aco. Se a condio for verdadeira produz-se a aco, se for falsa j no se produz a aco.

A estrutura REPETIR ... AT pode ser realizada utilizando a estrutura ENQUANTO ... REPETIR. Basta mudar de REPETIR ... AT condio, para ENQUANTO ~condio ... REPETIR. Assim, temos:

Mltiplo Valor Repetir Sair Mltiplo Mltiplo Mltiplo + Valor at Mltiplo >= Nmero

Mltiplo Valor Enquanto ~(Mltiplo >= Nmero) fazer Sair Mltiplo Mltiplo Mltiplo + Valor repetir

Condio

No

Sim

Aco

Alexandre Alcobia

Unidade 1 - Algoritmia

19

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

PARA... SEGUINTE
Por ltimo, temos uma estrutura de repetio por contagem: Para varivel valor inicial at valor final passo n fazer aco seguinte A varivel toma um valor inicial que vai incrementando (ou decrementando) at um valor final. O valor do incremento (ou decremento) dado pelo valor positivo (ou negativo) de n. O passo de utilizao opcional. Se no for declarado , por defeito, de uma unidade. Vamos ver o algoritmo para verificar se um nmero ou no primo.

Algoritmo Nmeros Primos [Vamos verificar se primo] inteiro nmero, contagem carcter frase booleano primo Incio primo verdadeiro Entrar numero [Para no ser primo tem de ser divisvel por qualquer entre 1 e ele prprio, isto , de 2 at nmero-1] Para contagem 2 at nmero-1 fazer [Se for divisvel no primo] Se (numero mod contagem = 0) ento primo falso Fim se Seguinte Se primo ento frase nmero primo seno frase No primo Fim se Sair frase Fim

varivel v_inicial at v_final

No est estabelecida qualquer representao grfica para a estrutura PARA, mas podemos adoptar a seguinte.
aco

20

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Aqui apresentada uma aplicao desta estrutura. A varivel contagem utilizada como contador. A no indicao do passo leva a que o valor seguinte de contagem ser o valor anterior mais um. Esta estrutura PARA ... pode-se considerar uma variante da estrutura ENQUANTO... Vejamos:

Algoritmo Nmeros Primos [Vamos verificar se primo] inteiro nmero, contagem booleano primo Incio primo verdadeiro Entrar numero [Para no ser primo tem de ser divisvel por qualquer entre 1 e ele prprio, isto , de 2 at nmero-1] contagem 2 [Para iniciar a contagem] Enquanto contagem =< nmero-1 fazer [Se for divisvel no primo] Se (numero mod contagem = 0) ento primo falso Fim se contagem contagem + 1 [Incrementa de uma unidade] Repetir Se primo ento Sair nmero primo seno Sair No primo Fim se Fim

Neste caso necessria a inicializao da varivel contador antes da estrutura ENQUANTO. Dentro do ciclo, necessrio proceder ao incremento da varivel contador para que alcance o valor final pretendido.

variavel v_inicial

Usando a estrutura ENQUANTO, o fluxograma fica como o apresentado ao lado.

variavel =< v_final

Sim Aco

No

variavel variavel + 1

B
Alexandre Alcobia Unidade 1 - Algoritmia

21

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Fluxograma do algoritmo Nmero primo usando a estrutura ENQUATO.

Nmero primo

nmero

contagem 2

contagem =<nmero-1
Sim

nmero mod contagem=0


No

Sim

No

primo falso

contagem contagem+1

No

primo

Sim

"No n primo"

" n primo"

Fim

22

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Exerccios
1. Anlise do algoritmo do nmero primo.
Um nmero primo aquele que divisvel, s e somente, pela unidade e por ele prprio. Sendo divisvel por qualquer outro, no nmero primo. Como todos os nmeros so divisveis por um e por si prprios no necessitamos de verificar a divisibilidade. Assim, temos de verificar todos os outros nmeros desde 2 at ao nmero anterior ao que queremos verificar (nmero - 1). Por isso aparece a estrutura
Para contagem 2 at nmero-1 fazer

aco
Seguinte

A aco a verificao da divisibilidade. Se um nmero a for divisvel por outro b ento o resto da diviso ser zero. Temos uma operao que nos d o resto da diviso de inteiros. o mod. Neste caso temos que se nmero mod contagem = 0 ento o nmero no ser primo. Da que surge
Para contagem 2 at nmero-1 fazer Se (numero mod contagem = 0) ento primo falso Fim se Seguinte

Na realidade estamos a verificar se o nmero no primo. Para indicar se o nmero ou no primo usamos uma varivel booleana que toma um de dois valores: ou verdadeiro ou falso. A varivel est identificada com o nome primo. Por isso usamos
Se (numero mod contagem = 0) ento primo falso Fim se.

Para mandar a indicao para o ecr, a frase ser a conveniente, isto , se o nmero primo ou no. Usamos o valor da varivel booleana para fazer a diferenciao.
Se primo ento frase nmero primo seno frase No primo Fim se

Se for primo (primo ter o valor verdadeiro) apresentado no ecr nmero primo; se no for ser apresentada a frase No primo.

2. Somar os N primeiros nmeros inteiros


Somar todos os nmeros desde 1 at ao nmero N indicado pelo utilizador. Faa o algoritmo com a estrutura PARA e outro com a estrutura ENQUANTO.

Alexandre Alcobia

Unidade 1 - Algoritmia

23

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

3. Construa o algoritmo do factorial de um nmero, isto , o produto de todos os inteiros desde 1 at ao nmero escolhido
Por exemplo, o factorial de 3 1x2x3 = 6, mas o factorial de zero 1. Use a estrutura PARA, mas no se esquea de ter em ateno do pormenor de o factorial de zero ser 1.

4. Implemente o algoritmo do nmero primo para apresentar todos os nmeros primos at um nmero N indicado pelo utilizador.
Ter de usar mais uma estrutura PARA que a usada no algoritmo apresentado.

24

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Erros
A construo de algoritmos traz consigo a produo de erros. Estes so tanto mais provveis quanto mais complexo for o algoritmo. Neste caso, temos de utilizar tcnicas que nos permitam detectar o erro de modo a poder corrigi-lo. Uma tcnica usada a construo de quadros de taagem (trace table), permite uma anlise do funcionamento do algoritmo levando deteco do erro e, assim, permitir a sua correco. Para exemplificar esta tcnica vamos usar o algoritmo do nmero primo apresentado anteriormente.

Algoritmo Nmeros Primos inteiro nmero, contagem carcter frase booleano primo Incio primo verdadeiro Entrar numero 1. Para contagem 2 at nmero-1 fazer 2. Se (numero mod contagem = 0) ento primo falso Fim se 1.1 Seguinte 3. Se primo ento frase nmero primo 3.1. seno frase No primo Fim se Sair frase Fim

Cria-se uma srie de referncias, por exemplo a numerao como se apresenta no algoritmo acima. Em seguida constroi-se uma tabela na qual colocamos os valores das variveis e das condies a testar.
a = contagem 2 at nmero-1 b = (numero mod contagem = 0)

nmero contagem 1 2 1.1 1 3


Alexandre Alcobia

a V V F -

b F -

primo V V V V V

frase Primo
Unidade 1 - Algoritmia

3 3 3 3 3

2 2 3 3 3

25

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

A tabela apresentada, mostra o funcionamento do algoritmo e os valores que vai produzindo para um nmero escolhido que o trs que sabemos ser primo. Pelo quadro, sabemos que o algoritmo produz a resposta certa. Um teste completo, do algoritmo, tem de comportar os casos particulares do problema posto. A tabela seguinte mostra o teste para um outro nmero escolhido por ns, agora o quatro que sabemos no ser primo e o algoritmo produz o resultado esperado.

nmero 1 2 1.1 1 2 1.1 1 3.1 4 4 4 4 4 4 4 4

contagem 2 2 3 3 3 4 4 4

a V V V F -

b V F -

primo V F F F F F F F

frase N o primo

Aos erros produzidos na construo de um algoritmo d-se o nome de erros lgicos ou erros semnticos. So erros, em geral, difceis de detectar porque reflectem uma incorrecta elaborao do algoritmo. Estes resultam do facto de o programador no ter expressado correctamente a sequncia de aces a ser executada (o programador queria dizer uma coisa mas disse outra). Ao processo de deteco e correco de erros d-se o nome de depurao. Em ingls, este processo denominado debugging e aos erros d-se o nome de bugs.

26

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Exerccios
1. O algoritmo apresentado seguidamente produz um ciclo infinito. Corrija-o.
contagem 1 Enquanto contagem <= 10 fazer Sair No acabou Repetir

Use a tcnica de trace table para analisar o funcionamento do algoritmo

2. Construa um algoritmo para, de entre dois nmeros inteiros, verificar qual deles o maior
Para a construo do algoritmo pedido basta usar uma estrutura SE.
Algoritmo valor mais elevado inteiro val1, val2, maior Incio Entrar val1, val2 Se val1>val2 ento maior val1 seno maior val2 Fim se Sair maior Fim

3. Construa um algoritmo para verificar de entre trs nmeros inteiros, qual o maior
Ser aconselhvel basear-se no algoritmo do exerccio anterior.

4. Melhoria do algoritmo Nmeros primos


O algoritmo apresentado antes pode ser melhorado em dois aspectos: - No tem interesse a verificao a nmeros negativos, nem o zero nem o nmero um. Soluo: impedir ao utilizador a introduo dos referidos valores. - Quando se encontra um valor em que o nmero divisvel no h vantagem em continuar a verificao, pois o nmero primo. Soluo: quando se encontra o valor que divide o nmero pra-se a estrutura PARA. Vamos comear pelo primeiro aspecto
Algoritmo Nmeros Primos inteiro nmero, contagem carcter frase booleano primo Incio primo verdadeiro nmero 0 Enquanto nmero < 2 fazer Entrar nmero Repetir .......

Acrescentamos a estrutura ENQUANTO para verificar o valor que o utilizador introduz na varivel nmero, obrigando o utilizador a repetir novo valor caso tenha introduzido um valor no apropriado. H a inicializao da varivel nmero (nmero 0) para obrigar ao pedido da introduo do nmero a verificar. Caso no se faa a inicializao referida, no sabemos o que poder acontecer uma vez que no sabemos que valor a varivel nmero contm no momento do teste da condio da estrutura ENQUANTO.

Alexandre Alcobia

Unidade 1 - Algoritmia

27

Ensino Recorrente - Programao de Computadores


Para o segundo aspecto referido, temos

Escola Sec. de S. Joo do Estoril

Para (contagem 2 at nmero-1) ~(numero mod contagem=0) fazer Se (numero mod contagem = 0) ento primo falso Fim se Seguinte .......

Vimos nos operadores lgicos que na conjuno basta uma proposio ser falsa para que a condio seja falsa. Assim, basta encontrar um valor que divida o nmero para acabar a estrutura PARA. Esta, tambm acaba se a contagem chegar ao fim. Vejamos a tabela de verdade para as condies postas. Tomemos a = contagem 2 at nmero-1 b = numero mod contagem=0

a
1 1 0 0

b
1 0 1 0

~b
0 1 0 1

a ~b
0 1 0 0
A estrutura PARA continua

5. Como exerccio, transforme a estrutura PARA, do algoritmo anterior, numa estrutura ENQUANTO. Valide a sua escolha com a verificao numa trace table.

28

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Quadros e vectores
Suponhamos que queremos analizar as notas, dos alunos de uma turma, numa disciplina. Para tal, construimos o seguinte algoritmo.
Algoritmo Notas [Programa para determinar a mdia das notas de uma turma a uma disciplina e classificar os alunos em relao a essa mdia] Inteiro nota1,nota2,...,nota20 [Suponhamos que a turma tem 20 alunos] Inteiro SNotas Caracter comentario Real media Incio [Inicializao das varivel para a soma das notas da turma] SNotas 0 [Introduo das notas dos 20 alunos] Entrar Introduza a nota, nota1 SNotas SNotas + nota1 Entrar Introduza a nota, nota2 SNotas SNotas + nota2 ...... Entrar Introduza a nota, nota20 SNotas SNotas + nota20 [Clculo da mdia] media SNotas / 20 Sair A mdia ,media [Apreciao da situiao de cada aluno em relao mdia] Se nota1 = media ento [Apreciao para o aluno 1] comentario O aluno 1 est na mdia. seno Se nota1 > media ento comentario O aluno 1 est acima da mdia seno comentario O aluno 1 est abaixo da mdia fim se fim se Sair comentario Se nota2 = media ento [Apreciao para o aluno 2] comentario O aluno 2 est na mdia. seno Se nota2 > media ento comentario O aluno 2 est acima da mdia seno comentario O aluno 2 est abaixo da mdia fim se fim se Sair comentario .......... ....... Se nota20 = media ento [Apreciao para o aluno 20] comentario O aluno 20 est na mdia. seno Se nota20 > media ento comentario O aluno 20 est acima da mdia seno comentario O aluno 20 est abaixo da mdia fim se fim se Sair comentario Fim

Alexandre Alcobia

Unidade 1 - Algoritmia

29

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Analisando o algoritmo vmos que criada uma varivel para cada nota, sendo a turma de vinte alunos logo temos de criar vinte varveis para as notas. Na apreciao qualitativa em relao mdia, deparamos com uma sequncia idntica de estruturas SE, mas sempre semelhantes para cada nota existente. Isto perfaz vinte estruturas semelhantes. A escrita de um programa com estas caractersticas muito fastidioso, isto , se no pensarmos em fazer um programa para um curso que teria cento e cinquenta alunos. No seria nada prtico. De qualquer modo, poderamos ultrapassar o problema usando a mesma varivel para as notas dos alunos e usando a estrutura PARA, mas ter-se-a de intorduzir duas vezes as notas dos alunos.

Algoritmo Notas [Programa para determinar a mdia das notas de uma turma a uma disciplina e classificar os alunos em relao a essa mdia] Inteiro contador,NAlunos,nota,SNotas,numero Real media Caracter comentario Incio [Inicializao das variveis] nota 0 NAlunos 0 SNotas 0 [Introduo do nmero de alunos da turma] Entrar Indique o nmero de alunos da turma., NAlunos [Introduo das notas dos alunos] Para contador 1 at NAlunos fazer Entrar Introduza a nota, nota SNotas SNotas + nota Seguinte [Clculo da mdia] media SNotas/NAlunos Sair A mdia ,media [Apreciao da situiao do aluno em relao mdia] Para contador 1 at NAlunos fazer Entrar Indique o nmero do aluno, numero Entrar Introduza a nota do aluno, nota Se nota = media ento comentario Este aluno est na mdia. seno Se nota > media ento comentario Este aluno est acima da mdia seno comentario Este aluno est abaixo da mdia fim se fim se Sair comentario Seguinte Fim

Para ultrapassar este problema temos uma estrudura de dados conhecida como quadro ou array que no mais que uma matriz e que podemos usar na resoluo de questes deste tipo, ou outros, tornando a produo mais fcil de algoritmos mais eficientes.

30

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Na realidade, um grupo de dados com o mesmo identificador (nome do array) mas cada dado est associado a um endereo diferente. Assim, semelhana de uma matriz, temos

Cada dado do array tabela identificado pelo par [linha, coluna]. Deste modo, temos tabela [2,3] = 17. Este quadro bidimensional, mas pode haver com mais dimenses ou com menos (unidimensional). Os dados guardados num quadro podem ser inteiros, reais, caracter ou outro.

Este quadro unidimensional. Tem uma coluna e quatro linhas. Assim, uni[2] = e, uni[4] = ou.

Este quadro representa duas tabelas de trs linhas e trs colunas. Assim, temos que tri[1,2,3] = 9 e tri[2,1,1] = 10.

Como vimos, podemos usar quadros unidimensionais, bidimensionais ou outros conforme o necessrio, mas, normalmente, no vai alm dos tridimensionais. Os quadros unidimensionais tambm so chamados vectores. Utilizando esta estrutura de dados, torna-se mais prtica a elaborao do referido algoritmo como podemos verificar seguidamente.

Alexandre Alcobia

Unidade 1 - Algoritmia

31

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Algoritmo Notas [Programa para determinar a mdia das notas de uma turma a uma disciplina e classificar os alunos em relao a essa mdia] Inteiro NAlunos,SNotas,numero Real media [Definio de quadro para o mximo de 30 alunos] Quadro Inteiro nota[30] Incio [Inicializao das variveis] SNotas 0 [Introduo do nmero de alunos da turma] Repetir NAlunos 0 Sair Indique at ao mximo de 30 alunos Entrar Indique o nmero de alunos da turma.,NAlunos At NAlunos => 1 NAlunos =< 30 [Introduo das notas dos alunos] Para numero 1 at NAlunos Sair numero Sair Introduza a nota do aluno Entrar nota[numero] SNotas SNotas + nota[numero] Seguinte [Clculo da mdia] media SNotas / NAlunos Sair A mdia ,media [Apreciao da situao do aluno em relao mdia] Para numero 1 at NAlunos Se nota[numero] = media ento Sair numero Sair O aluno est na mdia. seno Se nota[numero] > media ento Sair numero Sair O aluno est acima da mdia seno Sair numero Sair O aluno est abaixo da mdia fim se fim se Seguinte Fim

Analisando o algoritmo apresentado, comeamos por verificar que usa um vector (quadro unidimensional) de inteiros com trinta posies: Quadro Inteiro nota[30]. A estrutura REPETIR... AT serve para garantir que o utilizador introduza um nmero de 1 at 30 que o nmero mximo de alunos que o quadro pode suportar. A estrutura PARA que aparece a seguir, serve para encher o vector com as notas dos alunos. Cada posio do vector referenciada por nota[numero] dado que nota o identificador do quadro e o contador numero vai incrementando a posio no vector conforme vai incrementando na estrutura PARA.

Para numero 1 at NAlunos ... Entrar nota[numero] ... Seguinte

contador

claro que no corre o quadro todo, mas s a quantidade de posies que NAlunos contm.

32

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

A seguir aparece uma outra estrutura PARA para correr o vector e fazer a comparao, de cada valor armazenado, com a mdia realizando a apreciao de cada aluno. Da anlise, conclui-se que a estrutura PARA muito til no trabalho de quadros de um modo geral. Se usarmos quadros bidimensionais usam-se duas estruturas PARA para correr o quadro porque passam a existir dois indicadores de posio para cada clula do quadro.
Quadro Inteiro QuadBid [5,10] ... Para linha 1 at 5 fazer Para coluna 1 at 10 fazer ... Entrar QuadBid[linha,coluna] ... Seguinte Seguinte

Como vemos no exemplo acima apresentado, existe o quadro QuadBid de 5 linhas por 10 colunas que referenciado com a ajuda de duas estruturas PARA. A primeira estrutura corre as linhas do quadro e a segunda corre, em cada linha, as colunas. Cada vez que realiza a instruo Entrar, o utilizador introduz um inteiro no quadro na posio referenciada no momento pelos contadores linha e coluna.

Ordenao
Quando se preenche um quadro com dados, estes ficam arrumados em funo da ordem de entrada que o utilizador usou. Assim, os dados ficam sem uma ordem convencional. Por questo de lgica de procura ou de leitura, pode haver interesse em que os dados estejam ordenados. Por esta razo, vamos estudar um algoritmo simples que permitir proceder ordenao dos dados de um quadro. Vejamos o vector definido por
Quadro Inteiro Idades [5]

que contm as idades de cinco pessoas: 45 27 33 40 35 Os dados do vector Idades no se encontra ordenado. Seria legtimo pretender-se que as idades estivessem ordenadas por ordem crescente. Para tal, teremos de correr o vector comparando os valores sucessivos e, caso necessrio, fazer a troca conveniente. Vejamos, a posio Idade[1] 45 e a posio Idade[2] 27, logo tero de ser trocados os valores de modo que a posio Idade[1] fosse 27 e Idade[2] fosse 45. Depois verificamos Idade[2] e Idade[3] e tm de ser trocados. Todo este procedimento corre o vector at ao fim. Esquematizando, temos:
Para coluna 1 at 4 fazer Se Idade[coluna] > Idade[coluna+1] ento Troca (Idade[coluna],Idade[coluna+1]) Fim se Seguinte

Alexandre Alcobia

Unidade 1 - Algoritmia

33

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Este algoritmo tem uma operao especial a que chammos Troca que vai realizar a troca pretendida. Uma anlise mais atenta, mostra-nos que este algoritmo no chega. Vejamos, no quadro seguinte, o que se passa a cada incremento da varivel coluna na estrutura PARA.
vector original

45
coluna 1 at 4

27 33 40

35

1 2 3 4

27 45 27 33 45 27 33 40 45 27 33 40 35 45

O quadro mostra-nos que a ordenao no ficou completa. necessrio fazer correr, mais uma vez, a estrutura PARA. Portanto, o algoritmo s deve acabar quando a estrutura PARA correr o vector e no acontecer alguma troca de valores.
Repetir trocas falso Para coluna 1 at 4 fazer Se Idade[coluna] > Idade[coluna+1] ento Troca (Idade[coluna],Idade[coluna+1]) trocas verdadeiro Fim se Seguinte At ~trocas [At no haver trocas]

Falta criar o algoritmo da operao Troca. Ser fcil


temporario Idade[coluna] Idade[coluna] Idade[coluna+1] Idade[coluna+1] temporario

Agora podemos construir o algoritmo completo


Algoritmo Ordenao do vector [Este algoritmo ordena por ordem crescente] Inteiro coluna, temporario Quadro Inteiro Idades [5] Booleano trocas Repetir trocas falso Para coluna 1 at 4 fazer Se Idade[coluna] > Idade[coluna+1] ento temporario Idade[coluna] Idade[coluna] Idade[coluna+1] Idade[coluna+1] temporario trocas verdadeiro Fim se Seguinte At ~trocas [At no haver trocas] Fim

34

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Exerccios
1. Um stand de venda de automveis, concessionrio de uma marca, vende sete modelos dessa marca. Crie um algoritmo que introduza num quadro bidimensional os modelos e respectivo preo para posterior consulta.

M ode los modA modB modC modD modE modF modG

Pre o (contos ) 2500 3000 2500 3500 2500 3000 4000

O quadro ter de ser do tipo caracter, pois ter que conter a designao do modelo. Ser de sete linhas e duas colunas como se pode ver na tabela acima apresentada.

2. Faa um algoritmo para mostrar os dados contidos no quadro preenchido no exerccio anterior.
Partindo do algoritmo do exerccio anterior ser fcil construir este.

3. Construa um algoritmo para ordenao dos dados do quadro do exerccio 1, por ordem crescente do preo.
Neste caso, o quadro bidimensional havendo necessidade de ordenar as duas colunas. De qualquer modo, a primeira coluna s ser ordenada em funo da ordenao da segunda, isto , quando houver uma alterao da ordem de preos ter-se- de fazer a alterao na ordem dos modelos respectivos.

Alexandre Alcobia

Unidade 1 - Algoritmia

35

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Cadeias de caracteres (Strings)


Trata-se de uma outra estrutura de dados qual j fizemos referncia no captulo Tipos de dados. A esta estrutura est associada uma srie de operaes bsicas que iremos apresentar seguidamente e que permitem um manuseamento destes dados de uma forma diferente dos dados numricos. Como j vimos anteriormente, o computador trata frases como uma cadeia de caracteres alinhados e passveis de serem ordenados. Como exemplo temos A unidade 1 esta a acabar, se ordenado seria cinco espaos1Aaaaaaabcddeeinrstu. O computador pode ordenar os caracteres. Estes so codificados em cdigo binrio porque a linguagem que a mquina conhece, assim pode estabelecer uma ordem aos caracteres que usa. claro que a codificao convencional e existe, entre outras, um standard muito usado na microinformtica conhecido pelo cdigo ASCII (American Standard Code for Information Interchange). Na pgina seguinte apresentada uma tabela dos caracteres standard desse cdigo. Os nmeros so o cdigo do carcter que est ao lado - claro que o nmero est em base dez por converso do cdigo binrio. Para acedermos ao carcter temos de premir a telca Alt mais o nmero no teclado numrico, por exemplo o carcter # ser Alt + 35. Este cdigo s tem 128 (de 0 a 127) caracteres, por ser necessrio, apareceram extenses ao cdigo que vo do 128 at ao 255. Estas variam porque incluem caracteres especficos para compatibilizar com as diversas lnguas.

Diz-se cdigo binrio porque baseado na utilizao de dois smbolos (0 e 1). Na mquina ser: h energia / no h energia. Deste modo podemos representar nmeros ou smbolos como, por exemplo: binrio - carcter 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 10 etc.

36

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

ASCII Standard Os primeiros 32 characters (0-31) so cdigos de control.


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US SP Null Start of heading Start of text End of text End of transmit Enquiry Acknowledge Audible bell Backspace Horizontal tab Line feed Vertical tab Form feed Carriage return Shift out Shift in Data link escape Device control 1 Device control 2 Device control 3 Device control 4 Neg. acknowledge Synchronous idle End trans. block Cancel End of medium Substitution Escape Figures shift Group separator Record separator Unit separator Blank Space (Space Bar) 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 ! # $ % & ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127

Alexandre Alcobia

Unidade 1 - Algoritmia

37

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Aqui apresentamos dois cdigos ASCII extendidos. Um designado por 850 Multilingue e outro por 860 Portugal. com este tipo de cdigos que se compatibiliza a mquina com os caracteres prprios de cada lngua.

38

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Concatenao
Uma operao fundamental no tratamento de cadeias a concatenao. Consiste na aglutinao de vrias cadeias de caracteres. Suponhamos que
operao 13+7 igual = resultado 20

podemos fazer a concatenao das trs cadeias


tudo operao + igual + resultado tudo = 13+7=20

Foi obtida uma nova cadeia que est atribuda varivel tudo. Se as cadeias tivessem sido concatenadas numa outra ordem teramos obtido uma outra cadeia, assim
tudo operao + resultado + igual tudo = 13+720=

Agora obtivemos uma cadeia diferente da anterior.

Cadeia nula
J vimos que uma cadeia de caracteres formada por vrios caracteres, mas, tambm, por um s carcter, por exemplo

?
Deste modo temos uma cadeia de caracteres com um elemento. Do que foi apresentado, pudemos estabelecer a existncia de uma cadeia sem caracteres, ou seja, uma cadeia nula (null string), isto

Uma caracterstica desta cadeia nula de elemento neutro, isto ,


tudo 13+7=20 +

ento
tudo = 13+7=20

Alexandre Alcobia

Unidade 1 - Algoritmia

39

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

Comparao
Podem-se comparar cadeias de caracteres, uma vez que aos caracteres foi estabelecida uma relao de ordem (ver tabela ASCII). Pode-se dizer qual est antes ou depois de um determinado carcter. A condio de igualdade entre duas cadeias verdadeira se forem cumpridas duas condies: - o nmero de caracteres das duas cadeias igual; - para a mesma posio de ordem de cada uma das cadeias est o mesmo carcter. Exemplo:
nome1 A2eda nome2 A2eda nome3 Ae2da

logo nome1 = nome2, mas nome3 nome1. Tambm se podem estabelecer outras relaes de ordem como maior (posterior) e menor (anterior) da mesma forma como se encontram ordenadas num dicionrio ou lista telefnica.

Comprimento
Uma outra operao com cadeias a determinao do seu comprimento, ou seja, o nmero de caracteres que a cadeia comporta. Vamos designar esta operao por comp. Exemplo:
t comp(nome1)

ento, t ficar com o valor 5, uma vez que a cadeia em nome1 tem cinco caracteres.

Subcadeia
Esta operao permite extrair uma subcadeia a partir de uma outra cadeia maior. Vamos design-la por sub e comporta trs argumentos conforme se apresenta seguidamente:
sub(arg1, arg2, arg3) arg1 - a cadeia da qual pretendemos a subcadeia; arg2 - a posio na cadeia em que inicia a subcadeia; arg3 - comprimento da subcadeia.

Exemplos:
sub(nome3, 2, 2) = e2 sub(A2eda, 3, 2) = ed

H que tomar ateno de que a contagem dos caracteres na cadeia feita da esquerda para a direita.

40

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

A seguir vamos apresentar um algoritmo que extrai o primeiro nome a partir do nome dado de uma pessoa. Vamos supor que o nome introduzido, somente, com um espao entre os nomes, isto , nunca aparecem espaos no incio nem no fim.
Algoritmo Tirar apelido caracter nome, apelido inteiro comprimento, posio, tamanho Incio Entrar nome tamanho comp(nome) [Verifica em todo o comprimento da cadeia a posio do ltimo espao] Para comprimento 1 at tamanho fazer [Se encontra um espao, assinala a sua posio na cadeia] Se sub(nome, comprimento, 1) = ento posio comprimento Fim se Seguinte posio posio + 1 [adiciona 1 porque o espao no interessa] apelido sub(nome, posio) [retira a subcadeia desde posio at ao fim] Sair apelido Fim

Exerccios
1. Produza um algoritmo para a determinao da frequncia com que cada letra aparece numa cadeia de caracteres dada.
Como temos que comparar com o alfabeto em maisculas e minsculas partimos de um quadro com trs colunas: uma contm o alfabeto em minsculas, outra o alfabeto em maisculas e a terceira coluna vai receber a quantidade de ocurrncias da respectiva letra.
Algoritmo Letras Quadro caracter alfabeto [26,3] caracter texto inteiro linha, coluna, tamanho, posio

A a 0 B b 0 C c 0 D d 0 . . . . . . . . . Z z 0

Este quadro tem 3 colunas e nmero de linhas igual ao nmero de letras Incio Entrar texto do alfabeto. tamanho comp(texto) As duas primeiras colunas tm o [Inicializar a coluna 3 do quadro] alfabeto maisculo e minsculo e a Para linha 1 at 26 fazer terceira o nmero de ocurrncias que alfabeto[linha,3] 0 ter de ter valor inicial de zero. Seguinte [Percorrer toda a cadeia texto] Para posio 1 at tamanho fazer coluna 1 Repetir [Para cada coluna...] linha 1 Repetir [... verifica todas as linhas at encontrar] Se afabeto[linha,coluna] = sub(texto,posio,1) ento alfabeto[linha,3] alfabeto[linha,3] + 1 Fim se linha linha + 1 At (linha > 26) (alfabeto[linha,coluna] = sub(texto,posio,1)) coluna coluna + 1 At (coluna > 2) (alfabeto[linha,coluna] = sub(texto,posio,1)) Seguinte
Para linha 1 at 26 fazer alfabeto[linha,3] alfabeto[linha,3]/tamanho Sair alfabeto[linha,2] Sair alfabeto[linha,3] Seguinte Fim

Alexandre Alcobia

Unidade 1 - Algoritmia

41

Ensino Recorrente - Programao de Computadores

Escola Sec. de S. Joo do Estoril

A primeira estrutura PARA serve para inicializar a terceira coluna do quadro para garantir que est tudo a zeros. A segunda estrutura PARA para percorrer toda a cadeia de caracteres que est na varivel texto. As estruturas REPETIR...AT servem para percorrer todo o quadro procura da letra correspondente e adicionar cada ocorrncia na terceira coluna do quadro na respectiva linha da letra. Pretende-se, tambm, que quando encontre a letra no quadro para a pesquisa e passe ao carcter seguinte na cadeia texto. Por isso, aparece condio
(alfabeto[linha,coluna] = sub(texto,posio,1))

nas estruturas REPETIR...AT. A ltima estrutura PARA para calcular a frequncia relativa da ocorrncia de cada letra e apresentar o carcter e o valor da sua frequncia no ecr.

2. Construa um algoritmo que, a partir do nome de pessoas, d somente o primeiro e ltimo nome.
Sugerimos a anlise do algoritmo Tirar apelido.

3. No estudo das cadeias de caracteres indicmos que uma das operaes seria comp(cadeia) que devolvia o nmero de caracteres da cadeia. Suponha que essa operao no est disponvel. Crie um algoritmo que faa a operao referida.

42

Unidade 1 - Algoritmia

Alexandre Alcobia

Escola Sec. de S. Joo do Estoril

Ensino Recorrente - Programao de Computadores

Linguagens de programao
Os computadores comunicam em cdigo binrio, isto , os programas e os dados tm de ser em cdigo binrio para que a mquina os possa entender. A esta linguagem d-se o nome de linguagem mquina. Esta foi a linguagem usada nos primeiros computadores e s especialistas poderiam programar essas mquinas. Para facilitar o trabalho de programao, foram desenvolvidos programas tradutores que transformavam um cdigo feito numa linguagem mais compreensvel por humanos, em linguagem mquina. Esses programas eram conhecidos como assembladores (do ingls assembler) que traduziam uma linguagem mais prxima da humana para a linguagem mquina. Posteriormente, surgiram programas que usavam linguagens mais desenvolvidas e mais prximas da linguagem falada (em geral ingls) e independentes da estrutura da mquina. Estas linguagens so conhecidas como linguagens de alto nvel, pois permitem que o programador no necessite de ter algum conhecimento sobre o funcinamento interno do computador. De uma forma genrica, podemos dizer que h duas maneiras destes programas fazerem atraduo para a linguagem mquina: temos os compiladores que produzem um programa em linguagem mquina e que, depois, pode ser usado; por outro lado, temos os interpretadores que vo traduzindo o texto escrito na linguagem de alto nvel enquanto este executado. A construo de um programa compilado implica a criao de um programa fonte que o texto na linguagem de alto nvel. Depois, este compilado produzindo um programa em linguagem mquina chamado programa objecto. Este programa objecto no legvel para o programador, pelo que ter de recorrer sempre ao programa fonte, este sim, texto legvel pelo programador. Para exemplo, temos o QuickBASIC, ao qual o leitor ter fcil acesso atravs do conhecido MS-DOS, trata-se de uma linguagem de alto nvel interpretada. No entanto, o TurboPascal compilado. No incio da unidade vimos que a criao de um programa passa pela construo do algoritmo do problema em estudo e, depois, tendo em conta o tipo de problema tratado, escolhe-se a linguagem conveniente e procede-se fase de implementao para que possa realmenter ser usado num computador.
Exemplos de linguagens de alto nvel: FORTRAN - Formula Translation ALGOL - Algorithmic Language BASIC - Beginners All-pourpouse Simbolic Instruction Code COBOL - Common Busyness Oriented Language Pascal C++

Alexandre Alcobia

Unidade 1 - Algoritmia

43

You might also like