Professional Documents
Culture Documents
P ROGRAMAO
FABRICIO F ERRARI
fabricio@ferrari.pro.br
C RISTIAN C ECHINEL
contato@cristiancechinel.pro.br
VERSO 2.2
Sumrio
I Conceitos Preliminares 10
1 O Computador 11
1.1 Histrico dos Computadores . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 Arquitetura Bsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1 Unidade Central de Processamento (UCP). . . . . . . . . . . . . . 13
1.2.2 Memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.3 Dispositivos de Entrada e de Sada . . . . . . . . . . . . . . . . . . 14
2 Algoritmos 15
2.1 Conceito de Algortimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Partes de Um Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Representaes de um Algoritmo . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.1 Fluxograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 Programas de Computador . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5 Linguagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5.1 Linguagem Natural . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5.2 Linguagem de Mquina e Assembler . . . . . . . . . . . . . . . . 20
2.5.3 Linguagens de Programao . . . . . . . . . . . . . . . . . . . . . 21
2.5.4 Pseudocdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
II Dados 25
3 Representao de Dados 26
3.1 Representao Interna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 Tipos Primitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3 Constantes e Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 Manipulao de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2
SUMRIO 3
3.4.1 Identificao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4.2 Definio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4.3 Atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4 Expresses 34
4.1 Expresses Aritmticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.1 Precedncia Geral dos Operadores Aritmticos . . . . . . . . . . . 34
4.1.2 Escrita de Operaes Aritmticas . . . . . . . . . . . . . . . . . . . 36
4.1.3 Excees em Expresses Aritmticas . . . . . . . . . . . . . . . . . 36
4.1.4 Simplificao de Expresses Aritmticas . . . . . . . . . . . . . . 37
4.2 Expresses Lgicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2.1 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2.2 Operadores Lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6 Estruturas de Condio 45
6.1 Estrutura de Condio Simples: se-ento. . . . . . . . . . . . . . . . . . . 46
6.2 Estrutura de Condio Composta: se-ento-seno . . . . . . . . . . . . . . 47
6.3 Estruturas de Condio Encadeadas . . . . . . . . . . . . . . . . . . . . . 49
6.4 Estrutura de Condio caso seja . . . . . . . . . . . . . . . . . . . . . . . 50
7 Estruturas de Repetio 53
7.1 Teste no Incio: enquanto-faa. . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.2 Teste no Fim: faa-enquanto . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.3 Repetio com Controle: faa-para . . . . . . . . . . . . . . . . . . . . . . 55
7.4 Contadores e Acumuladores . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.4.1 Contadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.4.2 Acumuladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
SUMRIO 4
9 Mdulos 63
9.1 Modularizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.2 Retorno de Valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.3 Escopo de Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.4 Passagem de Parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.4.1 Por Valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.4.2 Por Referncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
V Apndice 65
A Exerccios 66
A.1 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
A.1.1 Para os problemas a seguir, defina: . . . . . . . . . . . . . . . . . . 66
A.2 Representao de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
A.3 Expresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
A.4 Entrada e Sada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
A.5 Estruturas de Condio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
A.5.1 Estrutura se-ento-seno . . . . . . . . . . . . . . . . . . . . . . . . 72
A.5.2 Estrutura se-ento-seno aninhada . . . . . . . . . . . . . . . . . . 74
A.5.3 Estrutura caso seja . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
A.6 Estruturas de Repetio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A.6.1 Utilizando somente a estrutura de repetio para-faa . . . . . . . 78
A.6.2 Utilizando a estrutura de condio se-ento-seno dentro da es-
trutura de repetio para-faa . . . . . . . . . . . . . . . . . . . . . 78
A.6.3 Calculando quantidades de ocorrncias, somatrios e produtos
com a estrutura para-faa . . . . . . . . . . . . . . . . . . . . . . . . 78
A.6.4 Localizando valores dentro de um conjunto com a estrutura para-
faa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
A.6.5 Usando estrutura de repetio para-faa aninhada . . . . . . . . . 80
SUMRIO 5
6
Lista de Tabelas
7
Lista de Algoritmos
8
LISTA DE ALGORITMOS 9
28 Conversor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
29 Numero-de-salarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
30 Novo-peso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
31 Problema 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
32 Adivinhacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
33 Calculo do pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Parte I
Conceitos Preliminares
10
Captulo 1
O Computador
Um computador uma mquina que manipula dados a partir de uma lista de instru-
es.
Os computadores podem ser mecnicos (computador analgico) ou eletrnicos
(computadores digitais).
. 1a G ERAO eletro-eletrnicos
11
CAPTULO 1. O COMPUTADOR 12
TX-0, 1957
PDP-1, Digital, 1o computador comercial
1.2.2 Memria
A memria o dispositivo responsvel por armazenar dados. Os vrios tipos de me-
mria no computador so classificadas de maneira geral de acordo com a sua capaci-
dade 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 14
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.
2
H monitores que so utilizados tambm como dispositivos de entrada, os chamados monitores
touch-screen
Captulo 2
Algoritmos
15
CAPTULO 2. ALGORITMOS 16
1. Entrada de dados;
2. Processamento de dados;
3. Sada de dados;
2.3.1 Fluxograma
Os fluxogramas so uma apresentao do algoritmo em formato grfico. Cada ao ou
situao representada por uma caixa. Tomadas de decises so indicadas por caixas
especiais, possibilitando ao fluxo de aes tomar caminhos distintos.
A Figura 2.2 representa um algoritmo na forma de um fluxograma. O incio e o fim
do algoritmo so marcados com uma figura elptica; as aes a serem executadas esto
em retngulos; sendo que as estruturas de controle condicionais esto em losangos
e indicam duas possibilidades de proseguimento do algoritmo, uma para o caso da
expresso avaliada (condio) ser verdadeira e outra para o caso de ser falsa.
No exemplo da Figura 2.2, a primeira ao executada ('abrir forno') e ento a se-
gunda expresso avaliada ('fogo aceso?') como verdadeira ou falsa; caso seja verda-
deira, o algoritmo prosegue para a ao esquerda ('botar lenha'); caso seja falsa, o
algoritmo executa a ao direita ('acender fogo'). Em seguida, para qualquer um dos
casos, a prxima ao a ser executada ('assar po').
2.5 Linguagens
Qualquer tipo de informao que deva ser transferida, processada ou armazenada
deve estar na forma de uma linguagem. A linguagem imprescindvel para o pro-
cesso de comunicao. Duas pessoas que se falam o fazem atravs de uma linguagem
em comum, a linguagem natural. Da mesma forma, duas mquinas trocam informa-
o por uma linguagem, que neste caso mais tcnico e restrito, se chama protocolo. Do
mesmo modo, um computador armazena suas instrues em cdigo de mquina. Es-
tas diferentes linguagens no podem ser traduzidas diretamente entre s, pois alm de
serem representadas de modos diferentes, tambm referem-se a coisas muito distin-
CAPTULO 2. ALGORITMOS 19
tas. Para que um ser humano possa programar, armazenar e buscar informaes num
computador, necessrio que saiba instru-lo na sua linguagem de mquina ou numa
linguagem intermediria (uma linguagem de programao) que possa ser facilmente
traduzida para o computador.
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. ...(.
1
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 21
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...............
#include <stdio.h>
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 lingua-
gem 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 me-
dida em que se obtm mais familiaridade com os algoritmos, ento o pseudocdigo
pode ser traduzido para uma linguagem de programao.
. para que certas funes sejam acessveis, necessrio incluir a bilbioteca stdlib.h;
#include <stdio.h>
int main(){
int x, y; // isto um comentrio de linha
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 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
26
CAPTULO 3. REPRESENTAO DE DADOS 27
100110b = 1 25 + 0 24 + 0 23 + 1 22 + 1 21 + 0 20 = 32 + 0 + 0 + 4 + 2 + 0 = 38d
Real So os nmeros pertencentes ao conjunto dos Reais, isto , que podem pos-
suir 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.
Lgico O tipo lgico utilizado para representar informaes que s podem assumir
dois valores, o valor verdadeiro (V) ou o valor falso (F). Estes valores tambm podem
ser entendidos como: ligado/desligado, 1/0, alto/baixo, fechado/aberto, etc. Exem-
plos de informaes que podem ser representadas utilizando o tipo lgico so: O fogo
est apagado, a televiso est ligada, o porto est aberto, o produto foi encontrado.
3.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 iden-
tificador seria pensar no mesmo como uma placa de sinalizao que indica (delimita)
uma determinada regio ou espao na memria do computador onde o dado (infor-
mao) 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:
3.4.2 Definio
Como dito anteriormente, ao longo do programa o dado ser manipulado atravs do
nome do seu identificador, sendo assim, o primeiro passo para utilizarmos os dados
a nomeao do seu idenficador e a definio do seu tipo (no caso de identificadores
variveis), ou do seu valor (no caso de identificadores constantes). A definio dos
dados em algoritmos tambm conhecida como declarao.
Um identificador (sendo ele varivel ou constante) declarado com um determinado
tipo de dados ficar restrito a armazenar valores daquele tipo especfico (inteiro, real,
caractere, lgico). Na maioria dos casos, se houver uma tentativa de atribuir a um
identificador um tipo diferente daquele para o qual ele foi definido iro ocorrer erros
de compilao, de execuo ou at mesmo perda de dados5 .
A definio de um identificador varivel num algoritmo feita da seguinte forma:
var <identicador1> [, <identicador2>,...]: <tipo1>;
<identicador3> = <valor3>;
preco: real;
vendido: lgico;
constante PI=3.141592654;
MAXIMO=100;
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 tra-
balhando com identificadores variveis, e pelo smbolo = quando estivermos traba-
lhando com identificadores constantes 6 .
A atribuio de valores a uma varivel feita da seguinte forma:
<identicador da varivel> <valor 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 armaze-
nado na mesma. A seguir so apresentados alguns exemplos de atribuies de valores
a variveis:
TipoVeiculo motocicleta;
Aceleracao 15.52;
Massa 12.3;
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:
6
No caso dos identificadores constantes a atribuio feita no momento da definio do mesmo
(como apresentado na seo de declarao), sendo assim, os exemplos e explicaes que seguem so
restritas aos identificadores variveis que chamaremos a partir de agora apenas de variveis
CAPTULO 3. REPRESENTAO DE DADOS 33
Expresses
34
CAPTULO 4. EXPRESSES 35
por diante at que toda a expresso corresponda a um s valor. A Tabela 4.2 mos-
tra a ordem de prioridade na avaliao dos operadores numa expresso aritmtica,
chamada de precedncia de operadores.
(5+3)**2 * (5-2) + 8
8**2 * 3 + 8
64 * 3 + 8
192 + 8
200
(x + y)/((2 y + (z w)).
1. (x + y);
2. (z w)
1
grande parte das linguagens de programao no possui um operador aritmtico especfico para
identificar a potenciao.
CAPTULO 4. EXPRESSES 36
3. 2 y
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
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
x y = x + (y)
x 1
= x
y y
n
1
x = xn .
Operador Smbolo
Igual a =
Maior que >
Menor que <
Maior ou Igual a >=
Menor ou Igual a <=
Diferente de <>
Tanto a parte (2 < 3) como (5 > 1) so verdadeiras, logo a expresso completa tambm
. A primeira parte verdadeira e a segunda verdadeira, logo toda a expresso
verdadeira. Na linguagem natural no damos tanta importncia para a diferena entre
e e ou. Se uma das partes fosse falsa, toda a expresso, ligadas por e, seria falsa. Outra
maneira de avaliar o valor de uma expresso lgica substituindo suas subexpresses
por V ou F, assim
(2 < 3) (5 > 1)
V V
V
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
P Q P Q P Q P Q P
V V V V F F
V F F V V F
F V F V V V
F F F F F V
Tabela 4.4: Tabela verdade dos operadores lgicos. P e Q so sentenas lgicas quais-
quer.
CAPTULO 4. EXPRESSES 40
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
5.1 Sada
Para imprimirmos algum tipo de informao na tela do computador utilizamos o co-
mando escreva seguido da informao que ser escrita. Dessa forma, se quisermos
imprimir uma mensagem como por exemplo Ola mundo!, isto seria feito com a ins-
truo
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 con-
tedo da cadeia de caracteres.
possvel escrever valores de qualquer tipo existente, como valores reais, valo-
res 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 po-
demos 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
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.
Estruturas de Controle
44
Captulo 6
Estruturas de Condio
45
CAPTULO 6. ESTRUTURAS DE CONDIO 46
se <expresso-lgica> ento:
<bloco de comandos>
m-se
. mdia > 7 , cujo resultado depender do valor da varivel mdia. Por exemplo, se
mdia vale 5 o bloco no executado; se mdia for 15, o bloco ser executado.
O <bloco de comandos> uma sequncia de cdigo que ser executado somente quando
o resultado da expresso lgica for verdadeiro. Por fim, a instruo m-se indica que a
estrutra se-entao chegou ao final, servido para delimitar o bloco de instrues.
Voltando ao nosso problema de classificar uma pessoa como maior de idade ou
menor de idade, podemos utilizar a estrutura de condio se-ento da seguinte ma-
neira:
. 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 <expresso-lgica> ento:
<bloco de comandos verdade>
seno:
<bloco de comandos falsidade>
m-se
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.
Por exemplo, suponha que desejemos refinar um pouco mais o problema referente
s mdias dos alunos de uma dada disciplina. Sabemos que um aluno aprovado caso
apresente mdia maior ou igual a 7.0 e frequencia maior ou igual a 75%. Na verdade,
em uma situao real, se o aluno obtiver a frequncia minima exigida e uma mdia
entre 3 e 7, ainda teria direito a uma ltima avaliao de recuperao. Como fara-
mos para resolver o problema em questo utilizando apenas estruturas de condio
se-ento-seno? Poderamos comear avaliando a frequencia do aluno, e se a mesma
for menor que 75% o aluno j estaria reprovado, porm caso a frequencia respeite o
mnimo exigido, comeariamos a avaliar a mdia para saber se est aprovado, em re-
cuperao ou reprovado. No momento em que verificado que a frequencia menor
que 0.75 (75%) o aluno j est imediatamente reprovado, mas caso a frequencia seja
maior ou igual a esse valor, devemos continuar com o algoritmo para avaliar em que
situao que o aluno se encontra. Enfim, agora necessrio avaliar a mdia do mesmo,
verificando se est acima de 7.0 (aprovado), entre 3 e 7.0 (recuperao), ou abaixo de
3.0 (reprovado). Estes condicionais esto mostrados no algoritmo 12.
m-se
Estruturas de Repetio
Uma das principais caractersticas que consolidaram o sucesso na utilizao dos com-
putadores para a resoluo de problemas foi a sua capacidade de repetir o processa-
mento 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 proce-
dimentos 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 preciss-
semos 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 para-
faa. A diferena bsica que enquanto-faa primeiro testa a condio para depois
53
CAPTULO 7. ESTRUTURAS DE REPETIO 54
caso o resultado da mesma for verdadeiro, os comandos que esto dentro da estrutura
sero executados. Aps a execuo dos comandos, a expresso lgica novamente
avaliada. Caso o resultado da expresso lgica for falso, o algoritmo sai da estrutura
de repetio e segue para a prxima linha.
De maneira geral, o mecanismo que altera o valor da expresso lgica que controla
o lao est embutido dentro do bloco de comandos ou depende de alguma varivel
externa que ser fornecida em tempo de execuo.
A estrutura enquanto-faa usada principalmente quando no se sabe com antece-
dncia a quantidade de repeties que precisam serrealizadas. Por exemplo, suponha
que estamos oferecendo ao usurio 3 opes de menu sendo que uma dessas opes
seria a de sair do programa. Caso desejemos que o usurio possa executar vrias vezes
as opes dispostas no menu, no temos como adivinhar quando o usurio ir optar
por sair do algoritmo, sendo assim, no podemos limitar a repetio um determi-
nado 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.
de comandos ser sempre executado pelo menos uma vez, mesmo que a expresso de
controle seja falsa. Seu formato mostrado no algoritmo 16.
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
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 si-
tuaes, para a realizao de somatrios e para a realizao de produtrios. No caso
CAPTULO 7. ESTRUTURAS DE REPETIO 57
Algoritmo 21 Acumuladores 1
var acumulador: inteiro
acumulador 0
...
acumulador acumulador + termo
Algoritmo 22 Acumuladores 2
var nome: cadeia
var idade, i, soma: inteiro
soma 0 {a varivel soma ir armazenar o somatrio das idades das pessoas que per-
tencem ao conjunto solicitado no enunciado, ela inicializada com um valor neutro, nesse
caso 0}
para i de 0 ate 50 passo 1 faa
escreva (digite sexo ('M' ou 'F') e idade da pessoa)
leia(sexo, idade)
se sexo = M e idade >= 18 ento
soma soma + idade {aumenta o somatrio no valor da idade da pessoa em
questo}
m-se
m-para
escreva (A soma das idades das pessoas do sexo feminino com 18 anos ou mais :,
soma)
Um algoritmo para calcular a mdia das idades das pessoas do sexo feminino com
18 anos ou mais, pode ser facilmente desenvolvido utilizando um contador para ar-
mazenar 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 ite-
rao o acumulador ento multiplicado por um outro termo qualquer, dependendo
do problema em questo.
CAPTULO 7. ESTRUTURAS DE REPETIO 58
Algoritmo 23 Acumuladores 3
var acumulador: inteiro
acumulador 1
...
acumulador acumulador termo
Algoritmo 24 Acumuladores 4
var n, i, f at: inteiro
escreva (digite o nmero inteiro para calcular o fatorial)
leia(n)
f at 1 {a varivel fat ir armazenar o fatorial da varivel n, ela deve ser inicializada com
um valor neutro para a multiplicao, nesse caso 1}
para i de 1 ate n passo 1 faa
f at f at i {a cada iterao o valor do fatorial acumulado em fat e multiplicado
pelo contador i}
m-para
escreva (O fatorial de n igual a , f at)
Parte IV
59
Captulo 8
~x = (x1 , x2 , x3 ),
int idade[100].
60
CAPTULO 8. VARIVEIS COMPOSTAS HOMOGNEAS 61
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 se-
guido do respecivo ndice colocado entre colchetes. O Algoritmo 25 mostra como
definir todos os valores da varivel idade[ ].
EXEMPLOS
exemplo: imprimindo os valores na ordem inversa.
exemplo: mdia de 100 valores.
Mdulos
9.1 Modularizao
63
Referncias Bibliogrficas
[4] Andr Luiz Villar Forbellone, Henri Frederico Eberspcher, L GICA DE P ROGRA -
MAO, So Paulo, Pearson Prentice Hall, 2005
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
66
APNDICE A. EXERCCIOS 67
. nomeDeRua
. numeroDeCasa
. idadeDeUmaPessoa
. pesoDeUmaPessoa
. valorDoSalario
. quantidadeDePessoasEmFila
. senhaCorreta
. F
. V
. FALSO
APNDICE A. EXERCCIOS 68
. 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
. nome_#
APNDICE A. EXERCCIOS 69
. time de futebol
. time_de_futebol
. 01salario
. nome01
. idade
. salario
A.3 Expresses
n2 30
n3 n1
n1 n2
n2 n3
v2 8 < 9
v3 v1 v2
v1 v3 v2
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
n2 10
2. Elabore um algoritmo que leia um nmero inteiro e imprima seus sucessor e seu
antecessor. Por exemplo, suponha que o usurio digite o nmero 7, o algoritmo
dever imprimir (escrever) na tela o seu antecessor (nmero 6) e o seu sucessor
(o nmero 8).
Algoritmo 27 Antecessor-sucessor
var n, ant, suc: inteiro
escreva (digite um numero)
leia(n)
ant n 1
suc n + 1
escreva (antecessor = , ant)
escreva (sucessor = , suc)
9
F = C + 32
5
Algoritmo 28 Conversor
var f , c: real
escreva (digite graus centgrados)
leia(c)
f ((9/5) c) + 32
escreva (Fahrenheit = , f)
5. Elabore um algoritmo que leia o peso de uma pessoa em gramas, calcule e im-
prima.
APNDICE A. EXERCCIOS 72
Algoritmo 29 Numero-de-salarios
var minimo, salario, quantidade: real
escreva (digite o valor do salario minimo e o valor do seu salario)
leia (minimo, salario)
quantidade salario/minimo
escreva (Voce recebe , quantidade, salarios minimos)
Algoritmo 30 Novo-peso
var pesoatual, novopeso, pesoextra: real
escreva (digite o seu peso em gramas)
leia (pesoatual)
pesoextra pesoatual 0.12
novopeso pesoatual + pesoextra
escreva (Aps engordar 12%, seu novo peso , novopeso)
6. Faa um algoritmo que leia um valor inteiro positivo e menor que 1000, armazene-
o em uma varivel inteira e determine a soma dos dgitos que formam o valor.
Exemplo: o valor 453 tem soma dos dgitos igual a 12 (4 + 5 + 3) .
7. Faa um algoritmo que leia dois nmeros inteiros positivos com 5 dgitos cada e
gere um terceiro nmero inteiro com 10 dgitos, sendo que estes sejam os dgitos
dos dois primeiros intercalados.
Exemplo : Numero_1 = 12345 Numero_2 = 67890 Numero_3 = 1627384950
3. Elabore um algoritmo que leia um nmero, e se ele for maior do que 20, imprimir
a metade desse nmero.
4. Elabore um algoritmo que leia dois nmeros inteiros e efetue a adio; caso o
resultado seja maior que 10, imprima-o.
5. Elabore um algoritmo que leia um nmero e, se ele for positivo, imprima a me-
tade desse nmero, caso contrrio imprima o nmero ao quadrado.
8. Elabore um algoritmo que leia o nome e o peso (em real) de duas pessoas e im-
prima os dados da pessoa mais pesada.
12. Segundo uma tabela mdica, o peso ideal est relacionado com a altura e o sexo.
Elabore um algoritmo que leia a altura e o sexo de uma pessoa, calcule e imprima
seu peso ideal, utilizando as seguintes frmulas.
APNDICE A. EXERCCIOS 74
13. Elabore um algoritmo para testar se uma senha digita igual a Patinho Feio.
Se a senha estiver correta escreva Acesso permitido, do contrario emita a men-
sagem Voc no tem acesso ao sistema.
2. Elabore um algoritmo que leia um nmero e informe se ele divisvel por 10,
por 5, por 2, ou se no divisvel por nenhum deles.
Mdia Conceito
>= 9.0 A
>= 7.5 e < 9.0 B
>= 6.0 e < 7.5 C
>= 4.0 e < 6.0 D
< 4.0 E
mento em 3 vezes. O programa deve pedir para o usurio entrar com o valor da
compra a vista e a opo de compra. O programa deve exibir qual o valor final a
ser pago.
10. Construa a tabela de deciso (veja Tabela 6.1) para o algoritmo 31 abaixo, con-
forme os possveis valores de q1, q2, q3, especificando o que ser impresso em
cada caso ao final da execuo do algoritmo.
11. Construir um algoritmo que tome como entrada trs valores e os imprima em
ordem crescente.
12. Elabore um algoritmo para ler trs valores e verificar se eles podem ser os com-
primentos dos lados de um tringulo, e se forem dizer o tipo de tringulo. Para
APNDICE A. EXERCCIOS 77
Algoritmo 31 Problema 20
var q1, q2, q3: logico
escreva A
se (q1) ento
escreva B
escreva C
m-se
se (q2) ento
escreva D
m-se
escreva E
se (q3) ento
escreva F
seno
escreva G
m-se
escreva H
ser um tringulo necessrio que qualquer um dos lados do mesmo seja menor
que a soma dos outros dois lados, (A < B +C), (B < A+C) e (C < A+B). Utilize
a estrutura de condio se-entao aninhadas. Equiltero aquele que tem os trs
lados iguais (A = B = C.) Issceles aquele que tem dois lados iguais (A = B)
ou (A = C) ou (B = C). Escaleno aquele que tem todos os lados diferentes
(A <> B <> C)
7. Elabore um algoritmo que leia um nmero e imprima a soma dos nmeros ml-
tiplos de 5 no intervalo entre 1 e o nmero informado. Suponha que o nmero
lido ser maior que zero.
9. Elabore um algoritmo que leia 200 nmeros, e imprima quantos so pares e quan-
tos so mpares.
Algoritmo 32 Adivinhacao
var sorteado: inteiro
sorteado SORT EIO(100) {o nmero 100 indica que o sorteio ser de 1 a 100}
2. Uma determinada empresa fez uma pesquisa de mercado para saber se as pes-
soas gostaram ou no de um novo produto que foi lanado. Para cada pessoa en-
trevistada foram coletados os seguintes dados: Sexo (M ou F) e Resposta (Gostou
ou No Gostou). Sabendo-se que foram entrevistados N pessoas, faa um pro-
grama que fornea:
A.6.7 Sries
1. Desenvolva um algoritmo que calcule o valor de a partir da seguinte expresso
matemtica: n
X 1
=4 (1)k ( )
k=0
(2k + 1)
APNDICE A. EXERCCIOS 81
Algoritmo 33 Calculo do pi
var k, n: inteiro
var pi: real
escreva (digite n)
leia(n)
pi 0
para k de 0 ate n passo 1 faa
se k mod 2 = 0 ento
pi pi + 1/(2 k + 1)
seno
pi pi 1/(2 k + 1)
m-se
m-para
pi 4 pi
escreva (O valor de pi , pi)
seno
1 2 3 n
Sn = + + + ... +
2 3 4 n+1
Sn = 11 + 22 + 33 + ... + nn
n1 n2 1
Xn = n + + + ... +
2 3 n
APNDICE A. EXERCCIOS 82
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.
A.7 Vetores
2. Sair
Aps o usurio ter informado os dados das 10 pessoas (caso a opo 1 seja selecio-
nada), o programa deve oferecer as seguintes opes em um segundo menu:
4. Sair
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.
5. Sair do programa.
A.8 Matrizes
3. Sair do programa.
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: s Pn
Pn 2 ( Xi )2
i=1 Xi
i=1
n
dp =
n1
Para esse problema devem ser desenvolvidas 3 funes que iro receber como par-
metros o conjunto de elementos e a quantidade de elementos desse conjunto, e que
faro os seguintes processamentos:
3. Sair.