Você está na página 1de 33

Turma Técnico em Informática - INFNB T1-18.

Módulo – Análise de sistemas.

Apresentação do Módulo:

Objetivos Geral do Módulo


Desenvolver junto ao aluno a capacidade de realizar atividades de projetos de
sistemas, bem como torna-lo apto a empregar metodologias mais utilizadas e atuais
para implementação das atividades mencionadas.
Objetivos Específicos do Módulo
Ao final do curso o aluno terá condições de utilizar as metodologias e técnicas
atuais de projetos de sistemas.
Conteúdo
1. Conhecer os princípios da programação estruturada
2. Técnicas de modularização e refinamento, passo a passo
3. Técnicas de programação top down e botton-up
4. Fundamentos de programação orientada a objetos
5. Modelagem de processo de controle; modelagem de dados; definição de banco
de dados; definição de programas.
6. Etapas de projeto físico; Uso de formulários; Elaboração de layout de relatórios
Referências Bibliográficas
BEZERRA, Eduardo. Princípios de análise e projetos de sistemas UML. Rio de
janeiro: Campus, 2002. 320p.
Gane, C.; SARSON, T. Análise estruturada de sistemas. Rio de janeiro: LTC,
1995. 258 p.
POMPILHO, S. Análise essencial: Guia prático de análise de sistemas. São Paulo:
Ciência Moderna, 2002, 288 p.
PRESSMAN, Roger S. Engenharia de software. São Paulo: Markron Books, 1995.
TONSIG, Sergio Luiz. Engenharia de software: Análise e projeto de sistemas. São
Paulo: Futura, 2003. 351 p.
YORDO, Edward; ARGILA, Carl. Análise e projetos Orientados a objetos. São
Paulo: Markron Books, 1999. 336 p.
1. Paradigma de programação.

Antes de falarmos de programação estruturada, é necessário entender que ela é um


paradigma de programação. E o que é paradigma de programação? É forma como
determinadas linguagens de programação devem ser utilizadas, como regras,
estruturas e processos que os programadores devem seguir para implementar um
programa para realizar uma solução em software. Paradigma de programação também
pode ser definido com um meio de se classificar as linguagens de
programação baseado em suas funcionalidades. As linguagens de programação
podem ser classificadas em vários paradigmas.

A figura a baixo mostra a estrutura básica e classificação de paradigmas de


programação.

Um paradigma de programação fornece e determina a visão que


o programador possui sobre a estruturação e execução do programa. Por exemplo, em
programação orientada a objetos, os programadores podem abstrair um programa
como uma coleção de objetos que interagem entre si, enquanto em programação
funcional os programadores abstraem o programa como uma sequência
de funções executadas de modo empilhado.
1.1 Classificação do paradigma de programação:

A) Paradigma de programação Funcional: É um paradigma de programação que


trata a computação como uma avaliação de funções matemáticas e que evita estados
ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da programação
imperativa, que enfatiza mudanças no estado do programa. Enfatizando as
expressões invés de comandos, as expressões são utilizadas para cálculo de valores
com dados imutáveis. Ex.: Lisp.

B) Paradigma de programação Lógica: É um paradigma de programação que faz


uso da lógica matemática. Ex.: Prolog.

C) Programação Orientado a Objetos (POO): Neste paradigma, modelamos e


construímos sistemas, baseado nos objetos que compõem o mesmo. Como exemplo,
poderíamos pensar em uma aplicação de uma agência bancária como sendo
implementada através de objetos cliente, conta corrente, aplicação financeira e assim
por diante que se relacionam mutuamente. Ex.: C++ e Java.

D) Paradigma de programação estruturada, modular ou procedural: A


programação estruturada, também conhecida como programação modular ou
procedural, estabelece uma disciplina de desenvolvimento de algoritmos que
facilita a compreensão de programas através do número restrito de mecanismos de
controle da execução de programas. Qualquer algoritmo, independentemente da
área de aplicação, de sua complexidade e da linguagem de programação na qual será
codificado, pode ser descrito através destes mecanismos básicos. Ex.: C, Fortran,
Ada, Algol, Basic, Pascal, Python, lua, outros.

A programação estruturada é uma forma de programação de computadores que


estabelece uma disciplina de desenvolvimento de algoritmos, independentemente da
sua complexidade e da linguagem de programação na qual será codificado, que facilita
a compreensão da solução através de um número restrito de mecanismos de
codificação.
Paradigma de programação – Exercícios.

1. (Cesp – 2010 - Imetro) A respeito das características dos paradigmas e das


linguagens de programação, assinale a opção correta.
A) As linguagens do paradigma de programação funcional, como o Prolog, não
apresentam grandes restrições ao uso de estruturas de controle (goto), o que pode
reduzir a legibilidade dos programas construídos sem limitações.
B) No paradigma lógico, que é suportado por linguagens de programação não
imperativas, como o Lisp, os programas gerados são embasados em funções
matemáticas.
C) O paradigma de programação orientado a objetos reúne linguagens, como o C++,
que são declarativas, isto é, o foco está na especificação dos resultados desejados
ao invés dos procedimentos para produzi-los.
D) As linguagens imperativas, como o Pascal, são voltadas para a especificação
da solução do problema, por meio do detalhamento do algoritmo e da
especificação da ordem das instruções.
E) As linguagens procedimentais que dominaram o mercado antes da programação
estruturada, tal como o COBOL, caracterizaram-se por utilizar amplamente os tipos
abstratos de dados.
2. (FCC – 2013 - SEFAZ/SP) Para a programação do software, a equipe de TI
contratada pelo Sr. Hiroshito pretende adotar um paradigma de programação e uma
linguagem que suporte tal paradigma. Para isso, conduziu uma pesquisa sobre os
principais paradigmas e linguagens de programação. A pesquisa revelou diversos
paradigmas, mas foram selecionados apenas o estruturado, o funcional e o orientado
a objetos. Selecionou-se, então, uma ou mais linguagens que suportam cada
paradigma. 
Estão relacionados corretamente uma ou mais linguagens de programação ao
respectivo paradigma de programação suportado em:
A) Estruturado - Cobol e Lua
Funcional - C#
Orientado a objetos - Ruby
B) Estruturado - Pascal e Cobol
Funcional - LISP
Orientado a objetos - Ruby e C#
C) Estruturado - C++
Funcional - LISP e Cobol
Orientado a objetos - Ruby e C
D) Estruturado - Ruby e C++
Funcional - Lua e Prolog
Orientado a objetos - Pascal e Java
E) Estruturado - Pascal e Delphi
Funcional - Lua
Orientado a objetos - Ruby e C#
3. (IFB 2017) Segundo Sebesta (2011), as linguagens de programação são,
normalmente, divididas em quatro categorias. Assinale a alternativa que as
apresenta CORRETAMENTE:
A) Imperativas, lógicas, marcação e orientadas a objeto.
B) Visuais, imperativas, lógicas e orientadas a objeto.
C) Imperativas, funcionais, lógicas e orientadas a objeto.
D) Funcionais, marcação, lógicas e orientadas a objeto.
E) Imperativas, funcionais, visuais e orientadas a objeto.
4. (CESP – 2013) Mediante a utilização da técnica de programação estruturada, é
possível obter programas mais legíveis e, consequentemente, menos suscetíveis a
erros, e também definir e melhorar o grau de coesão entre as funções de um
programa.
Certo (X) Errado ( )
5. As linguagens de programação Java, Prolog, LISP e C enquadram-se
respectivamente nas seguintes categorias:
A) orientada a objetos, funcional, lógica, imperativa
B) funcional, lógica, orientada a objetos, imperativa
C) lógica, imperativa, funcional, orientada a objetos
D) orientada a objetos, lógica, imperativa, funcional
E) orientada a objetos, lógica, funcional, imperativa
6. (CESP - 2018) A programação estruturada é altamente eficiente no
desenvolvimento de programas grandes e complexos.
Certo ( ) Errado (x)
7. (CESP - 2018) Uma característica marcante da programação estruturada é o uso
constante de comandos de desvio, como, por exemplo, o GOTO.
Certo ( ) Errado (x)
8. (CESP - 2011) Um programa que possui somente um ponto de entrada e somente
um ponto de saída pode ser considerado estruturado.
Certo (X) Errado ( )
9. (FCC – 2011 - ADAPTADA) Em relação à programação estruturada, considere: 

I. É uma técnica de desenvolvimento que enfatiza a abstração, que é a habilidade de


se concentrar nos principais aspectos de um algoritmo, em vez de se preocupar com
as suasespecificações. 

II. Qualquer algoritmo, independentemente da área de aplicação, de sua complexidade


e da linguagem de programação na qual será codificado, pode ser descrito através do
número restrito de mecanismos de controle da execução de programas. 

III. Sequência, seleção e iteração constituem os blocos elementares de código que se


interligam para formar um programa. 
Está correto o que se afirma em:
A) I
B) II
C) III
D) I e III
E) I, II, III

2. Algoritmos

Na linguagem humana, algoritmos são simplesmente uma "receita" para executarmos


uma tarefa ou resolver algum problema. E como toda receita, um algoritmo também
deve ser finito. Se seguirmos uma receita de bolo corretamente, conseguiremos fazer
o bolo. A computação utiliza muito esse recurso, então se você pretende aprender
programação, obviamente precisa saber o que é algoritmo. Você já deve ter usado
um algoritmo, só não sabia que era algoritmo, vejamos alguns exemplos simples:
Exemplo 1

Digamos que uma dona de casa irá dar ordens para sua empregada descascar
batatas. A dona de casa passará o seguinte algoritmo para descascar batatas:

Algoritmo descascar batatas

1.Traga a cesta de batatas da dispensa.

2.Traga a panela do armário.

3.Descasque as batatas.

3.Devolva a cesta ao porão.

Exemplo 2:

Quando você acorda pela manhã e precisar sair para o trabalho.

Algoritmo ir para o trabalho

1. Acordar.

2. Toma Banho.

3. Vestir-se.

4. Toma Café.

5. Pega ônibus.

6. Chega no trabalho.

Os exemplos acima trata-se de algoritmos simples, onde não há nenhum tipo de


condição, poderíamos aplicar outros passos, replicar outros exemplos de algoritmos,
trocando ou adicionando um novo passo, como por exemplo uma pessoa que vai ao
trabalho de carro e não de ônibus. A complexidade dos algoritmos varia de problema
para problema e existem algumas características a serem estudadas.
2.1 Estrutura básica de um algoritmo

2.2 Variáveis

Dentro de um algoritmo, variáveis correspondem a posições de memória do


computador, onde fica armazenado determinado valor. As variáveis são representadas
por identificadores que são cadeias de caracteres alfanumérico.

Matrizes e vetores podem ser representados pelos seus elementos através de índices,
tais como vetor[i] e matriz[i,j].

As linguagens de programação possuem conjuntos enormes de tipos de variáveis,


mas podemos dizer que todos são derivados destas quatro primitivas:

- Inteiro: Representa os números inteiros;

- Real: Qualquer número real;

- Caracter: Variáveis que recebem caracteres.

- Lógico: Recebe valores falso e verdadeiro.


Podemos imaginar que variável é o nome de um local onde será armazenado qualquer
valor do conjunto de valores suportado pelo seu tipo.

- Toda variável deve ser declarada no algoritmo antes de ser utilizada com o
seguinte comando:

- Tipo da Variável: NomeA, NomeB;

Em resumo as variáveis ou var, são espaços definidos para o nome das variáveis e o
tipo que cada uma é, como por exemplo, posso definir uma variável num1 do tipo
inteiro que irá representar 1 número real inteiro.

2.3 Atribuição

Um comando básico que utilizamos muito nos algoritmos é a atribuição, ocorre após
a declaração das variáveis que serão usadas em nossos algoritmos e atribui valores
nas variáveis, veja o comando:

NomeDaVariável = expressão;

Onde a expressão pode ser somente um valor ou uma expressão matemática que
utiliza outros valores e variáveis.

2.4 Expressões aritméticas

Para representarmos as expressões aritméticas, utilizamos a notação matemática já


conhecida, logo é importante ressaltar que expressões aritméticas fazem parte dos
algoritmos, mas não são algoritmos. Veja a tabela a baixo:
2.3 Expressões Lógicas:

São expressões cujos resultados são sempre lógicos (Verdadeiro ou Falso), não
dependendo do tipo das variáveis ou expressões utilizadas. Existem operadores
relacionais e operadores lógicos.

Os operadores relacionais fazem a comparação entre valores não lógicos, retornando


um valor lógico e são mostrados na tabela a seguir:

Os operadores lógicos, por outro lado, permitem a combinação de relações cujos


resultados sejam lógicos e são:
2.5 Comandos de entrada e saída

Apesar dos parâmetros de entrada e saída serem especificados logo no início do


algorit-mo, devemos ler e escrever estes parâmetros no algoritmo para podermos
utilizá-los.

O comando para leitura de um ou mais parâmetros é o:

Leia (Variável)

Onde a lista de variáveis pode conter qualquer parâmetro de entrada.

Quando o algoritmo termina, ele deve exibir os valores calculados, que estarão
armazenados nas variáveis dos parâmetros de saída. Para isso, devemos utilizar o
comando:

Escreva (resultado variáveis)

Onde a lista de variáveis contém as variáveis dos parâmetros de saída especificados.

É importante ressaltar que na visão computacional os algoritmos possuem uma


representação um pouco diferente a estrutura de algoritmo na visão computacional
também temos, de forma mais intensa, as estruturas condicionais.

2.5 Estruturas Condicionais

O uso de uma estrutura condicional torna possível a escolha dos comandos a serem
executados quando uma certa condição é satisfeita ou não. Esta estrutura permite o
controle de qual código será executado. As estruturas condicionais podem ser simples
ou compostas.

A) Estrutura Condicional Simples:

Esta estrutura é utilizada quando temos que decidir pela execução de um trecho do
algoritmo e possui a forma:

Se (condição lógica) então

(comandos)

Fim se
Nesta estrutura, o trecho (comandos) só será executado se a (condição lógica) for
verdadeira.

B) Estrutura condicional composta:

Esta estrutura é utilizada quando temos que decidir qual de dois caminhos seguir
dentro do algoritmo (somente um dos trechos é executado).

Se (condição lógica) então

(comandos 1)

Senão

(comandos 2)

Fim se

C) Estrutura condicional Múltipla (SWITCH-CASE)

A estrutura ESCOLHA-CASO (em inglês SWITCH-CASE), é uma solução elegante


quanto se tem várias estruturas de decisão (SE-ENTÃO-SENÃO) aninhadas. Isto é,
quando outras verificações são feitas caso a anterior tenha falhado (ou seja, o fluxo do
algoritmo entrou no bloco SENÃO). A proposta da estrutura ESCOLHA-CASO é
permitir ir direto no bloco de código desejado, dependendo do valor de uma variável de
verificação. Veja o esquema abaixo.

ESCOLHA <variável de verificação>

CASO <valor1> FAÇA

"instruções a serem executadas caso <variável de verificação> = <valor1>"

CASO <valor2> FAÇA

"instruções a serem executadas caso <variável de verificação> = <valor2>"

CASO <valor3> FAÇA

"instruções a serem executadas caso <variável de verificação> = <valor3>"

FIM-ESCOLHA
D) Estruturas de repetição

Em cálculo numérico, muitas vezes devemos repetir um trecho do algoritmo diversas


vezes, até que seja atendida uma condição específica.

Nestes casos, utilizamos as estruturas de repetição, que podem ter número definido
ou indefinido de repetições.

Repita

(comandos 1)

se (condição lógica) então

interrompa

fim se

(comandos 2)

Fim repita

(comandos 3)

1. Estruturas de repetição – PARA (Número definido de repetições)

Quando o número de repetições a ser executado é conhecido, usamos a seguinte


estrutura:

Para (controle) = (valor inicial) até (valor final) faça

<comandos>

Fim para

2. Estruturas de repetição – Enquanto (While)

Para em casos de um número indefinidos de repetições nos algoritmos, utilizamos a


estrutura de repetição ENQUANTO (em inglês, WHILE). Seu funcionamento é tão
simples quanto a estrutura de decisão SE-ENTÃO.
A diferença é que os passos dentro deste bloco, são repetidos enquanto a expressão
booleana (VERDADEIRO ou FALSO) resultar VERDADEIRO. Veja o esquema abaixo:

ENQUANTO <expressão booleana> FAÇA

<instruções a serem executadas enquanto a expressão booleana resultar em


VERDADEIRO>

FIM-ENQUANTO

Vejamos agora exemplos de algoritmos com estruturas apresentadas acima.

Exemplo 1.

Algoritmo Ligar luz

Inicio

1 – Lâmpada não liga.

2 – A lâmpada está enroscada?

Se a lâmpada não está enroscada Então

3 – Enroscar lâmpada.

4 – Senão se verificar se a lâmpada está queimada Então

5 – Trocar lâmpada.

Senão

6 – Verificar instalação elétrica.

Fim-Se

Fim
Exemplo 2: Imagine o trabalho de um recepcionista de cinema, ele deve conferir os
bilhetes e direcionar o cliente para a sala correta. Além disso, se o cliente estiver 30
minutos adiantado o recepcionista deve informar que a sala do filme ainda não está
aberta. E quando o cliente estiver 30 minutos atrasado o recepcionista deve informar
que a entrada não é mais permitida.

Algoritmo Recepcionista de Cinema

Inicio

1 - Solicitar ao cliente o bilhete do filme.

2 - Conferir a data e o horário do filme no bilhete.

Se data/hora atual > data/hora do filme + 30 minutos Então

3 - Informar ao cliente que o tempo limite para entrada foi excedido.

4 - Não permitir a entrada.

Senão Se data/hora atual < data/hora do filme - 30 minutos Então

5 - Informar ao cliente que a sala do filme ainda não foi liberada para entrada.

6 - Não permitir a entrada.

Senão

7 - Permitir a entrada.

8 - Indicar ao cliente onde fica a sala do filme.

Fim-Se

Fim
Exemplo 3:
Algoritmo multiplicação de dois números
Var: num1, num2, result
Inicio
ler(num1)
ler(num2)
resultado <- num1 * num2
Fim

Exemplo 4:
Algoritmo maior e menor valor literal
Var: a, b, c: inteiro
Inicio
a = 100, b = 90 c=80
Se a >= b e a >= c Então
a é maior
Senão Se b >= a e b >= c Então
b é maior
senão
c é maior
fim se
Fim
Exemplo 4:

Algoritmo média de aluno

var

nome_aluno : caracter

n1,n2,n3,n4 : real

soma : real

media : real

inicio

escreva("Digite o Nome do Aluno: ")

leia(nome_aluno)

escreva("Digite a primeira nota: ")

leia(n1)

escreva("Digite a segunda nota: ")

leia(n2)

escreva("Digite a terceira nota: ")

leia(n3)

escreva("Digite a quarta nota: ")

leia(n4)

soma <-(n1+n2+n3+n4)

media<-(soma/4)

escreva(media)

fim
Exemplo 5

Algoritmo número inteiro positivo

var num : inteiro

Inicio

Escreva (“Digite um número”)

leia (num)

se (num > 0) então

escreva (num)

fim se

Escreva (“Valor digitado é negativo”)

fim algoritmo

Exemplo 6

Algoritmo número maior que zero

var num : inteiro

Inicio

Escreva (“Digite um número”)

leia (num)

se (num > 0) então

escreva (num, " é maior que zero") senão

escreva (num, " é menor ou igual a zero")

Fim se

Fim algoritmo
Exemplo 7

Algoritmo Simula uma calculadora básica de números inteiros

var num_1, num_2 : inteiro operacao : caracter

inicio

leia (num_1)

leia (num_2)

leia (operacao)

escolha (operacao)

caso "+"

Escreva (num_1 + num_2)

caso "-“

escreva (num_1 - num_2)

caso "*“

Escreva (num_1 * num_2)

caso "/" escreva (num_1 / num_2)

Outrocaso

Escreva ("Operação inválida")

Fim escolha

Fim algoritmo
Exemplo 8

Algoritmo Soma Enquanto Valor Diferente De 0

var vd: REAL, soma: REAL

inicio

soma= 0

Escreva ("Digite um valor para a soma: ")

Leia (vd)

ENQUANTO vd =! 0 FACA

soma := soma + vd

Escreva ("Total: ", soma)

FIMENQUANTO

Escreva ("Resultado: ", soma)

Fim algoritmo

Exemplo 9

algoritmo Números de 10 a 1
var j: inteiro
inicio

Escreva (Digite um valor:)

Leia ( j )
para j de 10 ate 1 faca
   escreva (j)
fim para

Escreva(“O número digitado não está entre 10 e 1”)


fim algoritmo
2.6 Fluxogramas

Existe outra forma de representar os algoritmos, essa forma chama-se de


fluxogramas. Os fluxogramas seguem o mesmo intuito, demostrar o passo a passo de
uma determinada ação, só que através de símbolos, eles representam até as
condições aplicadas nas ações.

Os fluxogramas possuem na sua estrutura as seguintes características:

Agora vamos verificar como os fluxogramas funcionam através de exemplos.


Exemplo 1

Fluxograma Lâmpada não liga:


Exemplo 2

Fluxograma recepcionista de cinema:

Exemplo 3

Fluxograma- inserir número ou letra:


3. Mecanismos básicos da programação estruturada

O princípio básico de programação estruturada é que um programa é composto por


blocos elementares de código que se interligam através de três mecanismos básicos,
que são sequência (Sequencial), seleção (Condicional) e iteração (Repetição).
Cada uma destas construções tem um ponto de início (o topo do bloco) e um ponto de
término (o fim do bloco) de execução.

Para entender o mecanismo básico da programação estruturada, precisamos entender


um pouco sobre algoritmos. Por isso tornou-se extremamente necessário o nosso
estudo sobre o assunto. As estruturas de sequência, seleção e iteração permitem
representar a solução de qualquer algoritmo. E é por esse motivo que elas são
tão importantes no seu aprendizado de construção de algoritmos.

3.1 Estrutura de controle de sequência (sequencial)

são estruturas onde há um grupo de comandos que são executados um após o outro,
permitindo a escolha do grupo de ações e estruturas a serem executados quando
determinadas condições, representadas por expressões lógicas, são ou não
satisfeitas. Ou seja, essa estrutura é usada quando a execução de um ou mais
comandos só poderá ser realizada dependendo de um ou mais testes anteriores. E
esses testes são condições lógicas que resultarão VERDADEIRO ou FALSO. Se o
resultado da expressão lógica for FALSO, então o grupo de comandos que dependia
desse teste para ser executado não será executado. É por isso que se deve prestar
bastante atenção aos testes que forem construídos num algoritmo, pois, se o retorno
não for adequado à solução proposta, isso comprometerá o resultado final do
algoritmo. As estruturas de seleção podem ser simples ou compostas, como é
mostrado na tabela abaixo. Por fim, as estruturas de controle de iteração ou repetição
permitem que uma sequência de comandos seja executada repetidamente até que
uma determinada condição de interrupção seja satisfeita. Veja como funciona:
3.2 Estrutura de controle de seleção (Condicional)

Podemos dividir a estrutura de controle de seleção condicional em estrutura de


seleção condicional simples e estrutura de seleção condicional composta. A
primeira é aquela em que a execução de um ou mais comandos depende de uma
condição verdadeira apenas, não tendo comandos a executar se a condição for falsa.
Já a composta é aquela que tem comandos a serem executados quando a condição
for verdadeira ou falsa. Na seleção composta, podemos utilizar estruturas aninhas e
de múltipla escolha. Primeiramente vamos ver como se comportam as estruturas
simples e compostas:
3.2.1 Estrutura de controle de seleção condicional aninhada

E quando possuímos mais de um teste lógico a realizar para decidir qual tarefa a ser
realizada pelo algoritmo? Nesse caso precisamos utilizar a estrutura aninhada. Não
temos um teste lógico que retorna verdadeiro ou falso na estrutura aninhada. Nessa
estrutura possuímos uma sequência de teste lógicos encadeados que deve ser
realizado, onde um bloco de código vai ser realizado na sequência, vai depender da
sequência de testes lógicos e seus resultados. Veja a figura abaixo, ela demonstra um
exemplo de algoritmo com estrutura aninhada, perceba que precisamos escolher entre
3 sequências lógicas encadeadas e o bloco de código a ser executado vai depender
dos resultados dos testes lógicos.
3.2.2 Estrutura de controle de seleção condicional múltipla escolha.

Outra estrutura de controle de seleção condicional que é bastante usada é a de


escolha múltipla. O uso dessa estrutura é indicado quando é necessário optar por
uma opção entre várias para uma certa variável. Seria possível usar uma estrutura do
tipo se-então-senão aninhadas, mas se o algoritmo puder ficar mais claro e objetivo, a
estrutura de escolha múltipla é a opção a ser escolhida. Essa estrutura possui uma
expressão de seleção e a partir dela é feita a escolha de um dos casos para serem
executados os comandos associados a ele. Se nenhum caso atender à expressão de
seleção, há a opção de inserir uma situação genérica com o uso de outro caso. Nessa
estrutura, em geral, os demais comandos que estão associados aos outros casos, não
serão executados, mas é importante ressaltar que esse aspecto pode ser alterado em
algumas linguagens de programação quando não se insere um comando de
interrupção, e isso apresenta uma flexibilidade bastante prática a esse tipo de
estrutura. Na figura a baixo podemos observar um exemplo do uso de escolha
múltipla.
3.3 Estrutura de controle de iteração (Repetição)

A estrutura de controle de iteração pode ser classificada por condição e por contagem.
Na estrutura de repetição por condição temos a realização de testes que repetem
diferentes comandos ou ações dependendo se uma condição seja verdadeira ou falsa,
condição essa que é uma expressão processada e transformada em um valor
booleano. Está associado a ela além da condição (também chamada "expressão de
controle" ou "condição de parada") o bloco de código: verifica-se a condição, e caso
seja verdadeira, o bloco é executado. Após o final da execução do bloco, a condição é
verificada novamente, e caso ela ainda seja verdadeira, o código é executado
novamente.

Deve-se observar que, caso o bloco de código nunca modificar o estado da condição,
a estrutura será executada para sempre, uma situação chamada laço infinito. Da
mesma forma, é possível especificar uma estrutura em que o bloco de código modifica
o estado da condição, mas esta é sempre verdadeira.

Algumas linguagens de programação especificam ainda uma palavra reservada para


sair da estrutura de repetição de dentro do bloco de código, "quebrando" a estrutura.
Também é oferecido por algumas linguagens uma palavra reservada para terminar
uma iteração específica do bloco de código, forçando nova verificação da condição.
Veja como essa estrutura se comporta:
Na iteração baseada em contagem, sabe-se antecipadamente quantas vezes um
conjunto de comandos vai ser repetido.

Para variável de valor_inicial até valor_final

passo valor_do_passo faça

comandos

fim para

Inicialmente a variável, que chamamos de variável controladora, é inicializada com o


valor_inicial. Devem ser do tipo inteiro. Em seguida, os comandos são repetidos zero
ou mais vezes, enquanto o valor da variável estiver entre o valor_inicial e o valor_final,
inclusive. No final de cada repetição do conjunto de comandos, a variável controladora
é automaticamente acrescida do valor_do_passo e o teste do limite é repetido.

Algoritmo conta_com_para

Variável

n, i: inteiro

leia(n)

Para i de 1 até n passo 1 faça

escreva(i)

fim para fim

4. Refinamento sucessivo passo a passo

Um algoritmo é considerado completo se os seus comandos forem do entendimento


do seu destinatário.

Num algoritmo, um comando que não for do entendimento do destinatário terá de ser
desdobrado em novos comandos, que constituirão um refinamento do comando inicial.
Se um algoritmo é formado não apenas por um comando, mas por vários, isto significa
que na sua execução não se consideram apenas o estado inicial e o final de uma ação
dele resultante, mas que se consideram também estados intermediários que delimitam
as ações decorrentes de cada comando.

Exemplo1:
Algoritmo para calcular a média aritmética de dois números pode ser desdobrado da
seguinte forma:
Algoritmo CALCULA_MÉDIA
1.Receb os dois números
2.Calcule a média dos dois números
3.Exibaoresultado
Podemos desdobrar o comando “Calcule a média dos dois números” em:
1. Soma os dois números
2. Divida o resultado por 2
Após esse refinamento, o algoritmo pode ser considerado completo, a menos que o
destinatário não saiba fazer as operações de adição e divisão, ou não seja capaz de
entender diretamente algum comando.
O algoritmo estando completo, podemos reescrevê-lo, inserindo o refinamento na
posição do comando que foi refinado. Assim:
Algoritmo calcula média
1.Recebaosdoisnúmeros
2.Somaosdoisnúmeros
3.Dividaoresultadopor2
4.Exibaoresultado
À medida que um algoritmo se torna maior e mais complexo, a sua visão global torna-
se menos clara e, neste caso, um algoritmo apresentado com os refinamentos
sucessivos separados torna-se uma melhor abordagem para quem precisar entendê-
lo.
Agora vamos tomar como exemplo o algoritmo que descreve os termos de Fibonacci
inferiores a L:

Algoritmo "Fibonnaci" 
var 
i : inteiro 
fibonacci : vetor [1..23] de inteiro 
inicio 
fibonacci[1]<- 1 
fibonacci[2]<- 1 
para i de 3 ate 23 faca 
fibonacci[i]<- fibonacci[i-2]+ fibonacci[i-1] 
fim para 
para i de 1 ate 23 faca 
escreva (fibonacci[i]," ") 
fim para 
fim algoritmo 

Agora vamos aplicar a técnica de refinamento passo a passo neste algoritmo e


verificar como ele fica:

Ref. Escreva os termos de Fibonacci inferiores a L

Receba o valor L

Processe os 2 primeiros termos

Processe os termos restantes

Fim ref

Um refinamento será sempre iniciado com a palavra Ref, seguida do comando


refinado e terminará com a expressão fim ref.

Um algoritmo e os seus refinamentos são formados por comandos que determinam as


ações a serem executadas pelo seu destinatário e por estruturas de controle que
determinam a ordem em que os comandos devem ser executados, se devem ser
executados ou não e quando devem ser repetidos.

No refinamento acima vigora a mais simples das estruturas de controle: a estrutura


sequencial, segundo a qual os comandos devem ser executados um após o outro, na
mesma ordem em que aparecem escritos.

Se um comando de um refinamento for um tanto vago. ele poderá, por sua vez, ser
desdobrado em novos comandos, produzindo-se o refinamento de um refinamento. e
assim sucessivamente. Portanto, o comando "Processe os 2 primeiros termos" poderia
ser desdobrado em:

Ref. Processe os 2 primeiros termos

Atribua o valor 1 ao primeiro termo

Se ele for menor que L

Então escreva-o

Fim se

Atribua o valor 1 ao segundo termo

Se ele for menor que L

Então escreva-o

Fim se

Fim ref

Neste refinamento, aparece uma segunda estrutura de controle: a estrutura


condicional

Se condição

Então comandos
Fim se

O comando "escreva-o" só será executado se a condição "ele for menor que L" for
verdadeira. O comando "escreva-o" não será executado se a condição for falsa, isto é,
se ele for maior ou igual a L.

Vê-se, portanto, que um algoritmo, através de estruturas condicionais, pode provocar


ou não a realização de uma ação.

Uma terceira estrutura de controle, a estrutura de repetição, será necessária ao se


desdobrar o comando "Processe os termos restantes", através do novo refinamento:

Ref. Processe os termos restantes

Repita

Calcule novo termo somando os 2 anteriores

Se novo termo for maior ou igual a L

Então interrompa

Fim se

Escreva novo termo

fim repita

fim ref

Você também pode gostar