Você está na página 1de 24

Sergio Augusto C.

Bezerra

Reconstruindo a Lgica de Programao


Para Formalizar Solues atravs de
Algoritmos Estruturados

Visando a Construo do Conhecimento


Uso de Diagramas de Blocos
Um Portugol Direcionado para Linguagens Modernas

MANAUS AM, BRASIL.


Fevereiro de 2014
Prof. M.Sc. Srgio Augusto C. Bezerra 1

Captulo 1: Fundamentos Bsicos


1.1 Repensando sobre Lgica de Programao
Normalmente, encontramos livros e mais livros falando sobre a Lgica de
Programao, onde muitas vezes no passam de simplesmente de livros de receitas de
bolos, contendo passo a passo o que se deve fazer. Ser que o conhecimento lgico do aluno
realmente est sendo explorado e aperfeioado?
Antes de qualquer concluso imediatista, poderamos fazer a seguinte pergunta: O que
a essa tal da Lgica? De maneira geral encontraremos a seguinte definio a seguir:

a cincia que estuda as leis do raciocnio

Mas que leis so essas? Leis do raciocnio da Matemtica, da Fsica, da Geografia, da


vida diria de uma pessoa!? Creio que se uma lei, algum formulou e estabeleceu passos a
serem realizados para que determinado fenmeno fosse realizado. Ento, se seguirmos os
passos da lei estaremos raciocinando logicamente, ou seja, pensando corretamente ou
conforme o que algum estabeleceu?
Neste contexto, surge o termo derivado da matemtica chamado de algoritmo.
Segundo Judith Gersting [GER01], um algoritmo...

um conjunto de instrues que podem ser executadas mecanicamente em um tempo


finito de modo a resolver algum problema.

Atualmente, o termo algoritmos est intimamente relacionado com a rea de


Informtica. Por isso, comum encontrarmos que um algoritmo, segundo Cormem [COR02],
...
qualquer procedimento computacional bem definido que toma algum valor ou
conjunto de valores como entrada e produz algum valor ou conjunto de valores como sada.
Portanto, um algoritmo uma sequncia de passos computacionais que transformam a
entrada na sada.

O conceito acima est associado com o princpio de Processamento de Dados


(Entrada, Processamento, Sada). Onde a entrada pode ser efetuada atravs de um teclado,
mouse ou scanner. O processamento realizado pela Unidade Central de Processamento
(CPU - Central Processing Unit) atravs da execuo de programas.
Programas so algoritmos codificados em uma linguagem de programao (por
exemplo, C, Pascal, Java) que devem estar localizados na memria do computador para serem
executados. A sada pode ser efetuada, por exemplo, atravs de um monitor ou uma
impressora.
Prof. M.Sc. Srgio Augusto C. Bezerra 2

1.2 Linguagem de Programao


uma linguagem artificial, que deliberadamente criada para dizer ao computador o
que fazer. Geralmente, uma linguagem de programao consiste em um vocbulo e um
conjunto de regras (chamada sintaxe), onde so utilizados para escrever um programa, que na
maioria dos casos, deve ser traduzido antes do computador poder execut-lo [MEY00]. Vale
ressaltar que o profissional responsvel em construir os programas chamado de
programador.

Alm da sintaxe, existem as especificaes do significado de qualquer programa,


sintaticamente vlidas, escritas na linguagem para formalizar alguma soluo, que
denominamos de regras de semntica.

Embora seja teoricamente possvel a construo de computadores especiais, capazes


de executar programas escritos em uma linguagem de programao qualquer, os
computadores, existentes atualmente, so capazes de executar somente programas em
linguagem de baixo nvel, a linguagem de mquina.

As linguagens de mquina so projetadas em funo da rapidez de execuo de


programas, do custo de sua implementao e da flexibilidade. Por outro lado, linguagens de
programao de alto nvel so frequentemente projetadas em funo da facilidade na
construo e da confiabilidade de programas.

O problema bsico, ento, como a linguagem de nvel mais alto pode ser
implementada em um computador, cuja linguagem de mquina bastante diferente, e de nvel
bem mais baixo. A soluo fazer com que o computador, que s entende linguagem de
mquina se comporte como se entendesse uma linguagem de programao de alto nvel,
utilizando programas tradutores, escritos em linguagem de mquina, capazes de traduzir um
programa escrito em linguagem de alto nvel para linguagem de mquina. Os principais tipos
de tradutores so: Interpretador e Tradutor.

1.2.1 Interpretador
Um interpretador um programa que executa, repetidamente, a seguinte sequncia
linha a linha do programa:
1 Obter o prximo comando do programa.
2 Determinar que aes devam ser executadas.
3 Executar estas aes.

1.2.2 Tradutor
Nesta soluo, programas escritos em linguagem de alto nvel so traduzidos para
verses em linguagem de mquina, antes de serem executados.
Os tradutores usados para realizar esta soluo recebem nomes especiais como
compilador, montador, ligador e carregador.
Prof. M.Sc. Srgio Augusto C. Bezerra 3

1.2.3 Etapas da Programao


Muita ateno, meu caro leitor, pois para voc desenvolver os seus programas, a
seqncia apresentada na Figura 1.1 deve fazer parte, de agora em diante, de sua rotina diria.

Problema

Programador

Formalizao da Soluo (Algoritmo)

Programador

Cdigo Fonte do Programa

Tradutor

Programa em Linguagem de Mquina

Figura 1.1: Etapas para Desenvolver um programa.

1.3 Formalismo Bsico


1.3.1 Variveis
Se eu perguntasse para voc o que significa varivel, com certeza vinha a sua mente
algumas disciplinas bastante emocionantes, como Matemtica, Fsica, Qumica, entre outras.
Ento, lembrou qual o objetivo de uma varivel?... isso a, simplesmente uma
formalizao Matemtica para representar um valor de um determinado conjunto. Um
conjunto tambm possui representaes formais, como o conjunto dos nmeros reais que
representado por . Um conjunto especifica o domnio de uma varivel.
Em geral, matematicamente sabemos que uma varivel possui um nome (usado para
identificao), um domnio (para estabelecer uma faixa de valores possveis), e um valor (que
pode ser atribudo conforme o seu domnio).
Formalizando o conhecimento de varivel atravs da Informtica chegamos ao
resultado do quadro apresentado na Tabela 1.2:

Matemtica Informtica
nome nome ou identificador
domnio tipo de dado
Tabela 1.2: Analogia entre as variveis de Matemtica e Informtica.
Prof. M.Sc. Srgio Augusto C. Bezerra 4

Com relao ao tipo de uma varivel, alm de limitar a faixa de valores, tambm
especifica ao computador a quantidade de memria que ele ter que reservar para uma
determinada varivel.
Sendo assim, para ns da rea de Informtica, uma varivel uma abstrao de uma
regio de memria do computador, onde esta regio pode ser identificada e manipulada por
um nome que o programador dar a varivel. Alm disso, o espao e o contedo desta regio
de memria, que agora ser representada por uma varivel, especificado pelo programador
quando ele define o tipo da varivel (Ateno ...!!! O tipo de uma varivel, no esquea,
anlogo ao domnio de uma varivel!).

Formalizao do nome (identificador) da varivel


E a, voc conseguiu conceber o conceito de varivel? Muito bem! Caso contrrio,
procure discutir com os colegas o assunto.
Bem, vimos que o nome da varivel foi uma das caractersticas descritas acima, agora
vamos conhecer como formalizar o nome de uma varivel.
O nome de uma varivel pode ser uma seqncia de um ou mais caracteres alfabticos
e/ou numricos. O nome sempre iniciar com uma letra ou um caractere de sublinhado ( _,
underscore) . Vale ressaltar que letras minsculas e maisculas so diferentes. Alm desses
detalhes de sintaxe no esquea de sempre batizar uma varivel com um nome que expresse o
seu verdadeiro propsito ou finalidade.Vejamos alguns exemplos vlidos e invlidos expostos
na da tabela 1.3:

Vlidos media _contador salBruto NOTA Situacao


Invlidos media anual sal-minimo 5toneladas escreva
Tabela 1.3: Nomes vlidos e invlidos atribudos a uma varivel.

Dos quatro exemplos invlidos talvez voc deva estar se perguntando sobre o ltimo
exemplo. A palavra escreva no pode ser utilizada para nomear uma varivel porque uma
palavra reservada da sintaxe do Portugol, bem como as palavras abaixo:
inteiro real caractere lgico leia
se seno enquanto para faa

Tipos Primitivos de Dados


Vimos que a definio do tipo da varivel importante para que o computador reserve
uma regio da memria, preocupando-se com o tamanho e o valor a ser armazenado nesta
regio, bem como os operadores que se podem utilizar para se realizar operaes lgicas e
aritmticas.
Os tipos bsicos que formalmente utilizaremos so chamados de Tipos Primitivos de
Dados. A partir destes tipos primitivos podem ser construdos outros tipos, que denominamos
de tipos definidos pelo prprio programador, onde estudaremos mais na frente no captulo de
Estruturas Heterogneas (Registros).
A sintaxe do nosso Portugol possui cinco tipos primitivos de dados, possibilitando que
uma varivel possa armazenar, conforme o tipo a seguir apresentado na Tabela 1.4:
Prof. M.Sc. Srgio Augusto C. Bezerra 5

Tipo Descrio
inteiro Qualquer valor pertencente ao conjunto dos nmeros inteiros.
real Qualquer valor pertencente ao conjunto dos nmeros reais.
caractere Apenas 1 elemento pertencente a um dos conjuntos a seguir:
{a, ..., z, A, ..., Z}, {0, ..., 9}, {*, ?, &, =, +, $, -, /, , |, }
texto Uma sequncia ou cadeia com nenhum, um ou mais
caracteres.
lgico Pode armazenar apenas os valores F (FALSO) ou V
(VERDADEIRO).
Tabela 1.4: Domnios ou tipos primitivos de uma varivel.

Para diferenciarmos um valor caractere ou texto de algum valor de outro tipo,


adotaremos que todo valor caractere dever ficar entre apstrofos, por exemplo, A, x, 1,
F, e todo valor texto, cadeia de caracteres consecutivos ou nenhum, fique descrito entre
aspas, por exemplo, FALSO, ALGORITMO, Sergio Bezerra, R$ 100,00, 092-3611-
1234, .

Declarao de Variveis
Sintaxe: tipo varivelX;
tipo varivel1, varivel2, ..., varivelN;

Devemos seguir a sintaxe acima para declarar uma varivel, onde primeiramente
definimos o tipo da varivel (anlogo ao domnio de uma varivel) e depois o identificador
(nome da varivel). Se quisermos declarar outras variveis do mesmo tipo basta definirmos os
outros nomes entre vrgulas.

Exemplos: real nota1, nota2, media;


inteiro idade;
caractere nivel;

Declarao de Constantes
Quando declaramos uma varivel como constante, estamos fixando o valor da varivel
em todo o algoritmo. Por exemplo, se voc fosse calcular a rea de um crculo (rea =
*Raio2) trabalharia com um valor constante, o PI (), logo poderamos definir uma varivel,
por exemplo, denominada PI. Para isto, declaramos uma varivel PI como uma constante,
desta forma PI se apresentar, em todo o algoritmo, sempre com o mesmo valor.
A vantagem de se definir uma constante que esta no correr o risco de ter o seu
valor alterado no decorrer do algoritmo. No entanto, se houver necessidade de alguma
alterao ento esta deve realizada no incio da sua atribuio. Em geral as constantes so
nomeadas com letras maisculas.

Sintaxe: constante nomeDaConstante <valor da constante>;

Exemplo: constante PI 3.1415;


Prof. M.Sc. Srgio Augusto C. Bezerra 6

1.3.2 Operadores Aritmticos, Relacionais e Lgicos


Operadores Aritmticos

Smbolo Significado Exemplo


+ Adio a+b
- Subtrao ab
* Multiplicao a*b
/ Diviso a/b
% Resto da diviso inteira a%b
** ou ou ^ Potenciao a**b, a^b
// Radiciao a//b
Tabela 1.54: Operadores Aritmticos.

Geralmente, outros operadores aritmticos no convencionais so utilizados, a saber:


mod, que o resto de uma diviso, e div, que o quociente da diviso inteira. Vejamos
alguns exemplos destes dois casos:
10 div 2
Exemplos: 10 div 2 = 5 10 2 10 3
10 mod 2 = 0
10 5 9 3
10 div 3 = 3 0 1
10 mod 3 = 1
10 div 3

10 mod 2 10 mod 3

Operadores Relacionais
Como voc j sabe, os operadores relacionais so utilizados para fazer comparaes
entre dois valores, desde que estes apresentem os mesmos tipos. Lembre-se que esses valores
podem ser constantes, variveis ou, at mesmo, expresses contendo diversos operadores. Na
tabela 1.6 apresentamos, ou melhor, relembramos os operadores relacionais da prpria
Matemtica e que utilizaremos para construir algoritmos. Aproveitando o seu conhecimento
sobre o assunto ora exposto, quero lembr-lo que os resultados de uma comparao, como nos
exemplos da tabela, continuam sendo V ou F, ou seja, um dos valores do tipo lgico.

Smbolo Significado Exemplo


= Igual a a=b
<> Diferente a <> b
> Maior que a>b
>= Maior ou igual a a>=b
< Menor que a<b
<= Menor ou igual a A<=b
Tabela 1.6: Operadores Relacionais.
Prof. M.Sc. Srgio Augusto C. Bezerra 7

Exemplos:
a) 5*2 = 40/4 b) 23mod7 < 17mod8 c) 3*5div4 <=3**2/0.5 d) 2+8mod7 >= 3*6-15
10 = 10 2 < 1 15div4 <= 9/0.5 2 + 1 >= 18-15
V F 3 <= 18 3 >= 3
V

Operadores Lgicos
Alm dos operadores relacionais, trabalharemos tambm com trs operadores lgicos
(e, ou, no), descritos na tabela 1.7, que quando usados em expresses lgicas resultam em
um valor lgico (F ou V). Esses operadores so definidos pela lgebra das Proposies como
conectivos que so usados na formao de novas proposies a partir de outras existentes.
Segundo Harry Farrer (FAR99), considera-se uma proposio como sendo uma
varivel lgica, uma relao ou uma expresso lgica composta. Por exemplo, poderamos ter
duas proposies combinando-se atravs de um conectivo e para formar uma proposio
chamada conjuno das proposies originais.
A conjuno das proposies:
1) r e s: verdadeira se e somente se ambas as proposies so verdadeiras;
2) r ou s: verdadeira se pelo menos uma proposio for verdadeira.

Smbolo Significado Exemplo


e Conjuno aeb
ou Disjuno (no-exclusiva) a ou b
xou
no Negao (no) no a
Tabela 1.7: Operadores Lgicos.

Segundo Forbellone (FOR93), tabela verdade o conjunto de todas as possibilidades


combinatrias entre os valores de diversas variveis lgicas, as quais se encontram em apenas
duas situaes, e um conjunto de operadores lgicos. Na tabela 1.8, podemos observar as
situaes da tabela verdade para os operadores lgicos.

A B AeB A B A ou B
F F F F F F A no A
F V
F V F F V V
V F
V F F V F V
V V V V V V

Tabela 1.8: Tabela verdade para os conectores e, ou e no.

Exemplos:
a) 4 > 3 e 3*2 = 3 b) 2**3 + 2//9 12 ou 10mod3 + 5*20div4 = 5**2
V e 5 =5 8 + 3 12 ou 1 + 25 = 25
VeV V ou F
V
Prof. M.Sc. Srgio Augusto C. Bezerra 8

c) no (F ou V) ou ((V e F) ou (no (32/4 = 16div2) ))


no (V) ou (F ou (no (V)))
F ou (F ou F)
F ou F
F

1.3.3 Funes Primitivas


Assumiremos que as funes, da sintaxe do nosso portugol, que esto descritas na
tabela 1.9, podem ser realizadas no processador de nosso computador hipottico.

Funo Significado Exemplo


sin(n) Retorna o seno de n sin(30)
cos(n) Retorna o cosseno de n cos(45)
arctan(n) Retorna o arco, em radianos, cuja arctan(60)
tangente n.
abs(n) Retorna o valor absoluto (mdulo) de n abs(-5)
int(n) Retorna a parte inteira de n int(35.8)
sqr(n) Retorna o quadrado de n, n2. sqr(4)
sqrt(n) Retorna a raiz quadrada de n sqrt(9)
pot(b, e) Retorna o valor de uma exponenciao pot(3,2)
de uma base b elevada a um expoente e
exp(n) Retorna o valor de en e3
frac(n) Retorna a parte fracionria de n.
Tabela 1.9: Funes utilizadas em algoritmo.

Tenha em mente que a maioria das funes sempre retornar algum valor para
posteriormente ser manipulado. As manipulaes possveis so:
Fazer com que alguma varivel guarde este valor retornado pela funo
(atribuir o valor a uma varivel). Ateno! Observe que a varivel tem que
estar preparada para receber o valor da funo. Ou seja, se a funo retornar
um valor real, logo a varivel tem que ser do tipo real. Isto nos diz tambm
que a funo possui um tipo de retorno.
Escrever o valor retornado como resposta ao usurio atravs de algum
dispositivo de sada;
Comparar o valor retornado com algum outro valor.

1.3.4 Precedncia dos Operadores


Para solucionar uma expresso matemtica envolvendo vrios operadores importante
sabermos a ordem de prioridades dos operadores, caso contrrio, resultados incorretos
surgiro. Por exemplo, qual o resultado da expresso 3*8 4? 20 ou 12? Claro que seria 20,
pois voc primeiro multiplicaria o 3 pelo 8, ento, s depois subtrairia o resultado por 4. Note
que acabamos de trabalhar com prioridades, certo? Alm das precedncias da Matemtica que
conhecemos, existem outras, ento, segue abaixo uma lista contendo as precedncias dos
operadores.
Prof. M.Sc. Srgio Augusto C. Bezerra 9

1. Realizar as operaes mais internas aos parnteses.


2. Executar as funes.
3. Realizar operaes de multiplicao e/ou diviso.
4. Realizar operaes de adio e/ou subtrao.
5. Realizar operaes relacionais.
6. Realizar operaes lgicas.

1.3.5 Instrues Primitivas


Alm das funes, assumiremos que o processador do nosso computador hipottico
realiza algumas instrues primitivas. A instruo diz ao computador que ao ele deve
tomar. Atravs de alguns comandos especiais podemos formalizar uma instruo, como
descrito nas sees seguintes.

Comando de Atribuio
As atribuies j fazem parte de sua vida. No acredita!? Pois bem, quando voc
chega ao resultado de uma equao no qual a soluo, por exemplo, seja X = 20. Neste caso,
uma atribuio foi realizada. Ou seja, o valor 20 est sendo atribudo a varivel X. Em outras
palavras, isto significa que a varivel X recebe ou contm o valor 20.

Como o computador realiza esta ao de atribuir um valor a uma varivel?


Para responder esta pergunta, observemos os passos a seguir:
1. Declaramos as variveis.
2. Atribumos o valor a varivel.
No Portugol, seria:
real X;
X 20;
Veja que ao final de cada instruo existe um ponto e vrgula, isto informa ao
computador o final da instruo. Na primeira linha, dizemos ao computador para ele reservar
uma regio de memria e identific-la como X. Como o tipo da varivel real, o computador
s armazenar algum valor deste tipo. Na segunda linha, dizemos ao computador para ele
atribuir (armazenar ou escrever) o valor 20 na varivel X (ou seja, atribuir o valor na regio
de memria identificada como X). Sendo assim, utilizaremos o sinal de igualdade () para
simbolizar (ou formalizar) o comando de atribuio.

Comandos de Entrada e Sada


Normalmente quando estamos solucionando um problema identificamos os dados
fornecidos (dados de entrada), depois calculamos (processamento) e, por fim, escrevemos o
resultado (dado de sada). Mas como o computador realizar esta seqncia lgica?
Para que este identifique os dados de entrada, faz-se necessrio que os informemos
atravs de algum dispositivo de entrada, como o teclado, por exemplo. Desta forma, o
computador poder ler os dados fornecidos e atribu-los as suas respectivas variveis. Aps
este passo, o computador realizar as instrues de processamento conforme descritas no seu
algoritmo. Por ltimo, faz-se necessrio que o resultado seja mostrado por algum dispositivo
de sada, como o monitor ou impressora, por exemplo.
Prof. M.Sc. Srgio Augusto C. Bezerra 10

Tudo bem! Mas como representar esta seqncia lgica atravs de um algoritmo?
Bem, para representar ao de ler os dados de entrada e escrever os dados de sada,
utilizaremos os comandos leia e escreva, respectivamente, como formalismo de instruo
destas aes. Vejamos os exemplos a seguir para entender estes comandos.

Exemplos: leia(x);
leia(a, b, c);
escreva(x);
escreva(a, b, c);

Na primeira linha, o comando leia(x), captura o dado fornecido pelo usurio, atravs
de algum dispositivo de entrada do computador, e o atribui a varivel x. Analogamente, na
segunda linha, o comando, leia(a, b, c), atribui os valores fornecidos pelo usurio as variveis
a, b e c, de acordo com a ordem dos dados informados.
Na terceira linha, o comando escreva(x), mostra o valor (ou contedo) da varivel x
atravs de algum dispositivo de sada do computador. O que a quarta linha escrever?
Vejamos algumas linhas de um algoritmo e observemos a sada de dados atravs do
comando escreva:

inteiro x, y, soma;
x 5;
y 7;
soma x + y;
escreva(soma);

Observe que o exemplo acima sempre fornecer 12 como resultado. Entretanto,


poderamos modificar o algoritmo acima para que ele pudesse ler quaisquer valores inteiros
fornecidos por um usurio para as variveis x e y, como a seguir:

inteiro x, y, soma;
leia (x,y);
soma x + y;
escreva(soma);

Para representar graficamente as instrues leia e escreva atravs do Diagrama de


Blocos, utilizaremos, respectivamente, os smbolos do Teclado (que indicar o processo de
leitura) e da Sada de dados em vdeo (para mostrar os dados na tela do vdeo). Enquanto que
para representar o processamento ou atribuio utilizaremos o smbolo de Processamento.
Na figura 1.2 apresentamos os smbolos para as instrues mencionadas. Outros smbolos
sero apresentados medida que formos estudando os assuntos.

Teclado Sada de dados Processamento

Figura 1.2: Smbolos para entrada, processamento e sada de dados.


Prof. M.Sc. Srgio Augusto C. Bezerra 11

Ento, para o exemplo anterior a representao no Diagrama de Blocos seria:


x, y

soma x + y

soma

Figura 1.3: Representao em Diagrama de Blocos do exemplo anterior.


Prof. M.Sc. Srgio Augusto C. Bezerra 12

Captulo 2: Formalizando Solues


para Problemas sem Decises
2.1 Introduo
Uma vez por outra, nos deparamos com realidades que possuem problemas que no
exigem nenhuma tomada de deciso, simplesmente resolvemos estes problemas realizando
aes sequencialmente. Neste contexto, este captulo visa, atravs da Lgica de Programao,
fornecer subsdios para automatizar estas aes atravs da formalizao de solues para
problemas que envolvam este tipo de realidade.

2.2 Bloco de Aes


Bloco de aes ou simplesmente bloco um conjunto de tarefas ou instrues
agrupadas, sequencialmente ou no, com um objetivo especfico, onde o agrupamento
delimitado por um incio e um fim. Neste contexto, um bloco de aes pode ser um algoritmo,
uma funo ou um procedimento. A seguir, temos a sintaxe e um exemplo de um bloco de
aes tanto em Diagrama de Blocos como em Portugol, que so alguns dos mtodos
existentes usados para formalizar solues. O primeiro no se preocupa tanto com os detalhes
de implementao, e sim, em abstrair ou modelar a realidade. Enquanto que o segundo
mtodo usado de forma a especificar em detalhes as aes da realidade atravs de um
pseudocdigo, que uma formalizao textual organizada e lgica usada para escrever aes
a serem realizadas por um computador hipottico.

inicio

INCIO
sequencia das tarefas ou instrues declarao das variveis
sequencia das tarefas ou instrues
fim FIM

Diagrama de Blocos Portugus Estruturado (Portugol)

Fig. 2.1 Agregao de aes atravs de Diagrama de Blocos e Portugol.

2.3 Problemas Sem Decises (sequencia)


Quando estamos trabalhando com problemas da realidade que no envolvem nenhuma
tomada de deciso, as aes que realizamos seguem uma ordem seqencial. Mas quando os
problemas envolvem alguma tomada de deciso temos sempre que observar as condies
impostas por estes problemas, pois dependendo da condio estabelecida realizaremos esta ou
aquela tarefa. Para entender melhor o que eu estou dizendo analise os dois problemas a seguir:
Prof. M.Sc. Srgio Augusto C. Bezerra 13

Sabendo que f(x) = 2x + 1, calcule f(3).

3x 9, se x 5
Dada a funo f(x) = , calcule f(3).
5 x 15, se x 5

Analisando o primeiro problema, voc iria calcular o valor de f(x) independente do


valor de x, certo? Pois bem, no segundo problema voc tambm iria calcular o valor de f(x),
mas desta vez voc atentaria para as condies estabelecidas. H, agora voc entendeu,
beleza? No? Ento, voc est com dificuldades na Matemtica, e no na Lgica de
Programao. Procure resolver este problema.
Bem, com a diferena estabelecida entre problemas sem e com decises, vamos nos
deter neste captulo apenas a formalizarmos solues para problemas que no envolvam
decises, a partir do prximo captulo estudaremos problemas com decises.

Como voc resolveria o problema a seguir?

Uma determinada fora foi aplicada a um corpo de 20kg que passou a se movimentar
com acelerao de 2,5m/s2. Qual o valor da fora aplicada a este corpo?

Bem, primeiramente, eu sei que voc iria organizar os dados do problema,


identificando os dados fornecidos (massa e acelerao), a frmula a ser usada no clculo (2
Lei de Newton, F=m.a) e depois forneceria o resultado da fora. Ento, ficaria:

dados de massa 20kg


entrada acelerao 2,5m / s 2 Soluo

F=ma
clculo F m.a F = 20 2,5
F = 50N
dado de
sada F ??????
Fig. 2.2: Formalizao Matemtica aplicada na Fsica.

inicio

m,a
INCIO
real F,m,a;
F m*a leia(m,a);
F m*a;
escreva(F);
F FIM

fim
Diagrama de Blocos Portugus Estruturado (Portugol)

Fig. 2.3 Formalizao da Informtica (algoritmo) aplicada a Fsica


Prof. M.Sc. Srgio Augusto C. Bezerra 14

Exerccios: Para cada problema a seguir formalize uma soluo atravs de um algoritmo
especificado em Diagrama de Blocos e em Portugol:

1) O espao final de um determinado ponto material, onde s so v.t (MU).


2) A velocidade final de um mvel, onde v vo a.t (MUV).
1
3) O espao final de um determinado ponto material, onde s so vo .t a.t 2 (MUV).
2
1
4) A energia cintica produzida por um corpo, onde Ec m.v 2
2
5) A quantidade de calor produzido por um corpo, onde Q = m.c.(t to).
6) A fora eltrica produzida por duas cargas a uma determinada distncia no espao,
Q1 . Q2
onde Fel K . .
d2
7) A velocidade final de um mvel ao percorrer uma determinada distncia,
onde v vo 2.a.( s so ) .
2

8) A distncia entre dois pontos no espao, onde d ( x2 x1 ) 2 ( y 2 y1 ) 2 .


tg a tg b
9) A tangente da soma de dois ngulos, onde tg (a b) .
1 tg a tg b
10) O determinante de uma matriz de ordem 2.
11) O determinante de uma matriz de ordem 3.
12) O determinante de uma matriz de ordem 4.
4r 3
13) O volume de uma esfera. Vesf .
3
14) A Taxa de Natalidade que a relao entre o nmero de nascimentos ocorridos em
um ano e o nmero de habitantes. Obtemos essa taxa de acordo com a frmula a
seguir:
nmero de nascimento 1.000
taxa de natalidade
nmero de habi tan tes
Exemplo: Se um pas, cuja populao total de 10 milhes de habitantes, nasceram
em um ano 200 mil pessoas, temos:
200.000 1.000
taxa de natalidade 20%
10.000.000
15) A Taxa de Mortalidade que a relao entre o nmero de bitos ocorridos em um
ano e o nmero de habitantes. Obtemos essa taxa de acordo com a frmula a seguir:
nmero de bitos 1.000
taxa de mortalidade
nmero de habi tan tes

16) O Crescimento Vegetativo ou Natural (CV) que a diferena entre a taxa de


natalidade e a taxa de mortalidade. Veja a frmula a seguir para este clculo:

CV = taxa da natalidade taxa mortalidade


Prof. M.Sc. Srgio Augusto C. Bezerra 15

Captulo 3: Formalizando Solues


para Problemas com Decises
3.1 Problemas Envolvendo Decises Simples
Existem procedimentos que so adotados por organismos celulares ou equipamentos
quando algum condio ou limite preestabelecido desrespeitado. Por exemplo, uma
temperatura acima de 37C em uma pessoa um sinal que algo de errado est acontecendo
com o corpo que pode reagir em nvel celular conforme o rgo envolvido. Semelhantemente,
um sensor aps captar algum sinal de movimento, presso ou luz pode produzir alguma
resposta a um equipamento, onde este por sua vez pode emitir algum sinal, seja sonoro,
luminoso ou de onda. Em geral, tais situaes no esboam qualquer reao, ou se mantm
estvel, quando a condio no for desrespeitada. Este contexto, muito presente em nosso
meio, caracteriza-se por problemas que envolvem decises simples, denominada tambm de
estrutura de controle simples. Sua representao pode ser abstrada, visualizada e entendida
por meio de diagrama de blocos ou Portugol, como na Figura 3.1 para uma instruo e Figura
3.2 para uma ou vrias instrues. Neste ltimo caso, as instrues devem estar agrupadas
entre as palavras-chaves incio e fim.

Instruo a ser realizada quando


a condio for verdadeira.

F V
condio

se (condio)
InstruoY InstruoY;

(a) (b)
Fig.3.1: Decises ou Estruturas de Controle Simples para uma instruo: (a) Diagrama de Blocos; (b) Portugol.

Instrues a serem realizadas quando a condio ou condies


tiverem como resultado o valor lgico verdadeiro.

F V
condio
se (condio)
Instruo1 incio
Instruo2 Instruo1;
Instruo2;
InstruoN
InstruoN;
fim

(a) (b)
Fig.3.2: Decises ou Estruturas de Controle Simples para muitas instrues: (a) Diagrama de Blocos; (b) Portugol.
Prof. M.Sc. Srgio Augusto C. Bezerra 16

Exemplo 3.1. Dado o diagrama de blocos a seguir, verifique quais so os resultados de sada
para os valore de entrada de x, a saber: -2, 0, 3, 5 e 10:

inicio incio
inteiro y, x ;
y2 y 2;
escreva(Valor de x: );
leia(x);
Valor de x: se(x > 5)
y 10;
escreva(Valor de x: , y);
x
fim
F V (b)
x>5

y 10
x y
-2
0
Valor de y: , y 3
5
fim 10

(a) (c)
Fig.3.3: Exemplo de Decises Simples: (a) Diagrama de Blocos; (b) Portugol; (c) Tabela para as variveis x e y.

Exerccio 3.1. Tendo como base o exemplo anterior, construa um algoritmo por meio de um
diagrama de blocos e um Portugol para a funo y = x2 + 2 para x > 0 e x < 5, onde y
inicialmente vale 0 (y = 0). Teste o algoritmo com valores de entrada de x conforme a tabela
anterior.
Exemplo 3.2. Algoritmo para emitir uma mensagem de acesso ou no a um cofre.

incio incio
inteiro s;
m Acesso Negado! texto m, u;
m Acesso Negado!;
escreva(Usurio: );
Usurio: leia(u);
Senha:
escreva(Senha: );
u, s leia(s);
se(u = IFAM e s = 123)
m Acesso Autorizado!;
F
u = IFAM e s = 123 V escreva(Cofre: , m);
fim
m Acesso Autorizado! (b)

u s u=IFAM e s=123 m
Cofre: , m IFAM 123
IFAM 527
UFAM 123
fim UFAM 246
(a) (c)
Fig.3.4: Exemplo de Decises Simples com duas condies e a conjuno como conectivo: (a) Diagrama de
Blocos; (b) Portugol; (c) Tabela para as variveis u, s, m, alm dos resultados lgicos das condies.
Prof. M.Sc. Srgio Augusto C. Bezerra 17

Exerccio 3.2. Se m recebesse inicialmente Acesso Autorizado!, como ficaria o


diagrama de blocos e o Portugol do exemplo 3.2? Preencha a tabela deste exemplo para a
nova soluo.

3.2 Problemas Envolvendo Decises Compostas


Instruo a ser realizada quando Instruo a ser realizada quando
a condio for falsa. a condio for verdadeira.

F V
condio se (condio)
InstruoY;
seno
InstruoX InstruoY
InstruoX;

(a) (b)
Fig.3.5: Decises Compostas: (a) Diagrama de Blocos; (b) Portugol.

A Figura 3.5 apresenta um diagrama de blocos e um Portugol para problemas que


envolvem Decises Compostas ou Desvio Condicional Composto. Observe que na Figura
3.5a, aps uma tomada de deciso o algoritmo realizar apenas uma instruo. Mas, podem
surgir situaes em que mais de uma instruo deva ser realizada. Neste caso, devemos
agrupar estas instrues entre incio e fim, como na Figura 3.6. A Figura 3.7 apresenta um
exemplo como ilustrao.

se (condio) se (x > 0)
incio incio
Instruo1; y x + 10;
Instruo2; z x*10;
fim fim
seno seno
incio incio
Instruo3; y = x 10;
Instruo4; z = x/10;
fim fim
Fig.3.6 Sintaxe do Portugol para Decises Fig.3.7 Exemplo de um Portugol de Decises
Compostas com mais de uma instruo. Compostas com mais de uma instruo.

Exemplo: Construa um algoritmo para calcular o valor de y de acordo com o valor de x


fornecido pelo usurio, onde y = 2x, se x 0, ou y = -x + 2, se x < 0.
Prof. M.Sc. Srgio Augusto C. Bezerra 18

Soluo:

INCIO

x incio
F V
inteiro x, y;
x >= 0 leia(x);
se (x >=0)
y -x + 2 y 2*x y 2*x;
seno
y -x + 2;
escreva(y);
y fim

FIM

(a) (b)

Fig.3.8: Deciso Composta com uma instruo a ser executada para calcular o valor de y: (a) Diagrama de
Blocos e (b) Portugol.

Exerccios: Para cada problema abaixo formalize uma soluo por meio de um algoritmo
especificado em Diagrama de Blocos e Portugol. Teste seu algoritmo para alguns valores.
a) Calcular e informar a soma dos termos de uma PG finita. Onde Sn = a1(qn 1)/(q
1) se q 1, e Sn = n*a1, se q = 1.
b) Calcular as razes de uma equao do segundo grau, levando em considerao a
anlise da existncia de razes reais.
c) Autorizar o acesso de um cliente a um caixa eletrnico atravs do nmero do carto
e senha. O seu algoritmo deve comparar um nmero qualquer fornecido pelo usurio tanto
para o carto como para a senha com o que voc estabelecer para se acessar o caixa
eletrnico. Em caso de sucesso ou no, o algoritmo deve emitir uma mensagem,
respectivamente, de ACESSO AUTORIZADO ou ACESSO NEGADO.
d) Calcular e informar a resistncia total de dois resistores. O usurio informar se os
mesmos esto em srie (RT = R1 + R2) ou em paralelo ( RT=(R1R2)/(R1 + R2) ).
e) Validar uma nota digitada por um usurio, onde os valores devem se encontrar na
faixa de 0 a 10. Ento, o algoritmo ler a nota, verificar se a nota est no intervalo e emitir
uma mensagem NOTA VLIDA, caso contrrio NOTA INVLIDA.
f) Leia um valor de x e fornea o resultado de y. Sabendo que y = x2 + 2x, se x 1, e
y = -3x + 1, se x < 1.
g) Calcular a mdia de um aluno em uma disciplina, informando se o aluno est
reprovado (mdia < 5,0) ou aprovado (mdia 5,0). (media = (Prova1 + Prova2 +
3Projeto)/5).
Prof. M.Sc. Srgio Augusto C. Bezerra 19

h) Calcule o valor de y e z de acordo com o valor de x. (y = x2 1 e z = 2x, se o valor


de x <-2 ou x > +2; caso contrrio y = x/sen(300) e z = x).

3.3 Problemas Envolvendo Decises Encadeadas


A condio2 ser testada caso A Instruo1 ser realizada quando a
a condio1 seja falsa. condio1 for verdadeira.

F V
condio1

F V
condio2 Instruo1

A Instruo2 ser realizada quando a condio1


Instruo3 Instruo2 for falsa e a condio2 for verdadeira.

A Instruo3 ser realizada quando a


condio1 e a condio2 forem falsas.

Fig.3.9: Diagrama de Blocos para Decises Encadeadas com uma Instruo a ser executada aps
verificao (falso ou verdadeiro) de uma determinada condio.

Para escrever o algoritmo em Portugol de acordo com Diagrama de Blocos da Figura


3.9, procedemos conforme a Figura 3.9a. Se quisermos ser mais explcitos quanto s
instrues a serem executadas aps a verificao da primeira condio, devemos limitar tais
instrues com as palavras chaves incio e fim, conforme mencionado anteriormente para
vrias instrues. Veja na Figura 3.10b e 3.10c como fica mais evidente o que ser realizado
quando a condio1 for falsa, a pesar de sabermos que no so necessrios os limitadores
incio e fim.

se (condio1) se (condio1) se (condio1)


Instruo1; incio incio
seno Instruo1; Instruo1;
fim fim
se (condio2)
seno seno
Instruo2; incio incio
seno se (condio2) se (condio2)
Instruo3; Instruo2; incio
seno Instruo2;
Instruo3; fim
(a)
fim seno
incio
Instruo3;
(b) fim
fim
(c)
Fig.3.10: Portugol para Decises Encadeadas com uma Instruo a ser executada aps verificao
(falso ou verdadeiro) de uma determinada condio.
Prof. M.Sc. Srgio Augusto C. Bezerra 20

Exemplo: Construa um algoritmo para ler um valor x e fornecer o resultado de y.


Sabendo que y = x2 + x - 5, se x 3, e y = x + 1, se x < 3 e x -1, e y = 1, se x < -1. O
domnio das variveis deve ser inteiro.

INCIO

incio
x inteiro x,y;

F V
leia(x);
x >= 3
se (x >= 3)
F V incio
x >= -1 yx**2 +x - 5 y x**2 +x - 5;
fim
y1 yx+1 seno
incio
se (x >= -1)
y x + 1;
seno
y 1;
y fim
escreva(y);
FIM fim

Fig.3.11: Diagrama de Blocos e Portugol para Decises Encadeadas com uma Instruo a ser executada
aps verificao (falso ou verdadeiro) de uma determinada condio.

Exerccios: Para cada problema abaixo formalize uma soluo atravs de um algoritmo
especificado em Diagrama de Blocos e Portugol que:

a) Calcule o Imposto de Renda a ser descontado no salrio de um trabalhador. As faixas


salariais em funo dos descontos so mostradas na tabela abaixo.

Faixa Salarial (R$) Desconto


At 1.050,00 Isento
> 1.050,00 e 2.500,00 15%
> 2.500,00 e 7.500,00 25%
> 7.500,00 35%

b) Dados trs valores para os lados (A, B e C) de um tringulo verificar e informar se estes
valores formam um tringulo (A<B+C e B<A+C e C<A+B) ou no. Em caso verdadeiro,
informe se um tringulo equiltero (A=B e B=C), issceles (A=B ou B=C ou A=C) ou
escaleno (todos os lados diferentes).

c) Efetue a leitura de trs valores e apresente-os em ordem crescente.

d) Leia trs valores (A, B e C) e efetue o clculo da equao de segundo grau, apresentando as
duas razes, se para os valores informados for possvel efetuar o referido clculo.
Prof. M.Sc. Srgio Augusto C. Bezerra 21

e) Efetue o clculo do reajuste de salrio de um funcionrio. Considere que o funcionrio


receber um reajuste de 15%, caso seu salrio seja menor que R$ 700. Se o salrio for maior
ou igual a R$ 700 e menor ou igual a R$ 1200 seu reajuste ser de 10%. Mas se o salrio for
maior que 1200, o reajuste dever ser de 5%.

f) Classifique um nadador, conforme a sua idade, nas seguintes categorias:

Infantil A 5 a 7 anos
Infantil B 8 a 10 anos
Juvenil A 11 a 13 anos
Juvenil B 14 a 17 anos
Snior maior ou igual a 18 anos

g) Leia o nmero de faltas e o valor de duas notas de um aluno para uma determinada
disciplina de 80 horas, realize os clculos necessrios, e informe a mdia e a situao do aluno
mediante as seguintes regras: APROVADO, se a mdia for maior ou igual a cinco e possuir
no mnimo 75% de frequncia; REPROVADO, se a mdia for menor que cinco;
REPROVADO, se a frequncia for menor que 75%, independente do valor da mdia.

h) Informe a Classificao quanto a obesidade e o Risco de Co-Morbidade conforme a tabela


a seguir, lembrando que a obesidade geralmente diagnosticada atravs do ndice de massa
peso(kg)
corprea: IMC
altura 2 (m)

Classificao IMC (kg/m2) RISCO DE CO-MORBIDADE


Normal 18.5 24.9 Baixo
Sobrepeso 25.0 29.9 Pouco aumentado
Obeso Classe I 30.0 34.9 Moderado
Obeso Classe II 35.0 39.9 Grave
Obeso Classe III 40 Muito Grave
Prof. M.Sc. Srgio Augusto C. Bezerra 22

Captulo 4: Lao de Repetio


Se o usurio desejasse executar o algoritmo da Figura 2.3 vrias vezes sem finaliz-lo, como
poderamos reescrever o cdigo para atende-lo? Se quisssemos escrever uma sequncia de
termos numricos, como uma srie Matemtica, por exemplo, 1 + 1/2 + 1/3 + 1/4 + ..., a partir
do nmero de termos fornecido pelo usurio, como escrever um algoritmo para tal situao?
Para esses casos, ns devemos utilizar a tcnica conhecida como lao de repetio que pode
ser desenvolvida em um algoritmo de trs formas distintas conforme a finalidade: lao com
teste lgico no incio, no fim, e, ainda, com varivel de controle. Vejamos a seguir cada forma
da tcnica lao de repetio.

4.1 Lao com Teste Lgico no Incio


enquanto (condio)
F InstruoY;
condio

V (b)

Instrues a serem enquanto (condio)


executadas incio
Instruo1;
Instruo2;
. . .
(a) InstruoN;
fim

(c)
Fig.4.1: Lao de Repetio com Teste no Incio: (a) Diagrama de Blocos; (b) Portugol para
uma instruo; (c) Portugol para mais de uma instruo.

A Figura 4.2 apresenta um exemplo de lao de repetio com teste no incio para a
Segunda Lei de Newton.

Exerccios: Para cada problema abaixo formalize uma soluo atravs de um algoritmo
especificado em Diagrama de Blocos e Portugol:

a) Refaa o algoritmo da questo da Figura 3.8 conforme o exemplo da Figura 4.2.


b) Escreva nmeros inteiros na faixa de 0 at 500 com incremento de 2 (ou seja, de 2 em
2).
c) Refaa a questo anterior para que o algoritmo escreva os nmeros inteiros conforme
os valores fornecidos pelo usurio para a faixa inferior e superior, bem como o valor
do incremento. Por exemplo, para a faixa de 100 a 200 com incremento de 10 o
resultado seria: 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200.
d) Apresentar o fatorial de um nmero. Por exemplo, se o usurio fornecer o valor 4
ento o algoritmo deve escrever 4! : 4x3x2x1 = 24.
e) Mostre os termos e o resultado da srie 1 + 1/2 + 1/3 + 1/4 + ..., onde N o valor
fornecido pelo usurio. Por exemplo, se o usurio fornecesse 2 para N a srie
apresentada seria 1 + 1/2 = 1.5.
Prof. M.Sc. Srgio Augusto C. Bezerra 23

f) Mostre os termos e o resultado da srie 1 - 1/4 + 1/9 - 1/16 + ..., onde N o valor
fornecido pelo usurio. Por exemplo, se o usurio fornecesse 3 para N a srie
apresentada seria 1 - 1/4 + 1/9 0.861.
g) Apresentar os resultados de uma tabuada para um determinado nmero (ou casa)
fornecido pelo usurio. Por exemplo, para o nmero 5 o resultado seria:
5x0=0
5x1=5
5 x 2 = 10
5 x 3 = 15
...
5 x 9 = 45

h) Escreva os termos de uma P.A. (Progresso Aritmtica) conforme os dados fornecidos


pelo usurio para o primeiro termo (a1), a razo (r) e o nmero de termos (n). Por
exemplo, se os valores fossem 2, 5 e 3 para a1, r e n, respectivamente, o algoritmo
deveria apresentar PA (2, 7, 12).
i) Mostrar um determinado caractere quantas vezes o usurio desejar. Por exemplo, se o
usurio fornecer um * (asterisco) como caractere e 10 para o nmero de vezes
desejado, ento o algoritmo deve fornecer como resultado: **********.

Você também pode gostar