Escolar Documentos
Profissional Documentos
Cultura Documentos
Programação Com Algoritimo
Programação Com Algoritimo
C AMPUS B AG
I NTRODUO A A LGORITMOS E
P ROGRAMAO
FABRICIO F ERRARI
fabricio@ferrari.pro.br
C RISTIAN C ECHINEL
contato@cristiancechinel.pro.br
Sumrio
I
Conceitos Preliminares
O Computador
1.1 Histrico dos Computadores . . . . . . . . . . . .
1.2 Arquitetura Bsica . . . . . . . . . . . . . . . . . .
1.2.1 Unidade Central de Processamento (UCP).
1.2.2 Memria . . . . . . . . . . . . . . . . . . . .
1.2.3 Dispositivos de Entrada e de Sada . . . . .
II
3
Algoritmos
2.1 Conceito de Algortimo . . . . . . . . . . . . .
2.2 Partes de Um Algoritmo . . . . . . . . . . . .
2.3 Representaes de um Algoritmo . . . . . . .
2.3.1 Fluxograma . . . . . . . . . . . . . . .
2.4 Programas de Computador . . . . . . . . . .
2.5 Linguagens . . . . . . . . . . . . . . . . . . . .
2.5.1 Linguagem Natural . . . . . . . . . .
2.5.2 Linguagem de Mquina e Assembler
2.5.3 Linguagens de Programao . . . . .
2.5.4 Pseudocdigo . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
10
11
12
12
13
.
.
.
.
.
.
.
.
.
.
14
14
15
17
17
17
17
18
19
20
21
Dados
Representao de Dados
3.1 Representao Interna
3.2 Tipos Primitivos . . . .
3.3 Constantes e Variveis
3.4 Manipulao de Dados
24
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
27
28
29
SUMRIO
3.4.1
3.4.2
3.4.3
4
III
6
3
Identificao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Definio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Expresses
4.1 Expresses Aritmticas . . . . . . . . . . . . . . . . . .
4.1.1 Precedncia Geral dos Operadores Aritmticos
4.1.2 Escrita de Operaes Aritmticas . . . . . . . .
4.1.3 Excees em Expresses Aritmticas . . . . . .
4.1.4 Simplificao de Expresses Aritmticas . . .
4.2 Expresses Lgicas . . . . . . . . . . . . . . . . . . . .
4.2.1 Operadores Relacionais . . . . . . . . . . . . .
4.2.2 Operadores Lgicos . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
33
33
35
35
36
36
36
37
Estruturas de Controle
43
Estruturas de Condio
6.1 Estrutura de Condio Simples: se-ento. . . . .
6.2 Estrutura de Condio Composta: se-ento-seno
6.3 Estruturas de Condio Encadeadas . . . . . . .
6.4 Comando caso . . . . . . . . . . . . . . . . . . . .
Estruturas de Repetio
7.1 Teste no Incio: enquanto-faa. . .
7.2 Teste no Fim: faa-enquanto . . . .
7.3 Repetio com Controle: faa-para
7.4 Contadores e Acumuladores . . .
7.4.1 Contadores . . . . . . . .
7.4.2 Acumuladores . . . . . .
. . .
. . .
. .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
44
45
46
48
49
.
.
.
.
.
.
52
53
54
54
55
55
55
SUMRIO
IV
58
59
59
61
61
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 . .
62
62
62
62
62
62
62
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Apndice
A Exerccios
A.1 Introduo . . . . . . . . . . . . . . . . . . . . .
A.2 Dados . . . . . . . . . . . . . . . . . . . . . . . .
A.3 Estruturas de Condio . . . . . . . . . . . . . .
A.4 Estruturas de Condicao exerccios avanados
A.5 Estruturas de Repeticao . . . . . . . . . . . . .
A.6 Vetores . . . . . . . . . . . . . . . . . . . . . . .
A.7 Matrizes . . . . . . . . . . . . . . . . . . . . . .
A.8 Modularizao . . . . . . . . . . . . . . . . . . .
64
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
65
65
66
67
71
72
75
76
76
Lista de Figuras
1.1
2.1
2.2
2.3
6.1
8.1
Lista de Tabelas
3.1
4.1
4.2
4.3
4.4
6.1
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
so sentenas lgicas
. . . . . . . . . . . . .
. 33
. 34
. 37
. 38
Lista de Algoritmos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
16
17
21
31
42
42
46
47
48
48
50
50
51
54
54
54
54
55
56
56
56
57
57
60
61
70
LISTA DE ALGORITMOS
28
29
Calculo do pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Adivinhacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Parte I
Conceitos Preliminares
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
. M ECNICOS
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 G ERAO 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 G ERAO transistores 1947
10
CAPTULO 1. O COMPUTADOR
11
TX-0, 1957
PDP-1, Digital, 1o computador comercial
. 3a G ERAO circuitos integrados 1958
IBM 360, 1965
PDP-11, sucesso universitrio
. 4a G ERAO 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. )
1.2
Arquitetura Bsica
CAPTULO 1. O COMPUTADOR
1.2.1
12
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.
1
A 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
13
ROM sigla para memria somente-leitura, como o nome diz s possvel ler seu contedo, mas no alter-lo. No se altera se o computador desligado.
Secundria so dispositivos usados para armazenar grandes quantidades de informao em carter no voltil. Na maioria das vezes muito mais lenta que a
RAM. Exemplo so os discos rgidos.
1.2.3
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.
2
H 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;
14
CAPTULO 2. ALGORITMOS
15
desligar o carro
pegar as ferramentas (chave e macaco)
pegar o estepe
suspender o carro com o macaco
desenroscar os 4 parafusos do pneu furado
colocar o estepe
enroscar os 4 parafusos
baixar o carro com o macaco
guardar as ferramentas
2.2
Partes de Um Algoritmo
CAPTULO 2. ALGORITMOS
16
ir at a parada
m-enquanto
subir no nibus
pegar passagem
se no h passagem ento
pegar dinheiro
m-se
pagar o cobrador
troco
dinheiro - passagem
m-enquanto
sentar
...
CAPTULO 2. ALGORITMOS
17
2.3
2.3.1
Representaes de um Algoritmo
Fluxograma
2.4
Programas de Computador
2.5
Linguagens
CAPTULO 2. ALGORITMOS
18
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
19
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 executar. Neste sentido, necessrio compreender que tipo de instrues podem ser executadas 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
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
00000010
00000020
1
7F 45 4C 46 01 01 01 00
02 00 03 00 01 00 00 00
BC 0C 00 00 00 00 00 00
00 00 00 00 00 00 00 00
D0 82 04 08 34 00 00 00
34 00 20 00 07 00 28 00
.ELF............
............4...
........4. ...(.
Diversos 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
20
2.5.3
24 00 21 00 06 00 00 00
34 80 04 08 E0 00 00 00
34 00 00 00 34 80 04 08
E0 00 00 00 05 00 00 00
..!.....4...4...
4...............
Linguagens de Programao
CAPTULO 2. ALGORITMOS
21
int main(){
printf("Ol Mundo\n");
}
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 que em 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 x < y ento
escreva y maior
seno
escreva x e y
m-se
so iguais
CAPTULO 2. ALGORITMOS
22
/* isto um comentrio
de bloco
printf("\ndigite x:");
2
*/
Os 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
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");
}
}
23
Parte II
Dados
24
Captulo 3
Representao de Dados
3.1
Representao Interna
Por esse motivo, o elemento mnimo capaz de armazenar a informao nos computadores foi apelidado de bit, uma contrao do ingls binary digit (dgito binrio)
25
binrio
0000b
0001b
0010b
0011b
0100b
0101b
0110b
0111b
1000b
1001b
1010b
1011b
1100b
1101b
1110b
1111b
26
hexadecimal octal
0h
0o
1h
1o
2h
2o
3h
3o
4h
4o
5h
5o
6h
6o
7h
7o
8h
10o
9h
11o
Ah
12o
Bh
13o
Ch
14o
Dh
15o
Eh
16o
Fh
17o
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.
27
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.5 C,
= 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 .
2
Para ser coerente com a notao usada nos computadores, usaremos aqui o ponto como separador
decimal
3
ASCII 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
28
A seguir so apresentados alguns dos caracteres existentes (representados no padro ASCII entre o intervalo de 33 a 126):
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H
I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p
q r s t u v w x y z { | } ~
3.3
Constantes e Variveis
3.4
3.4.1
29
Manipulao de Dados
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.
3.4.2
30
Definio
<tipo1>;
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
5
H 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.
31
3.4.3
Atribuio
222
1000
23
32
Quando a execuo passa pela linha 1 reservado um espao na memria do computador para armazenarmos valores do tipo inteiro, que acessaremos atravs da varivel numero. importante ressaltar que inicialmente, a varivel numero no contm
nenhum valor. Continuando a execuo, passamos pela linha 2, onde o valor 222 atribudo 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
10**x, 2**3
Resto (Mdulo)
mod
10%2, 120%10
Diviso Inteira
10%2, 120%10
Tabela 4.1: Operadores aritmticos bsicos.
4.1.1
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
33
CAPTULO 4. EXPRESSES
34
por diante at que toda a expresso corresponda a um s valor. A Tabela 4.2 mostra a ordem de prioridade na avaliao dos operadores numa expresso aritmtica,
chamada de precedncia de operadores.
Ordem
1a
2a
3a
4a
Operao
Parnteses
Potenciao
Multiplicao, Diviso, Resto e Diviso Inteira
Adio, Subtrao
Smbolo
()
**
*, /, mod, div
+, -
(5+3)**2 * (5-2)
8**2 *
3
64
* 3
192
200
+
+
+
+
8
8
8
8
grande parte das linguagens de programao no possui um operador aritmtico especfico para
identificar a potenciao.
CAPTULO 4. EXPRESSES
35
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
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+
23 + 2
+ 23
4+3
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
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
36
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
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)
x
1
= x
y
y
1
n
x = xn .
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
CAPTULO 4. EXPRESSES
Operador
Igual a
Maior que
Menor que
Maior ou Igual a
Menor ou Igual a
Diferente de
37
Smbolo
=
>
<
>=
<=
<>
4.2.2
Operadores Lgicos
CAPTULO 4. EXPRESSES
38
Q
V
F
V
F
P Q
V
F
F
F
P Q
V
V
V
F
P Q
F
V
V
F
P
F
F
V
V
Tabela 4.4: Tabela verdade dos operadores lgicos. P e Q so sentenas lgicas quaisquer.
CAPTULO 4. EXPRESSES
39
Ainda sobre os operadores relacionais, os operadores <>, >= e <= so redundantes, 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 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. Opcionalmente, pode-se colocar parnteses para indicar
o argumento da funo escreva.
possvel escrever valores de qualquer tipo existente, como valores reais, valores lgicos, valores inteiros, do tipo sequncia de caracteres, resultados de expresses
40
41
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
42
Parte III
Estruturas de Controle
43
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.
44
6.1
45
se-ento.
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
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.
46
6.2
se-ento-seno
se
<expresso-lgica>
ento:
seno:
<bloco de comandos falsidade>
m-se
se-ento-seno,
47
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:
2:
3:
4:
5:
6:
7:
8:
9:
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 ().
48
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:
3:
4:
5:
escreva
seno
escreva
m-se
6.3
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
49
satisfeita na estrutura de condio mais externa. Considere a estrutura aninhada no algoritmo 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 verdadeiras. 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
V
V
F
F
EL2
V
F
EL3
V
F
execuo
BV2
BF2
BV3
BF3
6.4
Comando caso
Uma outra alternativa para trabalhar com comandos condicionados a um determinado valor a estrutura caso. Nessa estrutura o valor de uma determinada varivel
avaliado e caso esse valor coincida com determinado valor pr-estabelecido um de-
50
caso
utilizada da forma
bloco de comandos 1
valor2:
.
.
.
bloco de comandos 2
valorN:
bloco de comandos N
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
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.
51
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 tem 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.
52
7.1
Teste no Incio:
53
enquanto-faa.
No algoritmo 15 est mostrada o formato bsico da estrutura de repetico enquantofaca. Antes de entrar na estrutura de repetio, a expresso lgica avaliada, caso o
resultado da mesma seja verdadeiro os comandos que esto dentro da estrutura sero
executados e ao final volta-se a avaliar a expresso lgica novamente. Caso o resultado
da expresso lgica seja falso, o algoritmo sai da estrutura de repetio e segue na
prxima linha.
Na estrutura enquanto-faa no est pr-determinado quantas vezes o bloco de comandos ser executado, sendo determinado dutante a execuo do algoritmo. De
maneira geral, o mecanismo que altere o valor da expresso lgica que controla o lao
deve estar embutido dentro do bloco de comandos ou depender de alguma varivel
externa, caso contrrio o lao ficar executando indefinidamente.
A estrutura enquanto-faa usada principalmente quando no se sabe de antemo
quantas repeties sero realizadas. Por exexmplo, vamos analisar de maneira mais
clara uma situao onde no conseguimos determinar a quantidade de vezes que executaremos um conjunto de comandos. Por exemplo, suponha que estamos oferecendo
ao usurio 3 opes de menu sendo que uma dessas 3 opes seria a opo 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 a 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.
Nessas situaes, a repetio de um conjunto de comandos determinada pela
avaliao de uma expresso lgica, ou seja, se a expresso lgica verdadeira o conjunto de comandos continua a ser executado, caso seja falsa a estrutura de repetio
abortada.
54
m-enquanto
7.2
Teste no Fim:
faa-enquanto
A estrutura faa-enquanto difere de enquanto-faa somente por executar o bloco de comando antes de testar se a condio verdadeira. Assim, utilizando o faa-enquanto o
bloco de comandos ser 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>
7.3
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.
A <sequncia> uma lista de valores que a varivel assumir ao longo da execuo, em
geral no formato incio,m,incremento. Por exemplo a expresso x=0,10,2 significa que
x assumir os valores 0,2,4,6,8,10. Logo, o lao seria executado 5 vezes.
Algoritmo 17 Estrutura de repetio para-faa.
m-para
var j: inteiro
para j = 1,100,1 faa
escreva no vou mais fazer baguna
m-para
7.4
55
Contadores e Acumuladores
7.4.1
Contadores
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.
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
dos somatrios, o acumulador normalmente inicializado com o valor 0 e incrementado no valor de um outro termo qualquer, dependendo do problema em questo.
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 20 Contadores 2
var nome: cadeia
var idade, i, n: inteiro
n 0 {a varivel n ser o contador
56
ao conjunto solicitado no enunciado, ela inicializada com um valor neutro, nesse caso 0}
m-se
m-para
escreva A quantidade de pessoas do sexo feminino com 18 anos ou mais :, n
Algoritmo 21 Acumuladores 1
var acumulador: inteiro
acumulador 0
...
Algoritmo 22 Acumuladores 2
var nome: cadeia
var idade, i, soma: inteiro
soma 0 {a varivel soma ir
tencem ao conjunto solicitado no enunciado, ela inicializada com um valor neutro, nesse
caso 0}
m-se
m-para
escreva A soma das idades das pessoas do sexo feminino com 18 anos ou mais :, soma
57
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.
Algoritmo 23 Acumuladores 3
var acumulador: inteiro
acumulador 1
...
escreva
leia(n)
f at 1
pelo contador i}
m-para
escreva O fatorial de n igual a , f at
Parte IV
Estrutura de Dados e Modularizao
58
Captulo 8
Variveis Compostas Homogneas
8.1
Vetores Unidimensionais
int
idade[100].
59
60
idade[0] = 23
idade[1] = 22
idade[2] = 18
idade[3] = 34
idade[4] = 23
idade[5] = 21
idade[6] = 25
idade[7] = 39
EXEMPLOS
exemplo: imprimindo os valores na ordem inversa.
exemplo: mdia de 100 valores.
8.2
Vetores Bidimensionais
8.3
Vetores Multidimensionais
61
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
62
Referncias Bibliogrficas
[1] Marco Medina, Cristina Fertig, A LGORITMOS E P ROGRAMAO : T EORIA E P R TICA , So Paulo, Novatec Editora, 2005.
[2] Marco Antnio Furlan de Souza et al., A LGORITMOS
O , So Paulo, Thomson Learning, 2006.
L GICA
DE
P ROGRAMA -
P ROGRAMA -
[6] Irenice de Ftima Carboni, L GICA DE P ROGRAMAO, So Paulo, Thomson Learning, 2003.
63
Parte V
Apndice
64
Apndice A
Exerccios
A.1
Introduo
APNDICE A. EXERCCIOS
66
A.2
Dados
1.. No final da execuo do fragmento de cdigo abaixo, qual o valor de n1, n2 e n3?
var n1,n2: inteiro
n1
n2
n3
n1
n2
10
30
n1
n2
n3
8 > 9
8 < 9
v1
v3
v2
v2
(20 > 9)
escreva(numero= , 78)
2.
APNDICE A. EXERCCIOS
3.
4.
5.
escreva(verdadeiro, 8 = 8)
6.
7.
n1
n2
67
4
10
escreva(n1, n2)
8.
n1
n2
4
10
escreva(n1+n2)
9.
n1
n2
4
10
escreva(n1+n2)
10.
n1
n2
4
10
escreva(n1+n2)
11.
n1
n2
4
10
escreva(n1>n2)
12.
n1
n2
4
10
n1
n2
4
10
A.3
=, n1 + n2)
Estruturas de Condio
APNDICE A. EXERCCIOS
68
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 metade
desse nmero, caso contrrio imprima o nmero ao quadrado.
8. Elabore um algoritmo que leia o nome e o peso (em real) de duas pessoas e imprima
os dados da pessoa mais pesada.
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.
Para homens (72.7*altura)58
Para mulheres (62.1*altura)44.7
APNDICE A. EXERCCIOS
69
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 mensagem
Voc no tem acesso ao sistema.
14. Elabore um algoritmo que leia dois nmeros e imprima qual maior, qual
menor, ou se so iguais.
15. Uma empresa qualquer decidiu conceder um aumento de salrios a seus funcionrios de acordo com a tabela abaixo:
Salrio Atual
Aumento
0 400,00
400,01 700,00
700,01 1.000,00
1.000,01 1.800,00
1.800,01 2.500,00
acima de 2.500,00
15%
12%
10%
7%
4%
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.
Conceito
>= 9.0
>= 7.5 e < 9.0
>= 6.0 e < 7.5
>= 4.0 e < 6.0
< 4.0
A
B
C
D
E
17. 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).
APNDICE A. EXERCCIOS
70
18. 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
20. Construa a tabela de deciso (veja Tabela 6.1) para o algoritmo 27 abaixo, conforme os possveis valores de q1, q2, q3, especificando o que ser impresso em cada
caso ao final da execuo do algoritmo.
Algoritmo 27 Problema 20
21. Construir um algoritmo que tome como entrada trs valores e os imprima em
ordem crescente.
22. 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.
23. 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 ser um
tringulo necessrio que qualquer um dos lados seja menor que a soma dos outros
APNDICE A. EXERCCIOS
71
dois lados, (A < B + C) ou (B < A + C) ou (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)
24. 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. Utilize a estrutura de condio
caso.
A.4
1.. 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 dividido por 2, e a varivel B contenha o valor da varivel A dividido por
3.
2.. 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 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.
APNDICE A. EXERCCIOS
72
4.. 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.
A.5
Estruturas de Repeticao
1.. Desenvolva um algoritmo que calcule as tabuadas dos nmeros divisveis por 2
que encontram-se no intervalo entre 1 e 10.
APNDICE A. EXERCCIOS
73
n
X
k=0
(1)k (
1
)
(2k + 1)
se k % 2 = 0 ento
pi pi + 1/(2 k + 1)
seno
pi pi 1/(2 k + 1)
m-se
m-para
4.. Um ms antes das eleies municipais, um determinado partido poltico encomendou uma pesquisa de opinio sobre as intenes de votos dos eleitores. Foram entrevistas 50 pessoas que indicaram suas intenes de acordo com as seguintes 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 informe ao final a porcentagem
de intenes para cada uma das opes existentes (candidatos A e B, e indecisos).
1 3 5 7
99
+ + ...
1 2 3 4
50
1 2 3
n
+ + + ... +
2 3 4
n+1
APNDICE A. EXERCCIOS
74
9.. 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.
1
n1 n2
+
+ ... +
2
3
n
APNDICE A. EXERCCIOS
A.6
75
Vetores
APNDICE A. EXERCCIOS
76
A.7
Matrizes
A.8
Modularizao
1..
i
i=1
n
dp =
n1
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:
APNDICE A. EXERCCIOS
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.
77