• Nenhum resultado encontrado

67418 RecLogicaProgram Apostila profSergioBezerra 2014

N/A
N/A
Protected

Academic year: 2021

Share "67418 RecLogicaProgram Apostila profSergioBezerra 2014"

Copied!
29
0
0

Texto

(1)

Sergio Augusto C. Bezerra

Reconstruindo a Lógica de Programação

Para Formalizar Soluções através de

Algoritmos Estruturados

Visando a Construção do Conhecimento

Uso de Diagramas de Blocos

Um Portugol Direcionado para Linguagens Modernas

MANAUS – AM, BRASIL.

Fevereiro de 2014

(2)

Capítulo 1: Fundamentos Básicos

1.1 Repensando sobre Lógica de Programação

Normalmente, encontramos livros e mais livros falando sobre a Lógica de Programação, onde muitas vezes não passam de simplesmente de “livros de receitas de bolos”, contendo passo a passo o que se deve fazer. Será que o conhecimento lógico do aluno realmente está sendo explorado e aperfeiçoado?

Antes de qualquer conclusão imediatista, poderíamos fazer a seguinte pergunta: O que é a essa tal da Lógica? De maneira geral encontraremos a seguinte definição a seguir:

“É a ciência que estuda as leis do raciocínio”

Mas que leis são essas? Leis do raciocínio da Matemática, da Física, da Geografia, da vida diária de uma pessoa!? Creio que se é uma lei, alguém formulou e estabeleceu passos a serem realizados para que determinado fenômeno fosse realizado. Então, se seguirmos os passos da lei estaremos raciocinando logicamente, ou seja, pensando corretamente ou conforme o que alguém estabeleceu?

Neste contexto, surge o termo derivado da matemática chamado de algoritmo. Segundo Judith Gersting [GER01], um algoritmo...

“É um conjunto de instruções 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 Informática. 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 saída. Portanto, um algoritmo é uma seqüência de passos computacionais que transformam a entrada na saída.”

O conceito acima está associado com o princípio de Processamento de Dados (Entrada, Processamento, Saída). Onde a entrada pode ser efetuada através de um teclado, mouse ou scanner. O processamento é realizado pela Unidade Central de Processamento (CPU - Central Processing Unit) através da execução de programas.

Programas são algoritmos codificados em uma linguagem de programação (por exemplo, C, Pascal, Java) que devem estar localizados na memória do computador para serem executados. A saída pode ser efetuada, por exemplo, através de um monitor ou uma impressora.

(3)

1.2 Linguagem de Programação

É uma linguagem artificial, que é deliberadamente criada para dizer ao computador o que fazer. Geralmente, uma linguagem de programação consiste em um vocábulo e um conjunto de regras (chamada sintaxe), onde são 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 responsável em construir os programas é chamado de programador.

Além da sintaxe, existem as especificações do “significado” de qualquer programa, sintaticamente válidas, escritas na linguagem para formalizar alguma solução, que denominamos de regras de semântica.

Embora seja teoricamente possível a construção de computadores especiais, capazes de executar programas escritos em uma linguagem de programação qualquer, os computadores, existentes atualmente, são capazes de executar somente programas em linguagem de baixo nível, a linguagem de máquina.

As linguagens de máquina são projetadas em função da rapidez de execução de programas, do custo de sua implementação e da flexibilidade. Por outro lado, linguagens de programação de alto nível são freqüentemente projetadas em função da facilidade na construção e da confiabilidade de programas.

O problema básico, então, é como a linguagem de nível mais alto pode ser implementada em um computador, cuja linguagem de máquina é bastante diferente, e de nível bem mais baixo. A solução é fazer com que o computador, que só entende linguagem de máquina se comporte como se entendesse uma linguagem de programação de alto nível, utilizando programas “tradutores”, escritos em linguagem de máquina, capazes de traduzir um programa escrito em linguagem de alto nível para linguagem de máquina. Os principais tipos de tradutores são: Interpretador e Tradutor.

1.2.1 Interpretador

Um interpretador é um programa que executa, repetidamente, a seguinte sequência linha a linha do programa:

1 – Obter o próximo comando do programa. 2 – Determinar que ações devam ser executadas. 3 – Executar estas ações.

1.2.2 Tradutor

Nesta solução, programas escritos em linguagem de alto nível são traduzidos para versões em linguagem de máquina, antes de serem executados.

Os tradutores usados para realizar esta solução recebem nomes especiais como compilador, montador, ligador e carregador.

(4)

1.2.3 Etapas da Programação

Muita atenção, meu caro leitor, pois para você desenvolver os seus programas, a seqüência apresentada na Figura 1.1 deve fazer parte, de agora em diante, de sua rotina diária.

Figura 1.1: Etapas para Desenvolver um programa.

1.3 Formalismo Básico

1.3.1 Variáveis

Se eu perguntasse para você o que significa variável, com certeza vinha a sua mente algumas disciplinas bastante emocionantes, como Matemática, Física, Química, entre outras. Então, lembrou qual o objetivo de uma variável?... É isso aí, simplesmente é uma formalização Matemática para representar um valor de um determinado conjunto. Um conjunto também possui representações formais, como o conjunto dos números reais que é representado por . Um conjunto especifica o domínio de uma variável.

Em geral, matematicamente sabemos que uma variável possui um nome (usado para identificação), um domínio (para estabelecer uma faixa de valores possíveis), e um valor (que pode ser atribuído conforme o seu domínio).

Formalizando o conhecimento de variável através da Informática chegamos ao resultado do quadro apresentado na Tabela 1.2:

Matemática Informática

nome nome ou identificador

domínio tipo de dado

Tabela 1.2: Analogia entre as variáveis de Matemática e Informática.

Problema

Formalização da Solução (Algoritmo)

Código Fonte do Programa

Programador

Programador

Programa em Linguagem de Máquina

(5)

Com relação ao tipo de uma variável, além de limitar a faixa de valores, também especifica ao computador a quantidade de memória que ele terá que reservar para uma determinada variável.

Sendo assim, para nós da área de Informática, uma variável é uma abstração de uma região de memória do computador, onde esta região pode ser identificada e manipulada por um nome que o programador dar a variável. Além disso, o espaço e o conteúdo desta região de memória, que agora será representada por uma variável, é especificado pelo programador quando ele define o tipo da variável (Atenção ...!!! O tipo de uma variável, não esqueça, é análogo ao domínio de uma variável!).

Formalização do nome (identificador) da variável

E aí, você conseguiu conceber o conceito de variável? Muito bem! Caso contrário, procure discutir com os colegas o assunto.

Bem, vimos que o nome da variável foi uma das características descritas acima, agora vamos conhecer como formalizar o nome de uma variável.

O nome de uma variável pode ser uma seqüência de um ou mais caracteres alfabéticos e/ou numéricos. O nome sempre iniciará com uma letra ou um caractere de sublinhado ( “_”,

underscore) . Vale ressaltar que letras minúsculas e maiúsculas são diferentes. Além desses

detalhes de sintaxe não esqueça de sempre batizar uma variável com um nome que expresse o seu verdadeiro propósito ou finalidade.Vejamos alguns exemplos válidos e inválidos expostos na da tabela 1.3:

Válidos media _contador salBruto NOTA Situacao

Inválidos media anual sal-minimo 5toneladas escreva Tabela 1.3: Nomes válidos e inválidos atribuídos a uma variável.

Dos quatro exemplos inválidos talvez você deva estar se perguntando sobre o último exemplo. A palavra escreva não pode ser utilizada para nomear uma variável porque é uma palavra reservada da sintaxe do Portugol, bem como as palavras abaixo:

inteiro real caractere lógico leia

se senão enquanto para faça

Tipos Primitivos de Dados

Vimos que a definição do tipo da variável é importante para que o computador reserve uma região da memória, preocupando-se com o tamanho e o valor a ser armazenado nesta região, bem como os operadores que se podem utilizar para se realizar operações lógicas e aritméticas.

Os tipos básicos que formalmente utilizaremos são chamados de Tipos Primitivos de

Dados. A partir destes tipos primitivos podem ser construídos outros tipos, que denominamos

de tipos definidos pelo próprio programador, onde estudaremos mais na frente no capítulo de Estruturas Heterogêneas (Registros).

A sintaxe do nosso Portugol possui cinco tipos primitivos de dados, possibilitando que uma variável possa armazenar, conforme o tipo a seguir apresentado na Tabela 1.4:

(6)

Tipo Descrição

inteiro Qualquer valor pertencente ao conjunto dos números inteiros.

real Qualquer valor pertencente ao conjunto dos números reais.

caractere

texto

Apenas 1 elemento pertencente a um dos conjuntos a seguir: {a, ..., z, A, ..., Z}, {0, ..., 9}, {*, ?, &, =, +, $, -, /, ‘, |, “} Uma seqüência ou cadeia com nenhum, um ou mais caracteres.

lógico Pode armazenar apenas os valores F (FALSO) ou V (VERDADEIRO).

Tabela 1.4: Domínios ou tipos primitivos de uma variável.

Para diferenciarmos um valor caractere ou texto de algum valor de outro tipo, adotaremos que todo valor caractere deverá ficar entre apóstrofos, 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”, “ “.

Declaração de Variáveis

Sintaxe: tipo variávelX;

tipo variável1, variável2, ..., variávelN;

Devemos seguir a sintaxe acima para declarar uma variável, onde primeiramente definimos o tipo da variável (análogo ao domínio de uma variável) e depois o identificador (nome da variável). Se quisermos declarar outras variáveis do mesmo tipo basta definirmos os outros nomes entre vírgulas.

Exemplos: real nota1, nota2, media; inteiro idade;

caractere nivel;

Declaração de Constantes

Quando declaramos uma variável como constante, estamos fixando o valor da variável em todo o algoritmo. Por exemplo, se você fosse calcular a área de um círculo (área =

*Raio2) trabalharia com um valor constante, o PI (), logo poderíamos definir uma variável, por exemplo, denominada PI. Para isto, declaramos uma variável 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 não correrá o risco de ter o seu valor alterado no decorrer do algoritmo. No entanto, se houver necessidade de alguma alteração então esta deve realizada no início da sua atribuição. Em geral as constantes são nomeadas com letras maiúsculas.

Sintaxe: constante nomeDaConstante <valor da constante>;

(7)

1.3.2 Operadores Aritméticos, Relacionais e Lógicos

Operadores Aritméticos

Símbolo Significado Exemplo

+ Adição a + b

- Subtração a – b

* Multiplicação a*b

/ Divisão a/b

% Resto da divisão inteira a%b

** ou  ou ^ Potenciação a**b, a^b

// Radiciação a//b

Tabela 1.54: Operadores Aritméticos.

Geralmente, outros operadores aritméticos não convencionais são utilizados, a saber:

mod, que é o resto de uma divisão, e div, que é o quociente da divisão inteira. Vejamos

alguns exemplos destes dois casos:

Exemplos: 10 div 2 = 5 10 mod 2 = 0 10 div 3 = 3 10 mod 3 = 1

Operadores Relacionais

Como você já sabe, os operadores relacionais são utilizados para fazer comparações entre dois valores, desde que estes apresentem os mesmos tipos. Lembre-se que esses valores podem ser constantes, variáveis ou, até mesmo, expressões contendo diversos operadores. Na tabela 1.6 apresentamos, ou melhor, relembramos os operadores relacionais da própria Matemática e que utilizaremos para construir algoritmos. Aproveitando o seu conhecimento sobre o assunto ora exposto, quero lembrá-lo que os resultados de uma comparação, como nos exemplos da tabela, continuam sendo V ou F, ou seja, um dos valores do tipo lógico.

Símbolo 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.

10

10

2

5

0

10

9

3

3

1

10 mod 2 10 mod 3 10 div 3 10 div 2

(8)

Exemplos:

Operadores Lógicos

Além dos operadores relacionais, trabalharemos também com três operadores lógicos (e, ou, não), descritos na tabela 1.7, que quando usados em expressões lógicas resultam em um valor lógico (F ou V). Esses operadores são definidos pela Álgebra das Proposições como conectivos que são usados na formação de novas proposições a partir de outras existentes.

Segundo Harry Farrer (FAR99), considera-se uma proposição como sendo uma variável lógica, uma relação ou uma expressão lógica composta. Por exemplo, poderíamos ter duas proposições combinando-se através de um conectivo e para formar uma proposição chamada conjunção das proposições originais.

A conjunção das proposições:

1) r e s: é verdadeira se e somente se ambas as proposições são verdadeiras; 2) r ou s: é verdadeira se pelo menos uma proposição for verdadeira.

Símbolo Significado Exemplo

e Conjunção a e b

ou Disjunção (não-exclusiva) a ou b xou

não Negação (não) não a

Tabela 1.7: Operadores Lógicos.

Segundo Forbellone (FOR93), tabela verdade é o conjunto de todas as possibilidades combinatórias entre os valores de diversas variáveis lógicas, as quais se encontram em apenas duas situações, e um conjunto de operadores lógicos. Na tabela 1.8, podemos observar as situações da tabela verdade para os operadores lógicos.

Tabela 1.8: Tabela verdade para os conectores e, ou e não.

Exemplos: A B A e B F F F F V F V F F V V V A B A ou B F F F F V V V F V V V V A não A F V V F a) 5*2 = 40/4 10 = 10 V b) 23mod7 < 17mod8 2 < 1 F c) 3*5div4 <=3**2/0.5 15div4 <= 9/0.5 3 <= 18 V d) 2+8mod7 >= 3*6-15 2 + 1 >= 18-15 3 >= 3 a) 4 > 3 e 3*2 = 3 V e 5 =5 V e V b) 2**3 + 2//9  12 ou 10mod3 + 5*20div4 = 5**2 8 + 3  12 ou 1 + 25 = 25 V ou F V

(9)

1.3.3 Funções Primitivas

Assumiremos que as funções, da sintaxe do nosso portugol, que estão descritas na tabela 1.9, podem ser realizadas no processador de nosso computador hipotético.

Função 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 tangente é n.

arctan(60) abs(n) Retorna o valor absoluto (módulo) 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 exponenciação de uma base b elevada a um expoente e

pot(3,2)

exp(n) Retorna o valor de en e3

frac(n) Retorna a parte fracionária de n. Tabela 1.9: Funções utilizadas em algoritmo.

Tenha em mente que a maioria das funções sempre retornarão algum valor para posteriormente ser manipulado. As manipulações possíveis são:

 Fazer com que alguma variável guarde este valor retornado pela função (atribuir o valor a uma variável). Atenção! Observe que a variável tem que estar preparada para receber o valor da função. Ou seja, se a função retornará um valor real, logo a variável tem que ser do tipo real. Isto nos diz também que a função possui um tipo de retorno.

 Escrever o valor retornado como resposta ao usuário através de algum dispositivo de saída;

 Comparar o valor retornado com algum outro valor.

1.3.4 Precedência dos Operadores

Para solucionar uma expressão matemática envolvendo vários operadores é importante sabermos a ordem de prioridades dos operadores, caso contrário, resultados incorretos surgirão. Por exemplo, qual o resultado da expressão 3*8 – 4? 20 ou 12? Claro que seria 20, pois você primeiro multiplicaria o 3 pelo 8, então, só depois subtrairia o resultado por 4. Note que acabamos de trabalhar com prioridades, certo? Além das precedências da Matemática que conhecemos, existem outras, então, segue abaixo uma lista contendo as precedências dos operadores.

c) não (F ou V) ou ((V e F) ou (não (32/4 = 16div2) )) não (V) ou (F ou (não (V)))

F ou (F ou F) F ou F F

(10)

1. Realizar as operações mais internas aos parênteses. 2. Executar as funções.

3. Realizar operações de multiplicação e/ou divisão. 4. Realizar operações de adição e/ou subtração. 5. Realizar operações relacionais.

6. Realizar operações lógicas.

1.3.5 Instruções Primitivas

Além das funções, assumiremos que o processador do nosso computador hipotético realiza algumas instruções primitivas. A instrução diz ao computador que ação ele deve tomar. Através de alguns comandos especiais podemos formalizar uma instrução, como descrito nas seções seguintes.

Comando de Atribuição

As atribuições já fazem parte de sua vida. Não acredita!? Pois bem, quando você chega ao resultado de uma equação no qual a solução, por exemplo, seja X = 20. Neste caso, uma atribuição foi realizada. Ou seja, o valor 20 está sendo atribuído a variável X. Em outras palavras, isto significa que a variável X recebe ou contém o valor 20.

Como o computador realiza esta ação de atribuir um valor a uma variável? Para responder esta pergunta, observemos os passos a seguir:

1. Declaramos as variáveis. 2. Atribuímos o valor a variável. No Portugol, seria:

real X; X  20;

Veja que ao final de cada instrução existe um ponto e vírgula, isto informa ao computador o final da instrução. Na primeira linha, dizemos ao computador para ele reservar uma região de memória e identificá-la como X. Como o tipo da variável é 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 variável X (ou seja, atribuir o valor na região de memória identificada como X). Sendo assim, utilizaremos o sinal de igualdade () para simbolizar (ou formalizar) o comando de atribuição.

Comandos de Entrada e Saída

Normalmente quando estamos solucionando um problema identificamos os dados fornecidos (dados de entrada), depois calculamos (processamento) e, por fim, escrevemos o resultado (dado de saída). Mas como o computador realizará esta seqüência lógica?

Para que este identifique os dados de entrada, faz-se necessário que os informemos através 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 variáveis. Após este passo, o computador realizará as instruções de processamento conforme descritas no seu algoritmo. Por último, faz-se necessário que o resultado seja mostrado por algum dispositivo de saída, como o monitor ou impressora, por exemplo.

(11)

Tudo bem! Mas como representar esta seqüência lógica através de um algoritmo? Bem, para representar ação de ler os dados de entrada e escrever os dados de saída, utilizaremos os comandos leia e escreva, respectivamente, como formalismo de instrução destas ações. 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 usuário, através de algum dispositivo de entrada do computador, e o atribui a variável x. Analogamente, na segunda linha, o comando, leia(a, b, c), atribui os valores fornecidos pelo usuário as variáveis

a, b e c, de acordo com a ordem dos dados informados.

Na terceira linha, o comando escreva(x), mostra o valor (ou conteúdo) da variável x através de algum dispositivo de saída do computador. O que a quarta linha escreverá?

Vejamos algumas linhas de um algoritmo e observemos a saída de dados através 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, poderíamos modificar o algoritmo acima para que ele pudesse ler quaisquer valores inteiros fornecidos por um usuário para as variáveis x e y, como a seguir:

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

soma  x + y;

escreva(soma);

Para representar graficamente as instruções leia e escreva através do Diagrama de Blocos, utilizaremos, respectivamente, os símbolos do Teclado (que indicará o processo de leitura) e da Saída de dados em vídeo (para mostrar os dados na tela do vídeo). Enquanto que para representar o processamento ou atribuição utilizaremos o símbolo de Processamento. Na figura 1.2 apresentamos os símbolos para as instruções mencionadas. Outros símbolos serão apresentados à medida que formos estudando os assuntos.

Figura 1.2: Símbolos para entrada, processamento e saída de dados.

(12)

Então, para o exemplo anterior a representação no Diagrama de Blocos seria:

Figura 1.3: Representação em Diagrama de Blocos do exemplo anterior. soma  x + y

x, y

(13)

Capítulo 2: Formalizando Soluções

para Problemas sem Decisões

2.1 Introdução

Uma vez por outra, nos deparamos com realidades que possuem problemas que não exigem nenhuma tomada de decisão, simplesmente resolvemos estes problemas realizando ações seqüencialmente. Neste contexto, este capítulo visa, através da Lógica de Programação, fornecer subsídios para automatizar estas ações através da formalização de soluções para problemas que envolvam este tipo de realidade.

2.2 Bloco de Ações

Bloco de ações ou simplesmente bloco é um conjunto de tarefas ou instruções agrupadas, seqüencialmente ou não, com um objetivo específico, onde o agrupamento é delimitado por um início e um fim. Neste contexto, um bloco de ações pode ser um algoritmo, uma função ou um procedimento. A seguir, temos a sintaxe e um exemplo de um bloco de ações tanto em Diagrama de Blocos como em Portugol, que são alguns dos métodos existentes usados para formalizar soluções. O primeiro não se preocupa tanto com os detalhes de implementação, e sim, em abstrair ou modelar a realidade. Enquanto que o segundo método é usado de forma a especificar em detalhes as ações da realidade através de um pseudocódigo, que é uma formalização textual organizada e lógica usada para escrever ações a serem realizadas por um computador hipotético.

Fig. 2.1 Agregação de ações através de Diagrama de Blocos e Portugol.

2.3 Problemas Sem Decisões (sequencia)

Quando estamos trabalhando com problemas da realidade que não envolvem nenhuma tomada de decisão, as ações que realizamos seguem uma ordem seqüencial. Mas quando os problemas envolvem alguma tomada de decisão temos sempre que observar as condições impostas por estes problemas, pois dependendo da condição estabelecida realizaremos esta ou aquela tarefa. Para entender melhor o que eu estou dizendo analise os dois problemas a seguir:

INÍCIO

declaração das variáveis

sequencia das tarefas ou instruções

FIM

sequencia das tarefas ou instruções inicio

fim

(14)

“Sabendo que f(x) = 2x + 1, calcule f(3).” “Dada a função f(x) =         5 , 15 5 5 , 9 3 x se x x se x , calcule f(3).”

Analisando o primeiro problema, você iria calcular o valor de f(x) independente do valor de x, certo? Pois bem, no segundo problema você também iria calcular o valor de f(x), mas desta vez você atentaria para as condições estabelecidas. Há, agora você entendeu, beleza? Não? Então, você está com dificuldades na Matemática, e não na Lógica de Programação. Procure resolver este problema.

Bem, com a diferença estabelecida entre problemas sem e com decisões, vamos nos deter neste capítulo apenas a formalizarmos soluções para problemas que não envolvam decisões, a partir do próximo capítulo estudaremos problemas com decisões.

Como você resolveria o problema a seguir?

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

Bem, primeiramente, eu sei que você iria organizar os dados do problema, identificando os dados fornecidos (massa e aceleração), a fórmula a ser usada no cálculo (2ª Lei de Newton, F=m.a) e depois forneceria o resultado da força. Então, ficaria:

     2 / 5 , 2 20 s m aceleração kg massa

F

m

.

a

F

??????

Fig. 2.2: Formalização Matemática aplicada na Física.

Fig. 2.3 Formalização da Informática (algoritmo) aplicada a Física

dados de entrada cálculo dado de saída Solução F = m  a F = 20  2,5 F = 50N

Diagrama de Blocos Português Estruturado (Portugol)

inicio fim m,a F F  m*a INÍCIO real F,m,a; leia(m,a); F  m*a; escreva(F); FIM

(15)

Exercícios: Para cada problema a seguir formalize uma solução através de um algoritmo

especificado em Diagrama de Blocos e em Portugol:

1) O espaço final de um determinado ponto material, onde ssov.t (MU).

2) A velocidade final de um móvel, onde vvoa.t (MUV).

3) O espaço final de um determinado ponto material, onde . 2 2 1 .t at v s soo  (MUV).

4) A energia cinética produzida por um corpo, onde . 2 2 1

v m

Ec

5) A quantidade de calor produzido por um corpo, onde Q = m.c.(t – to).

6) A força elétrica produzida por duas cargas a uma determinada distância no espaço, onde . 1.2 2 d Q Q K Fel  .

7) A velocidade final de um móvel ao percorrer uma determinada distância, ondevvo2 2.a.(sso).

8) A distância entre dois pontos no espaço, onde d  (x2x1)2 (y2y1)2 . 9) A tangente da soma de dois ângulos, onde

b tg a tg b tg a tg b a tg      1 ) ( .

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. 13) O volume de uma esfera.

3 4 r3 Vesf   .

14) A Taxa de Natalidade que é a relação entre o número de nascimentos ocorridos em um ano e o número de habitantes. Obtemos essa taxa de acordo com a fórmula a seguir: tes habi de número nascimento de número natalidade de taxa tan 000 . 1  

Exemplo: Se um país, cuja população total é de 10 milhões de habitantes, nasceram em um ano 200 mil pessoas, temos:

% 20 000 . 000 . 10 000 . 1 000 . 200 natalidade de taxa   

15) A Taxa de Mortalidade que é a relação entre o número de óbitos ocorridos em um ano e o número de habitantes. Obtemos essa taxa de acordo com a fórmula a seguir:

tes habi de número óbitos de número e mortalidad de taxa tan 000 . 1  

16) O Crescimento Vegetativo ou Natural (CV) que é a diferença entre a taxa de natalidade e a taxa de mortalidade. Veja a fórmula a seguir para este cálculo:

CV = taxa da natalidade – taxa mortalidade

(16)

Capítulo 3: Formalizando Soluções

para Problemas com Decisões

3.1 Problemas Envolvendo Decisões Simples

Existem procedimentos que são adotados por organismos celulares ou equipamentos quando algum condição ou limite preestabelecido é desrespeitado. Por exemplo, uma temperatura acima de 37⁰C em uma pessoa é um sinal que algo de errado está acontecendo com o corpo que pode reagir em nível celular conforme o órgão envolvido. Semelhantemente, um sensor após captar algum sinal de movimento, pressão 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 situações não esboçam qualquer reação, ou se mantêm estável, quando a condição não for desrespeitada. Este contexto, muito presente em nosso meio, caracteriza-se por problemas que envolvem decisões simples, denominada também de

estrutura de controle simples. Sua representação pode ser abstraída, visualizada e entendida

por meio de diagrama de blocos ou Portugol, como na Figura 3.1 para uma instrução e Figura 3.2 para uma ou várias instruções. Neste último caso, as instruções devem estar agrupadas entre as palavras-chaves início e fim.

(a) (b)

Fig.3.1: Decisões ou Estruturas de Controle Simples para uma instrução: (a) Diagrama de Blocos; (b) Portugol.

Instrução a ser realizada quando a condição for verdadeira.

V condição InstruçãoY F se (condição) InstruçãoY; (a) (b)

Fig.3.2: Decisões ou Estruturas de Controle Simples para muitas instruções: (a) Diagrama de Blocos; (b) Portugol.

Instruções a serem realizadas quando a condição ou condições tiverem como resultado o valor lógico verdadeiro.

V condição F Instrução1 Instrução2  InstruçãoN  se (condição) início Instrução1; Instrução2;  InstruçãoN; fim 

(17)

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

Exercício 3.1. Tendo como base o exemplo anterior, construa um algoritmo por meio de um diagrama de blocos e um Portugol para a função 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 não a um cofre.

u s u=“IFAM” e s=123 m IFAM 123 IFAM 527 UFAM 123 UFAM 246 (a) (c)

Fig.3.4: Exemplo de Decisões Simples com duas condições e a conjunção como conectivo: (a) Diagrama de Blocos; (b) Portugol; (c) Tabela para as variáveis u, s, m, além dos resultados lógicos das condições.

início inteiro s; texto m, u; m  “Acesso Negado!”; escreva(“Usuário: ”); leia(u); escreva(“Senha: ”); leia(s); se(u = “IFAM” e s = 123) m  “Acesso Autorizado!”; escreva(“Cofre: ”, m); fim início V u = “IFAM” e s= 123 F fim u, s “Usuário: “ “Senha: “ “Cofre: ”, m m  “Acesso Autorizado!” m  “Acesso Negado!” (b) (a) (c)

Fig.3.3: Exemplo de Decisões Simples: (a) Diagrama de Blocos; (b) Portugol; (c) Tabela para as variáveis x e y.

inicio V x > 5 F y  10 fim y  2 x “Valor de x: “ “Valor de y: “, y x y -2 0 3 5 15 início inteiro y, x ; y  2; escreva(“Valor de x: “); leia(x); se(x > 5) y  10; escreva(“Valor de x: “, y); fim (b)

(18)

Exercício 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 solução.

3.2 Problemas Envolvendo Decisões Compostas

A Figura 3.5 apresenta um diagrama de blocos e um Portugol para problemas que envolvem Decisões Compostas ou Desvio Condicional Composto. Observe que na Figura 3.5a, após uma tomada de decisão o algoritmo realizará apenas uma instrução. Mas, podem surgir situações em que mais de uma instrução deva ser realizada. Neste caso, devemos agrupar estas instruções entre início e fim, como na Figura 3.6. A Figura 3.7 apresenta um exemplo como ilustração.

Exemplo: Construa um algoritmo para calcular o valor de y de acordo com o valor de x fornecido pelo usuário, onde y = 2x, se x  0, ou y = -x + 2, se x < 0.

V condição InstruçãoY InstruçãoX F (a) (b) Fig.3.5: Decisões Compostas: (a) Diagrama de Blocos; (b) Portugol.

se (condição)

InstruçãoY;

senão

InstruçãoX;

Instrução a ser realizada quando a condição for verdadeira. Instrução a ser realizada quando

a condição for falsa.

se (condição) início Instrução1; Instrução2; fim senão início Instrução3; Instrução4; fim

Fig.3.6 Sintaxe do Portugol para Decisões Compostas com mais de uma instrução.

se (x > 0) início y  x + 10; z  x*10; fim senão início y = x – 10; z = x/10; fim

Fig.3.7 Exemplo de um Portugol de Decisões Compostas com mais de uma instrução.

(19)

Solução:

Exercícios: Para cada problema abaixo formalize uma solução 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 raízes de uma equação do segundo grau, levando em consideração a análise da existência de raízes reais.

c) Autorizar o acesso de um cliente a um caixa eletrônico através do número do cartão e senha. O seu algoritmo deve comparar um número qualquer fornecido pelo usuário tanto para o cartão como para a senha com o que você estabelecerá para se acessar o caixa eletrônico. Em caso de sucesso ou não, o algoritmo deve emitir uma mensagem, respectivamente, de “ACESSO AUTORIZADO” ou “ACESSO NEGADO”.

d) Calcular e informar a resistência total de dois resistores. O usuário informará se os mesmos estão em série (RT = R1 + R2) ou em paralelo ( RT=(R1R2)/(R1 + R2) ).

e) Validar uma nota digitada por um usuário, onde os valores devem se encontrar na faixa de 0 a 10. Então, o algoritmo lerá a nota, verificará se a nota está no intervalo e emitirá uma mensagem “NOTA VÁLIDA”, caso contrário “NOTA INVÁLIDA”.

f) Leia um valor de x e forneça o resultado de y. Sabendo que y = x2 + 2x, se x  1, e y = -3x + 1, se x < 1.

g) Calcular a média de um aluno em uma disciplina, informando se o aluno está reprovado (média < 5,0) ou aprovado (média  5,0). (media = (Prova1 + Prova2 + 3Projeto)/5).

(a) (b)

Fig.3.8: Decisão Composta com uma instrução a ser executada para calcular o valor de y: (a) Diagrama de Blocos e (b) Portugol. início inteiro x, y; leia(x); se (x >=0) y  2*x; senão y  -x + 2; escreva(y); fim V x INÍCIO FIM x >= 0 y  2*x y  -x + 2 F y

(20)

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 contrário y = x/sen(300) e z = x).

3.3 Problemas Envolvendo Decisões Encadeadas

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 explícitos quanto às instruções a serem executadas após a verificação da primeira condição, devemos limitar tais instruções com as palavras chaves início e fim, conforme mencionado anteriormente para várias instruções. Veja na Figura 3.10b e 3.10c como fica mais evidente o que será realizado quando a condição1 for falsa, a pesar de sabermos que não são necessários os limitadores

início e fim. (a) (b) (c) se (condição1) Instrução1; senão se (condição2) Instrução2; senão Instrução3; se (condição1) início Instrução1; fim senão início se (condição2) Instrução2; senão Instrução3; fim se (condição1) início Instrução1; fim senão início se (condição2) início Instrução2; fim senão início Instrução3; fim fim A Instrução1 será realizada quando a condição1 for verdadeira. A condição2 será testada caso

a condição1 seja falsa.

V F condição1 Instrução1 condição2 Instrução2 Instrução3 V F

A Instrução2 será realizada quando a condição1 for falsa e a condição2 for verdadeira.

A Instrução3 será realizada quando a condição1 e a condição2 forem falsas.

Fig.3.9: Diagrama de Blocos para Decisões Encadeadas com uma Instrução a ser executada após verificação (falso ou verdadeiro) de uma determinada condição.

Fig.3.10: Portugol para Decisões Encadeadas com uma Instrução a ser executada após verificação (falso ou verdadeiro) de uma determinada condição.

(21)

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 domínio das variáveis deve ser inteiro.

Exercícios: Para cada problema abaixo formalize uma solução através de um algoritmo

especificado em Diagrama de Blocos e Portugol que:

a) Calcule o Imposto de Renda a ser descontado no salário de um trabalhador. As faixas salariais em função dos descontos são 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 três valores para os lados (A, B e C) de um triângulo verificar e informar se estes valores formam um triângulo (A<B+C e B<A+C e C<A+B) ou não. Em caso verdadeiro, informe se é um triângulo equilátero (A=B e B=C), isósceles (A=B ou B=C ou A=C) ou escaleno(todos os lados diferentes).

c) Efetue a leitura de três valores e apresente-os em ordem crescente.

d) Leia três valores (A, B e C) e efetue o cálculo da equação de segundo grau, apresentando as duas raízes, se para os valores informados for possível efetuar o referido cálculo.

Fig.3.11: Diagrama de Blocos e Portugol para Decisões Encadeadas com uma Instrução a ser executada após verificação (falso ou verdadeiro) de uma determinada condição.

F V x >= 3 yx**2 +x - 5 x >= -1 y  x + 1 y  1 V F x INÍCIO FIM y início inteiro x,y; leia(x); se (x >= 3) início y  x**2 +x - 5; fim senão início se (x >= -1) y  x + 1; senão y  1; fim escreva(y); fim

(22)

e) Efetue o cálculo do reajuste de salário de um funcionário. Considere que o funcionário receberá um reajuste de 15%, caso seu salário seja menor que R$ 700. Se o salário for maior ou igual a R$ 700 e menor ou igual a R$ 1200 seu reajuste será de 10%. Mas se o salário 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

Sênior maior ou igual a 18 anos

g) Leia o número de faltas e o valor de duas notas de um aluno para uma determinada disciplina de 80 horas, realize os cálculos necessários, e informe a média e a situação do aluno mediante as seguintes regras: APROVADO, se a média for maior ou igual a cinco e possuir no mínimo 75% de frequência; REPROVADO, se a média for menor que cinco; REPROVADO, se a frequência for menor que 75%, independente do valor da média.

h) Informe a Classificação quanto a obesidade e o Risco de Co-Morbidade conforme a tabela a seguir, lembrando que a obesidade é geralmente diagnosticada através do índice de massa

corpórea: ) ( ) ( 2 m altura kg peso IMC

Classificação 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

(23)

3.3 Seleção de Múltipla Escolha

Exemplo1: Calculadora Simples usando apenas seleção de múltipla escolha.

escolha(opcao){

caso v1:

instrução1;

caso v2:

instrução2;

o o o

caso vN:

instrução1;

}

#include <iostream.h> #include <conio.h> void main(){ double a, b, result; int op; //operacao clrscr();

cout << "Programa: as 4 oper. matemáticas"; cout << "\n1 - Soma";

cout << "\n2 - Subtracao"; cout << "\n3 - Multiplicacao"; cout << "\n4 - Divisao";

cout << "\nEscolha uma opcao:"; cin >> op; cout << "\n1ø valor: "; cin >> a; cout << "\n2ø valor: "; cin >> b; cout << "\nResultado: "; switch(op){ case 1: result = a + b; cout << result; break; case 2: result = a - b; cout << result; break;

case 3: result = a*b; cout << result; break;

case 4: result = a/b; cout << result; break;

default: cout << "Escolha de opcao invalida"; } //fim do switch

getch(); }

(24)

Exemplo2: Calculadora Simples usando seleção de múltipla escolha e desvio condicional.

Exercícios: Formalize soluções para os problemas abaixo em portugol e em C++.

1) Refaça o exercício a e f da lista anterior.

2) Faça uma calculadora para efetuar as seguintes operações: soma, subtração, multiplicação, divisão (verificar se o denominador é diferente de zero), raiz quadrada, potência e inverso de um número.

3) Calcule a área das seguintes figuras: retângulo, quadrado, círculo, triângulo retângulo, triângulo eqüilátero e triângulo escaleno.

#include <iostream.h> #include <conio.h> int main(){

double a, b, result; int op; //operacao clrscr();

cout << "Programa: as 4 oper. matemáticas"; cout << "\n1 - Soma";

cout << "\n2 - Subtracao"; cout << "\n3 - Multiplicacao"; cout << "\n4 - Divisao";

cout << "\nEscolha uma opcao:"; cin >> op;

if(op>=1 && op<=4){

cout << "\n1ø valor: "; cin >> a; cout << "\n2ø valor: "; cin >> b; cout << "\nResultado: "; switch(op){ case 1: result = a + b; cout << result; // break; case 2: result = a - b; cout << result; // break;

case 3: result = a*b; cout << result; // break;

case 4: result = a/b; cout << result; // break;

} //fim do switch }

else

cout << "\nNenhuma opcao foi escolhida"; getch();

(25)
(26)
(27)
(28)

Referências Bibliográficas

[GER01] GERSTING, Judith L. Fundamentos Matemáticos para a Ciência da Computação. – Rio de Janeiro: LTC, 2001.

[COR02] CORMEN, Thomas H. e at al. Algoritmos: teoria e prática. – Rio de Janeiro: Campus, 2002.

[MEY00] MEYER, Marilyn; BABER, Roberta; PFAFFENBERGER, Bryan. Nosso Futuro e o Computador. – 3.ed. – Porto Alegre: Bookman, 2000.

[ALGXX] Cópia de um livro com autor desconhecido.

[FAR99] FARRER, Harry, e outros. Algoritmos Estruturados. 3 ed. LTC: Rio de Janeiro, 1999.

[FOR93] FORBELLONE, André L. V.; EBERSPÄCHER, Henri F. Lógica de Programação: A Construção de Algoritmos e Estrutura de Dados. São Paulo: Makron Books, 1993.

(29)

Referências

Documentos relacionados

Informações tais como: percentual estatístico das especialidades médicas e doenças, taxas de ocupação dos principais recursos, tempos de permanência de internação, escores

- Remover as pastilhas usadas e retornar todo o parafuso de regulagem em seguida montar uma pastilha nova do lado da roda, empurrando com a mão a pinça no sentido do cilindro de

DATA: 17/out PERÍODO: MATUTINO ( ) VESPERTINO ( X ) NOTURNO ( ) LOCAL: Bloco XXIB - sala 11. Horário Nº Trabalho Título do trabalho

- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar

Na fachada posterior da sede, na parte voltada para um pátio interno onde hoje há um jardim, as esquadrias não são mais de caixilharia de vidro, permanecendo apenas as de folhas

tidos para o Coefi ciente de Efi cácia Protéica para o leite de búfala, vaca e caseína como padrão, verifi caram que a caseína e o leite de vaca, não apresentaram diferença

O objetivo deste artigo é justamente abordar uma metodologia alternativa para a elaboração de análises contábeis e financeiras, denominada de balanço perguntado e

As resistências desses grupos se encontram não apenas na performatividade de seus corpos ao ocuparem as ruas e se manifestarem, mas na articulação micropolítica com outros