Você está na página 1de 48

INTRODUO A ALGORITMOS E

PROGRAMAO
FABRICIO FERRARI
fabricio@ferrari.pro.br

CRISTIAN CECHINEL
contato@cristiancechinel.pro.br
VERSO 2.2

Sumrio
I Conceitos Preliminares

10

1 O Computador

11

1.1

Histrico dos Computadores

.........................

1.2

Arquitetura Bsica

..........................

1.2.1 Unidade Central de Processamento (UCP). . . . . . . . . . . . . . 13


1.2.2 Memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.3 Dispositivos de Entrada e de Sada . . . . . . . . . . . . . . . . . . 14
2 Algoritmos 15
2.1 Conceito de Algortimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Partes de Um Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Representaes de um Algoritmo . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.1 Fluxograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 Programas de Computador . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5 Linguagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5.1 Linguagem Natural . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5.2 Linguagem de Mquina e Assembler . . . . . . . . . . . . . . . . 20
2.5.3 Linguagens de Programao . . . . . . . . . . . . . . . . . . . . . 21
2.5.4 Pseudocdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

II Dados

25

3 Representao de Dados

26

3.1 Representao Interna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26


3.2 Tipos Primitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3 Constantes e Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 Manipulao de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2
SUMRIO 3
3.4.1 Identificao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4.2 Definio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4.3 Atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4 Expresses 34
4.1 Expresses Aritmticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.1 Precedncia Geral dos Operadores Aritmticos . . . . . . . . . . . 34
4.1.2 Escrita de Operaes Aritmticas . . . . . . . . . . . . . . . . . . . 36

4.1.3 Excees em Expresses Aritmticas . . . . . . . . . . . . . . . . . 36


4.1.4 Simplificao de Expresses Aritmticas . . . . . . . . . . . . . . 37
4.2 Expresses Lgicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2.1 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2.2 Operadores Lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5 Comandos de Entrada e Sada 41
5.1 Sada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

III Estruturas de Controle 44


6 Estruturas de Condio 45
6.1 Estrutura de Condio Simples: se-ento. . . . . . . . . . . . . . . . . . . 46
6.2 Estrutura de Condio Composta: se-ento-seno . . . . . . . . . . . . . . 47
6.3 Estruturas de Condio Encadeadas . . . . . . . . . . . . . . . . . . . . . 49
6.4 Estrutura de Condio caso seja . . . . . . . . . . . . . . . . . . . . . . . 50
7 Estruturas de Repetio 53
7.1 Teste no Incio: enquanto-faa. . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.2 Teste no Fim: faa-enquanto . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.3 Repetio com Controle: faa-para . . . . . . . . . . . . . . . . . . . . . . 55
7.4 Contadores e Acumuladores . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.4.1 Contadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.4.2 Acumuladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
SUMRIO 4

IV Estrutura de Dados e Modularizao 59


8 Variveis Compostas Homogneas 60
8.1 Vetores Unidimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.2 Vetores Bidimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.3 Vetores Multidimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
9 Mdulos 63
9.1 Modularizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.2 Retorno de Valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.3 Escopo de Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.4 Passagem de Parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.4.1 Por Valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.4.2 Por Referncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

V Apndice

65

A Exerccios
A.1 Algoritmos . . . . . . . . . . . . . . . . . . . . . .
..............

66

A.1.1
A.2 Representao de Dados . . . . . . . . . . .
.................
A.3 Expresses . . . . . . . . . . . . . . . . . . . . . .
..............

66
Para os problemas a seguir, defina:
..................
67
69

A.4 Entrada e Sada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71


A.5 Estruturas de Condio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
A.5.1 Estrutura se-ento-seno . . . . . . . . . . . . . . . . . . . . . . . . 72
A.5.2 Estrutura se-ento-seno aninhada . . . . . . . . . . . . . . . . . . 74

66

A.5.3 Estrutura caso seja . . . . . . . . . . . . . . . . . . . . . . . . . . . 77


A.6 Estruturas de Repetio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A.6.1 Utilizando somente a estrutura de repetio para-faa . . . . . . . 78
A.6.2 Utilizando a estrutura de condio se-ento-seno dentro da estrutura de repetio
para-faa . . . . . . . . . . . . . . . . . . . . . 78
A.6.3 Calculando quantidades de ocorrncias, somatrios e produtos
com a estrutura para-faa . . . . . . . . . . . . . . . . . . . . . . . . 78
A.6.4 Localizando valores dentro de um conjunto com a estrutura parafaa . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 79
A.6.5 Usando estrutura de repetio para-faa aninhada . . . . . . . . . 80
SUMRIO 5
A.6.6 Estruturas de repetio (enquanto-faa e faa-enquanto) . . . . . . . 80
A.6.7 Sries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
A.7 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
A.8 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
A.9 Modularizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

Lista de Figuras
1.1 Arquitetura bsica (Von Neumann) . . . . . . . . . . . . . . . . . . . . . . 12
2.1 Partes bsicas de um algoritmo. . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Algoritmo representado em forma de um fluxograma. . . . . . . . . . . . 19
2.3 Compilao: o programa em linguagem de programao transformado em
instrues em linguagem de mquina (que o processador pode
executar). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.1 Estutura de um comando se-ento. . . . . . . . . . . . . . . . . . . . . . . 47
8.1 Vetor idade[8] com seus valores e ndices. . . . . . . . . . . . . . . . . . . 61
6

Lista de Tabelas
3.1 Equivalncia entre sistemas numricos de representao. O subscrito
identifica em que base o nmero est escrito . . . . . . . . . . . . . . . . 27
4.1 Operadores aritmticos bsicos. . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2 Precedncia Geral de Operadores Aritmticos . . . . . . . . . . . . . . . . 35
4.3 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.4 Tabela verdade dos operadores lgicos. P e Q so sentenas lgicas
quaisquer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.1 Tabela de deciso para a estrutura de condio composta mostrada no
algoritmo 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7

Lista de Algoritmos
1 Troca de pneu do carro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 Pegar um onibus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3 Calcula rea de uma Circunferncia. . . . . . . . . . . . . . . . . . . . . . 18
4 Exemplo de Pseudocdigo. . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5 Atribuies de valores a uma varivel. . . . . . . . . . . . . . . . . . . . . 32
6 Locadora: exemplo de entrada de dados. . . . . . . . . . . . . . . . . . . 43
7 Locadora 2: exemplo de aviso para entrada de dados. . . . . . . . . . . . 43
8 Condio: maior ou menor de idade. . . . . . . . . . . . . . . . . . . . . . 47
9 Condio: maior ou menor de idade com se-ento-seno. . . . . . . . . . . 48

10 Expresso lgica composta. . . . . . . . . . . . . . . . . . . . . . . . . . . 49


11 Estrutura de condio composta. . . . . . . . . . . . . . . . . . . . . . . . 49
12 Verifica aprovao de alunos. . . . . . . . . . . . . . . . . . . . . . . . . . 51
13 Estrutura caso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
14 Exemplo de caso: mostra o numero. . . . . . . . . . . . . . . . . . . . . . . 52
15 Estrutura de repetio enquanto-faa. . . . . . . . . . . . . . . . . . . . . . 54
16 Estrutura de repetio faa-enquanto. . . . . . . . . . . . . . . . . . . . . . 55
17 Estrutura de repetio para-faa. . . . . . . . . . . . . . . . . . . . . . . . . 55
18 Exemplo de estrutura de repetio. . . . . . . . . . . . . . . . . . . . . . . 55
19 Contadores 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
20 Contadores 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
21 Acumuladores 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
22 Acumuladores 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
23 Acumuladores 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
24 Acumuladores 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
25 Definindo os valores da varivel idade. . . . . . . . . . . . . . . . . . 61
26 Imprimindo todos os valores da varivel idade[]. . . . . . . . . . . . 62
27 Antecessor-sucessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
8
LISTA DE ALGORITMOS 9
28 Conversor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
29 Numero-de-salarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
30 Novo-peso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
31 Problema 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
32 Adivinhacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
33 Calculo do pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Parte I
Conceitos Preliminares
10

Captulo 1
O Computador
Um computador uma mquina que manipula dados a partir de uma lista de instrues.
Os computadores podem ser mecnicos (computador analgico) ou eletrnicos
(computadores digitais).

1.1 Histrico dos Computadores


. MECNICOS
baco 1000 A.C
Ossos de Napier 1612
Pascaline, Pascal 1642
Tear automtico, Jacquard 1801
Mquina de diferenas, Babbage 1882
Tabulador eletromecnico, Hollerith 1890
. 1a GERAO eletro-eletrnicos
Z1, Z2, Z3 (rels), Konrad Zuse 1935

ABC (vlvulas), Atanosoff 1936


MARK-1, 1941, 120 m2, 10 multiplicaes em 3 segundos
ENIAC, 1946, 30 toneladas, 18000 vlvulas, 5000 somas/s
. 2a GERAO transistores 1947
11
CAPTULO 1. O COMPUTADOR
TX-0, 1957
PDP-1, Digital, 1o computador comercial
. 3a GERAO circuitos integrados 1958
IBM 360, 1965
PDP-11, sucesso universitrio
. 4a GERAO microprocessadores 1970
Intel 4004, 1971, 4 bits
Intel 8008, 1972
Altair 8800, 1974, montado em kits
Apple, 1976, TV+Teclado, BASIC escrito por Bill Gates
IBM-PC, 1981, computador pessoal, (projeto aberto, processador 8088
Intel,
16 bits, 4.77 MHz, 16 kb RAM, US$ 4400. )

12

1.2 Arquitetura Bsica


Internamente os computadores modernos podem ser caracterizados por trs partes
distintas, a unidade central de processamento (UCP), a memria (MEM) e os
dispositivos de entrada e sada (E/S), conforme esquema na Figura 1.1.
Figura 1.1: Arquitetura bsica (Von Neumann)
CAPTULO 1. O COMPUTADOR 13

1.2.1 Unidade Central de Processamento (UCP).


A UCP (ou CPU da sigla em ingls, Central Processing Unit) um conjunto de
dispositivos eletrnicos responsvel pelas operaes de processamento referentes aos
clculos
lgicos e matemticos. Para execuo das operaes de processamento citadas, a UCP
realiza sempre as seguintes tarefas1:
1. busca de uma instruo na memria;
2. interpretao de uma instruo;
3. execuo de uma operao representada na instruo;
4. gravao de eventuais resultados do processamento;
5. reincio de todo o processo (caso necessrio)
Fazem parte da maioria das UCPs as seguintes unidades:
Unidade Aritmtica e Lgica (UAL) responsvel por realizar clculos matemticos
mais
complexos de maneira mais rpida.
Registradores Memria temporria para armazenar dados a serem processados
Unidade de Controle (UC) Controla o fluxo de dados na UCP: busca na memria,
chamadas da UAL, controle geral das tarefas da UCP.
Relgio Gerador de pulsos que determinam um ciclo de tarefas da UCP. Em cada
ciclo (ou pulso) a UCP realiza uma tarefa, assim quanto maior a frequncia do
relgio da UCP, mais tarefas esta pode realizar num mesmo intervalo de tempo.

1.2.2 Memria
A memria o dispositivo responsvel por armazenar dados. Os vrios tipos de

memria no computador so classificadas de maneira geral de acordo com a sua


capacidade de leitura, escrita e volatilidade. So divididas em:
RAM sigla para memria de acesso aleatrio, uma memria em que se pode ler e
escrever, mas cujo contedo perdido uma vez que o computador desligado.
a memria principal do computador e a mais usada pelos aplicativos e sistema
operacional.
1A

sequncia de tarefas descritas aqui constitui a base mnima de um algortimo: entrada de dados,
processamento de dados e sada de dados. Mais sobre isso na Seo 2.2.

CAPTULO 1. O COMPUTADOR
ROM sigla para memria somente-leitura, como o nome diz s possvel ler
seu con
tedo, mas no alter-lo. No se altera se o computador desligado.
Secundria so dispositivos usados para armazenar grandes quantidades de
infor
mao em carter no voltil. Na maioria das vezes muito mais lenta que a
RAM. Exemplo so os discos rgidos.

14

1.2.3 Dispositivos de Entrada e de Sada


Os dispositivos de entrada e sada de dados (E/S) so de suma importncia pois
qualquer informao que deva entrar ou sair do computador ser feita atravs deles.
Dentre os dispositivos de entrada podemos citar: teclado, mouse, cmera, digitalizador.
Os
dispositivos de sada podem ser: monitor2, impressora, sada de som, por exemplo.
Os dispositivos de E/S se comunicam com o computador atravs de portas especficas de comunicao, como porta paralela, porta serial, porta USB, porta SCSI, porta
Firewire, porta PS/2, e assim por diante. Cada porta compreende um tipo de conector
especfico, porm mais do que isso um protocolo de comunicao entre dispositivos.
O dispositivo de entrada padro o teclado, enquanto que a sada padro o
monitor. Isto significa que sempre que no for explicitamente especificado, um
programa
tentar ler do teclado e escrever para o monitor.
2H

monitores que so utilizados tambm como dispositivos de entrada, os chamados monitores


touch-screen

Captulo 2
Algoritmos
2.1 Conceito de Algortimo
Um algoritmo pode ser definido como uma sequncia finita de passos (instrues)
para resolver um determinado problema. Sempre que desenvolvemos um algoritmo
estamos estabelecendo um padro de comportamento que dever ser seguido (uma
norma de execuo de aes) para alcanar o resultado de um problema.
Para o desenvolvimento de um algoritmo eficiente necessrio obedecermos algumas
premissas bsicas no momento de sua construo:
. Definir aes simples e sem ambiguidade;
. Organizar as aes de forma ordenada
. Estabelecer as aes dentro de uma sequncia finita de passos.
O algoritmo 1 um exemplo simples de algoritmo (sem condies ou repeties)
para troca de um pneu.
Os algoritmos so capazes de realizar tarefas como:

1. Ler e escrever dados;


2. Avaliar expresses algbricas, relacionais e lgicas;
3. Tomar decises com base nos resultados das expresses avaliadas;
4. Repetir um conjunto de aes de acordo com uma condio;
15
CAPTULO 2. ALGORITMOS
16
Algoritmo 1 Troca de pneu do carro.
1: desligar o carro
2: pegar as ferramentas (chave e macaco)
3: pegar o estepe
4: suspender o carro com o macaco
5: desenroscar os 4 parafusos do pneu furado
6: colocar o estepe
7: enroscar os 4 parafusos
8: baixar o carro com o macaco
9: guardar as ferramentas
No algoritmo 2 esto ilustradas as tarefas anteriormente mencionadas. Nas linhas
de 2 a 4 pode-se observar a repetio de uma ao enquanto uma dada condio seja
verdadeira, neste caso em especfico, o algoritmo est repetindo a ao esperar nibus
enquanto a condio nibus no chega permanecer verdadeira, assim que essa
condio se tornar falsa (quando o nibus chegar) o algoritmo deixar de repetir a
ao esperar nibus, e ir executar a linha 5.
J nas linhas de 7 a 9, possvel observar um exemplo da execuo (ou no execuo)
de uma uma ao com base na avaliao de uma expresso. Nesse trecho, o algoritmo
avalia se a expresso no tenho passagem verdadeira e em caso positivo, executa
a aco pegar dinheiro. Caso a expresso no tenho passagem seja falsa (ou seja,
a pessoa tem passagem) ento o algoritmo ir ignorar a ao pegar dinheiro e ir
executar a linha 10.
Estas estruturas de controle sero estudadas em detalhe nos captulos 6 e 7.

2.2 Partes de Um Algoritmo


Um algortimo quando programado num computador constitudo pelo menos das 3
partes, sendo elas:
1. Entrada de dados;
2. Processamento de dados;
3. Sada de dados;
Na parte de entrada, so fornecidas as informaes necessrias para que o algoritmo
possa ser executado. Estas informaes podem ser fornecidas no momento em
que o programa est sendo executado ou podem estar embutidas dentro do mesmo.
CAPTULO 2. ALGORITMOS
17
Algoritmo 2 Pegar um onibus.
1: ir at a parada
2: enquanto nibus no chega faa
3: esperar nibus
4: m-enquanto
5: subir no nibus
6: pegar passagem
7: se no h passagem

ento

8: pegar dinheiro
9: m-se
10: pagar o cobrador
11: troco dinheiro - passagem
12: enquanto banco no est vazio
13: ir para o prximo
14: m-enquanto
15: sentar
16: : : :

faa

Figura 2.1: Partes bsicas de um algoritmo.


Na parte do processamento so avaliadas todas as expresses algbricas, relacionais e
lgicas, assim como todas as estruturas de controle existentes no algoritmo
(condio e/ou repetio).
Na parte de sada, todos os resultados do processamento (ou parte deles) so enviados
para um ou mais dispositivos de sada, como: monitor, impressora, ou at mesmo
a prpria memria do computador.
Por exemplo, considere o algoritmo 3 que tem como objetivo calcular a rea de uma
circunferncia dada por A = R2. Para calcular a rea necessrio saber os valores
do raio R e do . Considerando que o valor de constante o mesmo poder ser
gravado (definido) dentro do prprio algoritmo, e a entrada para o processamento
desse algoritmo consistir nesse valor juntamente com o valor do raio R (que deve ser
informado pelo usurio pelo teclado, por exemplo). O processamento do algoritmo
ser a realizao do clculo R2 e a atribuio do resultado dessa expresso para a
varivel A. A parte da sada consistir na escrita do valor de A no monitor.
CAPTULO 2. ALGORITMOS 18
Algoritmo 3 Calcula rea de uma Circunferncia.
1: 3:14 {entrada para o processamento}
2: leia R {entrada para o processamento}
3: A R2 {processametno}
4: escreva A {sada}

2.3 Representaes de um Algoritmo


2.3.1 Fluxograma
Os fluxogramas so uma apresentao do algoritmo em formato grfico. Cada ao ou
situao representada por uma caixa. Tomadas de decises so indicadas por caixas
especiais, possibilitando ao fluxo de aes tomar caminhos distintos.
A Figura 2.2 representa um algoritmo na forma de um fluxograma. O incio e o fim
do algoritmo so marcados com uma figura elptica; as aes a serem executadas esto
em retngulos; sendo que as estruturas de controle condicionais esto em losangos
e indicam duas possibilidades de proseguimento do algoritmo, uma para o caso da
expresso avaliada (condio) ser verdadeira e outra para o caso de ser falsa.
No exemplo da Figura 2.2, a primeira ao executada ('abrir forno') e ento a segunda
expresso avaliada ('fogo aceso?') como verdadeira ou falsa; caso seja verdadeira, o
algoritmo prosegue para a ao esquerda ('botar lenha'); caso seja falsa, o
algoritmo executa a ao direita ('acender fogo'). Em seguida, para qualquer um dos
casos, a prxima ao a ser executada ('assar po').

2.4 Programas de Computador


2.5 Linguagens
Qualquer tipo de informao que deva ser transferida, processada ou armazenada
deve estar na forma de uma linguagem. A linguagem imprescindvel para o processo

de comunicao. Duas pessoas que se falam o fazem atravs de uma linguagem


em comum, a linguagem natural. Da mesma forma, duas mquinas trocam informao por uma linguagem, que neste caso mais tcnico e restrito, se chama protocolo. Do
mesmo modo, um computador armazena suas instrues em cdigo de mquina. Estas
diferentes linguagens no podem ser traduzidas diretamente entre s, pois alm de
serem representadas de modos diferentes, tambm referem-se a coisas muito distinCAPTULO 2. ALGORITMOS 19
Figura 2.2: Algoritmo representado em forma de um fluxograma.
tas. Para que um ser humano possa programar, armazenar e buscar informaes num
computador, necessrio que saiba instru-lo na sua linguagem de mquina ou numa
linguagem intermediria (uma linguagem de programao) que possa ser facilmente
traduzida para o computador.

2.5.1 Linguagem Natural


A linguagem natural a maneira como expressamos nosso raciocnio e trocamos
informao. Como a expresso da cultura de uma sociedade, desenvolvida atravs das
geraes e em diferentes situaes, raramente constitui um sistema de regras rgidas
que possa ser implementada numa mquina ou que possa ser transcrita logicamente.
Alm da linguagem falada, fazem parte da nossa comunicao gestos e posturas, que
no podem ser diretamente adaptados para compreenso de uma mquina. Por fim,
toda a comunicao eficiente pressupe um conhecimento prvio comum entre os
interlocutores, por exemplo a mesma lngua, a mesma bagagem cultural e assim por
diante.
Ao contrrio dos seres humanos, as mquinas (dentre elas os computadores) so
CAPTULO 2. ALGORITMOS
20
projetados para executar tarefas bem determinadas a partir de
determinadas instrues. Um computador no por si s uma mquina inteligente no
sentido que no
pode aprender com a prpria experincia para melhorar seu
comportamente futuro1.
Ao contrrio, um computador somente capaz de realizar
estritamente as tarefas que
lhe forem delegadas e que faam parte do conjunto daquelas
aes que ele pode exe
cutar. Neste sentido, necessrio compreender que tipo de
instrues podem ser exe
cutadas pelos computadores para que possamos program-los
instru-los com a
sequncia de aes necessrias para resolver um determinado
problema de modo
que realizem a tarefa do modo desejado.

2.5.2 Linguagem de Mquina e Assembler


Alm do fato de o computador necessitar que lhe instruam com aes bem especficas,
estas aes devem ser passadas para o computador numa linguagem que ele possa
entend-las, chamada linguagem de mquina. Esta linguagem composta somente
por nmeros, representados de forma binria, que, sob o ponto de vista do computador,
representam as operaes e os operandos que sero usados no processamento do
programa. Para um ser humano, a linguagem de mquina dificlima de se

compreender. Assim, existe uma linguagem representada por comandos mas que
reproduz
as tarefas que sero executadas dentro do computador, a linguagem de montagem
(assembly). Entretando, mesmo a linguagem de montagem difcil de programar e os
programas feitos para um determinado processador, por conterem instrues especficas deste, no funcionaro em um processador de outro tipo.
Com ilustrao, abaixo mostrado o incio de um programa que escreve a frase
Ol Mundo no monitor. Na coluna da esquerda est o endereo relativo de memria,
na coluna do centro o programa escrito em linguagem de mquina e na coluna da
direita a representao em caracteres ASCII. Teoricamente, o programa poderia ser
escrito diretamente em linguagem de mquina, como mostrado abaixo, entretando a
sintaxe do mesmo muito pouco compreensvel e a probabilidade de erro para o seu
desenvolvimento seria muito grande.
00000000 7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 .ELF............
00000010 02 00 03 00 01 00 00 00 D0 82 04 08 34 00 00 00 ............4...
00000020 BC 0C 00 00 00 00 00 00 34 00 20 00 07 00 28 00 ........4. ...(.
1Diversos

esforos vm sendo despendidos dentro do meio cientfico para equipar computadores


com esta capacidade, o campo de pesquisa que cuida desse tipo de tarefa conhecido como Inteligncia
Artifical

CAPTULO 2. ALGORITMOS 21
Figura 2.3: Compilao: o programa em linguagem de programao transformado
em instrues em linguagem de mquina (que o processador pode executar).
00000030 24 00 21 00 06 00 00 00 34 00 00 00 34 80 04 08 ..!.....4...4...
00000040 34 80 04 08 E0 00 00 00 E0 00 00 00 05 00 00 00 4...............

2.5.3 Linguagens de Programao


Para facilitar a tarefa de programar um computador, foram criadas vrias linguagens
de programao. Estas linguagens so um maneira de tentar escrever as tarefas que
o computador vai realizar de maneira mais parecida com a linguagem natural. Embora
ainda seja muitas vezes complexo em comparao com a linguagem natural, um
programa escrito em uma linguagem de programao muito mais fcil de ser
implementado, compreendido e modificado.
As linguagens de programao so um meio termo entre a linguagem de mquina
e a linguagem natural. Deste modo so classificadas de acordo com o nvel entre a
linguagem natural ou de mquina que ocupam. As linguagens muito parecidas com
linguagem de mquina so chamadas de linguagens de baixo nvel e suas instrues
parecem-se muito com aquelas que sero executadas pelo processador. As linguagens
de alto-nvel so as que guardam mais semelhanas com a linguagem natural. Exemplo
de linguagens de baixo nvel a linguagem de montagem (assembly). Exemplos de
linguagens de alto-nvel so: Pascal, C, Fortran, Java, Perl, Python, Lisp, PHP, entre
outras.
Como o processador no pode executar o cdigo numa linguagem de programao, esta deve ser traduzida em cdigo de mquina antes de ser executada. Este processo
chamado de textbfcompilao (representado na Figura 2.3) e responsvel por
converter os comandos da lingugem de programao nas instrues em cdigo de
mquina que o processador poder utilizar.
Por exemplo, o cdigo de mquina da seo 2.5.2 foi gerado pelo programa a seguir,
escrito na linguagem de programao C. Esse programa, depois de compilado, escreve
frase Ol Mundo no monitor. A compilao, isto , a traduo do programa em C
para linguagem de mquina, produz algo parecido com o que foi mostrado na seo
2.5.2, para o caso de um processador da famlia 80386, usados em PCs.
#include <stdio.h>

CAPTULO 2. ALGORITMOS 22
int main(){
printf("Ol Mundo\n");
}

A primeira linha (#include) inclui algumas bibliotecas de instrues que facilitaro a


programao. A linha seguinte indica que esta a parte principal (main) do programa;
o que estiver dentro do bloco delimitado por chaves { } ser executado. Finalmente, a
prxima linha imprime (printf) o argumento ( Ol Mundo ) no monitor.
Um programa escrito em linguagem de mquina, como contm instrues especficas de um processador, s poder ser utilizado naquele processador ou em similares.
Em contrapartida, uma linguagem de programao, como contm somente instrues
abstratas do que fazer, pode ser compilado para qualquer cdigo de mquina. Em
resumo, ao invs de escrever um programa em cdigo de mquina para cada famlia
de processdores, escreve-se o mesmo cdigo numa linguagem de programao e est
compilada por um compilador especfico daquela arquitetura.

2.5.4 Pseudocdigo
O pseudocdigo uma maneira intermediria entre a linguagem natural e uma
linguagem de programao de representar um algoritmo. Ela utiliza um conjunto restrito
de
palavras-chave, em geral na lngua nativa do programador, que tem equivalentes nas
linguagens de programao. Alm disso, o pseudocdigo no requer todo a rigidez
sinttica necessria numa linguagem de programao, permitindo que o aprendiz se
detenha na lgica do algoritmos e no no formalismo da sua representao. Na medida
em que se obtm mais familiaridade com os algoritmos, ento o pseudocdigo
pode ser traduzido para uma linguagem de programao.
Algoritmo 4 Exemplo de Pseudocdigo.
leia (x, y) {Esta linha um comentrio}
se x > y ento
escreva ( x maior )
seno
se y > x ento
escreva ( y maior )
seno
escreva ( x e y so iguais )
m-se
m-se
CAPTULO 2. ALGORITMOS
23
Na listagem 4 mostrado um exemplo de pseudocdigo escrito em portugus
para
escrever o maior valor entre, x ou y. As palavras leia, se, ento, seno, seno-se,
m
se e escreva so palavras-chave que representam estruturas presentes em todas as
linguagens de programao. Entretanto, no pseudocdigo no necessrio se
preocu
par com detalhes de sintaxe (como ponto-e-vrgula no final de cada expresso)
ou em
formatos de entrada e sada dos dados. Deste modo, o enfoque no
desenvolvimento
do algoritmo fica restrito a sua lgica em si, e no na sua sintaxe para
representao

em determinada linguagem.
Por exemplo, considere o cdigo do programa a seguir que implementa na lin
guagem de programao C o algoritmo 4. Veja como o mesmo requer uma
sintaxe
bem mais rgida do que o seu algoritmo correspondente Isso acontece pois para
que
o compilador C possa entender o programa desenvolvido, necessrio que sejam
res
peitadas algumas exigncias da linguagem, como por exemplo:
. todo programa em C inicia sua execuo na funo main(), que obrigatria;
. para que certas funes sejam acessveis, necessrio incluir a bilbioteca
stdlib.h;
. todas as linhas que contm instrues devem terminar com ponto-e-vrgula;
. os blocos de instrues so delimitados por chaves;
. linhas de comentrios2 so iniciadas por duas barras //;
. blocos de comentrios so delimitados por /* e */;
Este conjunto de regras demonstra como o compilador (nesse caso o compilador
C)
requer estruturas bem rgidas para poder processar (entender) o programa. Para
fa
cilitar o entendimento das estruturas algortmicas que sero estudadas, os
algoritmos
apresentados aqui sero escritos em pseudocdigo, sendo fundamental que o estu
dante consiga entender a a correspondncia entre os mesmos e a sua
representao
em uma linguagem de programao.
#include <stdio.h>
int main(){
int x, y; // isto um comentrio de linha
2Os textos escritos dentro de linhas e/ou blocos de comentrios so ignoradoas pelo compilador e
servem para que o programador mantenha o cdigo documentado

CAPTULO 2. ALGORITMOS 24
/* isto um comentrio
de bloco
printf("\ndigite x:");
scanf("%i",&x);
printf("\ndigite y:");
scanf("%i",&y);
if (x>y) {
printf("x maior\n");
} else if (x<y) {
printf("y maior\n");
} else {
printf("x e y so iguais\n");
}
}

Parte II

*/

Dados
25

Captulo 3
Representao de Dados
3.1 Representao Interna
Para que seja possvel armazenar e manipular dados no computador necessrio
represent-los internamente de alguma forma. Ns seres humanos, representamos
nossos nmeros usando um sistema que chamamos de sistema decimal (ou sistema
na base 10). Esse sistema, que se originou do fato de utilizarmos os 10 dedos das
mos para realizarmos nossas contas, possui 10 diferentes dgitos para representar as
infinitas quantidades e valores que desejamos (0 1 2 3 4 5 6 7 8 e 9).
Nos caso dos computadores digitais, a notao que utilizada possui apenas 2
algarismos ou dgitos para representar uma quantidade desejada, o 0 e o 1. Esse sistema
de representao chamado de sistema binrio (ou sistema na base 2) e utiliza a noo
de ligado/desligado, ou verdadeiro/falso, ou finalmente 0=1 1 .
Pelo fato de um nmero precisar de muitos algarismos para ser expresso no sistema
binrio, outras formas de representao auxiliares tambm so utilizadas nos
computadores, como por exemplo a representao pelo sistema hexadecimal (ou
sistema na
base 16) que utiliza 16 dgitos (0 1 2 3 4 5 6 7 8 9 A B C D E F), e a representao no
sistema octal (ou sistema na base 8) que utiliza 8 dgitos (0 1 2 3 4 6 7 8).
Na Tabela 3.1 so mostradas as quantidades de 0 a 15 representadas nos diferentes
sistemas mencionados
A quantidade de algarismos necessria para representar um determinado nmero
varia de acordo com o sistema de representao utilizado. Se o sistema decimal,
o maior nmero que pode ser representado utilizando N algarismos ser 10N. Por
1Por

esse motivo, o elemento mnimo capaz de armazenar a informao nos computadores foi apelidado
de bit, uma contrao do ingls binary digit (dgito binrio)

26
CAPTULO 3. REPRESENTAO DE DADOS 27
decimal binrio hexadecimal octal
00
0
0 0
d 00
h o
b

1
d

2
d

3
d

4
d

5
d

00
01
b

00
10
b

00
11
b

01
00
b

01
01
b

1 1
h

2 2
h

3 3
h

4 4
h

5 5
h

6
d

7
d

8
d

01
10
b

01
11
b

10
00
b

6 6
h

7 7
h

1
0

10
9
d 01

1 10
0 10

1 10
1 11
d

1 11
2 00
d

1 11
3 01
d

1 11
4 10
d

1 11
5 11
d

B
h

C
h

D
h

E
h

F
h

1
1
o

1
2
o

1
3
o

1
4
o

1
5
o

1
6
o

1
7
o

Tabela 3.1: Equivalncia entre sistemas numricos de representao. O subscrito


identifica em que base o nmero est escrito
exemplo, se nos restringimos a nmeros de dois algarismos, no sitema decimal s
poderamos escrever 100 nmeros, de 0 a 99 (102 = 100). Para nmeros de trs
algarimos,
poderamos escrever 1000 nmeros, de 0 a 999 (103 = 100) e assim por diante.
No sistema binrio acontece da mesma forma. Se dispomos de 4 algarismos, poderemos
escrever 24 = 16 nmeros, de 0 a 15. Se dispomos de 8 algarismos, poderemos
escrever 28 = 256 nmeros, de 0 a 255 e assim por diante. Note que por isso que a
sequncia de nmeros
21; 22; 23; 24; 25; 26; 27; 28; 29; 210; : : : = 2; 4; 8; 16; 32; 64; 128; 256; 512; 1024; : : :
aparece com tanta frequncia na informtica. Um nico algarismo binrio chamado
bit, uma sequncia de 8 bits um byte e uma sequncia de 16 bits uma palavra.
A lgica utilizada para realizar a converso de nmeros entre diferentes bases similar
a lgica que usamos para representar um nmero no sistema decimal, ou seja, os
algarismos iro representar diferentes quantidades dependendo da sua posio no nmero em questo. Por exemplo, no nmero 25, o algarismo 5 representa a quantidade
5, j no nmero 58, o algarismo 5 representa a quantidade 50, pois 58 = 5 101 + 8 100,
sendo que os expoentes de 10 expressam a ordem que o algarismo ocupa no nmero.
CAPTULO 3. REPRESENTAO DE DADOS
28
Veja esse outro exemplo,

2679d = 2 103 + 6 102 + 7 101 + 9 100


Em um sistema de representao binrio acontece da mesma maneira. Por exemplo,
100110b = 1 25 + 0 24 + 0 23 + 1 22 + 1 21 + 0 20 = 32 + 0 + 0 + 4 + 2 + 0 = 38d

3.2 Tipos Primitivos


Os dados em um computador devem ser armazenados de acordo com o tipo de
informao que se deseja representar e com o tipo de operao que ser realizada com
eles. A representao correta e adequada de uma informao permite otimizar os
recursos computacionais disponveis, alm de acelerar o processamento. A seguir so
definidos os tipos de dados mais comuns encontrados na maioria das linguagens de
programao e que constituem a base de como qualquer informao ser armazenada
no mesmo.
Inteiro So os nmeros pertencentes ao conjunto dos Inteiros, isto , que no possuem
parte fracionria. Podem ser positivos, nulos ou negativos. Exemplos: 2 laranjas,
calado tamanho 42, 65535 gros, 0 pessoas na fila, multa de -2 pontos no campeonato.
Real So os nmeros pertencentes ao conjunto dos Reais, isto , que podem possuir
parte fracionria. Tambm so chamados de ponto flutuante devido maneira
como o computador os armazena. Exemplos2: 2:12 litros de combustvel, -3:5C,
= 3:141592654, saldo de R$ 10000:52, e = 2:7182818284590451.
Caractere So os valores pertencentes ao conjunto de todos os caracteres numricos
(0...9), alfabticos (a...z,A...Z) e especiais (! @ # $ % & *). Esse conjunto tambm
conhecido como conjunto de caracteres alfanumricos. Os caracteres alfanumricos
so armazenados internamente no computador na forma numrica (binria) utilizando o
padro ASCII3.
2Para

ser coerente com a notao usada nos computadores, usaremos aqui o ponto como separador
decimal
3ASCII significa American Standard Code for Information Interchange e um conjunto de cdigos
usado pela indstria de computadores para representar em cdigo binrio (atravs de combinaes de

CAPTULO 3. REPRESENTAO DE DADOS


A seguir so apresentados alguns dos caracteres existentes
(representados no pa
dro ASCII entre o intervalo de 33 a 126):

29

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH
IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop
qrstuvwxyz{|}~

Exemplos de informaes do tipo caractere4: "Joo Francisco", "Rua Ismael Soares",


"Hotel Feliz", "?". Nestes exemplos, as aspas duplas (") so usadas para indicar o incio
e o fim das cadeias de caracteres, porm no fazem parte da informao contida nas
mesmas. importante ressaltar que o espao em branco entre as palavras tambm
um caractere.
Lgico O tipo lgico utilizado para representar informaes que s podem assumir
dois valores, o valor verdadeiro (V) ou o valor falso (F). Estes valores tambm podem
ser entendidos como: ligado/desligado, 1/0, alto/baixo, fechado/aberto, etc. Exemplos
de informaes que podem ser representadas utilizando o tipo lgico so: O fogo
est apagado, a televiso est ligada, o porto est aberto, o produto foi encontrado.

3.3 Constantes e Variveis


Dentro de um algoritmo podemos encontrar basicamente duas classes diferentes de
dados, os dados constantes e os variveis. Um dado uma constante quando seu
valor no se altera ao longo do tempo em que o algoritmo executado, ou seja,

permanece o mesmo desde o incio at o final da execuo. J um dado que pode ter seu
valor alterado durante a execuo do programa tido como uma varivel.
Por exemplo, no clculo da rea de uma circunferncia (A = r2), o valor de
constante, pois sempre igual a 3:1416:::, e o raio r varivel, pois pode assumir
diferentes valores a cada clculo da rea. Seguindo a mesma lgica, a rea A calculada
para diferentes r tambm varivel.
8 bits) os diversos caracteres existentes
4Algumas linguagens de programao utilizam tipos diferentes para representar um caractere isolado e
uma cadeia (ou sequncia) de caracteres. Um exemplo comum a linguagem Pascal, que utiliza
o tipo char para representar um nico caractere, e o tipo string para representar um conjunto de
caracteres agrupados

CAPTULO 3. REPRESENTAO DE DADOS

30

3.4

Manipulao de Dados

3.4.1

Identificao

Para que os dados sejam manipulados no computador, necessrio que estes estejam
associados a um nome, um identificador. O contedo deste identificador ser o dado
em si e o seu nome ser usado para acessar o dado e realizar operaes com o mesmo.
Uma analogia til para entender o conceito e a necessidade de utilizao do
identificador seria pensar no mesmo como uma placa de sinalizao que indica
(delimita)
uma determinada regio ou espao na memria do computador onde o dado
(informao) desejado est localizado. Sendo assim, toda vez que se deseja acessar uma
determinada informao utilizamos o nome dessa placa de sinalizao e recuperamos
o contedo que est localizado dentro do espao delimitado pela mesma.
A nomeao dos identificadores deve obedecer a algumas regras, sendo elas:
1. Sempre comear com um caractere alfabtico;
2. Pode ser seguido por um ou mais caracteres alfanumricos;
3. No conter caracteres especiais nem espaos com exceo do sublinhado _ (essa
exceo tambm vale para a regra do item 1, ou seja, permitido iniciar a nomeao de
um identificador com com _).
4. No permitido utilizar palavras reservadas (palavras prprias da linguagem
de programao, como os comandos, tipos de variveis, etc).
Exemplos de identificadores vlidos: raio, _nome, R, num_clientes, BJ33f15,
NumPessoasDoentes.
Exemplos de identificadores invlidos: (ee), 32-vr, mil*, 12ddd, o:P
Ao nomearmos os identificadores dos nossos dados conveniente usarmos palavras
mnemnicas, ou seja, palavras que nos faam lembrar o carter do contedo
armazenado. Isso facilita a leitura do cdigo programado e possibilita uma melhor
documentao do mesmo. Por exemplo, ao armazenarmos o nome completo, a idade
e a quantidade de filhos de uma pessoa, mais prtico e coerente usarmos os
identificadores NomeSobrenome, Idade e NumFilhos do que usarmos nomes aleatrios
como X,
Y e Z.
CAPTULO 3. REPRESENTAO DE DADOS 31

3.4.2 Definio
Como dito anteriormente, ao longo do programa o dado ser manipulado atravs do
nome do seu identificador, sendo assim, o primeiro passo para utilizarmos os dados
a nomeao do seu idenficador e a definio do seu tipo (no caso de identificadores
variveis), ou do seu valor (no caso de identificadores constantes). A definio dos

dados em algoritmos tambm conhecida como declarao.


Um identificador (sendo ele varivel ou constante) declarado com um determinado
tipo de dados ficar restrito a armazenar valores daquele tipo especfico (inteiro, real,
caractere, lgico). Na maioria dos casos, se houver uma tentativa de atribuir a um
identificador um tipo diferente daquele para o qual ele foi definido iro ocorrer erros
de compilao, de execuo ou at mesmo perda de dados5.
A definio de um identificador varivel num algoritmo feita da seguinte forma:
var <identi cador1> [, <identi cador2>,...]: <tipo1>;
<identi cador3> [, <identi cador4>,...]: <tipo2>;
e a de um identificador constante da seguinte forma:
constante <identi cador1> = <valor1>;
<identi cador2> = <valor2>;
<identi cador3> = <valor3>;
A seguir so apresentados alguns exemplos de declaraes de ambos os tipos de
identificadores:
var marca, modelo: caractere;
ano: inteiro;
preco: real;
vendido: lgico;
constante PI=3.141592654;
MAXIMO=100;
Ao declaramos um identificador varivel, estamos reservando na memria do
computador um espao para armazenar valores do tipo declarado para o mesmo.
Podemos comparar a memria de um computador com um mvel cheio de gavetas
etiquetadas, onde cada gaveta marcada pela etiqueta corresponde a um identificador
5H

linguagens de programao que no exigem a definio de tipos para trabalhar com os dados,
como o caso do Python. Essas linguagens so classificadas como no-tipadas e normalmente aceitam
atribuio de dados dos mais variados tipos para um mesmo identificador.

CAPTULO 3. REPRESENTAO DE DADOS


varivel e o que est guardado dentro da gaveta corresponde ao valor do mesmo.

32

3.4.3 Atribuio
Aps realizada a declarao de um identificador, possvel iniciar a manipulao
dos dados que esse identificador ir representar a partir da atribuio de valores ao
mesmo. Esse processo de atribuir ou alterar o valor dos dados de um identificador
chamado de atribuio e representado pelo smbolo quando estivermos trabalhando
com identificadores variveis, e pelo smbolo = quando estivermos trabalhando com
identificadores constantes 6.
A atribuio de valores a uma varivel feita da seguinte forma:
<identi cador da varivel> <valor do mesmo tipo da varivel>;
<identi cador da varivel> <operaes cujo resultado do mesmo tipo da varivel>;
Como pode ser visto acima, no lado esquerdo do operador ser colocado o
nome da varivel que ir receber o valor, e do lado direito o valor que ser armazenado
na mesma. A seguir so apresentados alguns exemplos de atribuies de valores
a variveis:
TipoVeiculo motocicleta ;
Aceleracao 15.52;
Massa 12.3;
Forca Massa * Aceleracao;
Usado F;

Uma varavel pode armazenar apenas um nico valor por vez, sendo que sempre
que um novo valor atribudo a varivel o valor anterior que estava armazenado na
mesma perdido. Por exemplo, consideremos o algoritmo 5 a seguir:
Algoritmo 5 Atribuies de valores a uma varivel.
1: var numero: inteiro
2: numero 222
3: numero 1000
4: numero 23
6No

caso dos identificadores constantes a atribuio feita no momento da definio do mesmo


(como apresentado na seo de declarao), sendo assim, os exemplos e explicaes que seguem so
restritas aos identificadores variveis que chamaremos a partir de agora apenas de variveis

CAPTULO 3. REPRESENTAO DE DADOS


33
Quando a execuo passa pela linha 1 reservado um espao na
memria do com
putador para armazenarmos valores do tipo inteiro, que acessaremos
atravs da va
rivel numero. importante ressaltar que inicialmente, a varivel
numero no contm
nenhum valor. Continuando a execuo, passamos pela linha 2,
onde o valor 222 atri
budo para a varivel numero. Nesse momento, a varivel numero
est armazenando o
valor 222. Ao passar pela linha 3 a varivel numero recebe por
atribuio o valor 1000,
sendo que o valor anterior (222) eliminado. Ao executarmos a
linha 4, o valor 23
atribudo para numero, e novamente o valor anterior que estava
armazenado (1000)
perdido para dar espao ao novo valor.

Captulo 4
Expresses
4.1 Expresses Aritmticas
As expresses aritmticas so aquelas em que os operadores so aritmticos e os
operandos so valores do tipo numrico (inteiro ou real). Esses valores numricos
podem
ser acessados por meio de identificadores constantes ou por meio de variveis.
As operaes aritmticas fundamentais so: adio, subtrao, multiplicao, diviso,
potenciao, diviso inteira e o resto (mdulo). A Tabela 4.1 apresenta os operadores
para cada uma dessas operaes aritmticas .
Operao Operador Exemplo
Adio + 2+3, 9+x
Subtrao - x-1, f(x)-2
Multiplicao 2*1, x*y, 2*g(x)
Diviso = 1/x, a/z, 2*f(x)
Potenciao 10**x, 2**3
Resto (Mdulo) mod 10 mod 2, 120 mod 10

Diviso Inteira div 10 div 2, 120 div 10


Tabela 4.1: Operadores aritmticos bsicos.

4.1.1 Precedncia Geral dos Operadores Aritmticos


Quando uma expresso aritmtica precisa ser avaliada num algoritmo, o analisador
processa a expresso dando prioridade para certos operadores. As sub-expresses
que contm estes operadores sero avaliadas primeiro e seu valor substitudo pela
sub-expresso inteira. A seguir a prxima sub-expresso na ordem avaliada e assim
34
CAPTULO 4. EXPRESSES
35
por diante at que toda a expresso corresponda a um s valor. A
Tabela 4.2 mos
tra a ordem de prioridade na avaliao dos operadores numa
expresso aritmtica,
chamada de precedncia de operadores.
Ordem Operao Smbolo
1a Parnteses ()
2a Potenciao **
3a Multiplicao, Diviso, Resto e Diviso Inteira *, /, mod, div
4a Adio, Subtrao +, Tabela 4.2: Precedncia Geral de Operadores Aritmticos
Conforme a tabela, as primeiras sub-expresses a serem resolvidas sero os parnteses
mais internos, depois as potncias, depois as multiplicaes e divises, e assim
por diante. A maneira de alterar a ordem de execuo das operaes numa expresso
aritmtica atravs de parnteses, sendo que eles so executados antes de tudo, a
partir dos mais internos para os mais externos.
Por exemplo, considere a seguinte expresso aritmtica:
(5+3)**2 * (5-2) + 8
8**2 * 3 + 8
64 * 3 + 8
192 + 8
200
A mesma avaliada pelo computador da seguinte maneira: primeiro os parnteses
mais internos so avaliados, depois a potenciao1, depois a multiplicao e depois
a soma. Se ignorssemos a precedncia dos operadores (ou dos parnteses) teramos
um resultado completamente diferente e consequentemente errado.
Vejamos agora um exemplo de uma expresso que contm apenas variveis (cujos
valores ainda no foram informados):
(x + y)=((2 y + (z - w)):
A expresso ser executada na seguinte ordem:
1. (x + y);
2. (z - w)
1grande

parte das linguagens de programao no possui um operador aritmtico especfico para


identificar a potenciao.

CAPTULO 4. EXPRESSES 36
3. 2 y
4. adio do resultado de 2. comaoaresultado de 3.
5. diviso do resultado de 1. com o resultado de 4.

4.1.2 Escrita de Operaes Aritmticas


Cada operao aritmtica em um algoritmo deve ser escrita em apenas uma nica

linha. Sendo assim, quando uma expresso matemtica usual escrita precismamos
utilizar parnteses para garantir que todas as operaes sejam executadas na ordem
adequada. Por exemplo, considere a expresso:
9 + p23 + 2
4+3
+ 23
cujo valor 25, deve ser escrita e resolvida pelo analisador da seguinte forma
((9+(23+2)**(1/2))/(4+3))+23
((9+ 25**(0.5) )/ 7 )+23
((9+ 5 )/ 7 )+23
( 14 / 7 )+23
2
+23
25
Ao desenvolvermos um algoritmo bastante comum deixarmos parnteses no
pareados nas expresses aritmticas, o que um erro difcil de se localizar
posteriormente. Um teste prtico para evitarmos esse tipo de contratempo consiste em
contar
na expresso quantos parnteses esquerdos e direitos existem, e conferir se eles esto
em mesmo nmero.

4.1.3 Excees em Expresses Aritmticas


Para a maioria das expresses aritmticas executadas em um algoritmo possvel
associar um valor definido, ou seja, o resultado da expresso proprimamente dito. Por
exemplo, a expresso 2 + 3, depois de avaliada, tem um valor definido igual a 5, e a
expresso 2 10 tem um valor definido de 1024. Entretanto, nem todas as expresses
aritmticas possuem um valor definido matematicamente, o caso de divises de nmeros pelo valor 0 (zero) ou de razes quadradas de nmeros negativos. A avaliao
CAPTULO 4. EXPRESSES
37
desse tipo de expresso deve ser sempre evitada a partir da verificao
dos valores
que faro parte das mesmas, ou seja, se um denominador nulo ou se o
nmero cuja
raiz ser extrada negativo, a operao no deve ser realizada

4.1.4 Simplificao de Expresses Aritmticas


importante ressaltar que expresses as aritmticas podem ser simplificadas, ou
escritas de maneira diferente se observarmos as igualdades existentes entre as
operaes.
Observe que a subtrao equivalente a soma de um nmero negativo; a diviso
equivalante a multiplicao pelo inverso do nmero, e a radiciao idntica a
potenciao com o inverso do expoente. Ou seja,
x - y = x + (-y)
xy
=x
1y
p nx = x n1:

4.2 Expresses Lgicas


As expresses lgicas so aquelas cujo valor s pode ser verdadeiro ou falso. So
compostas por operadores relacionais, operadores lgicos, e por identificadores

variveis
ou constantes do tipo lgico.As expresses lgicas tambm podem ser compostas por
resultados de expresses aritmticas.

4.2.1 Operadores Relacionais


Os operadores relacionais so aqueles que comparam dois valores do mesmo tipo. O
retorno da expresso relacional indica se o resultado da comparao foi verdadeiro
ou falso. Por exemplo, a expresso 2 < 3 uma expresso lgica vlida cujo valor
verdadeiro. Em contrapartida, a expresso 2 = 8 uma expresso lgica tambm
vlida, mas cujo valor falso. A tabela
CAPTULO 4. EXPRESSES 38
Operador Smbolo
Igual a =
Maior que >
Menor que <
Maior ou Igual a >=
Menor ou Igual a <=
Diferente de <>
Tabela 4.3: Operadores Relacionais

4.2.2 Operadores Lgicos


Os operadores lgicos so usados para representar situaes lgicas que no podem
ser representadas por operadores aritmticos. Tambm so chamados conectivos lgicos por unirem duas expresses simples numa composta. Podem ser operadores
binrios, que operam em duas sentenas ou expresses, ou unrio que opera numa
sentena s.
O primeiro deles o operador binrio de conjuno ou e lgico, representado por
^ ou AND. Quando duas expresses so unidas por este operador, a expresso resultante
s verdadeira se ambas expresses constituintes tambm so. Por exemplo
chove e venta s verdadeiro se as duas coisas forem verdadeiras, chove e tambm
venta. Se uma das sentenas no ocorrer, a sentena como um todo falsa.
O segundo operador o operador binrio de disjuno ou ou lgico, representado
por _ ou OR. Neste caso, se qualquer uma das expresses constituintes for verdadeira,
a expresso completa tambm ser. Por exemplo, vou praia ou vou ao campo
um sentena verdadeira caso qualquer uma das duas aes acontecer, ou ambas.
verdadeira, se eu for a praia e no ao campo, se eu for ao campo e no a praia e se eu
for a ambos.
Para o caso em que deve-se garantir que somente uma das sentenas acontea,
define-se o operador ou-exclusivo, cujo smbolo ou XOR. Como o nome diz,
semelhante ao operador ou com exclusividade na veracidade dos operandos, isto ,
somente um dos operandos pode ser verdadeiro. No exemplo anterior, se o concectivo
fosse o ou-exclusivo, a sentena composta s seria verdadeira se fosse praia ou ao
campo, mas no ambos.
O ltimo dos operadores o operador unrio no lgico, representado por :. Sua
funo simplesmente inverter valor lgico da expresso a qual se aplica.
CAPTULO 4. EXPRESSES
39
Exemplificando, considere a expresso
(2 < 3) ^ (5 > 1):
Tanto a parte (2 < 3) como (5 > 1) so verdadeiras, logo a expresso completa tambm
. A primeira parte verdadeira e a segunda verdadeira, logo toda a expresso
verdadeira. Na linguagem natural no damos tanta importncia para a diferena entre

e e ou. Se uma das partes fosse falsa, toda a expresso, ligadas por e, seria falsa. Outra
maneira de avaliar o valor de uma expresso lgica substituindo suas subexpresses
por V ou F, assim
(2 < 3) ^ (5 > 1)
V^V
V
O operador ou complementar ao operador e. Ele indica que a primeira expresso
pode ser verdadeira ou a segunda expresso pode ser verdadeira. Assim, desde que
um dos operandos seja verdadeiro, toda a expresso verdadeira. Considere a expresso
(5 < 4) _ (12 > 2)
F_V
V
Existe uma gama finita de possveis valores resultantes das operaes executadas com
operadores lgicos, pois estes s podem assumir V ou F . O resumo destas operaes
o que se chama tabela-verdade dos operadores lgicos e est apresentada na Tabela
4.4
PQ
P ^ Q P _ Q P Q :P
VV
VVFF
VF
FVVF
FV
FVVV
FF
FFFV
Tabela 4.4: Tabela verdade dos operadores lgicos. P e Q so sentenas lgicas
quaisquer.
CAPTULO 4. EXPRESSES
40
Ainda sobre os operadores relacionais, os operadores <>, >=
e <= so redundan
tes, pois poderiam ser substitudos por uma composio de
outros mais simples. Por
exemplo,
(x >= b) () (x > b) _ (x = b):
Da mesma forma,
(x <= b) () (x < b) _ (x = b):
Ainda,
(x <> b) () (x < b) _ (x > b):
Deste modo, somente os operadores >; <; = seriam suficientes para expressar todas as
expresses lgicas relacionais.

Captulo 5
Comandos de Entrada e Sada
5.1 Sada
Para imprimirmos algum tipo de informao na tela do computador utilizamos o
comando escreva seguido da informao que ser escrita. Dessa forma, se quisermos
imprimir uma mensagem como por exemplo Ola mundo!, isto seria feito com a
instruo
escreva ( Ol Mundo )
As aspas servem para delimitar uma sequncia de caracteres, uma constante, mas

no fazem parte do contedo a ser impresso. Para imprimir o valor de uma varivel,
basta colocar o seu identificador diretamente. O fragmento de cdigo
ttt 123
escreva (ttt)
imprime 123 na sada. Como a sequncia ttt no tem aspas, durante a execuo o
algoritmo considera ttt como sendo o identificador de uma varivel e o substitui pelo
seu contedo, neste caso 123. Se por outro lado, colocssemos
ttt 123
escreva ( ttt )
seria impresso ttt na sada. ttt essencialmente diferente de ttt . O primeiro
indica o identificador de uma varivel. O segundo, com aspas, simplesmente uma
sequncia de letras. Em resumo, as aspas previnem que o algoritmo interprete o
contedo da cadeia de caracteres.
possvel escrever valores de qualquer tipo existente, como valores reais, valores
lgicos, valores inteiros, do tipo sequncia de caracteres, resultados de expresses
aritmticas, resultados de expresses lgicas, resultados de expresses relacionais. A
41
CAPTULO 5. COMANDOS DE ENTRADA E SADA
42
instruo
escreva (8 < 9)
ir escrever o valor da expresso relacional 8 < 9, neste caso V. Se
quisssemos
escrever literalmente 8<9 sem interpretao, deveramos delimit-la
com aspas. O
cdigo
escreva ( 8<9 )
escreve 8<9 na tela. Diversos dados a serem escritos podem ser
informados numa
mesma instruo separando-os por vrgula.

5.2 Entrada
Da mesma maneira que necessitamos enviar informaes de dentro do algoritmo para
a saida padro (em geral a tela), tambm necessitamos receber informaes de fora do
algoritmo, a partir da entrada padro (em geral o teclado). Considere por exemplo
um sistema de locadora, sempre que alugamos um filme, o sistema ir necessitar de
algumas informaes como, por exemplo: o nosso cdigo de cliente (ou o nome) e o
nome da fita que estamos locando. Essas informaes so fornecidas pelo sistema a
partir de comandos de entrada de dados.
Para realizarmos a entrada de dados utilizaremos o comando leia. Ao utilizar o
comando leia o programador deve saber de antemo qual a varivel que ir armazenar
o valor que ser fornecido pelo usurio. No caso do exemplo anterior, os valores que
seriam fornecidos pelo usurio so referentes ao cdigo do cliente e ao nome da fita
que o mesmo est locando. Sendo assim, necessrio declarar variveis que possam
armazenar valores que sejam compatveis com as informaes solicitadas ao usurio.
Por exemplo, a informao do cdigo do cliente pode ser um valor do tipo inteiro,
ento necessrio que declaremos no algoritmo uma varivel desse tipo, seguindo
esse mesmo raciocnio, a informao do nome da fita pode ser uma informao do tipo
caractere, sendo tambm necessrio que declaremos no algoritmo uma outra varivel
para receber essa informao.

Aps declaradas as variveis que recebero os valores fornecidos pelo usurio podemos
utilizar o comando leia para receber esses valores. Para isso devemos escrever
leia seguido da varivel que receber os valores entre parnteses. No algoritmo 6
No algoritmo 6, quando o algoritmo passar pela linha 3, o usurio do algoritmo
(ou do sistema) dever digitar um valor do tipo inteiro, e ao teclar <ENTER> esse
valor ser armazenado na varivel codigo_cliente. Logo em seguida, na linha 4, o
CAPTULO 5. COMANDOS DE ENTRADA E SADA
43
Algoritmo 6 Locadora: exemplo de entrada de dados.
1: var codigo_cliente: inteiro
2: nome_ ta: caractere
3: leia(codigo_cliente)
4: leia(nome_ ta)

usurio dever digitar um valor do tipo caractere, e ao teclar <ENTER> esse valor
ser armazenado na varivel nome_ ta.
possvel avisarmos o usurio sobre qual tipo de informao o algoritmo est
precisando, para isso, utilizamos o comando de sada de dados escreva imediatamente
antes do leia que informa ao usurio o que deve entrar. Por exemplo, o algoritmo 7
informaria ao usurio o que digitar antes de executar o comando leia e esperar pela
entrada do usurio.
Algoritmo 7 Locadora 2: exemplo de aviso para entrada de dados.
1: var codigo_cliente: inteiro
2: nome_ ta: caractere
3: escreva( digite cdigo do cliente e tecle <ENTER> )
4: leia(codigo_cliente)
5: escreva( digite o nome da ta e tecle <ENTER> )
6: leia(nome_ ta)

Parte III
Estruturas de Controle
44

Captulo 6
Estruturas de Condio
Num processo geral de execuo de um algoritmo implementado em uma linguagem
de programao, a execuo comea na primeira linha e vai avanando sequencialmente
executando o cdigo linha aps linha at chegar no final. Entretanto, frequentemente
surge a necessidade de colocar instrues dentro de um programa que s sero
executadas caso alguma condio especfica acontea. Para esta finalidade a maioria
das linguagens possui estruturas de condio para realizar esta tarefa. Neste captulo
examinaremos o seu funcionamento e suas peculiaridades.
Nos captulos anteriores foram apresentados alguns conceitos bsicos sobre as
estruturas e comandos que so utilizados para construir um algoritmo simples. Como
visto, podemos solicitar valores de entrada aos usurios do sistema utilizando o
comando leia(), e podemos ainda enviar valores de sada do sistema por meio do
comando escreva(). Entretanto, as possibilidades de construo de algoritmos que temos
at o presente momento so bastante limitadas, pois ainda no estamos aptos a tomar
decises durante o tempo de execuo do algoritmo, ou at mesmo de classificar

determinados valores de variveis.


Por exemplo, considere que precisamos desenvolver um algoritmo que classifique
uma determinada pessoa entre maior de idade ou menor de idade. Para esse problema
sabemos que precisamos avaliar a idade da pessoa, e que se essa idade for maior
(ou igual) que 18 anos a pessoa considerada maior de idade. Neste caso, para um
intervalo de valores da idade o algoritmos executa um conjunto de aes e para outro
intervalo executa um outro conjunto de aes. Neste tipo de situao, onde um
determinado valor avaliado para a partir do resultado dessa avaliao executar alguma
ao, utilizamos as estruturas de condio.
45
CAPTULO 6. ESTRUTURAS DE CONDIO 46

6.1 Estrutura de Condio Simples: se-ento.


A estrutura de condio mais simples a se-entao, utilizada da seguinte forma:
se <expresso-lgica> ento:
<bloco de comandos>
m-se
A <expresso-lgica> uma expresso que dever retornar um valor de verdadeiro
(V) ou de falso (F), e caso o resultado dessa expresso for verdadeiro, ser executado
o bloco de comandos que est dentro da estrutura. Caso seja falso, a execuo do
programa ignora o bloco de comando e continua na linha seguinte estutura de
condio.
Alguns exemplos de expresses lgicas j foram vistos anteriormente, a seguir temos
mais alguns exemplos:
. 18 > 20, cujo resultado ser falso.
. 45 = 45, cujo resultado ser verdadeiro.
. mdia > 7 , cujo resultado depender do valor da varivel mdia. Por exemplo, se
mdia vale 5 o bloco no executado; se mdia for 15, o bloco ser executado.
O <bloco de comandos> uma sequncia de cdigo que ser executado somente
quando
o resultado da expresso lgica for verdadeiro. Por fim, a instruo m-se indica que a
estrutra se-entao chegou ao final, servido para delimitar o bloco de instrues.
Voltando ao nosso problema de classificar uma pessoa como maior de idade ou
menor de idade, podemos utilizar a estrutura de condio se-ento da seguinte maneira:
. Solicitamos ao usurio que digite a sua idade, e utilizamos o comando leia() para
armazenar o valor digitado na varivel idade.
. Depois de termos o valor da idade, avaliamos se esse valor maior ou igual a 18.
. Se o resultado dessa avaliao for verdadeiro escreveremos na tela a frase voc
maior de idade, como mostra o algoritmo 8.
CAPTULO 6. ESTRUTURAS DE CONDIO
47
Algoritmo 8 Condio: maior ou menor de idade.
1: var idade: inteiro
2: escreva ( digite a sua idade )
3: leia(idade)
4: se idade >= 18 ento
5: escreva ( voc maior de idade
6: m-se

6.2 Estrutura de Condio Composta: se-ento-seno


O algoritmo 8 resolve o nosso problema quando a pessoa maior de idade, porm no

nos d nenhum retorno para quando a mesma for menor de idade. Para contornar
esse tipo de situao, a estrutura de condio se-ento, oferece a possibilidade de
executarmos uma determinada ao ou comando se o resultado da expresso lgica for
verdadeiro e de executarmos uma ao diferente se o resultado da expresso lgica for
falso. Para essas situaes utilizado o comando seno, como mostrado abaixo.
se <expresso-lgica> ento:
<bloco de comandos verdade>
seno:
<bloco de comandos falsidade>
m-se
Figura 6.1: Estutura de um comando se-ento.
Na estrutura se-ento-seno, o bloco verdade executado se a expresso lgica
CAPTULO 6. ESTRUTURAS DE CONDIO
48
verdadeira e o bloco falsidade, que vem aps seno, executado se a
expresso lgica falsa. A Figura 6.1 mostra esquematicamente como funciona uma
estrutura
de condio se-ento. de modo geral. Quando o processamento do
algoritmo chega
numa estrutura se-ento a expresso lgica nela contida avaliada; se o
seu valor
verdadeiro (V) ento o bloco de comandos seguinte ao se, chamado
bloco-verdade,
executado. Caso o resultado da expresso lgica seja o bloco de
comandos posterior
ao comando seno, chamado de bloco-falso, executado. Se a estrutura
de condio
no possui uma clusula seno, ento no caso da expresso lgica ser
falsa, a execuo
do algoritmo continua na linha subsequente ao bloco se-ento.
O algoritmo 9 mostra como escrever que a pessoa maior de idade
quando tem 18
anos ou mais, ou que a pessoa menor de idade quando essa condio
no atendida.
Algoritmo 9 Condio: maior ou menor de idade com se-ento-seno.
1: var idade: inteiro
2: escreva ( digite a sua idade )
3: leia(idade)
4: se idade >= 18 ento
5: escreva ( voc maior de idade
6: seno
7: escreva ( voc menor de idade
8: m-se
9: escreva ( Boa Sorte )

)
)

Neste caso, a expresso lgica (idade>=18). Se for verdadeira ento o blocoverdade


(linha 5) ser executado; isto depende da varivel idade lida na linha 3. Caso
contrrio, o bloco-falso (linha 7) seria executado. A seguir, o processamento segue na
linha seguinte estrutura de condio, neste caso a linha 9 seria executada independente

do valor da varivel idade.


Expresses lgicas compostas em Estruturas de Condio Como vimos na seo 4.2,
possvel compor expresses lgicas utilizando operadores relacionais <; >; <>; =
; <=; >=, mas tambm possvel compor expresses lgicas utilizando os operadores
lgicos ^ (conjuno), _ (disjuno) e : (negao). Nesse sentido, a expresso lgica
que ser avaliada na estrutura de condio se-entao tambm pode ser formada por
uma expresso lgica composta.
Por exemplo, considere a situao de um determinado aluno em uma disciplina.
Sabe-se que para ser aprovado, necessrio que nota >= 7.0 e que frequencia > 75, ao
mesmo tempo, isto , uma conjuno lgica representada pelo operador e lgico (^).
CAPTULO 6. ESTRUTURAS DE CONDIO
49
O fragmento do algoritmo que avalia a situao est mostrado na
algoritmo 10. Neste
caso, para que a expresso lgica como um todo seja verdadeira,
necessrio que as
duas expresses lgicas que a compem tambm o sejam.
Algoritmo 10 Expresso lgica composta.
1: se nota >= 7 ^ frequencia > 0.75 ento
2: escreva
3: seno
4: escreva
5: m-se

( O aluno est aprovado )


( O aluno est reprovado )

6.3 Estruturas de Condio Encadeadas


Dentro de uma estrutura se-ento-seno perfeitamente possvel utilizarmos mais de
uma linha de comando, ou at mesmo outras estruturas se-ento-seno. Existem
situaes em que os caminhos para a tomada de uma deciso acabam formando uma
espcie de rvore com diversas ramificaes, onde cada caminho um conjunto de
aes. Nesses casos podemos recorrer utilizao de vrias estruturas se-ento-seno
embutidas umas dentro das outras, comumente chamadas de ninhos.
Algoritmo 11 Estrutura de condio composta.
se EL1 ento
se EL2 ento
BV2
seno
BF2
m-se
seno
se EL3 ento
BV3
seno
BF3
m-se
m-se
Nas estruturas de deciso encadeadas, uma estrutura de condio aninhada dentro de
outra, como bloco verdade ou falsidade. Neste caso, para que a estrutura de
condio mais interna seja avaliada, necessrio que uma determinada condio seja
CAPTULO 6. ESTRUTURAS DE CONDIO
50

satisfeita na estrutura de condio mais externa. Considere a


estrutura aninhada no al
goritmo 11, onde EL significa expresso lgica, BV bloco verdade
e BF bloco falsidade.
Para que BV2 seja executado necessrio que a EL1 juntamente
com EL2 sejam verda
deiras. Se EL1 for verdadeira mas EL2 for falsa, ento BF2 quem
ser executado. A
tabela 6.1, chamada tabela de deciso, mostra as diferentes
alternativas possveis para
este caso.
EL1 EL2 EL3
VV
VF
FV
FF

execuo
BV2
BF2
BV3
BF3

Tabela 6.1: Tabela de deciso para a estrutura de condio composta mostrada no


algoritmo 11.
Por exemplo, suponha que desejemos refinar um pouco mais o problema referente
s mdias dos alunos de uma dada disciplina. Sabemos que um aluno aprovado caso
apresente mdia maior ou igual a 7.0 e frequencia maior ou igual a 75%. Na verdade,
em uma situao real, se o aluno obtiver a frequncia minima exigida e uma mdia
entre 3 e 7, ainda teria direito a uma ltima avaliao de recuperao. Como faramos
para resolver o problema em questo utilizando apenas estruturas de condio
se-ento-seno? Poderamos comear avaliando a frequencia do aluno, e se a mesma
for menor que 75% o aluno j estaria reprovado, porm caso a frequencia respeite o
mnimo exigido, comeariamos a avaliar a mdia para saber se est aprovado, em
recuperao ou reprovado. No momento em que verificado que a frequencia menor
que 0.75 (75%) o aluno j est imediatamente reprovado, mas caso a frequencia seja
maior ou igual a esse valor, devemos continuar com o algoritmo para avaliar em que
situao que o aluno se encontra. Enfim, agora necessrio avaliar a mdia do mesmo,
verificando se est acima de 7.0 (aprovado), entre 3 e 7.0 (recuperao), ou abaixo de
3.0 (reprovado). Estes condicionais esto mostrados no algoritmo 12.

6.4 Estrutura de Condio caso seja


Uma outra alternativa para trabalhar com comandos condicionados a um determinado
valor a estrutura caso seja. Nessa estrutura o valor de uma determinada varivel
avaliado e caso esse valor coincida com determinado valor pr-estabelecido um deCAPTULO 6. ESTRUTURAS DE CONDIO
51
Algoritmo 12 Verifica aprovao de alunos.
1: var frequencia, media: real
2: escreva ( digite a media e a frequencia
3: leia(media, frequencia)
4: se frequencia >= 0.75 ento
5: se media >= 7 ento
6: escreva ( voce esta APROVADO )
7: seno

8: se media >= 3 ento


9: escreva ( voce esta em RECUPERACAO )
10: seno
11: escreva ( voce esta REPROVADO POR MEDIA
12: m-se
13: m-se
14: seno
15: escreva ( voce esta reprovado por FALTAS )
16: m-se

terminado comando executado. A estrutura de condio caso utilizada da forma


mostrada a seguir:
caso varivel seja:
<bloco de comandos>
m-se
Algoritmo 13 Estrutura caso.
caso varivel seja:
valor1:
bloco de comandos 1
valor2:
bloco de comandos 2
...
valorN:
bloco de comandos N
padro:
bloco de comandos padro
Da mesma maneira que a estrutura de condio se-ento possibilita que executemos
algum comando quando a expresso avaliada no verdadeira, a estrutura de
condio caso tambm nos oferece essa opo, chamada opo padro. O bloco de
comandos dentro da opo padro ser executado caso nenhuma dos casos fornecidos
CAPTULO 6. ESTRUTURAS DE CONDIO
52
seja contemplado. A sintaxe para utilizarmos essa opo mostrada
no exemplo do
algoritmo 14: a varivel n do tipo inteiro testada, e caso tenha
valor 1 escrito na
tela um, caso tenha valor 2 escrito na tela dois e caso no
tenha nenhum desses
valores ser escrito na tela outro valor.
Algoritmo 14 Exemplo de caso: mostra o numero.
var n: inteiro
escreva ( digite n )
leia(n)
caso n seja:
1:
escreva ( voc escolheu 1 )
2:
escreva ( voc escolheu 2 )
padro:
escreva ( outro valor )

Captulo 7
Estruturas de Repetio
Uma das principais caractersticas que consolidaram o sucesso na utilizao dos
computadores para a resoluo de problemas foi a sua capacidade de repetir o
processamento de um conjunto de operaes para grandes quantidades de dados.
Exemplos de
conjuntos de tarefas que repetimos diversas vezes dentro de uma situao especfica
podem ser observados largamente no nosso dia a dia.
As estruturas de repetio provm uma maneira de repetir um conjunto de
procedimentos at que determinado objetivo seja atingido, quando a repetio se
encerra.
Todas as estruturas de repetio tm em comum o fato de haver uma condio de
controle, expressa atravs de uma expresso lgica, que testada em cada ciclo para
determinar se a repetio prossegue ou no.
Por exemplo, consideremos que uma determinada loja de calados efetue uma
venda no credirio para um cliente que ainda no est registrado em seu sistema. Para
realizar essa venda, necessrio cadastrar o cliente, solicitando informaes bsicas
como: nome, endereo, CPF, RG, etc. Essas etapas para realizar o cadastro seguiro
sempre a mesma ordem para cada novo cliente que aparecer na loja. Caso precisssemos
desenvolver um sistema para efetuar os cadastros de clientes de uma loja, no
haveria lgica que programssemos novamente essas etapas para cada cliente novo,
bastaria que desenvolvssemos uma nica vez a seqncia de etapas e que a cada novo
cliente usssemos a seqncia previamente definida.
As estruturas de repetio so basicamente trs: enquanto-faa, faa-enquanto e
parafaa. A diferena bsica que enquanto-faa primeiro testa a condio para depois
realizar o bloco de comando, ao contrrio de faa-enquanto que primeiro executa o
bloco para depois realizar o teste. A estrutura para-faa tem embutida um mecanismo
de controle para determinar quando o lao dever ser terminado.
53
CAPTULO 7. ESTRUTURAS DE REPETIO 54

7.1 Teste no Incio: enquanto-faa.


No algoritmo 15 apresentado o formato bsico da estrutura de repetico enquantofaca.
Antes de entrar na estrutura de repetio, uma expresso lgica avaliada e
caso o resultado da mesma for verdadeiro, os comandos que esto dentro da estrutura
sero executados. Aps a execuo dos comandos, a expresso lgica novamente
avaliada. Caso o resultado da expresso lgica for falso, o algoritmo sai da estrutura
de repetio e segue para a prxima linha.
De maneira geral, o mecanismo que altera o valor da expresso lgica que controla
o lao est embutido dentro do bloco de comandos ou depende de alguma varivel
externa que ser fornecida em tempo de execuo.
A estrutura enquanto-faa usada principalmente quando no se sabe com antecedncia
a quantidade de repeties que precisam serrealizadas. Por exemplo, suponha
que estamos oferecendo ao usurio 3 opes de menu sendo que uma dessas opes
seria a de sair do programa. Caso desejemos que o usurio possa executar vrias vezes
as opes dispostas no menu, no temos como adivinhar quando o usurio ir optar
por sair do algoritmo, sendo assim, no podemos limitar a repetio um determinado
nmero de vezes.
Considere um problema mais especfico onde necessitamos fazer a leitura de vrios

nomes de pessoas e a cada nome que lido devemos escrever na tela a frase "O nome
digitado foi nome", onde nome a varivel. A princpio isso deve ser feito inmeras
vezes e quando o usurio digitar um nome igual a fim o algoritmo deve parar. Da
mesma maneira que no exemplo anterior no podemos definir quando o usurio ir
digitar fim, e no temos como precisar a quantidade de vezes que o algoritmo dever
repetir esse conjunto de aes.
Algoritmo 15 Estrutura de repetio enquanto-faa.
enquanto <expresso lgica> faa
<bloco de comandos>
m-enquanto

7.2 Teste no Fim: faa-enquanto


A estrutura faa-enquanto difere da estrutura enquanto-faa somente por executar o
bloco de comando antes de testar se a condio verdadeira, ou seja, o teste da condio realizado apenas ao final da estrutura. Assim, utilizando o faa-enquanto o bloco
CAPTULO 7. ESTRUTURAS DE REPETIO
55
de comandos ser sempre executado pelo menos uma vez, mesmo que a
expresso de
controle seja falsa. Seu formato mostrado no algoritmo 16.
Algoritmo 16 Estrutura de repetio faa-enquanto.
faa
<bloco de comandos>
enquanto <expresso lgica>

7.3 Repetio com Controle: faa-para


A estrutura para-faa composta de um mecanismo de controle que estabelece de
antemo quantas vezes o lao ser executado. A estrutura mostrada no algoritmo 17
e para ser utilizada precisa das informaes referentes aos valores de inicio, fim e
incremento. Nessa estrutura, uma determinada varivel assumir valores pertencentes ao
intervalo identificado pelos valores de inicio e fim, respeitando o incremento
informado. Por exemplo a expresso i de 0 ate 10 passo 2 significa que i assumir os
valores 0,2,4,6,8,10. Nesse caso, o o lao seria executado 5 vezes.
Algoritmo 17 Estrutura de repetio para-faa.
para varivel de inicio ate fim passo incremento faa
<bloco de comandos>
m-para
Algoritmo 18 Exemplo de estrutura de repetio.
var j: inteiro
para j de 1 ate 100 passo 1 faa
escreva ( no vou mais fazer baguna )
m-para

7.4 Contadores e Acumuladores


Em situaes onde necessrio realizarmos contagens de ocorrncias, ou somatrios
e produtrios de valores dentro de um conjunto de dados, devemos utilizar variveis
especficas para fazer o armazenamento dos resultados. Chamamos de contadores
para as variveis que realizam a contagem de ocorrncias de um determinado valor
CAPTULO 7. ESTRUTURAS DE REPETIO
56
(ou situao) e de acumuladores para as variveis responsveis por
armazenar os re

sultados de somatrios e produtrios de valores.

7.4.1 Contadores
Os contadores so normalmente inicializados com valor 0 (zero) e incrementados em
1 (um) a cada vez que uma nova ocorrncia (ou situao) observada.
Algoritmo 19 Contadores 1
var contador: inteiro
contador 0
...
contador contador + 1
Por exemplo, considere que dentro de um conjunto de informaes referentes a
idades e sexos de 50 pessoas, desejemos saber quantas dessas pessoas so do sexo
feminino e possuem 18 anos ou mais. Para isso, necessrio inserir um contador
para armazenar a quantidade de ocorrncias da condio definida no enunciado. Esse
contador deve ser inicializado com 0 e incrementado em 1 sempre que o sexo de uma
dada pessoa feminino e sua idade maior ou igual a 18, como no Algoritmo 20.
Algoritmo 20 Contadores 2
var nome: cadeia
var idade, i, n: inteiro
n 0 {a varivel n ser o contador que armazenar o nmero de pessoas que pertencem
ao conjunto solicitado no enunciado, ela inicializada com um valor neutro, nesse caso
0}
para i de 0 ate 50 passo 1 faa
escreva ( digite sexo ('M' ou 'F') e idade da pessoa )
leia(sexo, idade)
se sexo = M e idade >= 18 ento
n n+1 {aumenta em 1 a quantidade de pessoas que pertencem ao conjunto}
m-se
m-para
escreva A quantidade de pessoas do sexo feminino com 18 anos ou mais : , n

7.4.2 Acumuladores
Como comentado anteriormente, os acumuladores so utilizados em dois tipos de
situaes, para a realizao de somatrios e para a realizao de produtrios. No caso
CAPTULO 7. ESTRUTURAS DE REPETIO
57
dos somatrios, o acumulador normalmente inicializado com o valor 0 e
incremen
tado no valor de um outro termo qualquer, dependendo do problema em questo.
Algoritmo 21 Acumuladores 1
var acumulador: inteiro
acumulador 0
...
acumulador acumulador + termo
Considere que no problema anterior, ao invs de desejarmos calcular a
quantidade
de pessoas que so do sexo feminino e possuem 18 anos, desejemos calcular a
soma
das idades das pessoas que esto nessa situao. Nesse caso, precisamos inserir
no

algoritmo um acumulador, que deve ser inicializado em 0, e incrementado no


valor da
idade da pessoa em queto. Veja no algoritmo 22.
Algoritmo 22 Acumuladores 2
var nome: cadeia
var idade, i, soma: inteiro
soma 0 {a varivel soma ir armazenar o somatrio das idades das pessoas que
per
tencem ao conjunto solicitado no enunciado, ela inicializada com um valor
neutro, nesse
caso 0}
para i de 0 ate 50 passo 1 faa
escreva ( digite sexo ('M' ou 'F') e idade da pessoa )
leia(sexo, idade)
se sexo = M e idade >= 18 ento
soma soma + idade {aumenta o somatrio no valor da idade da pessoa em
questo}
m-se
m-para
escreva ( A soma das idades das pessoas do sexo feminino com 18 anos ou mais : ,
soma)
Um algoritmo para calcular a mdia das idades das pessoas do sexo feminino com
18 anos ou mais, pode ser facilmente desenvolvido utilizando um contador para
armazenar a quantidade de pessoas que pertencem a esse conjunto e um acumulador
para armazenar a soma das idades dessas pessoas.
No caso de utilizarmos acumuladores para armazenar produtrios necessrio a
inicializao do mesmo com o valor neutro da multiplicao (o nmero 1). A cada
iterao o acumulador ento multiplicado por um outro termo qualquer, dependendo
do problema em questo.
CAPTULO 7. ESTRUTURAS DE REPETIO 58
Algoritmo 23 Acumuladores 3
var acumulador: inteiro
acumulador 1
...
acumulador acumulador termo
Por exemplo, para calcular o fatorial de um determinado nmero, devemos escrever o
Algoritmo 24.
Algoritmo 24 Acumuladores 4
var n, i, fat: inteiro
escreva ( digite o nmero inteiro para calcular o fatorial )
leia(n)
fat 1 {a varivel fat ir armazenar o fatorial da varivel n, ela deve ser inicializada com
um valor neutro para a multiplicao, nesse caso 1}
para i de 1 ate n passo 1 faa
fat fat i {a cada iterao o valor do fatorial acumulado em fat e multiplicado
pelo contador i}
m-para
escreva ( O fatorial de n igual a , fat)

Parte IV
Estrutura de Dados e Modularizao
59

Captulo 8
Variveis Compostas Homogneas
8.1 Vetores Unidimensionais
Vetores so varaveis compostas que podem armazenar um conjunto de valores. Todos
estes valores so referenciados atravs do nome do vetor (o mesmo para todo o
conjunto de valores) e de um ndice (distinto para cada valor.) As variveis vetoriais so
anlogas aos vetores usados na matemtica e na fsica, em que um vetor, por exemplo
~x = (x1; x2; x3);
constitudo por trs valores x1, x2 e x3; neste caso o nome do vetor x e os ndices so
1, 2 e 3. Ao contrrio de um escalar que possui s um valor, x uma varivel composta
por 3 valores. As variveis vetoriais na prtica so constitudas por um grande nmero
de valores.
As valores armazenados numa varivel vetorial so todos do mesmo tipo, por isso
os vetores so chamados de variveis compostas homogneas.
Os vetores so imprescindveis quando se quer armazenar diversos valores de um
mesmo tipo e referenci-los com o mesmo nome. Por exemplo, para armazenar as
idades de vrios alunos de uma turma, poderia-se criar um vetor idade com 8 posies;
cada ndice de 0 a 7 corresponderia a um funcionrio. A Figura 8.1 ilustra a varivel
idade, os respectivos valores armazenados (na ordem, 23, 22, 18, 34, 23, 21, 25, 39) e os
ndices de cada elemento.
Os vetores so declarados anexando-se ao nome da varivel um colchete com o
nmero de posies que o vetor porer conter:
int idade[100].
60
CAPTULO 8. VARIVEIS COMPOSTAS HOMOGNEAS 61
Figura 8.1: Vetor idade[8] com seus valores e ndices.
Neste caso ser criada uma varivel idade[ ] que conter 8 posies ndices 0 a 7
onde podero ser armazenados nmeros inteiros. Os vetores podem ser de qualquer
tipo alfanumrico.
Cada uma das posies do vetor so referenciadas atravs do nome do vetor seguido do
respecivo ndice colocado entre colchetes. O Algoritmo 25 mostra como
definir todos os valores da varivel idade[ ].
Algoritmo 25 Definindo os valores da varivel idade.
1: var idade[8] int
2: idade[0] = 23
3: idade[1] = 22
4: idade[2] = 18
5: idade[3] = 34
6: idade[4] = 23
7: idade[5] = 21
8: idade[6] = 25
9: idade[7] = 39

importante notar que uma varivel de N posies possui ndices de 0 a N -1. Na


varivel idade de 8 posies usam-se os ndices 0 a 7; qualquer ndice fora desta faixa
resulta em erro.
A grade vantagem de se usar ndices dentro do nome da varivel a possibilidade
de referenciar um dado elemento do vetor atravs de um ndice varivel. Por exemplo,
para imprimir todos os valores da varivel idade, ao invs de colocar escreva idade[0],
escreva idade[1], : : :, muito mais simples colocar a instruo que se repete (no caso
escreva) dentro de uma estrutura de repetio, como mostra o Algoritmo 26.
CAPTULO 8. VARIVEIS COMPOSTAS HOMOGNEAS
62
Algoritmo 26 Imprimindo todos os valores da varivel idade[].
// valores de idade[] j de nidos
para i de 0 ate 7 passo 1 faa
escreva idade[i]
m-para
EXEMPLOS
exemplo: imprimindo os valores na ordem inversa.
exemplo: mdia de 100 valores.

8.2 Vetores Bidimensionais


exemplo: jogo de damas.
exemplo: somando matrizes.

8.3 Vetores Multidimensionais


exemplo: arestas de um cubo.

Captulo 9
Mdulos
9.1 Modularizao
9.2 Retorno de Valores
9.3 Escopo de Variveis
9.4 Passagem de Parmetros
9.4.1 Por Valor
9.4.2 Por Referncia
63

Referncias Bibliogrficas
[1] Marco Medina, Cristina Fertig, ALGORITMOS E PROGRAMAO: TEORIA E PRTICA, So Paulo, Novatec Editora, 2005.
[2] Marco Antnio Furlan de Souza et al., ALGORITMOS E LGICA DE PROGRAMAO, So Paulo, Thomson Learning, 2006.
[3] Wikipedia, http://www.wikipedia.org, visitado em 23/abril/2007
[4] Andr Luiz Villar Forbellone, Henri Frederico Eberspcher, LGICA DE
PROGRAMAO, So Paulo, Pearson Prentice Hall, 2005
[5] lvaro Borges de Oliveira, Isaias Camilo Boratti, INTRODUO PROGRAMAO DE ALGORITMOS, Florianpolis, Bookstore, 1999.
[6] Irenice de Ftima Carboni, LGICA DE PROGRAMAO, So Paulo, Thomson
Learning, 2003.

64

Parte V
Apndice
65

Apndice A
Exerccios
A.1 Algoritmos
1. Diferencie um algoritmo de um programa.
2. Crie algortimos simplificados para executar cada uma das tarefas a seguir:
. Tomar um banho
. Fazer um bolo
. Tirar uma fotografia
. Ligar um automvel
. Cadastrar de um cliente
. Tricotar uma blusa
. Ler uma revista
3. Represente 2 dos algoritmos acima na forma de um fluxograma.
4. Pense em um problema existente na sua rotina diria (particular ou no trabalho)
e monte um algoritmo de acordo com os passos que voc normalmente utiliza
para resolv-lo.

A.1.1 Para os problemas a seguir, defina:


. Quais so os valores de entrada
. Qual ser o processamento do algoritmo
66
APNDICE A. EXERCCIOS
. Quais so os valores de sada
. Quais so os valores que variam e quais permanecem
constantes (fixos) du
rante a execuo do algoritmo

67

1. Calcular a rea de um tringulo dada a frmula A = (b h)=2.


2. Calcular a quantidade de azulejos que so necessrios para cobrir uma determinada
parede.
3. Calcular a mdia do peso de uma famlia de 5 pessoas.
4. Calcular a rea de uma circunferncia dada a frmula A = ( r2)=2.

A.2 Representao de Dados


1. Identifique quais os tipos que as seguintes variveis teriam em um algoritmo
qualquer:
. nomeDeRua
. numeroDeCasa
. idadeDeUmaPessoa
. pesoDeUmaPessoa
. valorDoSalario
. quantidadeDePessoasEmFila

. senhaCorreta
2. Identifique quais os tipos dos valores listados a seguir:
. F
.V
. FALSO
APNDICE A. EXERCCIOS
. 5.84
. A*R*&
. Amarelo
. 2008
. 04
. abril
3. Verifique entre os itens abaixo quais no poderiam ser
utilizados como nomes de
variveis. Justifique o motivo.
. 1x
. fone#
. $salario
.x
. a-6
. 2/3
. livro
. tipo_de_talher
. tipo de talher
. automvel
. talher
. e-mail
. e_mail
. email
. nome_#
APNDICE A. EXERCCIOS
. time de futebol
. time_de_futebol
. 01salario
. nome01
. idade
. salario

68

69

A.3 Expresses
1. No final da execuo do fragmento de cdigo abaixo, qual o valor de n1, n2 e n3?
var n1,n2: inteiro
n1 10
n2 30
n3 n1
n1 n2

n2 n3
2. Quais os valores de v1, v2 e v3 no final da execuo do cdigo abaixo?
var v1,v2,v3: logico
v1 8 > 9
v2 8 < 9
v3 v1 _ v2
v1 v3 ^ v2
3. Que problema existe no algoritmo abaixo?
var num1: inteiro
num1 (20 > 9)
4. O que ser impresso para cada uma das instrues abaixo?
1. escreva( numero= , 78)
APNDICE A. EXERCCIOS 70
2. escreva ( veja esse resultado )
escreva (78 + 2)
3. escreva (76 > 8 , 8*2, trs )
4. escreva( ola , ola de novo , 3<9)
5. escreva( verdadeiro, 8 = 8 )
6. escreva(8+8, 12<8, bla bla )
7. n1 4
n2 10
escreva(n1, n2)
8. n1 4
n2 10
escreva(n1+n2)
9. n1 4
n2 10
escreva( n1+n2 )
10. n1 4
n2 10
escreva( n1+n2 )
11. n1 4
n2 10
escreva(n1>n2)
12. n1 4
n2 10
Escreva( n1 + n2 = , n1 + n2)
13. n1 4
n2 10
Escreva(n1, + , n2, = , n1 + n2)
APNDICE A. EXERCCIOS 71

A.4 Entrada e Sada


1. Desenvolva os algoritmos para os problemas apresentados na seo A.1.1
2. Elabore um algoritmo que leia um nmero inteiro e imprima seus sucessor e seu
antecessor. Por exemplo, suponha que o usurio digite o nmero 7, o algoritmo
dever imprimir (escrever) na tela o seu antecessor (nmero 6) e o seu sucessor
(o nmero 8).
Algoritmo 27 Antecessor-sucessor
var n, ant, suc: inteiro

escreva ( digite um numero )


leia(n)
ant n - 1
suc n + 1
escreva ( antecessor = , ant)
escreva ( sucessor = , suc)
3. Elabore um algoritmo que leia uma temperatura em graus centgrados e apresentea
convertida em graus Fahrenheit. A frmula de converso :
F=9
5
C + 32
onde F a temperatura em Fahrenheit e C a temperatura em Centgrados.
Algoritmo 28 Conversor
var f, c: real
escreva ( digite graus centgrados )
leia(c)
f ((9=5) c) + 32
escreva ( Fahrenheit = , f)
4. Para vrios tributos, a base de clculo o salrio mnimo. Elabore um algoritmo
que leia o valor do salrio mnimo e o valor do salrio de uma pessoa. Calcular
e imprimir quantos salrios mnimos essa pessoa ganha.
5. Elabore um algoritmo que leia o peso de uma pessoa em gramas, calcule e imprima.
APNDICE A. EXERCCIOS
72
Algoritmo 29 Numero-de-salarios
var minimo, salario, quantidade: real
escreva ( digite o valor do salario minimo e o valor do seu salario )
leia (minimo, salario)
quantidade salario=minimo
escreva ( Voce recebe , quantidade, salarios minimos )
. O novo peso da pessoa (em gramas) considerando que a pessoa engordou
12% em relao ao seu peso inicial.
Algoritmo 30 Novo-peso
var pesoatual, novopeso, pesoextra: real
escreva ( digite o seu peso em gramas )
leia (pesoatual)
pesoextra pesoatual 0:12
novopeso pesoatual + pesoextra
escreva ( Aps engordar 12%, seu novo peso , novopeso)
6. Faa um algoritmo que leia um valor inteiro positivo e menor que 1000, armazeneo
em uma varivel inteira e determine a soma dos dgitos que formam o valor.
Exemplo: o valor 453 tem soma dos dgitos igual a 12 (4 + 5 + 3) .
7. Faa um algoritmo que leia dois nmeros inteiros positivos com 5 dgitos cada e
gere um terceiro nmero inteiro com 10 dgitos, sendo que estes sejam os dgitos
dos dois primeiros intercalados.
Exemplo : Numero_1 = 12345 Numero_2 = 67890 Numero_3 = 1627384950
8. Desenvolva um algoritmo que solicite ao usurio duas variveis de valor inteiro
(variveis A e B) e que ao final do processamento a varivel A contenha o valor
da varivel B e a varivel B contenha o valor da varivel A.

A.5 Estruturas de Condio

A.5.1 Estrutura se-ento-seno


1. Elabore um algoritmo que leia um nmero e imprima uma das mensagens:
mltiplo de 3, ou, no mltiplo de 3.
APNDICE A. EXERCCIOS
73
2. Desenvolva um algoritmo que classifique um nmero de entrada fornecido
pelo
usurio como par ou mpar.
3. Elabore um algoritmo que leia um nmero, e se ele for maior do que 20,
imprimir
a metade desse nmero.
4. Elabore um algoritmo que leia dois nmeros inteiros e efetue a adio; caso
o
resultado seja maior que 10, imprima-o.
5. Elabore um algoritmo que leia um nmero e, se ele for positivo, imprima a
me
tade desse nmero, caso contrrio imprima o nmero ao quadrado.
6. O sistema de avaliao de determinada disciplina composto por trs
provas. A
primeira prova tem peso 2, a segunda tem peso 3 e a terceira tem peso 5. Con
siderando que a mdia para aprovao 7.0, Faa um algoritmo para calcular
a
mdia final de um aluno desta disciplina e dizer se o aluno foi aprovado ou
no.
7. Elabore um algoritmo que leia dois nmeros e responda se a diviso do
primeiro
pelo segundo exata (o resto da diviso deve ser igual a 0). Se for, o
algoritmo
deve imprimir a mensagem A diviso de (1o numero) por (2o nmero)
exata.
8. Elabore um algoritmo que leia o nome e o peso (em real) de duas pessoas e
im
prima os dados da pessoa mais pesada.
9. Elabore um algoritmo que leia um nmero e informe se ele ou no
divisvel por
5.
10. Elabore um algoritmo que indique se um nmero digitado est
compreendido
entre 20 e 90, ou no.
11. 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.
12. Segundo uma tabela mdica, o peso ideal est relacionado com a altura e
o sexo.
Elabore um algoritmo que leia a altura e o sexo de uma pessoa, calcule e
imprima

seu peso ideal, utilizando as seguintes frmulas.


APNDICE A. EXERCCIOS
Para homens (72.7*altura)58
Para mulheres (62.1*altura)44.7
13. 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 men
sagem Voc no tem acesso ao sistema.

74

A.5.2 Estrutura se-ento-seno aninhada


1. Elabore um algoritmo que leia dois nmeros e imprima qual maior, qual
menor, ou se so iguais.
2. Elabore um algoritmo que leia um nmero e informe se ele divisvel por 10,
por 5, por 2, ou se no divisvel por nenhum deles.
3. Uma empresa qualquer decidiu conceder um aumento de salrios a seus funcionrios
de acordo com a tabela a seguir:
Salrio Atual Aumento
0 400,00 15%
400,01 700,00 12%
700,01 1.000,00 10%
1.000,01 1.800,00 7%
1.800,01 2.500,00 4%
acima de 2.500,00 Sem aumento
Escrever um algoritmo que leia o salrio atual de um funcionrio e escreva o
percentual de seu aumento e o valor do salrio corrigido a partir desse aumento.
Utilize a estrutura de condio se-ento aninhadas.
4. Considerando o sistema de avaliao das mdias colocado a seguir, escreva um
algoritmo que avalie a mdia de um aluno, o seu conceito correspondente e escreva a
mensagem: APROVADO se o conceito for A, B, ou C e REPROVADO
se o conceito for D ou E. Utilize a estrutura de condio se-entao-senao aninhadas.
APNDICE A. EXERCCIOS 75
Mdia Conceito
>= 9.0
A
>= 7.5 e <
B
9.0
>= 6.0 e <
C
7.5
>= 4.0 e <
D
6.0
< 4.0
E
5. Elabore um algoritmo que leia o nome, nota da avaliao 1 e nota da avaliao 2
de um aluno. Ao final, imprima o nome do aluno, suas notas, a mdia aritmtica
e uma das mensagens: Aprovado, Reprovado ou em Prova Final (a mdia 7,0
para aprovao, menor que 3,0 para reprovao e as demais em prova final).
6. Elabore um algoritmo que leia o salrio de uma pessoa e imprima o desconto

do INSS segundo a tabela a seguir utilizando a estrutura de condio se-ento


aninhadas:
Faixa de salrio Desconto
Menor ou igual a R$ 600,00 Isento
Maior que R$ 600,00 e menor ou igual a R$ 1200,00 20%
Maior que R$ 1200,00 e menor ou igual a R$ 2000,00 25%
Maior que R$ 2000,00 30%
7. Sabe-se que a direo de uma determinada escolinha faz a distribuio de seus
alunos de acordo com as idades dos mesmos. Dessa forma, os alunos so distribudos
nas seguintes turmas de acordo com a classificao a seguir:
TURMA Faixa de Idade
TURMA A de 4 a 5 anos
TURMA B de 6 a 8 anos
TURMA C de 9 a 10 anos
SEM TURMAS abaixo de 4 anos, acima de 10 anos
Desenvolva um algoritmo que leia a idade de uma nica criana e informe em
qual turma a mesma ir ter aulas. O algoritmo deve se preocupar em responder
para o usurio que a escolinha no possui turmas para a criana caso a mesma
tenha menos que 4 anos ou mais que 10 anos.
8. Numa loja de eletrodomsticos, as compras tm um preo vista, ou acrscimo
de 10 % para pagamentos em 2 vezes, ou ainda, acrscimo de 20% para pagaAPNDICE A. EXERCCIOS
76
mento em 3 vezes. O programa deve pedir para o usurio entrar com o
valor da
compra a vista e a opo de compra. O programa deve exibir qual o valor
final a
ser pago.
9. Faa um programa para calcular a conta final de um hspede de um
hotel fictcio,
considerando que:
. Devem ser lidos o nome do hspede, o tipo do apartamento utilizado (A,
B,
C ou D), o nmero de dirias utilizadas pelo hspede e o valor do
consumo
interno do hspede;
. O valor da diria determinado pela seguinte tabela:
TIPO DO APTO VALOR DA DIRIA (R$)
A 150.00
B 100.00
C 75.00
D 150.00
. O valor total das dirias calculado pela multiplicao do nmero de dirias utilizadas pelo valor da diria;
. O subtotal calculado pela soma do valor total das dirias e o valor do
consumo interno;
. O valor da taxa de servio equivale a 10% do subtotal;
. O total geral resulta da soma do subtotal com a taxa de servio.
Escreva a conta final contendo: o nome do hspede, o tipo do apartamento, o
nmero de dirias utilizadas, o valor unitrio da diria, o valor total das dirias,

o valor do consumo interno, o subtotal, o valor da taxa de servio e o total geral.


10. Construa a tabela de deciso (veja Tabela 6.1) para o algoritmo 31 abaixo, conforme
os possveis valores de q1, q2, q3, especificando o que ser impresso em
cada caso ao final da execuo do algoritmo.
11. Construir um algoritmo que tome como entrada trs valores e os imprima em
ordem crescente.
12. Elabore um algoritmo para ler trs valores e verificar se eles podem ser os
comprimentos dos lados de um tringulo, e se forem dizer o tipo de tringulo. Para
APNDICE A. EXERCCIOS 77
Algoritmo 31 Problema 20
var q1, q2, q3: logico
escreva A
se (q1) ento
escreva B
escreva C
m-se
se (q2) ento
escreva D
m-se
escreva E
se (q3) ento
escreva F
seno
escreva G
m-se
escreva H
ser um tringulo necessrio que qualquer um dos lados do mesmo seja menor
que a soma dos outros dois lados, (A < B+C), (B < A+C) e (C < A+B). Utilize
a estrutura de condio se-entao aninhadas. Equiltero aquele que tem os trs
lados iguais (A = B = C.) Issceles aquele que tem dois lados iguais (A = B)
ou (A = C) ou (B = C). Escaleno aquele que tem todos os lados diferentes
(A <> B <> C)

A.5.3 Estrutura caso seja


1. 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.
2. 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.
APNDICE A. EXERCCIOS
78

A.6

Estruturas de R

A.6.1

Utilizando somen

1. Elabore um algoritmo que imprima todos os nmeros de 1 at 100.


2. Elabore um algoritmo que imprima todos os nmeros de 100 at 1.
3. Elabore um algoritmo que imprima todos os nmeros de 250 a 500.
4. Elabore um algoritmo que leia um nmero de entrada que indicar a quantidade de

nmeros a serem lidos. Em seguida, leia n nmeros (conforme o valor


informado anteriormente) e imprima o triplo de cada um.

A.6.2 Utilizando a estrutura de condio se-ento-seno dentro da


estrutura de repetio para-faa
1. Elabore um algoritmo que leia nome, idade e sexo de 20 pessoas. Imprimir o
nome, se a pessoa for do sexo masculino, e tiver mais de 21 anos.
2. Elabore um algoritmo que imprima todos os nmeros pares de 1 at 100.

A.6.3 Calculando quantidades de ocorrncias, somatrios e


produtos
com a estrutura para-faa
1. Elabore um algoritmo que imprima todos os nmeros de 100 a 200, e ao final a
soma deles.
2. Elabore um algoritmo que leia um nmero e imprima todos os nmeros de 1 at
o nmero lido, e tambm o seu produto. Exemplo:
Nmero: 3 Sada: 1 2 3 Produto: 6
3. Construir um algoritmo que calcule o fatorial de um nmero.
4. Construir um algoritmo que leia dois nmeros (BASE e EXPOENTE) e retorne
como resultado a POTENCIA do clculo da BASE elevado ao EXPOENTE.
Ex: para a BASE = 2 e EXPOENTE = 4, POTENCIA = 24 = 16
5. Elabore um algoritmo que imprima a tabuada de um nmero que ser informado
pelo usurio.
APNDICE A. EXERCCIOS
79
6. Elabore um algoritmo que leia 30 nmeros, e imprima
quantos nmeros maiores
que 30 foram digitados.
7. Elabore um algoritmo que leia um nmero e imprima a soma
dos nmeros ml
tiplos de 5 no intervalo entre 1 e o nmero informado. Suponha
que o nmero
lido ser maior que zero.
8. Elabore um algoritmo que leia 20 nmeros, e ao final,
imprima a mdia desses
nmeros.
9. Elabore um algoritmo que leia 200 nmeros, e imprima
quantos so pares e quan
tos so mpares.
10. Um ms antes das eleies municipais, um determinado
partido poltico enco
mendou uma pesquisa de opinio sobre as intenes de votos
dos eleitores. Fo
ram entrevistas 50 pessoas que indicaram suas intenes de
acordo com as se
guintes opes: (A) candidato A, (B) candidato B, (C) indeciso.
Desenvolva um
algoritmo que faa a leitura das intenes de votos dessas 50
pessoas e que in
forme ao final a porcentagem de intenes para cada uma das
opes existentes

(candidatos A e B, e indecisos).

A.6.4 Localizando valores dentro de um conjunto com a estrutura


para-faa
1. Elabore um algoritmo que leia um nmero de entrada que indicar a quantidade de
nmeros a serem lidos. Em seguida, leia n nmeros (conforme o valor
informado anteriormente) e, ao final imprima o maior nmero digitado.
2. Elabore um algoritmo que leia um nmero de entrada que indicar a quantidade de
nmeros a serem lidos. Em seguida, leia n nmeros (conforme o valor
informado anteriormente) e, ao final imprima o menor nmero digitado.
3. Elabore um algoritmo que leia um nmero de entrada que indicar a quantidade
de nmeros a serem lidos. Em seguida, leia n nmeros (conforme o valor informado
anteriormente) e, ao final imprima o maior, menor, e a mdia dos nmeros
digitados.
APNDICE A. EXERCCIOS 80

A.6.5 Usando estrutura de repetio para-faa aninhada


1. Desenvolva um algoritmo que calcule as tabuadas dos nmeros divisveis por 2
que encontram-se no intervalo entre 1 e 10.

A.6.6 Estruturas de repetio (enquanto-faa e faa-enquanto)


1. Desenvolva um algoritmo que realize o sorteio de um nmero inteiro pertencente ao
intervalo de 1 a 100, e que solicite ao usurio qual o valor que foi sorteado. O algoritmo
deve informar se o valor que o usurio digitou maior, menor
ou igual ao valor sorteado. O algoritmo deve parar quando o usurio acertar o
valor sorteado e deve informar ao final a quantidade de tentativas que o usurio
utilizou para acertar o nmero. Considere a existncia de um comando chamado
SORTEIO que retorna um valor aleatrio de 1 at um nmero informado da seguinte
forma:
Algoritmo 32 Adivinhacao
var sorteado: inteiro
sorteado SORT EIO(100) {o nmero 100 indica que o sorteio ser de 1 a 100}
2. Uma determinada empresa fez uma pesquisa de mercado para saber se as pessoas
gostaram ou no de um novo produto que foi lanado. Para cada pessoa entrevistada
foram coletados os seguintes dados: Sexo (M ou F) e Resposta (Gostou
ou No Gostou). Sabendo-se que foram entrevistados N pessoas, faa um programa que
fornea:
. Nmero de pessoas que gostaram do produto
. Numero de pessoas que no gostaram do produto
. Percentagem de pessoas do sexo masculino que no gostaram do produto
. Informao dizendo em que sexo o produto teve uma melhor aceitao.

A.6.7 Sries
1. Desenvolva um algoritmo que calcule o valor de a partir da seguinte expresso
matemtica:
=4
nX k
=0

(-1)k( 1
(2k + 1))
APNDICE A. EXERCCIOS

81

onde n deve ser informado pelo usurio e corresponde ao grau


de preciso no
clculo do valor de
Algoritmo 33 Calculo do pi
var k, n: inteiro
var pi: real
escreva ( digite n )
leia(n)
pi 0
para k de 0 ate n passo 1 faa
se k mod 2 = 0 ento
pi pi + 1=(2 k + 1)
seno
pi pi - 1=(2 k + 1)
m-se
m-para
pi 4 pi
escreva ( O valor de pi , pi)
2. Resolva o exerccio anterior sem a utilizao da estrutura de condio se-entoseno
3. Desenvolva um algoritmo para calcular e imprimir o valor de S na expresso a
seguir:
S=1
1
32
+
53
74
+ ::: 99
50
4. Desenvolva um algoritmo que calcule o valor de S para um determinado valor
de n informado pelo usurio a partir da seguinte expresso:
Sn = 1
2
+
23
+
34
+ ::: +
n
n+1
5. Desenvolva um algoritmo capaz de calcular o resultado da seguinte expresso
aritmtica, onde o valor de n informado pelo usurio:
Sn = 11 + 22 + 33 + ::: + nn
6. Desenvolva um algoritmo que calcule o valor de X que dado por:
Xn
=n+

n-1
2
+
n-2
3
+ ::: +
1n
APNDICE A. EXERCCIOS
7. Elaborar um programa que utilize uma subrotina para calcular
a serie de fibo
nacci de N termos. A srie de Fibonacci formada pela
sequncia : 1, 2, 3, 5,
8, 13, 21, 34, ..., etc. Esta srie caracteriza-se pela soma de um
termo posterior
com o seu subsequente, e ela deve ser impressa at que o ltimo
elemento no
ultrapasse o valor de entrada N.

82

A.7 Vetores
1. Desenvolva um programa que solicite a idade, o nome e o sexo de 10 pessoas e
armazene esses dados em vetores. O programa deve oferecer um menu que permita
ao usurio as seguintes opes:
1. Informar os dados das 10 pessoas.
2. Sair
Aps o usurio ter informado os dados das 10 pessoas (caso a opo 1 seja selecionada),
o programa deve oferecer as seguintes opes em um segundo menu:
1. Consultar o nome da pessoa mais nova
2. Consultar a idade do homem mais idoso
3. Consultar a mdia das idades das mulheres
4. Sair
A cada consulta realizada o programa dever apresentar novamente o menu com
as opes disponveis e s dever ser encerrado quando o usurio escolher a opo
Sair.
2. Desenvolva um algoritmo que oferea ao usurio as seguintes opes:
1. Inserir nmeros inteiros em um vetor de at 10 posies. Os nmeros devem ser
inseridos de modo que o vetor nunca fique desordenado (em nenhum momento).
Ao se tentar inserir um nmero em um vetor cheio o programa deve acusar que
no ser possvel realizar a insero. Aps a insero, o algoritmo deve imprimir
a quantidade de elementos do vetor e os respectivos elementos.
APNDICE A. EXERCCIOS
83
2. Excluir um elemento do vetor a partir de seu valor. O usurio dever entrar
com
o nmero que deseja excluir do vetor e o mesmo dever ser retirado. Os demais
elementos que se localizam aps o elemento excludo devem ser realocados para
suas novas posies. O algoritmo deve informar quando no existirem mais
elementos para excluir.
3. Imprimir na tela os elementos do vetor em ordem CRESCENTE.
4. Imprimir na tela os elementos do vetor em ordem DECRESCENTE.

5. Sair do programa.
Obs: O objetivo do item 1 no o de ordenar o vetor, mas sim de manter o vetor
ordenado a cada insero, sendo assim, o vetor nunca chegar a estar
desordenado,
ou seja, antes de inserir cada elemento, o algoritmo deve procurar em qual
posio o
mesmo deve ser inserido, e depois realizar a insero exatemente naquela
posio.

A.8 Matrizes
1. Desenvolva um algoritmo que solicite ao usurio a ordem de duas matrizes A e
B (mximo 10x10) e seus respectivos elementos. Aps a insero dos elementos das
matrizes A e B o programa deve oferecer ao usurio as seguintes opes:
1. mostrar as duas matrizes
2. multiplicar as duas matrizes e mostrar a matriz resultante. Caso a multiplicao
das matrizes no seja possvel o programa deve informar ao usurio o motivo da
impossibilidade.
3. Sair do programa.
Obs: Os elementos da matriz devem ser do tipo inteiro ou do tipo real.

A.9 Modularizao
1. Para um grupo de valores reais, determinar o valor do desvio padro destes valores
em relao a mdia dos valores. O desvio padro de um grupo de valores pode ser
APNDICE A. EXERCCIOS 84
obtido por:
dp = sPn i=1 Xin 2 - - (1 Pn i=1 n Xi)2
Para esse problema devem ser desenvolvidas 3 funes que iro receber como parmetros o conjunto de elementos e a quantidade de elementos desse conjunto, e que
faro os seguintes processamentos:
1. Clculo da soma dos quadrados dos elementos do grupo.
2. Clculo do quadrado da soma dos elementos do grupo.
3. Clculo do Desvio Padro.
O programa principal deve oferecer para o usurio as seguintes opes:
1. Informar a quantidade e os valores dos elementos do grupo.
2. Calcular o desvio padro do grupo.
3. Sair.