Anda di halaman 1dari 19

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 seqncia 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 freqentemente 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 seqncia 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 retornaro 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 seqencialmente. 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, seqencialmente 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)
incio
InstruoY;
InstruoY InstruoX;
InstruoX
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

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.3: Decises Compostas: (a) Diagrama de Blocos; (b) Portugol.

A figura 3.3 apresenta uma formalizao em Portugol para problemas envolvendo


Decises Compostas, onde aps uma tomada de deciso temos apenas uma instruo a ser
realizada. Mas, podem surgir situaes em que mais de uma instruo deva ser realizada aps
uma tomada de deciso, neste caso, agrupamos estas instrues, obrigatoriamente, entre incio
e fim, como na Figura 3.4. A Figura 3.5 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.4 Sintaxe do Portugol para Decises Fig.3.5 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.
INCIO
Soluo:
incio
inteiro x, y;
x leia(x);
se (x >=0)
F V
x >= 0 y 2*x;
seno
y -x + 2 y 2*x y -x + 2;
escreva(y);
fim
(b)
y
(a)
Fig.2.6: Deciso Composta com uma instruo a ser
FIM
executada para calcular o valor de y: (a) Diagrama de Blocos
e (b) Portugol.
Prof. M.Sc. Srgio Augusto C. Bezerra 17

Exerccios: Para cada problema abaixo formalize uma soluo atravs de um


algoritmo especificado em Diagrama de Blocos e Portugol objetivando:

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 = x 2 + 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).
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).
Prof. M.Sc. Srgio Augusto C. Bezerra 18

Referncias Bibliogrficas
[GER01] GERSTING, Judith L. Fundamentos Matemticos para a Cincia da
Computao. Rio de Janeiro: LTC, 2001.
[COR02] CORMEN, Thomas H. e at al. Algoritmos: teoria e prtica. Rio de Janeiro:
Campus, 2002.
[MEY00] MEYER, Marilyn; BABER, Roberta; PFAFFENBERGER, Bryan. Nosso
Futuro e o Computador. 3.ed. Porto Alegre: Bookman, 2000.
[FAR99] FARRER, Harry, e outros. Algoritmos Estruturados. 3 ed. LTC: Rio de
Janeiro, 1999.
[FOR93] FORBELLONE, Andr L. V.; EBERSPCHER, Henri F. Lgica de
Programao: A Construo de Algoritmos e Estrutura de Dados. So Paulo:
Makron Books, 1993.

Anda mungkin juga menyukai