Escolar Documentos
Profissional Documentos
Cultura Documentos
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
.........................
1.2
Arquitetura Bsica
..........................
II Dados
25
3 Representao de Dados
26
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
66
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
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).
12
1.2.2 Memria
A memria o dispositivo responsvel por armazenar dados. Os vrios tipos de
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
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:
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
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
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...............
CAPTULO 2. ALGORITMOS 22
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
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
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
29
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH
IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop
qrstuvwxyz{|}~
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
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
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.
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
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
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.
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.
variveis
ou constantes do tipo lgico.As expresses lgicas tambm podem ser compostas por
resultados de expresses aritmticas.
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
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 )
)
)
execuo
BV2
BF2
BV3
BF3
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
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.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
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
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.
67
. 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
74
A.6
Estruturas de R
A.6.1
Utilizando somen
(candidatos A e B, e indecisos).
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
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.