Você está na página 1de 79

Algoritmos

e lgica da
programao
Ricardo Sobjak

Introduo lgica da programao

Sumrio
1

Introduo lgica da programao .................................................................................6


Lgica ..............................................................................................................................................6
Sequencia Lgica .........................................................................................................................6
Instrues .......................................................................................................................................7
Algoritmos ......................................................................................................................................7
Programas ......................................................................................................................................9

Representao de algoritmos ............................................................................................ 11


Representao em linguagem narrativa ............................................................................. 11
Representao com fluxograma convencional ................................................................. 15
Representao em Pseudocdigo ....................................................................................... 17
Comentrios ........................................................................................................................... 18
Fases de um algoritmo ............................................................................................................ 19
Exemplo das fases no Algoritmo...................................................................................... 20
Teste de Mesa ............................................................................................................................ 21

Tipos de dados ....................................................................................................................... 23


Numricos ................................................................................................................................... 23
Inteiro ....................................................................................................................................... 23
Real ........................................................................................................................................... 23
Alfanumricos............................................................................................................................. 24
Caractere ................................................................................................................................. 24
Cadeia ...................................................................................................................................... 24
Lgicos ......................................................................................................................................... 24

Variveis, Constantes e Expresses .................................................................................. 26

Introduo lgica da programao

Variveis ....................................................................................................................................... 26
Constantes................................................................................................................................... 29
Expresses ................................................................................................................................... 30
5

Operaes bsicas ................................................................................................................ 31


Atribuio .................................................................................................................................... 31
Operadores Aritmticos .......................................................................................................... 32
Operadores Relacionais........................................................................................................... 32
Operadores Lgicos ................................................................................................................. 33
Operador de caractere ............................................................................................................ 36
Prioridade de Operadores ...................................................................................................... 37

Entrada e Sada de dados ................................................................................................... 40


Comando de entrada de dados ........................................................................................... 40
Comando de sada de dados ................................................................................................ 41

Processos de Seleo ........................................................................................................... 44


Estrutura SE-ENTO-SENO (IF-THEN-ELSE) .................................................................. 44
Estrutura SELECIONE-CASO (SWITCH-CASE)................................................................... 48

Processos de Repetio ....................................................................................................... 50


Estrutura de repetio ENQUANTO-FAA (WHILE-DO) ............................................... 50
Estrutura de repetio REPITA-AT QUE (REPEAT UNTIL)............................................ 51
Estrutura de repetio PARA-FAA (FOR-TO-DO) ......................................................... 52

Modularizao ........................................................................................................................ 53
Mecanismo de Funcionamento ............................................................................................. 54
Definio de Subalgoritmos ................................................................................................... 55
Procedimentos ........................................................................................................................... 56
Funes ........................................................................................................................................ 57

Introduo lgica da programao

10

Tipos homogneos de dados compostos ................................................................. 61

Variveis indexadas unidimensionais Vetores ............................................................... 61


Declarao de vetores......................................................................................................... 62
Leitura e escrita de dados nos vetores ........................................................................... 62
Utilizao de Vetores Relacionados ..................................................................................... 64
Variveis indexadas bidimensionais Matrizes ................................................................ 68
Declarao e Utilizao de Matrizes ............................................................................... 69
11

Tipos heterogneos de dados compostos ................................................................ 71

Registros ...................................................................................................................................... 71
Atribuio .................................................................................................................................... 72
Leitura e escrita .......................................................................................................................... 73
Exemplo ....................................................................................................................................... 73

Introduo lgica da programao

Apresentao
Prezado estudante,
Saber construir algoritmos um fator primordial para que se possam desenvolver
programas em linguagens de computadores, isso depende do entendimento da estrutura
lgica de funcionamento. Em cursos de nveis tcnico e superior, que possuam relao com
desenvolvimento de software, ou at mesmo, algumas engenharias, preveem unidades
curriculares que tratam, em seus ementrios, de contedos referentes construo de
algoritmos e desenvolvimento da lgica da programao.
Este material foi elaborado com o objetivo apresentar a maioria desses conceitos,
para que voc possua utiliz-lo como ferramenta de apoio na compreenso e apropriao
destes conhecimentos.
Este material ainda est em fase de construo e formulao do seu contedo,
portanto, em breve ser disponibilizado uma verso mais elaborada.

Introduo lgica da programao

Introduo lgica da
programao

Lgica
O conceito de lgica est relacionado com a ideia de ter
um raciocnio estruturado, partindo-se do pressuposto que o
pensamento deve ter uma linha coerente de estruturao.
Dentro da programao, a lgica um aspecto essencial para
que seja possvel encadear os pensamentos, de forma que estes
sejam raciocinados com justeza e preciso, a fim de que se
possam atingir objetivos previamente determinados. Todo o desenvolvimento de sistema
necessita que o meio para se atingir um objetivo, seja organizado dentro de uma sequencia
lgica de aes e decises.
A aprendizagem de lgica no se constitui como um fim, mas um meio de garantir
que nosso pensamento se faz para atingir objetivos verdadeiros.

Sequencia Lgica
Uma sequencia lgica pode ser considerada como a organizao sequencial de
passos lgicos que so executados para atingir um determinado objetivo na soluo de
um problema. No contexto de programao, estes passos ou pensamentos podem ser
descritos como uma sequencia de instrues que so escritas em linguagem computacional
para ser interpretadas por um determinado compilador. Na Figura 1.1 possvel visualizar

Introduo lgica da programao

uma demonstrao de sequencia lgica, onde se tm os passos que ocorrem na


alimentao de uma planta carnvora.

Figura 1.1 Demonstrao da sequencia lgica de alimentao de uma planta


carnvora.

Instrues
Na linguagem comum, entende-se por instrues um conjunto de regras ou
normas definidas para a realizao ou emprego de algo. Em informtica, porm, instruo
a informao que indica a um computador uma ao elementar a executar.
Convm ressaltar que uma ordem isolada no permite realizar o processo completo,
para isso necessrio um conjunto de instrues colocadas em ordem sequencial lgica.
Por exemplo, se quisermos fazer uma omelete, precisaremos colocar em prtica
uma srie de instrues, que basicamente seria: quebrar os ovos, bater a clara e a gema,
fritar a mistura, entre outros. evidente que essas instrues tm que ser executadas em
uma ordem adequada, pois no se pode fritar a mistura antes de quebrar os ovos.
Dessa maneira, uma instruo tomada em separado no tem muito sentido. Para
obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na
ordem correta.

Algoritmos
Algoritmo a descrio de um conjunto de comandos que, obedecidos, resultam
numa sucesso finita de aes. Um algoritmo pode ser pensado como uma receita, que
formada por uma sequencia de instrues ordenadas de forma lgica para a resoluo de
uma determinada tarefa ou problema. Estas tarefas no podem ser redundantes nem
subjetivas na sua definio, devem ser claras e precisas.

Introduo lgica da programao

Algoritmo no a soluo de um problema, pois se assim fosse cada problema teria


um nico algoritmo. Algoritmo um caminho para a soluo de um problema, e em geral,
os caminhos que levam a uma soluo so muitos.
O aprendizado de algoritmos adquirido atravs de muitos exerccios. Algoritmos
s so aprendidos construindo-os e testando-os.
Um algoritmo deve possuir as seguintes caractersticas:

Ter incio e fim;

Ser escrito em termos de aes ou comandos bem definidos;

Deve ser fcil de interpretar e codificar, ou seja, ele deve ser o intermedirio
entre a linguagem falada e a linguagem de programao;

Ter uma sequencia lgica.

At mesmo as coisas mais simples, podem ser descritas em sequencias lgicas. A


seguir temos dois exemplos de algoritmos.

Algoritmo para Chupar uma bala:

Pegar a bala;

Retirar o papel;

Chupar a bala;

Jogar o papel no lixo.

Algoritmo para Somar dois nmeros quaisquer:

Escreva o primeiro nmero no retngulo A;

Escreva o segundo nmero no retngulo B;

Some o nmero do retngulo A com nmero do retngulo B e coloque o


resultado no retngulo C.

Retngulo A

Retngulo B

Resultado

Introduo lgica da programao

Programas
Os programas de computadores nada mais so do que algoritmos escritos numa
linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic, Java, PHP, entre outras) e
que so interpretados e executados por uma mquina, no caso um computador. Notem
que dada esta interpretao rigorosa, um programa por natureza muito especfica e rgida
em relao aos algoritmos da vida real.
As
Figura 1.2etapas e os elementos envolvidos na atividade de programao podem
ser visualizados na Figura 1.2, nela possvel perceber que a etapa inicial da programao
a existncia de um problema, que consequentemente necessita de uma soluo. A partir do
problema necessrio conhecer (ou procurar) a sua soluo. Uma vez conhecendo a
soluo do programa necessrio adapt-la ao mundo da mquina. Esta adaptao
produz o algoritmo, o qual independente de linguagem de programao e contm a
essncia do programa. Por fim, o passo que exige um maior esforo codificao, em que
o programador transcreve o algoritmo seguindo as regas de uma linguagem de
programao, que por sua vez, depois de compilado ir gerar o programa executvel.
O algoritmo tem um papel fundamental por ser o elo entre os dois mundos.
Percebe-se que a atividade de programao tem incio com a construo do algoritmo.

MUNDO REAL

MUNDO COMPUTACIONAL
Linguagem de
Programao

Problema

Algoritmo

Codificao

Programa
fonte
Traduo

Adaptao
Soluo

Programa
executvel

Figura 1.2 Elementos e etapas da atividade de programao

Introduo lgica da programao

Exerccios
1)

Desenvolva a sequencia lgica para tomar um banho.

2)

Descreva com detalhes a sequencia lgica para trocar o pneu de um carro.

3)

Faa um algoritmo para trocar uma lmpada, descrevendo todos os detalhes.

10

Representao de algoritmos

Representao de algoritmos
Existem diversas formas de representao de algoritmos, algumas delas tratam os

problemas apenas em nvel lgico, abstraindo-se de detalhes de implementao muitas


vezes relacionados com alguma linguagem de programao especfica. Por outro lado
existem formas de representao de algoritmos que possuem uma maior riqueza de
detalhes e muitas vezes acabam por obscurecer as ideias principais do algoritmo,
dificultando seu entendimento.
Dentre as formas de representao de algoritmos mais conhecidas podemos citar:

Descrio Narrativa;

Fluxograma Convencional;

Pseudocdigo, tambm conhecido como Linguagem Estruturada ou


Portugol.

Representao em linguagem narrativa


Nesta forma de representao os algoritmos so expressos diretamente em
linguagem natural. Esta representao pouco usada na prtica porque o uso da
linguagem natural muitas vezes d oportunidade a ms interpretaes, ambiguidades e
imprecises. Por exemplo, a instruo "afrouxar ligeiramente as porcas" no algoritmo da
troca de pneus est sujeita a interpretaes diferentes por pessoas distintas. Uma instruo
mais precisa seria: "afrouxar a porca, girando-a 30 no sentido anti-horrio".
Descrevemos ento uma atividade bem cotidiana: trocar uma lmpada. Apesar de
parecer simples, muitas vezes fazemos este tipo de atividade inconscientemente, sem
percebermos os pequenos detalhes. Vejamos como seria descrev-la passo a passo:

Pegar uma escada;

Posicionar a escada embaixo da lmpada;

Buscar uma lmpada nova;

Subir na escada;

11

Representao de algoritmos

Retirar a lmpada velha;

Colocar a lmpada nova.

Para se trocar a lmpada, seguida uma determinada sequencia de aes,


representadas atravs desse algoritmo. Como isso pode ser seguido por qualquer pessoa,
estabelece-se a um padro de comportamento. A sequencializao tem por objetivo reger
o fluxo de execuo, determinando qual ao vem a seguir.
O algoritmo anterior tem um objetivo bem especfico: trocar uma lmpada. E se a
lmpada no estiver queimada? O algoritmo faz com ela seja trocada do mesmo modo,
no prevendo essa situao. Para solucionar este problema, podemos efetuar um teste
seletivo, verificando se a lmpada est ou no queimada:

Pegar uma escada;

Posicionar embaixo da lmpada;

Buscar uma lmpada nova;

Ligar o interruptor;

Se a lmpada no acender, ento:


o

Subir na escada;

Retirar a lmpada velha;

Colocar a lmpada nova.

Dessa forma, algumas aes esto ligadas condio (lmpada no acender). No


caso da lmpada acender, as trs linhas, a seguir, no sero executadas:

Subir na escada;

Retirar a lmpada velha;

Colocar a lmpada nova.

Em algumas situaes, embora o algoritmo resolva o problema proposto, a soluo


pode no ser a mais eficiente. Exemplo: trs alunos devem resolver um determinado
problema:

O aluno A conseguiu resolver o problema executando 35 linhas de


programa;

O aluno B resolveu o problema executando 10 linhas de programa;

O aluno C resolveu o problema executando 54 linhas de programa.

12

Representao de algoritmos

Obviamente, o algoritmo desenvolvido pelo aluno B menor e mais eficiente que os


demais. Isso significa que h cdigo desnecessrio nos demais programas.
Dessa forma, podemos aperfeioar o algoritmo anterior, uma vez que buscamos a
escada e a lmpada sem saber se sero necessrias:

Ligar o interruptor;

Se a lmpada no acender, ento:


o

Pegar uma escada;

Posicionar a escada embaixo da lmpada;

Buscar uma lmpada nova;

Subir na escada;

Retirar a lmpada velha;

Colocar a lmpada nova.

Podemos considerar ainda que a lmpada nova pode no funcionar. Nesse caso
devemos troc-la novamente, quantas vezes forem necessrias, at que a lmpada acenda:

Ligar o interruptor;

Se a lmpada no acender, ento:


o

Pegar uma escada;

Posicionar a escada embaixo da lmpada;

Buscar uma lmpada nova;

Subir na escada;

Retirar a lmpada velha;

Colocar a lmpada nova;

Se a lmpada no acender, ento:

Retirar a lmpada;

Colocar outra lmpada;

Se a lmpada no acender, ento: ...

Observamos que o teste da lmpada nova efetuado por um conjunto de aes:

Se a lmpada no acender ento:


o

Retire a lmpada

Coloque outra lmpada

13

Representao de algoritmos

Em vez de escrevermos vrias vezes este conjunto de aes, podemos alterar o


fluxo sequencial de execuo do programa, de forma que, aps executar a ao coloque
outra lmpada, voltemos a executar a ao se a lmpada no acender.
Precisa-se ento determinar um limite para tal repetio, para garantir que ela cesse
quando a lmpada finalmente acender:

Enquanto a lmpada no acender, faa:


o

Retire a lmpada

Coloque outra lmpada

Uma verso final do algoritmo, que repete aes at alcanar o seu objetivo: trocar
a lmpada queimada por uma que funcione, apresentada abaixo.

Ligar o interruptor;

Se a lmpada no acender, ento:


o

Pegar uma escada;

Posicionar a escada embaixo da lmpada;

Buscar uma lmpada nova;

Subir na escada;

Retirar a lmpada velha;

Colocar a lmpada nova;

Enquanto a lmpada no acender, faa:

Retirar a lmpada;

Colocar outra lmpada.

At agora, estamos efetuando a troca de uma nica lmpada. Todo o procedimento


poderia ser repetido 10 vezes, por exemplo, no caso de querermos trocar 10 lmpadas.
Inicialmente, tnhamos um pequeno conjunto de aes que deveriam ser executadas
(estrutura sequencial). Atravs de uma condio, inclumos posteriormente uma estrutura de
seleo. Na necessidade de repetir um determinado trecho do algoritmo, construiu-se no
final uma estrutura de repetio.

14

Representao de algoritmos

Representao com fluxograma convencional


uma representao grfica de algoritmos onde formas geomtricas diferentes
implicam aes (instrues, comandos) distintas. Tal propriedade facilita o entendimento
das ideias contidas nos algoritmos e justifica sua popularidade.
Esta forma aproximadamente intermediria descrio narrativa e ao
pseudocdigo (subitem seguinte), pois menos imprecisa que a primeira e, no entanto, no
se preocupa com detalhes de implementao do programa, como o tipo das variveis
usadas.
Nota-se que os fluxogramas convencionais preocupam-se com detalhes de nvel
fsico da implementao do algoritmo. Por exemplo, figuras geomtricas diferentes so
adotadas para representar operaes de sada de dados realizadas em dispositivos distintos,
como uma fita magntica ou um monitor de vdeo. A seguir, na Tabela 2.1, so
apresentados os smbolos mais comuns utilizados para representao de algoritmos em
fluxogramas convencionais.
Tabela 2.1 Simbologia bsica mais utilizada para representao de algoritmos em
fluxograma convencional
Terminal - Smbolo utilizado como ponto para indicar o incio
e/ou fim do fluxo de um programa.
Seta de fluxo de dados - permite indicar o sentido do fluxo de
dados. Serve exclusivamente para conectar os smbolos ou
blocos existentes.
Processamento - smbolo ou bloco que se utiliza para indicar
clculos (algoritmos) a efetuar, atribuies de valores ou
qualquer manipulao de dados que tenha um bloco especfico
para sua descrio.
Entrada de dados ou operao manual - utilizado para ler os
dados necessrios ou programa fora de linha sem interveno
de dispositivos mecnicos.
Entrada e sada de dados - smbolo em funo de dispositivo
qualquer de entrada ou sada de dados, como fornecedor de
informaes para processamento, gravao e outros.
Sada de dados em vdeo - utiliza-se este smbolo quando se
quer mostrar dados na tela do vdeo.

15

Representao de algoritmos

Sada de dados em impressora - utilizado quando se deseja


que os dados sejam impressos.
Deciso - indica a deciso que deve ser tomada, indicando a
possibilidade de desvios para diversos outros pontos do fluxo,
dependendo do resultado de comparao e de acordo com
situaes variveis.
Conector - utilizado quando preciso particionar o diagrama.
Quando ocorrer mais de uma partio, colocada uma letra ou
nmero dentro do smbolo de conexo para identificar os pares
de ligao.
Conector - usado para indicar conexo de fluxo em outra
pgina.

De modo geral, um fluxograma se resume a um nico smbolo inicial por onde a


execuo do algoritmo comea, e um ou mais smbolos finais, que so pontos onde a
execuo do algoritmo se encerra. Partindo do smbolo inicial, h sempre um nico
caminho orientado a ser seguido, representando a existncia de uma nica sequencia de
execuo das instrues. Isto pode ser melhor visualizado pelo fato de que, apesar de vrios
caminhos poderem convergir para uma mesma figura do diagrama, h sempre um nico
caminho saindo desta. Excees a esta regra so os smbolos finais, dos quais no h
nenhum fluxo saindo, e os smbolos de deciso, de onde pode haver mais de um caminho
de sada (usualmente dois caminhos), representando uma bifurcao no fluxo.
Na Figura 2.1, apresentado um exemplo de fluxograma convencional para calcular
a mdia de quatro notas e verificar se o aluno foi aprovado ou reprovado. Neste caso, o
algoritmo faz a leitura das notas N1, N2, N3 e N4, na sequencia calcula a mdia, por fim
verifica se a mdia foi maior ou igual a sete, se for verdadeiro, escreve Aprovado, seno
escreve Reprovado.

16

Representao de algoritmos

Figura 2.1 Exemplo de algoritmo em fluxograma convencional.

Representao em Pseudocdigo
Os algoritmos so descritos em uma linguagem chamada pseudocdigo, que so
independentes das linguagens de programao. Esta forma de representao de algoritmos
rica em detalhes, como a definio dos tipos das variveis usadas no algoritmo. Por
assemelhar-se bastante forma em que os programas so escritos, encontra muita
aceitao. Ao contrrio de uma linguagem de programao no existe um formalismo
rgido de como deve ser escrito o algoritmo.
O algoritmo deve ser fcil de interpretar e fcil de codificar. Ou seja, ele deve ser o
intermedirio entre a linguagem falada e a linguagem de programao.
Na verdade, esta representao suficientemente geral para permitir a traduo de
um algoritmo nela representado para uma linguagem de programao especfica seja
praticamente direta.
A forma geral da representao de um algoritmo na forma de pseudocdigo a
seguinte:
1
2
3
4
5
6

Algoritmo <nome_do_algoritmo>
<declarao_de_variveis>
<subalgoritmos>
Incio
<corpo do algoritmo>
Fim

Temos que:

17

Representao de algoritmos

Algoritmo uma palavra que indica o incio da definio de um algoritmo


em forma de pseudocdigo.

<nome_do_algoritmo> um nome simblico dado ao algoritmo com a


finalidade de distingui-los dos demais.

<declarao_de_variveis> consiste em uma poro opcional onde so


declaradas

as

variveis globais

usadas

no algoritmo principal

e,

eventualmente, nos subalgoritmos.

<subalgoritmos> consiste de uma poro opcional do pseudocdigo onde


so definidos os subalgoritmo.

Incio e Fim so respectivamente as palavras que delimitam o incio e o


trmino do conjunto de instrues do corpo do algoritmo.

Um exemplo de representao do algoritmo do clculo da mdia de um aluno, na


forma de um pseudocdigo mostrado a seguir:
1
2
3
4
5
6
7
8
9
10
11
12

Algoritmo Calculo Media


Var
N1, N2, N3, N4, MEDIA: real
Incio
Leia N1, N2, N3, N4
MEDIA (N1 + N2 + N3 + N4) / 4
Se MEDIA >= 7 ento
Escreva Aprovado
Seno
Escreva Reprovado
Fim_se
Fim

Comentrios
Todo programador deve ter a preocupao com a clareza de seu algoritmo, ou seja,
a facilidade com que outras pessoas podero entender a lgica da resoluo de um
problema, para entend-lo e/ou alter-lo. Os comentrios tem um papel fundamental no
algoritmo, pois a partir deles so feitas observaes, explicaes e colocadas outras
informaes relevantes.
Os comentrios em um algoritmo devem estar entre chaves {}, ou barra dupla //
no incio da linha.
Exemplo:

18

Representao de algoritmos

{O texto de comentrio deve estar entre chaves, neste caso, usa-se chaves
quando o comentrio excede limite de uma linha};

//Ou com duas barras no incio da linha, quando usar apenas uma linha.

A seguir, apresentada a forma de utilizao de comentrios no algoritmo para


clculo de mdia de um aluno:
1
2
3
4
5
6
7
8
9
10
11
12
13

Algoritmo Calculo Media


//nome do algoritmo
Var
N1, N2, N3, N4, MEDIA: real //definio das variveis
Incio
//Incio do algoritmo
Leia N1, N2, N3, N4
// Faz a leitura das variveis N1, N2, N3 e N4
MEDIA (N1 + N2 + N3 + N4) / 4 { Calcula a mdia das notas e atribui
O valor calculado na varivel MEDIA }
Se MEDIA >= 7 ento
//Verifica se a mdia maior ou igual a 7
Escreva Aprovado //Se o resultado for Verdadeiro
Seno
Escreva Reprovado //Se o resultado for Falso
Fim_se
Fim
//Trmino do algoritmo

Fases de um algoritmo
importante ressaltar que qualquer tarefa que siga determinado padro pode ser
descrita por um algoritmo, como por exemplo: Como fazer uma canjica? Ou ento, como
calcular a folha de pagamento de uma empresa?
Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema
apresentado em trs fases fundamentais. Onde temos:

ENTRADA: So os dados de entrada do algoritmo;

PROCESSAMENTO: So os procedimentos utilizados para chegar ao


resultado final;

SADA: So os dados j processados, gerando uma informao.

Na Figura 2.2, podemos visualizar a esquematizao das fases de um algoritmo, em


que temos inicialmente na fase de entrada, algumas palavras (dados) dispostas de forma
aleatria sem nenhuma conexo e sentido que possa ser interpretado por uma pessoa. Na
fase do processamento, existe uma organizao lgica para que os dados iniciais possam
ter alguma representatividade. Por fim, na fase de sada, depois que os dados foram
processados, gerada uma informao que de fato pode ser entendida, pois existe uma
conexo no sentido interpretativo as palavras.

19

Representao de algoritmos

ENTRADA

PROCESSAMENTO

SADA

Os dados so dispostos:

Estruturas lgicas so usadas


para organizar o
processamento dos dados:

A informao gerada:

ROUPA

A
DE

RATO
REI
O

DO

O RATO ROEU A
ROUPA DO REI DE

ROMA

ROMA

ROEU
Figura 2.2 Fases de um algoritmo.

Exemplo das fases no Algoritmo


Imagine o seguinte problema: Calcular a mdia final dos alunos da 3 Srie. Os
alunos realizaro quatro provas: P1, P2, P3 e P4.
Para montar o algoritmo proposto, faremos trs perguntas:
a) Quais so os dados de entrada?
Resposta: Os dados de entrada so P1, P2, P3 e P4.
b) Qual ser o processamento a ser utilizado?
Resposta: O procedimento ser somar todos os dados de entrada e dividi-los
por 4 (quatro).
c)

Quais sero os dados de sada?


Resposta: O dado de sada ser a mdia final.

Depois de respondidas as questes, podemos construir o algoritmo da seguinte


forma:

Receba a nota da prova1

Receba a nota de prova2

Receba a nota de prova3

Receba a nota da prova4

Some todas as notas e divida o resultado por 4

Mostre o resultado da diviso

20

Representao de algoritmos

Teste de Mesa
Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste
chamado de teste de mesa, que significa seguir as instrues do algoritmo de maneira
precisa para verificar se o procedimento utilizado est correto ou no.
Tomando como exemplo o algoritmo para clculo da mdia de quatro provas,
mostrado a seguir:

Receba a nota da 1 prova

Receba a nota de 2 prova

Receba a nota de 3 prova

Receba a nota da 4 prova

Some todas as notas e divida o resultado por 4

Mostre o resultado da diviso

Inicialmente vamos identificar a 1 prova como P1, a 2 prova como P2, a 3


prova como P3, a 4 prova como P4 e o resultado do clculo de mdia entre as quatro
provas como MEDIA. Com os esses itens identificados, montamos uma tabela contendo
uma coluna para cada identificador, como mostrado na Tabela 2.2:
Tabela 2.2 Tabela para fazer o teste de mesa
P1

P2

P3

P4

MEDIA

Para fazer o teste de mesa deste algoritmo, devemos seguir a sequencia de


execuo, colocando o valor recebido de cada uma das provas na tabela. Quando chegar
na instruo Some todas as notas e divida o resultado por 4, o resultado deve ser
colocado na coluna MEDIA.
Obviamente que no faz muito sentido utilizar um teste de mesa para um algoritmo
pequeno como este, porm em algoritmos mais complexos ele um instrumento
importante para avaliar o valor tomado pelas variveis em cada instante da execuo do
algoritmo.

21

Representao de algoritmos

Exerccios
1. Identifique os dados de entrada, processamento e sada no algoritmo abaixo:
Receba cdigo da pea
Receba valor da pea
Receba Quantidade de peas
Calcule o valor total da pea (Quantidade * Valor da pea)
Mostre o cdigo da pea e seu valor total
2.

Um homem quer atravessar um rio com um barco que pode carregar a cada
viajem, ele mesmo e apenas mais uma de suas trs cargas: um lobo, um carneiro e
um mao de alfafas. O homem no pode deixar juntos na margem do rio o lobo
com o carneiro, nem o carneiro com o mao de alfafas. O que o homem deve
fazer para atravessar o rio sem perder nenhuma de suas cargas?

3.

Elabore um algoritmo que mova 5 discos de uma torre de Hani, que consiste em
3 hastes (A-B-C), uma das quais serve de suporte para os cinco discos de tamanhos
diferentes (1-2-3-4-5), os menores sobre os maiores. Pode-se mover um disco de
cada vez para qualquer haste, sendo que nunca deve ser colocado um disco maior
sobre um menor. O objetivo transferir os cinco discos da haste A para haste C.

Mova <disco n> da haste <n1> para haste <n2>


4.

Faa um algoritmo para Calcular o estoque mdio de uma pea, sendo que
ESTOQUEMDIO = (QUANTIDADE MNIMA + QUANTIDADE MXIMA) / 2.

22

Tipos de dados

Tipos de dados
Como visto na unidade 2, os dados fazem parte da fase de entrada de um

algoritmo e so essenciais para que haja a informao. Os dados podem representar


nmeros, letras, palavras, frases, textos e at valores lgicos.
As linguagens de programao trazem os mais diversos tipos de dados, existem
tipos especficos para nmeros, texto, imagem, som, arquivos, entre outros. Entretanto, para
os algoritmos iremos utilizar apenas os tipos bsicos, ou primitivos, que sero suficientes
para o desenvolvimento da lgica utilizada na resoluo dos problemas propostos, pois o
tipo de informao apenas uma restrio tecnolgica, assim o programador tem a
liberdade de adicionar novos tipos ao algoritmo, adequando-os para a linguagem de
programao a ser utilizada na implementao do algoritmo.
Nesta unidade, sero apresentados os tipos primitivos de dados, por serem
largamente utilizados e implementados na maioria das linguagens de programao, que
so: numricos, caracteres e lgicos.

Numricos
Esse tipo de dados especfico para representao de nmeros, que, dentro da
linguagem de programao, podero ser utilizados para clculos. Os dados numricos so
divididos basicamente em duas categorias: inteiros e reais.
Inteiro
O tipo de dados inteiro representa nmeros positivos, negativos e nulo, ocupam 2
bytes na memria do computador, com isso possvel representar um intervalo de -32768
at +32767. Exemplos: -10, 1, 0, 565.
Real
O tipo de dados real representa os nmeros positivos, negativos e nulo, podem ser
inteiros ou fracionrios, que possuem casas decimais, ocupam 6 bytes na memria, sendo

23

Tipos de dados

possvel armazenar dados num intervalo de 2.9 x 10-39 at 1.7 x 1038. Exemplos: -4, 134.34,
0.

Alfanumricos
Os dados alfanumricos so usados especificamente para representar dados que
contenham letras e/ou nmeros. Pode, em determinados momentos, conter somente dados
numricos ou somente literais. Se usado somente para armazenamento de nmeros, no
poder ser utilizada para operaes matemticas. Dados alfanumricos so classificados
basicamente em duas categorias: caractere e cadeia.
Caractere
Esse tipo de dados utilizado para representar apenas um caractere, que pode ser
um nmero, letra ou smbolo. Para utilizar esse tipo de dados, o caractere deve ser
especificado entre aspas simples (). No computador, utiliza 1 byte da memria.
Exemplo: pode ser usado para representar a abreviao do sexo de uma pessoa,
como M ou F.
Cadeia
O tipo de dados cadeia, refere-se a um conjunto de caracteres, que pode conter
nmeros, letras e/ou smbolos. Para utilizar esse tipo de dados, os caracteres devem ser
especificados entre aspas duplas (). Podem ocupar entre 1 a 255 bytes na memria de um
computador, ou seja, com esse tipo de dados, podemos representar frases de at 255
caracteres. Dados de cadeia de caracteres tambm so conhecidos como string, literal ou
texto.
Exemplos: armazenamento do nome de uma pessoa, como Juca da Silva, nome de
uma cidade, como Foz do Iguau.

Lgicos
Dados do tipo lgico so representados apenas como Verdadeiro (true) ou Falso
(false). Na memria de um computador, ocupa apenas 1 byte, com isso para representar o

24

Tipos de dados

valor lgico verdadeiro, usamos apenas a letra V, e para representar o valor lgico falso,
usamos a letra F.

Exerccios
1)

Classifique os dados especificados abaixo de acordo com seu tipo, assinalando com I
os dados do tipo inteiro, com R os reais, com C os caracteres, com S os literais
(strings), com L os lgicos e com N aqueles que so invlidos ou no possvel de se
definir.
(___) 0.21
(___) .V.
(___) Verdadeiro
(___) 1
(___) +3456
(___) abc
(___) V
(___) a
(___) F
(___) 0.
(___) +3456
(___) Malu
(___) 1%
(___) +6786.
(___) +54
(___) Julio
(___) -0.0
(___) Melo
(___) 1.34
(___) .F.
(___) $%dgf435$3f.
(___) .F.
(___) 3
(___) -0.554
(___) -0.001
(___) r
(___) -0554

2)

Determine qual o tipo primitivo de informao presente nas sentenas abaixo:


a) A placa Pare! tinha 2 furos de bala.
b) Josefina subiu 5 degraus para pegar uma ma boa.
c) Alberta levou 3 horas e meia para chegar ao hospital onde concebeu uma
garota.
d) Julia escreveu em sua casa: Preserve o meio ambiente, e ficou devendo
R$ 20,59 ao vendedor de tintas.
e) Jos recebeu sua 18a medalha na natao por ter alcanado a marca de 57,3
segundos nos 100 metros rasos.

3)

Dados os valores abaixo, identifique seu respectivo tipo de dado:


20/07/2011
______________________________
-1495
______________________________
51.3
______________________________
Verdadeiro
______________________________
A
______________________________
85
______________________________
Falso
______________________________

25

Variveis, Constantes e Expresses

Variveis, Constantes e Expresses


Nesta unidade, sero apresentados alguns dos elementos bsicos que compem os

algoritmos.

Variveis
Varivel a representao simblica dos elementos de um conjunto de dados. Cada
varivel corresponde a uma posio de memria, cujo contedo pode ser alterado durante
a execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela s
pode armazenar um valor a cada instante. Em uma equao matemtica (A+B=7), A e B
representam as posies de memria que contero as parcelas da equao.
A seguir, na Figura 4.1 apresentado um exemplo de utilizao de variveis, onde
se tm trs variveis que poderiam ter valores diferentes em momentos diferentes. Num
dado momento, a varivel BASE poderia ter o valor 5 e a varivel ALTURA poderia ter o
valor 2, neste caso, de acordo com a representao, a varivel AREA_RETANGULO receberia
o valor 10 (2 x 5).

Variveis

AREA_RETANGULO = BASE * ALTURA


Figura 4.1 Exemplo utilizao de variveis.
As variveis so identificadas por um nome que composto de um ou mais
caracteres, o primeiro caractere deve ser uma letra ou o caractere _ (underscore), no
poder conter caracteres especiais (?/]^&%$#@) e nem ser uma palavra reservada da
linguagem utilizada. Para ser mais especfico, os nomes de variveis devem ser formados
por caracteres pertencentes ao conjunto de caracteres {a,b,c,..z,A,B,C,...Z,0,1,2,...,9,_}. Se
utilizar mais de uma palavra para compor o nome da varivel utilize o _ (underscore) para
separar as palavras, no se deve utilizar espaos. Dentro de um algoritmo no se pode ter

26

Variveis, Constantes e Expresses

duas variveis como o mesmo nome, esse identificador deve ser nico para cada varivel.
Estas mesmas regras servem para compor o nome identificador de constantes e funes,
que sero vistos nos prximos tpicos.
Exemplos de nomes de variveis:

Meu_Nome

vlido

MEU_NOME

vlido

meu_nome

vlido

vArIaVeL

vlido

_Linha

vlido

Exemplo123

vlido

23var

no vlido, comea com nmero

A...B

no vlido, possui ponto

#maior

no vlido, possui caractere especial no incio

Um%dois

no vlido, possui caractere especial no meio

Exemplo 123

no vlido, possui espao

O nome de uma varivel geralmente escolhido de forma que represente os dados


que esto relacionados com a mesma, ou seja, para que se possa ter ideia do que trata o
seu contedo sem precisar abri-la. Na Tabela 4.1, apresentado exemplos de identificao
das variveis com o seu respectivo contedo:
Tabela 4.1 Exemplo de nomes que representem o contedo das variveis
NOME DA VARIVEL
nome
idade
sexo
salario

VALOR DA VARIVEL
Juca da Silva
34
M
3.800,00

Para melhor detalhamento da forma que a varivel referenciada com a memria


do computador, vamos pensa-la como uma sequencia finita de caixas, que num dado
momento, guardam algum tipo de informao, como nmero, uma letra, uma palavra, uma
frase, ou outro tipo qualquer de informao. O computador, para poder trabalhar como
alguma destas informaes precisa saber onde, na memria, o dado est localizado.
Fisicamente, cada caixa, ou cada posio de memria, possui um endereo, ou seja, um

27

Variveis, Constantes e Expresses

nmero, que indica onde cada informao est localizada. Este nmero representado
atravs da notao hexadecimal, tendo o tamanho de quatro, ou mais bytes.
O endereamento das posies de memria atravs de nmeros hexadecimais
perfeitamente compreendido pela mquina, mas para ns humanos torna-se uma tarefa
complicada. Pensando nisto, as linguagens de computador facilitaram o manuseio, por
parte dos usurios, das posies de memria da mquina, permitindo que, ao invs de
trabalhar diretamente com os nmeros hexadecimais, fosse possvel dar nomes diferentes a
cada posio de memria. Tais nomes seriam de livre escolha do usurio. Com este recurso,
os usurios ficaram livres dos endereos fsicos (nmeros hexadecimais) e passaram a
trabalhar com endereos lgicos (nomes dados pelos prprios usurios). Desta forma, a
representao do nome lgico da varivel referenciado com a posio da fsica da memria
pode ser visualizada na Figura 4.2:
Representao da Memria

Valor
4
Endereo 3000:
009d

3
2100:
009e

Mara
009f:
3433

F
00aa:
4fa0

55
3aaa:
00ab

45.55
11aa:
00ac

4
33ed:
00ad

V
ae4e:
00ae

2011
11ee:
00af

NOME DA VARIVEL
X
Y
nome
sexo
idade
valor
quantidade
cliente
ano
Figura 4.2 Esquema de representao da ligao lgica entre o nome de uma
varivel com o endereamento da memria do comutador.
Portanto, podemos dizer que uma varivel uma posio de memria,
representada por um nome simblico (atribudo pelo usurio), a qual contm, num
determinado instante, um conjunto de dados.

28

Variveis, Constantes e Expresses

Toda varivel deve ser declarada com um nome seguido de um tipo, conforme o
seu contedo. Se declararmos uma varivel como numrica, no poderemos armazenar
textos ou valores lgicos. Em portugus estruturado, utilizaremos a seguinte sintaxe para
declarao de variveis:
1
2

Var
<nome da varivel> : <tipo de dado>

Como exemplo de declarao de variveis, temos:


1
2
3
4
5

Var
nome
sexo
idade
salario

:
:
:
:

literal
caracter
inteiro
real

Constantes
Uma constante compreende a mesma ideia de uma varivel, mas com um porem, o
seu valor no pode variar, isto , o seu valor ser sempre o mesmo, no poder ser
modificado durante a execuo do algoritmo. Quando existir a necessidade de mudar o seu
valor, isso dever ser feito no cdigo do algoritmo e no em tempo de execuo. Como as
constantes so compreendidas como variveis fixas, ela podem ser dos mesmos tipos de
dados que as variveis: numricos, caracteres ou lgicos. A regra para identificao dos
nomes tambm segue o mesmo padro das variveis.
Exemplos:
a) PI = 3,14
b) NATAL = 25 de dezembro
Toda constante deve ser declarada com um nome seguido de um tipo, conforme o
seu contedo. Em portugus estruturado, utilizaremos a seguinte sintaxe para declarao
de constantes:
1
2

Var
Constante <nome da constante> : <tipo de dado>

Como exemplo de declarao de constante, temos:


1
2
3

Var
Constante pi
: real
Constante nascimento : literal

29

Variveis, Constantes e Expresses

Expresses
Uma expresso pode ser a combinao de uma ou mais constantes, variveis,
operadores e/ou funes. As expresses mais comuns so as aritmticas que contm os
operandos (constantes, variveis e/ou funes) ligados por um ou mais operadores (+, -, *,
/).
Exemplos:
a) valor * 10
b) salario - imposto
c) total - (total * 0,2)
d) Sr. + nome

Exerccios
1)

Assinale com C os identificadores corretos e com I os incorretos. Explique o que est


de errado nos identificadores incorretos.
(___) valor
(___) a1b2c3
(___) abc
(___) _b248
(___) 3 x 4
(___) km/h
(___) nota*do*aluno
(___) Maria
(___) xyz
(___) nome empresa
(___) sala_215
(___) ah!0

2)

Supondo que as variveis NB, NA, NMAT e SX sejam utilizadas para armazenar a nota
do aluno, o nome do aluno, o nmero da matrcula e o sexo, declare-as corretamente
em pseudocdigo, associando o tipo adequado ao dado que ser armazenado.

3)

Faa o teste de mesa no diagrama de blocos abaixo e preencha a tabela ao lado com
os dados do teste:
Incio
SALARIO
ABONO
SALNOVO
600,00
60,00
Ler
SALARIO
350,00
50,00
Ler
ABONO

SALNOVO
SALARIO + ABONO

SALNOVO

Fim

30

Operaes bsicas

Operaes bsicas
Os operadores so representados por smbolos, funcionando como relacionamentos

que criam um nico resultado. Existem os operadores aritmticos, relacionais, lgicos e de


strings (cadeia de caracteres).

Atribuio
Essa operao coloca um valor determinado para uma varivel ou constante
especificada. importante que o tipo do valor, seja compatvel com o tipo da varivel, pois
na implementao a incompatibilidade ir gerar erros ou resultados inesperados.
A atribuio pode ser feita determinando-se diretamente um valor compatvel com
o tipo de dados da varivel ou obtendo-se o atravs do resultado de uma expresso ou
tambm, com o resultado da execuo de uma funo, assunto que ser abordado adiante.
Em algoritmos de Portugol, trataremos as operaes de atribuio com o smbolo
. A seguir so mostrados alguns exemplos de atribuio:
a) VARIAVEL_INTEIRO 34 (atribuio direta de nmero inteiro);
b) VARIAVEL_REAL 7.45 (atribuio direta de nmero real);
c) VARIAVEL_CARACTERE M (atribuio direta de caractere);
d) VARIAVEL_CADEIA Rua Argentina, 3455 Centro (atribuio direta de
texto);
e) TOTAL PRECO * QUANTIDADE (resultado de uma expresso, obtendo-se
um valor de nmero real);
f)

X raiz(5) (resultado de uma funo).

Exemplo de um algoritmo que faz a atribuio de valores nas variveis:


1
2
3
4
5
6
7
8

Algoritmo Atribuicao
Var
letra
: caracter
texto
: cadeia
num_inteiro : inteiro
num_real
: real
Incio
letra a

31

Operaes bsicas

9
10
11
12

texto Texto de exemplo


num_inteiro 5
num_real 4.67
Fim

Operadores Aritmticos
Os operadores matemticos, mostrados na Tabela 5.1, so usados para realizar
operaes aritmticas com variveis e constantes, esto em ordem de prioridade (cima para
baixo) em que as operaes so efetuadas.
Tabela 5.1 Operadores aritmticos
Operao
Exponenciao
Multiplicao
Diviso
Adio
Subtrao
Inteiro de Diviso
Resto da Diviso

Operador
^
*
/
+
div
mod

Exemplo de utilizao:
a) PI * raio;
b) A + B 3
c) 10 mod 2

Operadores Relacionais
Os operadores relacionais servem para comparar dois valores de mesmo tipo, e
nesta relao poderemos encontrar constantes, variveis ou expresses. Os operadores
relacionais esto apresentados na Tabela 5.2, a seguir:
Tabela 5.2 Operadores relacionais
Operao
Igual a
Diferente de
Menor que
Maior que

Operador
=
<>
<
>

32

Operaes bsicas

Menor que ou igual a


Maior que ou igual a
Membro de

<=
>=
in

O resultado de uma comparao obtido utilizando-se um operador relacional,


sempre ser um valor lgico, verdadeiro ou falso. Com isso, possvel fazer a avaliao dos
valores de variveis ou expresses permitindo a execuo de comandos especficos para
determinados valores de variveis, pois a variveis representam instncias do problema.
O uso desses operadores possui uma grande representatividade na elaborao de
algoritmos, pois eles sero largamente utilizados para definir o fluxo a ser seguido na
soluo dos problemas. Geralmente a grande dificuldade no aprendizado de algoritmo, est
no domnio do uso desses operadores, pois eles, em conjunto com os comandos de
controle de fluxo, iro determinar quais, ou at quando um conjunto de operaes ser
executado diante de determinados valores das variveis. O conceito de instncia do
problema vem do fato de que um algoritmo ser feito para resolver determinado problema,
mas para um mesmo problema poderemos ter valores diferentes e muitas vezes a variao
desses valores ir requerer procedimentos diferentes para resolver o problema.
Exemplos de utilizao:
a) 6 > 7 resulta em falso.
b) A + B = 5 o resultado poder ser verdadeiro ou falso, dependendo do valor
da expresso A + B, caso o valor de A seja 3 e o valor de B seja 2, ento o
resultado ser verdadeiro.
c) 5,73 in N resulta em falso, pois 5,73 no membro do conjunto dos
nmeros naturais.

Operadores Lgicos
Os operadores lgicos tambm comparam valores de mesmo tipo para criar uma
lgica verdadeira ou falsa, sim ou no, utilizando a lgica booleana. Os operadores lgicos
esto apresentados na Tabela 5.3:

33

Operaes bsicas

Tabela 5.3 Operadores lgicos


Operao
Conjuno
Disjuno
Negao
Excluso

Operador
E
OU
NO
XOU

Uma expresso lgica representa a unio de operaes relacionais permitindo que o


resultado de vrias expresses relacionais seja transformado em um nico resultado lgico.
Vale lembrar-se da lgica matemtica, em que os operadores lgicos so: conjuno,
disjuno, negao e excluso. Nessa lgica o resultado das expresses seguem as
seguintes regas:
a) O operador E (conjuno) somente retornar o valor verdadeiro se todas as
expresses relacionais tambm retornem valores verdadeiros, ou seja, basta
que uma expresso relacional seja falsa para que o resultado geral da
expresso tambm seja falso.
b) O operador OU (disjuno) somente retornar falso caso todas as
expresses relacionais tambm sejam falsas, pois basta que uma expresso
relacional seja verdadeira para o resultado geral ser verdadeiro.
c) O operador NO (negao) inverte o valor lgico de verdade para falso e
de falso para verdade.
d) O operador XOU (excluso) ser verdade se e somente se uma das
expresses relacionais for verdadeira. conhecido como OU exclusivo.
Quando ocorrer de numa mesma expresso lgica existir operadores de conjuno
e disjuno, devemos resolv-la da esquerda para a direita, respeitando o uso de
parnteses e computar o resultado final.
Exemplos de utilizao. Admitindo que a varivel A armazene o valor 5 e a varivel
B o valor 3, temos que:
a) (A > 4 E B > 4) expresso Falsa
b) (A > 4 OU B > 4) expresso Verdadeira
c) (NO A > 4) expresso Falsa
d) (A > 4) expresso Verdadeira

34

Operaes bsicas

e) (A > 4 XOU B < 4) expresso Falsa


f)

(A > 4 XOU B > 4) expresso Verdadeira

No item a, ser verdadeiro se, somente se, as duas questes forem verdadeiras. O
operador lgico OU retornar verdadeiro se pelo menos uma das duas operaes for
verdadeira. Para o operador de negao, o que teremos o inverso da operao analisada.
O operador XOU retorna verdadeiro se um operando for verdadeiro e o outro falso.
Na tabela verdade, mostrada a seguir (Tabela 5.4), temos o valor de duas
proposies p e q, que apresentam todas as possibilidades de valores que elas podem
assumir durante a execuo de um programa. Na tabela verdade tambm so apresentadas
as expresses de operao lgica E, OU, NO e XOU entre as duas proposies, e
mostrados os valores que pode se ter de resultado em cada instante.
Tabela 5.4 Tabela verdade
p
V
V
F
F

q
V
F
V
F

pEq
V
F
F
F

p OU q
V
V
V
F

NO p
F
F
V
V

NO q
F
V
F
V

p XOU q
F
V
V
F

Para exemplificar a utilizao da tabela verdade, vamos imaginar que o seu pai faa
a seguinte promessa para voc: Se voc for aprovado no vestibular, eu comprarei um carro
e uma moto. Diante dessa afirmativa, podemos separ-la em duas proposies p e q, onde
a proposio p seria meu pai vai comprar um carro e a proposio q seria meu pai vai
comprar uma moto. Para que a promessa feita pelo seu pai seja verdadeira, as duas
proposies p e q devem ser verdadeiras, ou seja, ele deve comprar um carro e uma moto.
Se o pai comprar apenas o carro, ou apenas a moto, ele no estaria cumprindo a promessa.
Porm, se o pai mudasse o conectivo e para ou na promessa que fez, ficaria assim: Se
voc for aprovado no vestibular, eu comprarei um carro ou uma moto. Portanto, se o pai
comprar qualquer um dos dois, o carro ou a moto, a promessa seria cumprida, assim como
se ele comprar os dois juntos, a promessa tambm seria verdadeira. Entretanto, se a
promessa sofresse mais uma alterao, adicionando mais um conectivo ou, ela ficaria
assim: Se voc for aprovado no vestibular, eu comprarei ou um carro, ou uma moto.
Perceba que nesse caso, temos uma exclusividade na promessa feita, em que o pai ir

35

Operaes bsicas

comprar apenas um dos dois, ou o carro, ou a moto. Portanto, a promessa s ser


verdadeira se apenas um dos dois itens for comprado, sendo falsa se o pai comprar os dois
itens ou no comprar pelo menos um item.
Para exemplificar a utilizao de operaes lgicas, como geralmente utilizadas em
programao, faremos a resoluo de uma expresso lgica um pouco mais complexa,
usando vrios operadores lgicos, mostrado a seguir. Neste caso, comecemos resolvendo
as expresses que esto dentro dos parnteses, respeitando a prioridade, e na ordem da
esquerda para a direita:
1 passo: NO((A > 4) E (B > 4)) OU A <= 5 (expresso inicial)
2 passo: NO( .V. E .F.) OU .V. (resolve-se as expresses A>4, B>4 e A<=5)
3 passo: NO(.F.) OU .V. (resolve-se .V. E .F.)
4 passo: .V. OU .V. (resolve-se NO(.F.))
5 passo: .V. (por fim, resolve-se .V. OU .V., chegando ao resultado .V. para a
expresso completa).

Operador de caractere
O operador de strings representado pelo sinal de adio (+), utilizado para
combinar duas ou mais sries de caracteres. Supondo que A e B so variveis do tipo
caractere, a expresso A+B resultaria um nico literal formado pelo contedo de A seguido
do contedo de B.
Como exemplo, suponhamos que:

A = Charles Babbage

B = conhecido como

C = o pai do computador.

Teremos:

A + C = Charles Babbage o pai do computador

A + B + C = Charles Babbage conhecido como o pai do computador

Portanto, o operador + caso seja usado entre variveis do tipo CHAR ou STRING,
causar uma ao conhecida por concatenao, ou seja, juntar os caracteres ou STRINGs
usados na operao em uma s STRING.

36

Operaes bsicas

Exemplo de um algoritmo que faz a concatenao de caracteres e strings:


1
2
3
4
5
6
7
8
9
10
11

Algoritmo Concatena
Var
Letra1, Letra2
: caracter
Nome1, Nome2, Nome
: cadeia
Incio
Letra1 D
Letra2 a
Nome1 Joao
Nome2 Silva
Nome Nome1 + Letra1 + Letra2
Fim

+ Nome2

As instrues acima resultaro no armazenamento de uma string Joo Da Silva na


varivel rotulada de Nome.

Prioridade de Operadores
Durante a execuo de uma expresso que envolve vrios operadores, necessria
a existncia de prioridades representando um padro a ser seguido, pois, caso contrrio
poder se obter valores que no representam o resultado esperado. Utilizaremos a
prioridade de operadores definida abaixo pela simplicidade e compatibilidade com a
maioria das linguagens, mas as linguagens de programao apresentam pequenas
variaes nessas prioridades:

1 - Operaes embutidas em parnteses mais internos;

2 - Funes (Quociente, Resto, Potncia e Funes Primitivas);

3 - Multiplicao e/ou diviso;

4 - Adio e/ou Subtrao;

5 - Operadores Relacionais;

6 - Operadores Lgicos.

37

Operaes bsicas

Exerccios
1)

Indique qual o ser o resultado obtido das seguintes expresses:


a. 1 / 2
b. 1 DIV 2
c. 1 MOD 2
d. ( 200 DIV 10 ) MOD 4
e. 5 ** 2 + 3
f. 6 + 19 - 23
g. 3,0 * 5,0 + 1
h. 1 / 4 + 2
i.
29,0 / 7 + 4
j.
3 / 6,0 - 7

2)

Indique o resultado das seguintes expresses:


a. 2 > 3
b. ( 6 < 8 ) OR ( 3 > 7 )
c. ((( 10 DIV 2 ) MOD 6 ) > 5 ) XOR ( 3 < ( 2 MOD 2 ) )
d. NOT ( 2 < 3 )

3)

Escreva o comando de atribuio e resolva a expresso das seguintes formulas


matemticas.
a.

b.

B
C onde A= 2, B= 6, C = 3, D=4, E=8, F=4
X
E
D
F
2
2 X 3 X X 1
X 1

2
X
Y
onde X = 2
X
2
A

4)

Construa o algoritmo que calcule as seguintes expresses:


a. 2 + 3 * { 23 - 12 + [ { ( 123 / 34 ) + 10 } / 2 - 1 * ( 45 - 12 ) ] / 3 }
b. [ ( 2 * 3 ) ^2 - 1 ] ^ 4
c. ( 2 + [ 2 * 3 - ( 4 / 20 ) ^ 2 ] )/ (10 * { [ ( 7 * 3 ) - 2 ] ^ 3 })

5)

Dadas as variveis X = 2, Y = 5, Z = 9, NOME = "Leila" e Flag = FALSO, indique os


resultados das expresses abaixo:
a. (X + Y > Z) e NOME = "JOS"
b. Flag ou (Y X)
c. no Flag e (Z div Y) + 1 = X)
d. (NOME = "Leila") e Flag ou (Raiz(X,2) < Z + 10)

6)

correto definir uma varivel como sendo caracter e atribuirmos a ela o valor:
PEDRO? E se a varivel fosse definida como literal, a mesma poderia receber um

38

Operaes bsicas

valor do tipo caracter?


7)

Identifique o(s) erro(s) encontrados no algoritmo seguinte:


1
2
3
4
5
6
7
8
9
10
11
12
13
14

8)

Algoritmo Exerccio
Var
Maria
: literal
idade
: inteiro
letra
: caracter
Maria
: real
Incio
idade 23
idade 678
idade letra
letra ABC
letra A
letra 2
Fim

Qual a diferena existente nas seguintes atribuies?


a. Letra A
Nome Joo
b.

Letra A
Nome Joo

39

Entrada e Sada de dados

Entrada e Sada de dados


Na unidade que trata das fases de um algoritmo, foram abordados duas fases

importantes: a fase de entrada dos dados e a fase de sada, que por sua vez apresenta a
informao. No ambiente computacional, os objetos processados so as variveis, sabemos
que um programa tem como principal objetivo a resoluo de problemas do mundo real.
Desta forma, num algoritmo ser preciso representar a troca de informaes que ocorrer
entre o mundo do computacional e o mundo real. Para isso, devemos utilizar comandos de
entrada e sada, onde esses comandos iro indicar que determinadas variveis recebero
valores, os quais sero informados por um indivduo do meio externo ou que os valores de
determinadas variveis ou expresses sero enviados para o meio externo.
Em nvel de algoritmo esses comandos representam apenas a entrada e a sada da
informao, independe do dispositivo utilizado (teclado, discos, impressora, monitor, entre
outros), pois para a lgica da soluo do problema basta saber que informao esta
entrando e saindo. Mas no mundo da programao esse meio externo representado
pelos perifricos de entrada e sada e as linguagens de programao possuem comandos
especficos para cada tipo de unidade de Entrada/Sada, mas, em algoritmos no teremos
essa preocupao.

Comando de entrada de dados


Em algoritmos, a entrada de dados feita com o comando Leia, no qual so
especificadas as variveis que recebero os valores. No caso da execuo do comando
Leia X, a valor recebido do meio externo deve ser armazenado na varivel X. O comando
Leia tambm pode ser executado como Leia X, Y, Z, neste caso, seria recebido ao mesmo
tempo do meio externo, trs variveis, e os valores seriam armazenados na
sequencialmente nas variveis X, Y e Z.
Exemplo de um algoritmo para fazer a leitura de dados:
1
2

Algoritmo Ler_dados
Var nome : cadeia

40

Entrada e Sada de dados

3
4
5
6
7
8
9

idade : inteiro
X, X, Z : real
Incio
Leia nome
Leia idade
Leia X, Y, Z
Fim

Comando de sada de dados


A sada de dados em algoritmos feita atravs do comando Escreva. A sintaxe do
comando Escreva, funciona de forma parecida com a sintaxe do comando Leia, pois logo
aps o comando deve ser colocado as variveis que devem ser apresentadas ao meio
externo, como exemplo Escreva X, Y, Z. Neste caso, se as variveis X, Y e Z tivessem
valores 40, 50 e 60 consecutivamente, para o usurio que executou o algoritmo
implementado no computador, seria apresentado como 405060. Sendo assim, essa
informao ficou um tanto complicada de se entender, pois daria margem ambiguidade
de interpretao dos valores, por exemplo, o usurio no saberia distinguir qual daqueles
nmeros o valor de Y.
Entretanto, o comando Escreva tambm permite escrever textos diretamente, sem
uso de variveis, com isso possvel fazer operaes de concatenao textos com o
contedo de variveis. Tomando por base as variveis X, Y e Z, imaginando que elas
correspondem a valores de cada um dos vrtices de um tringulo, poderamos informar
detalhadamente ao usurio, o valor da varivel e qual vrtice ela corresponde. Quando
quisermos colocar um texto diretamente no comando, devemos especific-lo entre aspas
duplas (), como nos exemplos a seguir:
a) Escreva O vrtice X tem valor: + X (a sada seria: O vrtice X tem valor:
40);
b) Escreva O vrtice Y tem valor: + Y (a sada seria: O vrtice Y tem valor:
50);
c) Escreva O tringulo tem os valores: X= + X + , Y= + Y +, Z= + Z (a
sada seria: O tringulo tem os valores: X=40, Y=50, Z=60).
Exemplo de um algoritmo para fazer a leitura de dados:
1
2
3

Algoritmo Escrever_dados
Var nome : cadeia
idade : inteiro

41

Entrada e Sada de dados

4
5
6
7
8
9
10

Incio
Escreva Informe o seu nome:
Leia nome
Escreva Informe a sua idade:
Leia idade
Escreva Obrigado + nome + . Voc tem + idade + anos.
Fim

Exerccios
1)

Faa um algoritmo para ler trs nmeros inteiros e escrever a mdia dos nmeros
lidos.

2)

Faa um algoritmo para ler os coeficiente de uma equao do segundo grau e


escrever o valor do seu Delta.

3)

Faa um algoritmo para ler os catetos de um tringulo retngulo e escrever a sua


hipotenusa.

4)

Faa um algoritmo para ler uma temperatura em graus Celsius e transform-la em


farenheit. Utilize a seguinte frmula: F = (180(C + 32)) / 100.

5)

Faa um algoritmo para ler o preo de compra e o percentual de lucro desejado por
um vendedor e calcular o preo de venda.

6)

Faa um algoritmo para ler duas variveis inteiras e trocar o seu contedo.

7)

Faa um algoritmo para ler o horrio de entrada e sada de um cliente na fila de um


banco e seguida calcular o tempo de permanncia do cliente na fila. Cada horrio ser
lido em duas variveis inteiras representando a hora e os minutos. A resposta deve ser
dada em horas (ex. 3:10).

8)

Faa um algoritmo para ler o valor do saque realizado pelo cliente de um banco e
escrever quantas notas de cada valor sero necessrias para atender ao saque com a
menor quantidade de notas possvel. Sero utilizadas notas de 100, 50, 20, 5 e 1 reais.

9)

Faca um algoritmo para ler o horrio (hora, min e seg) de inicio e a durao, em
segundos, de uma experincia biolgica, em seguida informar o horrio (hora, min,
seg) de termino da mesma.

10) Faa um algoritmo para ler as seguintes informaes de uma pessoa: Nome, Idade,
Sexo, Peso, Altura, Profisso, Rua, Bairro, Cidade, Estado, CEP, Telefone.

42

Entrada e Sada de dados

11) Dado as seguintes informaes de um funcionrio: Nome, idade cargo e o seu salrio
bruto considere:
c. O salrio bruto teve um reajuste de 38%.
d. O funcionrio receber uma gratificao de 20% do salrio bruto.
e. O Salrio total descontado em 15%.
Faa um algoritmo e um algoritmo para:
Imprimir Nome, idade e cargo.
Imprimir o salrio bruto.
Imprimir o salrio lquido.
12) Faa um algoritmo para ler a base e a altura de um tringulo. Em seguida, escreva a
rea do mesmo.
Obs.: rea = ( Base * Altura ) / 2
13) Faa um algoritmo para:
a. Ler uma CADEIA em forma de data. Exemplo : 26/09/95.
b. Escrever o dia, ms e ano desta data.
14) Uma empresa tem para um determinado funcionrio uma ficha contendo o nome,
nmero de horas trabalhadas e o n0 de dependentes de um funcionrio.
Considerando que:
a. A empresa paga 12 reais por hora e 40 reais por dependentes.
b. Sobre o salrio so feito descontos de 8,5% para o INSS e 5% para IR.
Faa um algoritmo para ler o Nome, nmero de horas trabalhadas e nmero de
dependentes de um funcionrio. Aps a leitura, escreva qual o Nome, salrio bruto, os
valores descontados para cada tipo de imposto e finalmente qual o salrio lquido do
funcionrio.
15) O preo de um automvel calculado pela soma do preo de fbrica com o preo
dos impostos (45% do preo de fbrica) e a percentagem do revendedor (28% do
preo de fbrica). Faa um algoritmo que leia o nome do automvel e o preo de
fbrica e imprima o nome do automvel e o preo final.

43

Processos de Seleo

Processos de Seleo
At o momento, os algoritmos demonstrados foram executados numa sequencia

linear, seguindo-se as aes de cima para baixo, sem que haja desvio ou seleo de cdigo
a ser executado. Nesta unidade, veremos sobre as estruturas condicionais. Elas so
processos de seleo que permitem a escolha de aes serem executadas quando
determinada condio for ou no satisfeita.
As estruturas condicionais abordadas so: Se-Ento-Seno e Escolha-Caso.

Estrutura SE-ENTO-SENO (IF-THEN-ELSE)


A estrutura de seleo SE, usada para tomar decises, ou seja, desviar a execuo
do algoritmo de acordo com uma determinada condio, podendo ser simples ou
composta. O comando SE utilizado quando h a necessidade de avaliar o valor de
variveis ou expresses e de acordo com o resultado dessa anlise executar um conjunto
especfico de comandos. A anlise da condio especificada para a estrutura SE, sempre
ser feita com base em valores lgicos (booleanos), ou seja, ela sempre analisar se a
condio verdadeira ou falsa.
A estrutura SE, quando organizada de forma simples, faz um desvio de execuo
somente se uma a condio for verdadeira, ignorando o desvio quando a condio for
falsa. Essa estrutura simples organizada da seguinte forma:
Se <condio> Ento
<comandos>
Fim_se

O item <condio> deve ser substitudo pela expresso lgica que ser avaliada,
ento, se o resultado da expresso lgica for verdadeiro, sero executados os comandos
especificados no lugar de <comandos>. Um exemplo da estrutura SE, com analogia ao
mundo real, pode ser entendida como: Se no chover, ento Vou praia. Percebe-se que a
condio avaliada no chover e a ao praticada ir praia, portanto, eu irei praia
somente se a condio for verdadeira, ou seja, somente se no chover.

44

Processos de Seleo

Vejamos o exemplo de um algoritmo que faz uso estrutura SE, tendo como
enunciado faa um algoritmo que leia um valor inteiro, referente a idade de uma pessoa, e
imprima uma mensagem informando que ela pode votar somente se tiver 16 anos ou mais:
1
2
3
4
5
6
7
8
9
10

Algoritmo Verifica Idade - 1


Var
idade : inteiro
Incio
Escreva Informe a sua idade:
Leia idade
Se idade >= 16 Ento
Escreva Voc pode votar!
Fim_se
Fim

Na Figura 7.1, podemos visualizar graficamente o fluxo de execuo da estrutura


sequencial do algoritmo Verifica idade 1.

Figura 7.1 Fluxograma do algoritmo Verifica idade 1.

Com a estrutura SE simples, vimos que possvel fazer um desvio condicional


somente se a condio analisada resultar em um valor lgico verdadeiro. Com a estrutura
SE composta, podemos fazer, alm do desvio para quando a condio for verdadeira,
tambm um desvio condicional quando a expresso analisada resultar no valor lgico falso.
Essa estrutura composta organizada da seguinte forma:
Se <condio> Ento
<comandos quando a condio for verdadeira>
Seno
<comandos quando a condio for falsa>
Fim_se

45

Processos de Seleo

Neste caso, quando a condio analisada resultar no valor lgico falso, sero
executados os comandos que esto logo abaixo do desvio Seno. Continuando a analogia
ao mundo real, a frase pode ser complementada da seguinte forma: Se no chover, ento
Vou praia, seno vou ao shopping. Portanto, se a condio no chover for avaliada e
resultar no valor lgico verdadeiro, ento eu poderei ir praia, mas, se a condio resultar
no valor lgico falso, ou seja, se estiver chovendo, ento eu irei ao shopping.
Na sequencia, apresentado o mesmo exemplo de algoritmo mostrado
anteriormente, mas com uma modificao no enunciado para que seja usado uma estrutura
SE composta. Sendo, faa um algoritmo que leia um valor inteiro, referente a idade de uma
pessoa, e imprima uma mensagem informando que ela pode votar somente se tiver 16
anos ou mais, caso contrrio informe que ela no pode votar:
1
2
3
4
5
6
7
8
9
10
11
12

Algoritmo Verifica idade - 2


Var
idade
: inteiro
Incio
Escreva Informe a sua idade:
Leia idade
Se idade >= 16 Ento
Escreva Voc pode votar!
Seno
Escreva Voc no pode votar!
Fim_se
Fim

Na Figura 7.2, podemos visualizar graficamente o fluxo de execuo da estrutura


sequencial do algoritmo Verifica idade 2.

Figura 7.2 Fluxograma do algoritmo Verifica idade 2.

46

Processos de Seleo

Exerccios: Se-Ento-Seno
1)

Faa um algoritmo para ler um nmero inteiro e informar se este maior que 10.

2)

Faa um algoritmo para ler dois nmeros inteiros e informar se estes nmeros so
iguais ou diferentes.

3)

Faa um algoritmo para ler um nmero inteiro e informar se o nmero par ou mpar.

4)

Faa um algoritmo para ler dois nmeros inteiros A e B e informar se A divisvel por
B.

5)

Faa um algoritmo para ler dois nmeros inteiros e escrever o maior.

6)

Faa um algoritmo para ler dois nmeros inteiros e escrev-los em ordem crescente.

7)

Faa um algoritmo para ler duas variveis inteiras A e B e garantir que A e B fiquem
em ordem crescente, ou seja, a varivel dever armazenar o menor valor fornecido e a
varivel B o maior.

8)

Faa um algoritmo para ler os coeficiente de uma equao do segundo grau e


escrever as suas razes.

9)

Elabore um algoritmo para testar se uma senha digita igual a Patinho Feio. Se a
senha estiver correta escreva Acesso permitido, do contrario emita a mensagem
Voc no tem acesso ao sistema.

10) Faa um algoritmo para ler trs valores reais e informar se estes podem ou no formar
os lados de um tringulo e qual tipo de tringulo seria: equiltero, issceles ou
escaleno.
11) Faa um algoritmo para ler trs nmeros positivos e escrev-los em ordem crescente.
12) Faa um algoritmo para ler o nome, as trs notas e o nmero de faltas de um aluno e
escrever qual a sua situao final: Aprovado, Reprovado por Falta ou Reprovado por
Mdia. A mdia para aprovao 5,0 e o limite de faltas 27. A reprovao por falta
sobrepe a reprovao por Mdia.
13) Elabore um algoritmo que indique se um nmero digitado est compreendido entre
20 e 90, ou no.
14) Um comerciante comprou um produto e quer vend-lo com um lucro de 45% se o
valor da compra for menor que R$ 20,00; caso contrrio, o lucro ser de 30%. Elabore
um algoritmo que leia o valor do produto e imprima o valor de venda para o produto.

47

Processos de Seleo

15) Faa um algoritmo para ler um salrio e atualiz-lo de acordo com a tabela abaixo.
Faixa salarial
Aumento
at 600,00
30%
600,01 a 1.100,00
25%
1100,01 a 2.400,00
20%
2400,01 a 3.550,00
15%
Acima de 3.550,00
10%

Estrutura SELECIONE-CASO (SWITCH-CASE)


A estrutura de deciso CASO-SELECIONE utilizada para testar, na condio, uma
nica expresso, que produz um resultado, ou, ento, o valor de uma varivel, em que est
armazenado um determinado contedo. Compara-se, ento, o resultado obtido no teste
com os valores fornecidos em cada clusula Caso.
A estrutura Caso, contm uma expresso (o seletor) e uma lista de declaraes, cada
declarao anteposta por uma ou mais constantes (chamadas constantes de caso) ou com
a palavra Seno. O seletor deve ser de um tipo ordinal, ou seja, possua uma ordem. Todas
as constantes de caso devem ser diferentes e de um tipo ordinal compatvel com o tipo do
seletor.
Esta estrutura executa uma sequencia de comandos precedida pela constante igual
ao valor do seletor. Se nenhuma constante for igual ao valor do seletor, a parte Seno ser
executada. Se no houver a parte Seno, a execuo continuar com o prximo comando
que segue a estrutura Caso no algoritmo.
A estrutura de deciso Caso organizada da seguinte forma:
Selecione <expresso>
Caso <valor1> Faa <comando>
Caso <valor2> Faa <comando>
Caso <valor3> Faa <comando>
Seno <comando>
Fim_selecione

A seguir, mostrado um algoritmo que implementa uma estrutura Selecione-Caso,


tendo como enunciado faa um algoritmo que leia um valor inteiro, de 1 a 7, referente aos
dias da semana, em seguida imprima o nome do dia, caso o numero for diferente deste
intervalo, informar que o dia invlido:

48

Processos de Seleo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Algoritmo Verifica_Dia_Semana
Var
dia : inteiro
Incio
Escreva Informe o dia da semana (1 a 7):
Leia dia
Selecione dia
Caso 1 Faa Escreva Domingo
Caso 2 Faa Escreva Segunda-feira
Caso 3 Faa Escreva Tera-feira
Caso 4 Faa Escreva Quarta-feira
Caso 5 Faa Escreva Quinta-feira
Caso 6 Faa Escreva Sexta-feira
Caso 7 Faa Escreva Sbado
Seno Escreva Dia invlido!
Fim_selecione
Fim

Exerccios: Selecione-Caso
1)

Recebidos valores numricos entre zero e cinco, escreva-os na forma literal.

2)

A partir do exerccio anterior, pergunte ao usurio se deseja os numerais em ingls ou


portugus.

3)

Criar um algoritmo que leia dois nmeros inteiros, e que solicite ao usurio qual a
operao deseja realizar entre esses nmeros. Caso o usurio digitar o caractere *
ser realizada uma multiplicao, caso seja digitado o caractere / ser realizada uma
diviso, caso seja digitado o caractere + ser realizado uma adio, e caso seja
digitado o caractere ser realizada uma subtrao.

4)

Elabore um algoritmo que leia um nmero inteiro entre 1 e 12 e imprima o ms


correspondente. Caso seja digitado um valor fora desse intervalo, dever ser exibida
uma mensagem informando que no existe ms com esse nmero.

49

Processos de Repetio

Processos de Repetio
Serve para efetuar um conjunto de aes repetidas vezes. Assim como as selees

serviam para tomar decises permitindo executar uma sequncia especfica, os comandos
de repetio servem para indicar se uma sequncia deve continuar sendo executada,
permitindo resolver problemas que necessitem que uma determinada sequncia seja
executada vrias vezes at que o resultado esperado seja obtido. Esse recurso vai ampliar
bastante o leque de problemas que podem ser resolvidos atravs de algoritmo/programas,
pois a grande maioria dos problemas do mundo real exigem iteratividade e isso representa
a grande vantagem no uso dos computadores para resolver problemas do nosso mundo,
pois o mundo da mquina extremamente rpido e nesse tipo de problema h uma
grande disparidade no tempo de resoluo entre os mtodos convencionais e os
computacionais.

Estrutura de repetio ENQUANTO-FAA (WHILE-DO)


A estrutura Enquanto-Faa, contm uma condio que controla a execuo
repetidas vezes de uma sequencia de comandos. A condio que controla a repetio deve
ser de tipo lgico (booleano). Ela avaliada antes da sequencia de comandos ser
executada.
A sequencia de comandos ser executada repetidamente contanto que a condio
seja verdadeira. Se a condio no princpio for falsa, a sequencia de comandos no ser
executada em nada, passando o controle para a linha seguinte a FimEnquanto.
A organizao da estrutura Enquanto-Faa feita da seguinte forma:
Enquanto <condio> Faa
<sequencia de comandos>
Fim_enquanto

Podemos fazer uso de uma instruo chamada Interrompa para interromper o


lao de repetio, usado quando se deseja parar o lao de repetio depois de avaliar
uma determinada condio e esta for satisfeita, mostrado a seguir:

50

Processos de Repetio

Enquanto <condio1> Faa


<sequencia de comandos>
Se <condio2> Ento {se a condio2 for verdadeira interrompe loop}
Interrompa {comando de interrupo opcional}
Fim_se
<sequencia de comandos>
Fim_enquanto

Nesta estrutura, possvel verificar que podemos utilizar outros tipos de estruturas
dentro de uma estrutura de repetio, esta situao comum para qualquer tipo de
estrutura. O comando Interrompa, fora um salto, na sequencia, para os comandos que
esto logo aps a expresso FimEnquanto, e seu uso no obrigatrio.

Estrutura de repetio REPITA-AT QUE (REPEAT UNTIL)


A estrutura Repita-At que, um tipo de repetio indeterminada com validao
final, contm uma condio que controla a execuo repetidas vezes de uma sequencia de
comandos. A sequencia de comandos ser executada at que a condio seja satisfeita,
com isso, os comandos sero primeiramente executados e depois ser avaliada a condio.
Esta condio, depois de avaliada, deve produzir um resultado do tipo lgico. Portanto, a
sequencia de comandos ser executada pelo menos uma vez, se a condio avaliada for
verdadeira, ento prossegue-se com mais um repetio, at que a condio avaliada seja
falsa.
Repita
<sequencia de comandos>
At que <condio>

A seguir, apresentado um algoritmo que faz a implementao de uma estrutura


Repita-At que, tendo como enunciado faa um algoritmo que leia um valor e imprima sua
tabuada, esse processo deve ser feito repetidas vezes at que o valor zero seja informado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Algoritmo tabuada
Var
num : inteiro
Incio
Repita
Escreva Informe um nmero:
Leia num
Escreva 1 x , num, = ,
Escreva 2 x , num, = ,
Escreva 3 x , num, = ,
Escreva 4 x , num, = ,
Escreva 5 x , num, = ,
Escreva 6 x , num, = ,
Escreva 7 x , num, = ,
Escreva 8 x , num, = ,

num*1
num*2
num*3
num*4
num*5
num*6
num*7
num*8

51

Processos de Repetio

16
17
18
19

Escreva 9 x , num, = , num*9


Escreva 10 x , num, = , num*10
At que num <> 0
Fim

Estrutura de repetio PARA-FAA (FOR-TO-DO)


A estrutura de repetio Para-Faa uma estrutura determinada, usada quando se
deseja que uma sequencia de comandos seja executada por um nmero N de vezes.
Nessa estrutura de repetio, tambm envolve a avaliao de uma condio. Na
repetio determinada o algoritmo apresenta previamente a quantidade de repeties.
Esta estrutura repete uma sequencia de comandos em um determinado nmero de
vezes, sendo especificada a condio inicial e a final.
Para <varivel> de <valor-inicial> ate <valor-limite> [passo <incremento>] faa
<sequencia de comandos>
Fim_para

Os itens <valor-inicial>, <valor-limite> e <incremento> so avaliados uma nica vez


antes da execuo da primeira repetio, e no se alteram durante a execuo do lao,
mesmo que variveis eventualmente presentes nessas expresses tenham seus valores
alterados. A cada interao do lao, incrementado um valor na varivel.

1
2
3
4
5
6
7
8
9
10

Algoritmo tabuada
Var
num, cont
: inteiro
Incio
Escreva Informe um nmero:
Leia num
Para cont De 1 at 10 Passo 1 Faa
Escreva cont, x , num, = , num * cont
Fim_para
Fim

52

Modularizao

Modularizao
A modularizao consiste num mtodo utilizado para facilitar a construo de

grandes algoritmos, atravs de sua diviso em pequenas etapas, que so os mdulos ou


subalgoritmos. A primeira delas, por onde comea a execuo do trabalho, recebe o nome
de algoritmo principal, e as outras so os subalgoritmos propriamente ditos, que so
executados sempre que ocorre uma chamada dos mesmos, o que feito atravs da
especificao de seus nomes.
A complexidade dos algoritmos est intimamente ligada da aplicao a que se
destinam. Em geral, problemas complicados exigem algoritmos extensos para sua soluo.
Sempre possvel dividir problemas grandes e complicados em problemas menores
e de soluo mais simples. Assim, pode-se solucionar cada um destes pequenos problemas
separadamente, criando algoritmos para tal (subalgoritmos). Posteriormente, pela
justaposio destes subalgoritmos elabora-se automaticamente um algoritmo mais
complexo e que soluciona o problema original. Esta metodologia de trabalho conhecida
como Mtodo de Refinamentos Sucessivos, cujo estudo assunto de cursos avanados
sobre tcnicas de programao.
Um subalgoritmo um nome dado a um trecho de um algoritmo mais complexo e
que, em geral, encerra em si prprio um pedao da soluo de um problema maior o
algoritmo a que ele est subordinado.
Em resumo, os subalgoritmos so importantes na:
subdiviso de algoritmos complexos, facilitando o seu entendimento;
estruturao de algoritmos, facilitando principalmente a deteco de
erros e a documentao de sistemas; e
modularizao de sistemas, que facilita a manuteno de softwares e a
reutilizao de subalgoritmos j implementados.
A ideia da reutilizao de software tem sido adotada por muitos grupos de
desenvolvimento de sistemas de computador, devido economia de tempo e trabalho que

53

Modularizao

proporcionam. Seu princpio o seguinte: um conjunto de algoritmos destinado a


solucionar uma srie de tarefas bastante corriqueiras desenvolvido e vai sendo aumentado
com o passar do tempo, com o acrscimo de novos algoritmos. A este conjunto d-se o
nome de biblioteca. No desenvolvimento de novos sistemas, procura-se ao mximo basear
sua concepo em subalgoritmos j existentes na biblioteca, de modo que a quantidade de
software realmente novo que deve ser desenvolvido minimizada.
Portanto, com a utilizao de subalgoritmos, podemos reduzir a quantidade de
comandos que so usados repetidas vezes num algoritmo, para executar determinada
tarefa. Nestes casos, os subalgoritmos proporcionam uma diminuio do tamanho de
algoritmos maiores.
Nesta unidade, sero apresentados dois conceitos de subalgoritmos utilizados no
desenvolvimento de algoritmos, que so os procedimentos e as funes.

Mecanismo de Funcionamento
Um algoritmo completo composto por um algoritmo principal e diversos
subalgoritmos (tantos quantos forem necessrios e/ou convenientes). O algoritmo principal
aquele por onde a execuo do algoritmo sempre se inicia. Este pode eventualmente
invocar os demais subalgoritmos, como representado na Figura 9.1.

Algoritmo principal

subalgoritmo 1

subalgoritmo 2

subalgoritmo 1

subalgoritmo 2

Figura 9.1 Representao dos subalgoritmos.


Durante a execuo do algoritmo principal, quando se encontra um comando de
invocao de um subalgoritmo, a execuo do mesmo interrompida. A seguir, passa-se
execuo dos comandos do corpo do subalgoritmo. Ao seu trmino, retoma-se a execuo
do algoritmo que o chamou (no caso, o algoritmo principal) no ponto onde foi

54

Modularizao

interrompida (comando de chamada do subalgoritmo) e prossegue-se pela instruo


imediatamente seguinte.
Alm disso, possvel que um subalgoritmo chame outro atravs do mesmo
mecanismo.
Na representao em pseudocdigo, o corpo do algoritmo principal sempre o
ltimo trecho a ser escrito no algoritmo. As definies dos subalgoritmos esto sempre
colocadas no trecho aps a definio das variveis globais e antes do corpo do algoritmo
principal:
1
2
3
4
5
6

Algoritmo <nome do algoritmo>


Var <definio das variveis globais>
<definies dos subalgoritmos>
Inicio
<corpo do algoritmo principal>
Fim

Definio de Subalgoritmos
A definio de um subalgoritmo consta de:

um cabealho, onde esto definidos o nome e o tipo do subalgoritmo, bem


como os seus parmetros e variveis locais;

um corpo, onde se encontram as instrues (comandos) do subalgoritmo.

O nome de um subalgoritmo o nome simblico pelo qual ele chamado por


outro algoritmo.
O corpo do subalgoritmo contm as instrues que so executadas cada vez que
ele invocado.
Variveis locais so aquelas definidas dentro do prprio subalgoritmo e s podem
ser utilizadas pelo mesmo.
Parmetros so canais por onde os dados so transferidos pelo algoritmo chamador
a um subalgoritmo, e vice-versa. Para que possa iniciar a execuo das instrues em seu
corpo, um subalgoritmo s vezes precisa receber dados do algoritmo que o chamou e, ao
terminar sua tarefa, o subalgoritmo deve fornecer ao algoritmo chamador os resultados da
mesma. Esta comunicao bidirecional pode ser feita de dois modos que sero estudados
mais frente: por meio de variveis globais ou por meio da passagem de parmetros.

55

Modularizao

O tipo de um subalgoritmo definido em funo do nmero de valores que o


subalgoritmo retorna ao algoritmo que o chamou. Segundo esta classificao, os algoritmos
podem ser de dois tipos:

funes, que retornam um, e somente um, valor ao algoritmo chamador;

procedimentos, que retornam zero (nenhum) ou mais valores ao algoritmo


chamador.

Procedimentos
Um procedimento um subalgoritmo que executa alguma tarefa especfica e no
retorna valores ao algoritmo ou subalgoritmo chamador. possvel interagir com o
algoritmo chamador atravs de variveis globais, mas nunca explicitamente, como no caso
de funes, que veremos no tpico seguinte. Portanto, a chamada de um procedimento
nunca surge no meio de expresses, como no caso de funes. Pelo contrrio, a chamada
de procedimentos s feita em comandos isolados dentro de um algoritmo, como as
instrues de entrada (Leia) e sada (Escreva) de dados.
A sintaxe da definio de um procedimento :
1
2
3
4
5

Procedimento <nome> (<parmetros>)


Var <variveis locais>
Inicio
<comandos>
Fim

Temos que:
<nome> o nome simblico identificador pelo qual o procedimento
invocado por outros algoritmos;
<parmetros> so os parmetros do procedimento;
<variveis locais> so as definies das variveis locais ao procedimento.
Sua forma anloga da definio de variveis num algoritmo;
<comandos> o conjunto de instrues do corpo do procedimento, que
executado toda vez que o mesmo invocado.
O exemplo a seguir um exemplo simples, onde um procedimento usado para
escrever o valor das componentes de um vetor.
1
2

Algoritmo Exemplo_procedimento
Var vet : matriz[1..10] de real

56

Modularizao

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

Procedimento ESC_VETOR()
Var i : inteiro
Inicio
Para i de 1 at 10 faa
Escreva vet[i]
Fimpara
Fim
Procedimento LER_VETOR()
Var i : inteiro
Inicio
Para i de 1 at 10 faa
Leia vet[i]
Fimpara
Fim
Inicio
LER_VETOR()
ESC_VETOR()
Fim

No exemplo conveniente observar:


a forma de definio dos procedimentos LER_VETOR() e ESC_VETOR(),
que no possuem parmetro, e usam a varivel local i para varrer os
componentes do vetor, lendo e escrevendo um valor por vez; e
a forma de invocao dos procedimentos, por meio do seu nome,
seguido de seus eventuais parmetros (no caso, nenhum), num comando
isolado dentro do algoritmo principal.

Funes
As funes so utilizadas para a execuo de operaes mediante a passagem ou
no de argumentos e, sempre retornam um valor.
O conceito de funo originrio da ideia de funo matemtica (por exemplo, raiz
quadrada, seno, cosseno, tangente, logaritmo, entre outras), onde um valor calculado a
partir de outro(s) fornecido(s) funo.
A sintaxe da definio de uma funo dada a seguir:
1
2
3
4
5

Funo <nome> (<parmetros>) <tipo_de_dado>


Var <variveis locais>
Incio
<comandos>
Fim

Temos que:

57

Modularizao

<nome> o nome simblico pelo qual a funo invocada por outros


algoritmos;
<parmetros> so os parmetros da funo;
<tipo de dado> o tipo de dado da informao retornado pela funo
ao algoritmo chamador;
<variveis locais> consiste na definio das variveis locais funo. Sua
forma anloga da definio de variveis num algoritmo;
<comandos> o conjunto de instrues do corpo da funo.
Dentro de um algoritmo, o comando de invocao de um subalgoritmo do tipo
funo sempre aparece dentro de uma expresso do mesmo tipo que o do valor retornado
pela funo.
A invocao de uma funo feita pelo simples aparecimento do nome da mesma,
seguido pelos respectivos parmetros entre parnteses, dentro de uma expresso. A funo
executada e, ao seu trmino, o trecho do comando que a invocou substitudo pelo valor
retornado pela mesma dentro da expresso em que se encontra, e a avaliao desta
prossegue normalmente.
Dentro de uma funo, e somente neste caso, o comando Retorne <expresso>
usado para retornar o valor calculado pela mesma. Ao encontrar este comando, a
expresso entre parnteses avaliada, a execuo da funo terminada neste ponto e o
valor da expresso retornado ao algoritmo chamador. Vale lembrar que uma expresso
pode ser uma simples constante, uma varivel ou uma combinao das duas por meio de
operadores. Esta expresso deve ser do mesmo tipo que o valor retornado pela funo.
O algoritmo a seguir um exemplo do emprego de funo para calcular o valor de
um nmero elevado ao quadrado.
1
2
3
4
5
6
7
8
9
10
11
12
13

Algoritmo Exemplo_de_funo
Var X, Y : real
Funo Quad(w : real) : real
Var Z : real
Inicio
Z w * w
Retorne Z
Fim
Incio
Escreva "Digite um nmero
Leia X

58

Modularizao

14
15
16

Y Quad(X)
Escreva X, " elevado ao quadrado = ", Y
Fim

Do exemplo anterior importante notar que:


a funo Quad toma W como parmetro do tipo real, retorna um valor
do tipo real e possui Z como uma varivel local real;
o comando de invocao da funo Quad aparece no meio de uma
expresso, no comando de atribuio dentro do algoritmo principal.

Exerccios: Funes
1)

Faa uma funo que recebe, por parmetro, a altura e o sexo de uma pessoa e
retorna o seu peso ideal. Para homens, calcular o peso ideal usando a frmula PESO
IDEAL = 72.7 * ALTURA 58 e, para mulheres, a frmula PESO IDEAL = 62.1 * ALTURA
44.7.

2)

Escreva uma funo que recebe uma nota e verifica se uma nota vlida (de 0 a 10),
retornando um valor lgico indicando se a nota vlida ou no.

3)

Escreva uma funo que recebe um valor inteiro e verifica se o valor par ou mpar. A
funo deve retornar um valor lgico.

4)

Escreva uma funo que recebe 3 notas de um aluno e uma letra. Se a letra for A, o
procedimento deve calcular a mdia aritmtica das notas do aluno, se a letra for P,
deve calcular a mdia ponderada (pesos: 5, 3 e 2). A mdia calculada deve ser
retornada.

5)

Escreva uma funo para verificar se um dado nmero perfeito.

6)

Escreva uma funo que conte quantos algarismos possui um nmero inteiro. O
nmero de algarismos deve ser retornado.

7)

Escreva uma funo que retorne a soma dos algarismos de um nmero inteiro
qualquer que passado como parmetro.

8)

Escreva uma funo que recebe 3 valores reais X, Y e Z e verifique se esses valores
podem ser os comprimentos dos lados de um tringulo e, neste caso, retornar qual o
tipo de tringulo formado. Para que X, Y e Z formem um tringulo necessrio que a
seguinte propriedade seja satisfeita: o comprimento de cada lado de um tringulo

59

Modularizao

menor do que a soma do comprimento dos outros dois lados. O procedimento deve
identificar o tipo de tringulo formado observando as seguintes definies:
Tringulo equiltero: os comprimentos dos 3 lados so iguais;
Tringulos Issceles: os comprimentos de 2 lados so iguais;
Tringulo Escaleno: os comprimentos dos 3 lados so diferentes.
9)

Faa uma funo que recebe a mdia final de um aluno e retorna o seu conceito,
conforme a tabela abaixo:
Nota
Conceito
de 0,0 a 4,9
D
de 5,0 a 6,9
C
de 7,0 a 8,9
B
de 9,0 a 10,0
A

60

Tipos homogneos de dados compostos

10

Tipos homogneos de dados


compostos

Os tipos homogneos so conjuntos do mesmo tipo bsico. A utilizao desse tipo


de estrutura de dados recebe diversos nomes, tais como: variveis indexadas, compostas,
arranjos, tabelas em memria, arrays (do ingls) vetores e matrizes. Para simplificar
utilizaremos somente os nomes vetores e matrizes, que sero abordados nesta unidade.

Variveis indexadas unidimensionais Vetores


Os vetores so variveis estruturadas homogneas capazes de armazenar uma srie
de informaes de um mesmo tipo em uma nica varivel.
Sua utilizao importante quando necessrio armazenar vrias informaes,
sobre as quais, em geral, sero realizados os mesmos processamentos dentro do programa.
Por exemplo, para armazenar a mdia dos vrios alunos de uma turma na memria usando
variveis simples, seriam necessrias n variveis com nomes distintos, o que torna o
programa mais complexo de ser elaborado e difcil de ser entendido. Neste caso pode-se
criar uma varivel nica que contenha todas estas informaes.
Os vetores so a forma mais simples de variveis estruturadas homogneas. So
estruturas unidimensionais que armazenam um conjunto de valores de um mesmo tipo. Um
vetor na verdade, um conjunto contnuo de posies de memria identificado por um
nome nico. O nmero de elementos esttico, ou seja, o tamanho definido uma nica
vez na execuo do algoritmo.
Um exemplo de representao de vetor pode ser visto a seguir, em que temos uma
varivel do tipo real, com 5 posies:
altura 1.74 1.90 1.65 2.02 1.75
1

61

Tipos homogneos de dados compostos

Neste vetor, temos a representao dos valores referente altura de cinco pessoas
distintas, no qual se tem o valor 1.74 armazenado na posio 1 do vetor, at o valor 1.75
que est na posio 5 do vetor.
Declarao de vetores
Na declarao dos vetores devemos informar o seu nome, seu tipo (inteiro, real,
caracter, ...) e seu tamanho (nmero de elementos). Cada elemento do vetor identificado
por um ndice (unidimensional), o qual indica a sua posio no vetor.
A declarao de um vetor feita da seguinte forma:
Var
<nome> : vetor[<nmero de elementos>] de <tipo do vetor>

Como exemplo de declarao temos:


Var
altura : vetor[5] de real

A palavra reservada vetor indica que a varivel altura ser uma varivel estruturada
homognea. O nmero 5, entre colchetes, indica a quantidade de posies do vetor. A
palavra de, indica o tipo de informaes que sero armazenadas dentro do vetor, neste
caso nmeros reais.
Leitura e escrita de dados nos vetores
Para fazer a leitura dos dados e a atribuio de dados num vetor, escritos num
algoritmo, so necessrios informar o nome do mesmo e a posio dentro do vetor na qual
queremos interagir.
Quando o vetor criado, ele no possui valor inicial, podendo ser visualizado da
seguinte forma:
altura
1

Quando quisermos atribuir um valor diretamente a uma determinada posio do


vetor, fazemos da seguinte forma:
altura[1] 1.74

Desta forma, estamos atribuindo para a posio 1 do vetor altura o valor real 1.74.
A representao do vetor, depois de atribudo um valor, ficaria da seguinte maneira:
altura

1.74
1

62

Tipos homogneos de dados compostos

A maneira dinmica de se atribuir um valor a uma determinada posio do vetor,


fazendo a leitura de uma valor informada pelo meio externo ao algoritmo, usando o
comando Leia, mostrado no exemplo a seguir:
Leia altura[5]

Nesse exemplo, quando um valor for informado pelo usurio do algoritmo, ele ser
atribudo posio 5 do vetor.
Se quisermos atribuir valores a todas as posies do vetor, teramos que usar o
comando Leia para cada uma das posies, que ficaria assim:
Leia
Leia
Leia
Leia
Leia

altura[1]
altura[2]
altura[3]
altura[4]
altura[5]

E se o nosso vetor tivesse 50 posies? O nosso cdigo ficaria um tanto extenso.


Entretanto, podemos utilizar uma estrutura de repetio para auxiliar nesse processo. A
seguir, temos um exemplo de utilizao de uma estrutura de repetio fazendo interao
com um vetor:
1
2
3
4
5
6
7
8
9

Algoritmo Leitura_vetor
Var
cont : inteiro
altura : real
Incio
Para cont de 1 at 5 Passo 1 Faa
Leia altura[i]
Fimpara
Fim

Com esse algoritmo, apresentado anteriormente, temos que a estrutura de


repetio Para usa a varivel cont para fazer o incremento, comeando em 1 e vai at 5.
A varivel cont utilizada como ndice para o vetor, e em cada interao do lao, feita a
leitura em uma posio do vetor.
A maneira de fazer a leitura dos dados bastante simples, basta referenciar o nome
do vetor com a posio que desejamos. A seguir, vamos usar o comando Escreva para
imprimir a posio 5 do vetor altura:
Escreva altura[5]

De mesma forma que usamos uma estrutura de repetio para fazer a atribuio de
dados para as posies do vetor, podemos utiliz-la para imprimir todos os valores de um
vetor.

63

Tipos homogneos de dados compostos

Um exemplo de algoritmo, que faz a leitura de um vetor com 5 posies e depois o


imprime, mostrado a seguir:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Algoritmo leitura_escrita_vetor
Var
cont : inteiro
nomes : literal
Incio
//Leitura dos valores
Para cont de 1 at 5 Passo 1 Faa
Escreva Informe o nome de uma pessoa:
Leia nomes[cont]
Fimpara
//Escrita dos valores
Para cont de 1 at 5 Passo 1 Faa
Escreva nomes[cont]
Fimpara
Fim

Utilizao de Vetores Relacionados


No desenvolvimento de um algoritmo pode existir a necessidade de armazenar
diferentes dados de uma determinada entidade, para isso, podemos utilizar vrios vetores
para armazenar tipos de dados diferentes, mas que se referem a uma mesma entidade. Por
exemplo, supondo que se deseja armazenar o nome, a idade e o sexo de 50 pessoas,
necessitamos criar trs vetores distintos, um para os nomes, outro para as idades e, por fim,
outro para os sexos, conforme cdigo a seguir:
Var
nomes : vetor[100] de literal
idades : vetor[100] de inteiro
sexos : vetor[100] de caracter

A representao pode ser vista da seguinte forma:


1

Antnio

Carlos

Keila

Mauro

Maria

idades

36

25

18

65

29

sexos

nomes

...

...

100

...

...

100

...

...

100

Apesar dos vetores serem armazenados na memria como trs variveis


independentes, tem-se uma relao lgica atravs ndice. A pessoa cujo nome est
armazenado na posio 1 do vetor nomes, tem sua idade armazenada na primeira

64

Tipos homogneos de dados compostos

posio do vetor idades e o sexo na posio 1 do vetor sexos. Esta associao


facilmente implementada quando se utiliza o contador de uma estrutura de repetio como
ndice dos trs vetores ao mesmo tempo. No cdigo a seguir, apresentado a
implementao de um algoritmo que faz a leitura dos dados das 100 pessoas e as
armazena nos vetores.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Algoritmo vetores
Var
cont
: inteiro
nomes
: vetor[100] de literal
idades : vetor[100] de inteiro
sexos
: vetor[100] de caracter
Incio
Para cont de 1 at 100 faa
Escreva Digite o nome da pessoa :
Leia nomes[cont]
Escreva Digite a idade da pessoa :
Leia idades[cont]
Escreva Digite o sexo da pessoa :
Leia sexos[cont]
Fimpara
Fim

O relacionamento entre os diferentes vetores para a recuperao de informaes


tambm feito atravs dos ndices. Por exemplo, para imprimir o sexo e a idade de uma
pessoa com nome Carlos, devemos inicialmente procurar o nome dele no vetor nomes,
para saber em que posio do vetor ele se encontra. Em seguida, de posse da posio
onde est armazenado o nome dele, possvel recuperar o sexo e a idade desta pessoa, j
que esses dados estaro armazenados nesta mesma posio nos vetores sexos e idades.
Para cont de 1 at 100 Passo 1 Faa
Se nomes[cont] = Carlos Ento
Escreva O sexo de Carlos , sexos[cont]
Escreva I idade de Carlos , idades[cont], anos
Interrompa
Fimse
Fimpara

Neste cdigo, inicialmente buscado o nome Carlos no vetor de nomes. No


momento que o algoritmo encontra o nome Carlos, a varivel cont est armazenando a
posio no qual se encontra no vetor nomes. Com isso, basta fazer a leitura dos vetores
sexos e idades na mesma posio do vetor nomes, ou seja, devemos usar a varivel
cont como ndice para os vetores.

65

Tipos homogneos de dados compostos

Exerccios: Vetores
10) Faa o teste de mesa para os algoritmos abaixo:
a) Algoritmo 1
1
2
3
4
5
6
7
8
9
10
11
12

b)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

c)
1
2
3
4
5
6
7
8
9
10
11
12
13

Algoritmo "dez_nomes"
Var
nomes : vetor[10] de cadeia
i : inteiro
Inicio
Para i de 1 at 10 faa
nomes[i] "Joao"
Fim_para
Para i de 1 at 10 faa
Escreva nomes[i], " na posicao ", i
Fim_para
Fim

Algoritmo 2
Algoritmo "vetor2"
Var
t : vetor[10] de inteiro
i, n : inteiro
Incio
Escreva "Digite um numero: "
Leia n
Para i de 1 at 10 faa
t[i] i * n
Fim_para
Para i de 1 at 10 faa
Escreva i ," X ", n , " = " , t[i]
Fim_para
Fim

Algoritmo 3
Algoritmo "varias_notas"
Var
notas : vetor[5] de real
cont : inteiro
Incio
Para cont de 1 at 5 faa
Escreva "Digite a nota do aluno ", cont
Leia notas[cont]
Fim_para
Para cont de 1 at 5 faa
Escreva "o aluno " , cont , " tirou nota " , notas[cont]
Fim_para
Fim

11) Escreva uma funo que recebe um vetor de inteiros de qualquer tamanho e retorne a
quantidade de nmeros pares positivos contidos no vetor.
12) Faa uma funo que verifique a existncia de um determinado valor em um vetor de
inteiros. Se encontrar retorna a posio, seno retorna -1.
13) Faa um algoritmo que leia um vetor de 500 posies de nmeros inteiros e divida
todos os seus elementos pelo maior valor contido no vetor. Mostre o vetor aps os
clculos. Sugesto: escreva uma funo que encontre o maior valor do vetor.

66

Tipos homogneos de dados compostos

14) Dados 3 vetores (A, B e C) com as mesmas dimenses (tamanho), faa um programa
que some os vetores A e B e armazene o vetor resultante em C.
15) Escreva um algoritmo que leia dois vetores de 50 posies e faa a multiplicao dos
elementos de mesmo ndice, colocando o resultado em um terceiro vetor. Mostre o
vetor resultante.
16) Escreva um algoritmo que leia 2 vetores X(10) e Y(10). Crie, a seguir, um vetor P, que
seja:
a) A unio de X e Y
b) A interseo entre X e Y
c) A intercalao de X e Y
Escreva um vetor P para cada operao.
17) Escreva uma funo que recebe um vetor de 20 nmeros inteiros, por parmetro, e
retorna a soma dos elementos do vetor.
18) Escreva um algoritmo que ordene um vetor de 50 posies em ordem crescente
usando o mtodo bolha (buble sort).
19) Escreva um algoritmo que l um vetor N(20) e o escreve. Troque, a seguir, o primeiro
elemento com o ltimo, o segundo com o penltimo, e assim por diante, at o dcimo
com o dcimo primeiro e escreva o veto N modificado.
20) Escreva um algoritmo que inverta o contedo de dois vetores A e B de 50 posies,
conforme ilustrado a seguir:
A

Aps a inverso
A
4
0

21) Implementar um algoritmo que calcule e escreva o somatrio dos valores


armazenados numa varivel unidimensional A de 100 elementos numricos.
Exemplo:
A 32
1

17

10.7

...

15.8

...

100

Somatrio = 32 + 17 + 10.7 + ... + 15.8 = 75.5 =


22) Escreva um algoritmo que l um vetor L(5) que fornece os 5 nmeros sorteados em
algum sorteio da LOTO. Leia, a seguir, um nmero no determinado de vetores J(6)
cada um contendo na primeira posio o nmero de identificao do carto e nas
demais posies as opes do apostador em questo. Para cada apostador escrever o

67

Tipos homogneos de dados compostos

nmero de seu carto e o seu nmero de acertos, assinalando com uma mensagem
quando tiver 3, 4 ou 5 acertos.

Variveis indexadas bidimensionais Matrizes


Assim como os vetores, as matrizes so estruturas de dados homogneas
(armazenam informaes de um nico tipo). A diferena entre estas duas estruturas est no
fato de que os vetores so estruturas unidimensionais e as matrizes so bidimensionais. Em
um vetor, para acessar um valor qualquer, necessrio usar um ndice para determinar sua
posio.
Na matriz dois ndices so necessrios. O primeiro determina em que linha da
matriz se encontra o elemento, enquanto o segundo determina a coluna.
A seguir apresentado um exemplo de uma matriz para armazenar as quatro notas
de uma turma de trinta alunos:
1
2
3
..
..
..
..
30

7.5
6.0
9.5
..
..
..
..
4.0

8.0
7.0
9.2
..
..
..
..
5.8

7.0
5.5
10.0
..
..
..
..
7.0

9.0
8.0
8.7
..
..
..
..
6.5

A forma que os dados so dispostos na matriz deve ser definida pelo programador.
Neste caso optou-se por criar quatro colunas onde cada coluna apresenta as notas de uma
avaliao (Por exemplo, prova 1, prova 2, prova 3 e prova 4 respectivamente) e em cada
linha esto representadas as notas de um aluno (Na linha 1, esto as quatro notas do
primeiro aluno e assim por diante). A clula formada pelo cruzamento da linha i com a
coluna j armazena a nota do aluno i na prova j.
Por exemplo, para imprimir a nota do aluno 3 na prova 2 deve ser mostrado o valor
armazenado na terceira linha e na segunda coluna da matriz, neste caso 9,2.
1

68

Tipos homogneos de dados compostos

1
2
3
..
..
..
..
30

7.5
6.0
9.5
..
..
..
..
4.0

8.0
7.0
9.2
..
..
..
..
5.8

7.0
5.5
10.0
..
..
..
..
7.0

9.0
8.0
8.7
..
..
..
..
6.5

Declarao e Utilizao de Matrizes


A declarao e a forma de utilizao de matrizes so semelhantes de vetores,
exceto pelo fato de que dois ndices devem ser definidos neste caso, enquanto apenas um
ndice era suficiente para os vetores. Estes ndices representam o nmero de linhas e de
colunas da matriz.
A declarao de um vetor feita da seguinte forma:
Var
<nome> : matriz[<nmero de linhas>][<nmero de colunas>] de <tipo do matriz>

Na sequencia mostrado um exemplo de declarao de uma matriz de nmeros


reais composta de 5 linhas e 10 colunas:
Var
notas : matriz[5][10] de real

Exerccios: Matrizes
1)

Escreva um algoritmo que l uma matriz M(6,6) e um valor A, em seguida faa a


multiplicao da matriz M pelo valor de A.

2)

Escreva um algoritmo que l 3 matrizes M(4,6), N(4,6) e O(6,4), gerando uma matriz
que seja:
a. a soma de M com N
b. a diferena de M com N
c. o produto de N por O
Escrever as matrizes calculadas.

3)

Faa um algoritmo que leia uma matriz de 50x50 de nmeros reais. A seguir,
multiplique cada linha pelo elemento da diagonal principal daquela linha. Mostre a
matriz aps as multiplicaes.

69

Tipos homogneos de dados compostos

4)

Faa um algoritmo que gere uma matriz com o seguinte contedo:


0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0
0 1 2 2 2 2 1 0
0 1 2 3 3 2 1 0
0 1 2 3 3 2 1 0
0 1 2 2 2 2 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0

5)

Escreva um algoritmo que leia um nmero inteiro A e uma matriz 30x30 de inteiros. A
seguir, crie uma funo que retorne a quantidade de valores iguais a A que esto na
matriz.

6)

Faa um algoritmo que leia uma matriz 20x20 de reais e some cada uma das linhas,
armazenando o resultado da soma em um vetor. A seguir, multiplique cada elemento
pela soma da sua linha. Mostre a matriz resultante.

7)

Considere uma matriz 8x8 de nmeros inteiros representando um tabuleiro de xadrez.


Assuma inicialmente que as peas j esto dispostas no tabuleiro e que as mesmas so
identificadas conforme a tabela abaixo:
Pea
Peo
Cavalo
Bispo
Torre
Rainha
Rei
Posio vazia

Branca
1
2
3
5
11
50
0

Preta
-1
-2
-3
-5
-11
-50
0

5
1
0
0
0
0
-1
-5

3
1
0
0
0
0
-1
-3

2
1
0
0
0
0
-1
-2

11 50
1 1
0 0
0 0
0 0
0 0
-1 -1
-50 -11

2
1
0
0
0
0
-1
-2

3
1
0
0
0
0
-1
-3

5
1
0
0
0
0
-1
-5

a) Escreva um algoritmo que o usurio possa informar a posio atual da torre e


sua nova posio no tabuleiro, e o algoritmo verifica se o movimento vlido,
isto , se a movimentao da torre para a nova posio no viola as regras do
jogo. Verifique tambm se a posio informada pelo usurio realmente contm
uma torre.
b) Idem para a pea bispo.
c) Escreva um algoritmo para indicar o jogador que est vencendo
(quantitativamente).
Consideraes:
A torre movimenta-se somente no sentido horizontal e vertical.
O bispo movimenta-se somente na diagonal.
A pea movimentada no pode passar sobre outra pea do mesmo jogador.

70

Tipos heterogneos de dados compostos

11

Tipos heterogneos de dados


compostos

Existem quatro tipos de dados primitivos que o computador manipula, sendo que j
conhecemos e utilizamos, so eles: os reais, os inteiros, os literais e os lgicos. Com eles
podemos definir novos tipos que possibilitam agrupar um conjunto de dados homogneos
(mesmo tipo) sob um nico nome (a exemplo dos vetores e matrizes), ou de tipos
heterogneos (tipos diferentes). Esse tipo de dados heterogneos conhecido como
registro.
Registros so conjuntos de dados logicamente relacionados, mas de tipos diferentes.
As matrizes so tipos de variveis que agrupam dados similares, enquanto que os
registros agrupam, geralmente, dados desiguais. Aos itens de dados de um registro d-se o
nome de membros ou componentes, enquanto que aos itens de uma matriz (ou vetor)
d-se o nome de elementos.

Registros
uma estrutura composta por um conjunto de variveis de tipos diferentes,
primitivos e/ou construdos, logicamente relacionados que podem ser referenciados por um
mesmo nome (identificador do tipo registro) ou individualmente. Este tipo de estrutura
utilizada para relacionar dados pertencentes a um mesmo objeto. Ex: fichrio de um
funcionrio.
Sintaxe para criao de um registro:
1
2
3

Registro = <nome_do_registro>
<componentes_do_registro>
Fim_registro

Temos que:

71

Tipos heterogneos de dados compostos

<nome_do_registro> um nome escolhido pelo programador e ser


considerado como um novo tipo de dados, como os tipos bsicos;

<componentes_do_registro> o local onde o programador definir as


variveis desse novo tipo, se valendo de outros tipos j definidos.

A definio de um registro deve figurar no cabealho do algoritmo (ou


subalgoritmo) antes da declarao das variveis relativas a ele. Um registro pode ser
definido em funo de outros registros j definidos.
Exemplo 1, registro para armazenamento de data:
1
2
3
4
5

Registro = Data
dia : inteiro
ms : literal[10]
ano : inteiro
Fim_registro

Exemplo 2, registro para armazenamento de dados do aluno:


1
2
3
4

Registro = Aluno
matricula : inteiro
nota[3], media : real
Fim_registro

Exemplo 3, dados cadastrais:


1
2
3
4
5
6

Registro = Dados
nome : literal[40]
idade : inteiro
sexo : caracter
salario : real
Fim_registro

Atribuio
A atribuio de valores a um registro segue o mesmo padro de atribuio em uma
varivel de tipo de dado primitivo, mas com o diferencial que devemos especificar o nome
do registro e o nome do campo contido no registro, separados por um ponto.
Sintaxe:
<nome do registro>.<nome campo> valor

Exemplo de um algoritmo que faz a atribuio de valores para uma estrutura que
armazena data:
6
7
8
9
10
11

Algoritmo Exemplo de atribuio


Registro
dia :
ms :
ano :

= Data
inteiro
inteiro
inteiro

72

Tipos heterogneos de dados compostos

12
13
14
15
16
17
18
19
20

Fim_registro
Var nascimento_joao : Data
Incio
nascimento_joao.dia 25
nascimento_joao.mes 5
nascimento_joao.ano 1965
Fim

Leitura e escrita
Para fazer a leitura e escrita de um registro, devemos seguir a mesma ideia de
atribuio de valores ao registro, devendo fazer a leitura e/ou escrita individual de cada um
dos campos contidos no registro.
Sintaxe para leitura:
Leia <nome_do_registro>.<nome_do_campo>;

Sintaxe para escrita


Escreva <nome_do_registro>.<nome_do_campo>;

Exemplo
Neste exemplo, mostrado um algoritmo que utiliza um vetor, para armazenar
dados de 10 funcionrios.
Nome:
Fone:
Salrio:
Idade:

Nome:
Fone:
Salrio:
Idade:
1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Nome:
Fone:
Salrio:
Idade:
2

Nome:
Fone:
Salrio:
Idade:
3

Nome:
Fone:
Salrio:
Idade:
...

Algoritmo Dados cadastrais de funcionrios


Registro = Funcionario
NOME[15], FONE[10] : literal
SALARIO : real
IDADE : inteiro
Fim_egistro;
Var
VFUNC : vetor[10] de Funcionario //vetor de registros do tipo
//funcionrio, com 10 posies
CONT : inteiro
Procedimento CADASTRAR()
Procedimento MOSTRAR()

10

73

Tipos heterogneos de dados compostos

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
65
66
67
68

Incio
OP : inteiro
OP 1
CONT 1
Enquanto OP <> 3 faa
Escreva 1 - Cadastrar
Escreva 2 - Consulta
Escreva 3 - Sair
Leia OP
Selecione OP
Caso 1 : CADASTRAR()
Caso 2 : MOSTRAR()
Caso 3 : Escreva FIM!
Seno : Escreva Opo invlida
Fim_selecione
Fim_enquanto
Fim
Procedimento CADASTRAR()
Incio
Enquanto CONT <= 100 faa
Escreva Informe nome do funcionrio:
Leia VFUNC[CONT].NOME
Escreva Informe telefone do funcionrio:
Leia VFUNC[CONT].FONE
Escreva Informe salrio do funcionrio:
Leia VFUNC[CONT].SALARIO
Escreva Informe idade do funcionrio:
Leia VFUNC[CONT].IDADE
CONT CONT+1
Fim_enquanto
Se CONT > 100 ento
Escreva Vetor completo!
Fim_se
Fim
Procedimento MOSTRAR()
Var
CONT1 : inteiro
Incio
CONT1 1
Se CONT <= 1 ento
Escreva No existem elementos cadastrados!
Seno
Enquanto CONT1 <= 100 faa
Escreva Nome do funcionrio , CONT1, :, VFUNC[CONT1].NOME
Escreva Telefone do funcionrio , CONT1, :, VFUNC[CONT1].FONE
Escreva Salrio do funcionrio , CONT1, :, VFUNC[CONT1].SALARIO
Escreva Idade do funcionrio, CONT1, :, VFUNC[CONT1].IDADE
Fim_enquanto
Fim_se
Fim

Exerccios
4)

Para cada uma das situaes a seguir crie um tipo de dados registro e faa um
algoritmo para armazenar o que se pede na quantidade que se pede:
a. Um apicultor necessita armazenar os dados de 100 colmeias, que so: cdigo,

74

Tipos heterogneos de dados compostos

b.

5)

regio, estado, qualicao (forte, mdio, fraco), nmero de abelhas;


Um comerciante deseja armazenar os dados de 50 produtos, que so: cdigo,
descrio, quantidade em estoque, quantidade mnima e preo.

Faa um algoritmo que crie os tipos com os campos abaixo e depois leia todas as
informaes de 40 registros em um vetor de registros. Depois de ler, buscar e mostrar
uma listagem de todos os funcionrios(as) cujo SALRIO seja maior que R$ 500,00, o
Estado Civil igual CASADO(A) e que reside no estado de SP.
Registro: Cadastro
Nome
Identidade
Salrio

Endereo
CPF
Estado Civil
Idade
Sexo

Registro: Endereo
Rua
Nmero
Complemento
Cidade
Estado

6)

Uma pessoa cadastrou um conjunto de 15 registros contendo o nome da loja, telefone


e preo de um eletrodomstico. Desenvolver um algoritmo que permita exibir qual foi
a mdia dos preos cadastrados e uma relao contendo o nome e o telefone das
lojas cujo preo estava abaixo da mdia.

7)

Um provedor de acesso Internet mantm o seguinte cadastro de clientes em fichas


de papel:
Cdigo;
Nome;
E-mail;
MegaBytes utilizados;
Se possui pgina pessoal onde armazena-se o caractere S-sim ou N-no.
Elabore um algoritmo que leia as informaes digitadas pelo usurio e em seguida
calcule e mostre um relatrio contendo o valor a ser pago por cada cliente. Considere
que os primeiros 200 MB tem um custo de R$95,00 e as MB excedentes tem o custo
de R$2,50 por MB. Para os clientes que tm pgina pessoal adicionar R$40,00 ao total.
Imagine que o provedor de acesso tem no mximo 5000 clientes. Pergunte ao usurio
qual a quantidade correta de clientes antes de iniciar as leituras e clculos. Caso ele
tenha mais de 5000 clientes, envie uma mensagem pedindo para que ele entre em
contato com o suporte tcnico.

8)

Uma determinada biblioteca possui obras de cincias exatas, humanas e biolgicas,


totalizando 1500 volumes, distribudos em cada uma das reas. O proprietrio
resolveu agrupar as informaes de cada livro no seguinte registro:
Cdigo de catalogao que contm um valor numrico
Doao (S/N)

75

Tipos heterogneos de dados compostos

Nome da obra
Nome do autor
Editora
rea
Palavras-chaves para localizao do livro
Construir um algoritmo que faa os seguintes passos:
a. Leia todos as informaes dos 1500 volumes e considere que o usurio poder
inserir os livros em qualquer ordem de reas ou cdigo de catalogao;
b. Use o mtodo da bolha para ordenar os livros, usando o cdigo de catalogao
como chave de ordenao;
c. Mostre quantos livros existem de cada rea existem na biblioteca;
d. Permita ao usurio consultar diversas vezes as informaes que foram
cadastradas. Ele pode fazer a consulta por cdigo catalogao ou por palavra
chave ou tambm pode sair. Pergunte ao usurio o que ele deseja fazer. Depois
que ele escolher, pea que ele digite um cdigo de catalogao ou uma palavra
chave, dependendo da escolha realizou. Procure nos campos referentes ao tipo
de pesquisa. Encontrando livros que atendam ao que o usurio pediu, todas as
informaes do livro devero ser exibidas. Caso no encontre nenhum livro,
deve-se exibir uma mensagem de aviso ao usurio que no existe livro com
aquela palavra chave ou cdigo.
9)

Suponha que voc esteja realizando uma pesquisa e precise obter os seguintes dados
de um conjunto de 1000 pessoas.
NOME;
SEXO;
COR DOS OLHOS;
ALTURA;
PESO ;
DATA DE NASCIMENTO;
O campo SEXO apresenta o valor 1 quando indica sexo masculino e o valor 0 quando
representa as mulheres. Crie um algoritmo que realize a leitura desses dados e
imprima duas listagens.

10) Faa um algoritmo que, utilizando registros, leia o nome e data de nascimento (dia,
ms, ano) de 40 pessoas, calcule e mostre a idade de cada pessoa e o nome da
pessoa mais velha. Suponha que no temos duas (ou mais) pessoas com a mesma
idade.
11) Uma companhia resolveu facilitar a sua folha de pagamentos. Para tal, mandou criar
uma listagem de todos os funcionrios que recebam mais de 30 salrios mnimos.
Escreva um algoritmo para criar a listagem pedida, sabendo que os registros possuem
os seguintes campos:
NOME DO FUNCIONRIO
CARGO
SALRIO

76

Tipos heterogneos de dados compostos

12) Uma indstria faz a folha mensal de pagamentos de seus 80 empregados baseado
numa listagem em papel com os dados de cada funcionrio, os quais so:
matrcula
nome
salrio bruto
Escreva um programa que permita ao usurio ler os dados dessa listagem e depois de
processar os dados dessa tabela e emitir, para cada funcionrio, seu contracheque, no
seguinte formato:
MATRCULA:
NOME:
SALRIO BRUTO:
DEDUO INSS:
SALRIO LQUIDO:
Informaes adicionais:
O desconto do INSS de 11% do salrio bruto;
O salrio lquido a diferena entre o salrio bruto e a deduo do INSS.
13) Em uma biblioteca deseja-se implantar um sistema informatizado de busca de livros e
teses. As teses possuem os seguintes campos:
Ttulo do Trabalho;
Nome do Autor;
Universidade;
Orientador;
Ano;
Cidade;
3 palavras chaves utilizadas para busca.
Os livros possuem os seguintes campos:
Autor;
Editora;
Ttulo;
Ano;
ISBN;
3 palavras chaves utilizadas para busca.
A partir dessas informaes faa um algoritmo que
Crie tipos de registro para armazenar os dados das teses e dos livros;
Implemente um cadastro para livros e teses, permitindo armazenar 30 teses
e 140 livros e uma forma de realizar a leitura destes livros e teses.
Depois de cadastrar disponibilize as seguintes opes para o usurio:
a. Permita ao usurio buscar as teses que possuem uma palavra-chave digitada
por ele;
b. Buscar todos os livros de um determinado autor escolhido pelo usurio;
c. Buscar as teses de um determinado Ano;
d. Sair do Sistema.

77

Tipos heterogneos de dados compostos

14) Um restaurante possui mesas organizadas em 15 filas de 10 mesas e mantm por


mesa, com as seguintes informaes:
Mesa disponvel
Cliente
Quantidade de itens pedidos
Lista de itens pedidos
Total parcial
% de gorjeta
Total da nota
A lista de itens pedidos definida pelos campos
Cdigo do item pedido
Descrio do item pedido
Quantidade do item pedido
Valor unitrio do item pedido
Valor total do item pedido
A quantidade mxima de itens pedidos em uma ficha de 1000 itens. Os itens
pedidos so bebidas (refrigerantes, cervejas, vinhos, etc), alimentos (batata frita,
poro de calabresa, etc), dentre outros.
O restaurante tambm possui uma lista de 100 itens que devem ser armazenados em
um vetor chamado ItensRestaurante. Este vetor de registro tipo Item, o qual possui a
seguinte declarao:
Registro = Item
Inicio
codigo: inteiro
descricao: literal
preco: real
Fim

Com base nessas informaes faa um algoritmo que permita ao usurio utilizar as
seguintes opes:
a. Iniciar todas as mesas: Nessa opo todas as mesas tero suas quantidades de
pedidos zeradas e tornar a mesa disponvel para uso.
b. Alterar o valor de um item: Nessa opo ser possvel alterar o preo de um
item digitando-se o cdigo do item que se deseja alterar e o novo preo. O
programa deve mostrar o preo antigo e o novo preo.
c. Iniciar uma mesa: Nessa opo ser utilizada quando uma ou mais pessoas
solicitarem uma mesa, o sistema procura a primeira mesa disponvel. Assim que
encontrar a passar para indisponvel e informar ao(s) cliente(s) o nmero da
mesa (imprimindo este nmero). Depois disso, o(s) cliente(s) indicaro se
desejam colocar o nome de um deles na nota. Se precisar(em) deve-se ler este
nome e incluir na ficha da mesa. Seno, por padro inclui-se o nome
"Consumidor". O cliente tambm far a opo de pagar ou no gorjeta (a cota
de gorjeta de 10% do total parcial). Estas informaes tambm iro para a
ficha da mesa.
d. Incluir um pedido na ficha: O garom ir entregar um papel com as seguintes
informaes: o cdigo da mesa, o cdigo do item e a quantidade deste item. As
informaes de descrio e preo unitrio sero buscadas no vetor de itens e
includas na ficha da mesa.

78

Tipos heterogneos de dados compostos

e.

f.

Fechar uma mesa: Quando o cliente pedir a conta para fechar a mesa, ele ir at
o caixa e informar o nmero da mesa que estava, os itens sero totalizados e
apresentado da seguinte forma:

Depois de imprimir estas informaes o algoritmo dever tornar a mesa


disponvel para outros clientes e zerar as informaes da mesa.
Sair do programa: Finaliza o programa.

79