Você está na página 1de 72

Introdução a Programação

UNIDADE I – COMPUTAÇÃO E OS SISTEMAS DE NUMERAÇÃO


UNIDADE II – MÁQUINA DE ESTADOS FINITOS
UNIDADE III – ALGORITMOS

1
Projeto de sistemas microprocessados
Máquina de estados
finitos

Análise
Entender o problema Codificação
Programar

Algoritmo
Desenhar a solução 2
Algoritmos

3.1 – Introdução
3.2 – Fluxogramas
3.3 - Algoritmos Numéricos

3
Introdução

Algoritmo
• Embora a palavra esteja intimamente vinculada ao universo da
computação estamos a todo o momento fazendo o uso constante dos
algoritmos em nosso cotidiano.

• Exemplos típicos que podem ser descritos por um algoritmo:

 Tomar banho;

 Fazer café;

Saída para um dia de trabalho;

4
Introdução

Algoritmo
• Na verdade podemos descrever qualquer atividade por meio de um
conjunto de passos e a isto denominamos algoritmo.

• Existem várias definições formais para algoritmo, algumas


associadas ao cotidiano e outras ao universo da programação:

“É a descrição de um conjunto de comandos que, se obedecidos,


resultam numa sucessão finita de ações.” (Ferrer , 1985)

“Um conjunto finito de regras que provê uma seqüência de


operações para resolver um tipo de problema específico”. (Knuth)

“Seqüência ordenada, e não ambígua, de passos que levam à


solução de um dado problema.” (Tremblay)

5
Introdução

Algoritmo
• Condições básicas para caracterização de um algoritmo:

 Deve possuir um início e fim bem definido;

 Todo passo ou ação tem que possuir um agente que consiga


realizá-lo e

 Todo passo ou ação deve ser passível de execução em tempo


finito.

6
Introdução

Algoritmo
• Porque estamos falando de algoritmos?

 Vamos observar que não só na programação, mas também no


dia a dia os algoritmos nos apresentam uma forma organizada
de estruturar a realização de uma tarefa.

 Destina-se a resolução de um problema através da fixação de


um padrão de comportamento e uma norma de execução a
serem seguidos.

• Vamos começar apresentando alguns exemplos:

7
Introdução
• O primeiro caso trata-se da troca de um pneu furado.

• Embora cada pessoa apresente particularidades nas ações de troca de


um pneu furado podemos assumir que todos irão executar no mínimo
estes passos:

1 – Levantar o carro com o macaco


2 – Retirar os parafusos da roda
3 – Retirar a roda
4 – Colocar o pneu sobressalente
5 – Recolocar os parafusos
6 – Baixar o carro do macaco.

• Outros detalhes poderiam ser acrescidos neste algoritmo, mas os


passos acima descritos dão à idéia geral do que deve ser feito.
• Embora o algoritmo anterior apresente uma seqüência de passos,
representado de forma descritiva, ele também pode ser escrito através
de um diagrama chamado de fluxograma.
8
Algoritmos

3.1 – Introdução
3.2 – Fluxogramas
3.3 - Algoritmos Numéricos

9
Fluxograma
• O fluxograma conta com diversos símbolos para representar os passos
ou etapas do processo.
• Existem diversas formas geométricas utilizadas na construção de
fluxograma e entre elas são encontradas pequenas variações simbólicas
para representação de alguns passos.
• Principais símbolos:

• Início e fim do fluxograma (elipse).

• Ação/passo a ser realizado. Também é possível


inserir em um único retângulo mais de uma
ação/passo (retângulo).

• Tomada de decisão. Neste caso só teremos duas


respostas possíveis: Falso ou Verdadeiro (losango).
10
Fluxograma
• Representa uma chamada a um outro algoritmo, ou
seja, é possível que um algoritmo contenha outros
algoritmos (retângulo com delimitadores laterais).

• Faz a ligação entre duas partes do algoritmo dentro de


conector uma mesma página. Evita a poluição do fluxograma com
linhas ao longo do diagrama (círculo).

• Também trabalha na conexão de pontos só que é


conector
utilizado para indicar uma conexão fora da página
corrente (retângulo em formato de seta).
• Interliga duas figuras do fluxograma e indica o fluxo da
seqüência (seta).

• Operações de entrada de dados.

• Operações de saída de dados. 11


Fluxograma
• Vamos modelar o exemplo da troca de pneu com um fluxograma.

• Passo 1: Todos os fluxogramas apresentam de forma bem clara seus


pontos de início e fim e eles são representados através de elipse.

• A elipse indicativa de início pode ser nomeada com a palavra Início ou


apresentar o termo que define a tarefa que será executada pelo algoritmo
(Troca de Pneu).

12
Fluxograma Troca Pneu

• Cada ação ou conjunto de ações do


fluxograma é representado através de Levantar o carro com o macaco. (1)
um retângulo.
Retirar os parafusos da roda. (2)

Retirar a roda. (3)

Colocar o pneu sobressalente. (4)

Recolocar os parafusos. (5)

Baixar o carro do macaco. (6)

Fim 13
Fluxograma
• Imprevistos podem surgir durante a troca do pneu ficando o
fluxograma sem solução.
• Antes mesmo da troca do pneu deve-se avaliar a possibilidade da
execução da tarefa. Utilize o losango para representar uma tomada de
decisão (binário Falso/Verdadeiro).

14
Fluxograma Troca Pneu

• Retornando ao fluxograma geral Levantar o carro com o macaco. (1)


podemos observar que uma ação poderá
ser detalhada evitando assim a
Retirar os parafusos da roda. (2)
ocorrência de situações sem solução.

Retirar a roda. (3)

• Vamos analisar a primeira ação:


Colocar o pneu sobressalente. (4)
Levantar o carro com o macaco (1).

Recolocar os parafusos. (5)

Baixar o carro do macaco. (6)

Fim 15
Fluxograma
• O grau de detalhamento do fluxograma
tem como objetivo elucidar possíveis Detalhamento da ação:
dúvidas durante a execução da tarefa. Levantar o carro com o macaco (1).

• Garanta a maior clareza possível em


cada passo, pois nem sempre quem
escreve o fluxograma será responsável
pela sua execução (codificação).

• No segundo losango só foi inserida a


indicação para a condição verdadeira,
ficando a falsa subentendida.

16
Fluxograma
• Vamos detalhar mais uma das ações presentes no fluxograma:
Retirar parafusos (2).

Retirar parafuso

Retirar parafuso
• Para carros de passeio com quatro
parafusos por roda.
Retirar parafuso

Retirar parafuso

• Como ficaria caso desejássemos fazer um algoritmo mais abrangente


onde o número de parafusos fosse um elemento variável?

17
Fluxograma
• Poderíamos agora adotar a seguinte solução.

• Neste caso está sendo utilizada uma


estrutura de repetição que é constituída de
um retângulo (ação ou conjunto de ações) e
um losango (tomada de decisão).

• Mas só podemos utilizar tal estrutura quando uma determinada caixa


de seja sempre executada em cada repetição.

18
Fluxograma
• Esta estrutura de repetição de tarefas será obrigatória quando
desejamos que uma determinada ação ou um conjunto de ações sejam
executados um número grande de vezes.

Retirar parafuso

• Poluição do fluxograma, tornando-o muito


Retirar parafuso grande;

• Representação imprecisa. Não sabemos de


fato qual o número de repetições necessárias
para que o processo seja executado
corretamente.
Retirar parafuso

Retirar parafuso
19
Fluxograma
A
Fluxograma final

Retirar a roda.

Colocar o pneu sobressalente.

Colocar parafuso

F
Colocou todos

Baixar o carro do macaco.

Fim

20
Fluxograma
Mais um pra fechar.
Cola 2

V Colar
Sei a matéria

Fazer a prova

1
3
Dançar sem música

2 21
Fluxograma
• Uma central de alarme possui um conjunto de sensores. Caso um dos
sensores seja acionado a central deverá sinalizar com um aviso sonoro e
fazer uma discagem para informar o arrombamento a uma central de
segurança. Caso o alarme seja atendido local (AT) ou remotamente
(chamada telefônica - CT) o aviso sonoro deve ser desligado e retornar a
monitoração.

• Embora a FSM nos mostre a idéia básica do funcionamento da central,


ela omite uma série de passos que poderão ser explicitados por meio de
um fluxograma.
22
Fluxograma
• Também vale ressaltar que esta FSM pode ser implementada por uma
pessoa ou por um sistema microprocessado.
• Chamada telefônica: manual X automático
Humano Computador • Apresentam características
muito parecidas.

• Aspecto comum  ambos


necessitam executar uma
discagem.
• Solução: uma sub-rotina
que irá detalhar como é
executada uma discagem.

• Principal X Sub-rotina
23
Fluxograma
• Para os dois casos poderemos fazer uso do Discar

mesmo procedimento sem que seja


necessário escrever um fluxograma para cada
situação. F
Tem tom
• O processo de discagem é independente do
processo que fez a chamada. V

Discar número
• Se desejado, a subrotina de discagem poderá
informar o status da operação de discagem ao
processo que a chamou.
V
Deu ocupado
• Importante destacar que neste caso o
fechamento do fluxograma da discagem não
mais será identificado com a palavra fim, mas
sim com o rótulo Retorna. Pois nesta Resp OK Resp Ocupado

situação sabemos que após o processo de


discagem o fluxograma principal continuará
Retorna
executando suas atividades.
24
Fluxograma
• Falha Grave!!! Discar

• A inexistência de tom trava o sistema, não


F
haverá retorno ao procedimento que o Tem tom
chamou.
V

Discar número
• Este é um caso típico de uma falha de
projeto que levará o sistema a uma condição
de anormalidade durante o processo de
V
discagem. Deu ocupado

Resp OK Resp Ocupado


• No universo da programação uma situação
como esta é denominada bug do sistema.
Retorna

25
Fluxograma
• Solucionando possíveis falhas.
• Colocar uma temporização máxima em que o sistema permaneceria
esperando um tom de discagem. Caso o tom não ocorra dentro deste
intervalo de tempo o processo de discagem sinaliza a ocorrência de falha.

• Este procedimento é denominado timeout, ou seja, estourou o tempo


de espera de sinal de linha.
26
Fluxograma
• Solucionando possíveis falhas. Discar

Inicia tempo
de discagem
• Considerando as possíveis fontes de
falhas: sem tom de discagem e linha
ocupado, bastaria criar um código de F
Fim tempo
F
Tem tom
identificação. discagem

• 00 – OK Discar número

• 01 – Ocupado
• 02 – Timeout
V
Deu ocupado

• Este artifício é denominado parâmetro de


retorno, ou seja, o procedimento principal
Resp OK Resp Ocupado Resp Timeout
fica sabendo o que aconteceu na subrotina e
baseado nesta informação ele identificará se
poderá ou não seguir os próximos passos. Retorna

27
Fluxograma
• Solucionando possíveis falhas.
• Desta forma o processo principal teria
que ser remodelado. Nesta nova situação
um teste deve ser feito após a discagem.

• Suponha que por algum motivo o


processo de discagem não possa ser
realizado. Ex.: o equipamento (telefone
ou modem) está desconectado da rede.

• Uma nova falha ocorrerá, pois o


processo ficaria preso na discagem
(Discagem OK) e o usuário não saberia o
que está acontecendo.

28
Fluxograma
• Solucionando possíveis falhas. Comunicação
Telefônica

Conectar linha
Tentativas 3 F
• Podemos utilizar uma técnica parecida
com timeout, só que neste caso, F
colocaremos um contador de tentativas Discar Tentativas
de discagem, como apresentado no =0

fluxograma
Discagem F Tentativas
OK Tentativas -1

• Observe que o fluxograma não faz Transmitir dados


mágica, ou seja, ele não vai conseguir
resolver uma falha na rede, mas ele será
capaz de informar ao usuário a Desconectar linha
existência de falha.
Falha de
Fim
Comunicação
29
Fluxograma
• Máquina de refrigerante.

30
Fluxograma
• Máquina de refrigerante – Refinamento do estado Somando.

Fluxograma
do estado
Somando

31
Somando
Fluxograma
• Fluxograma do estado Somando.
Peso válido

Tamanho
válido

Valor menor Valor maior Estado Troco

V V

Estado Libera
Sem moeda

V TempoColeta
>0

Estado Falha

32
Retorna
Fluxograma
• Diversas são a situações que poderemos modelar através de fluxograma,
mas porque utilizar este modelo?

• Vamos retornar na unidade II onde apresentamos algumas formas de


modelamento de problemas.

• Neste caso temos três tipos de modelamentos e podemos utilizar três


linguagens distintas para codificarmos em alto nível.
• Entretanto, para que possamos codificar em baixo nível é necessário um
detalhamento maior do que as técnicas acima podem nos oferecer. 33
Fluxograma
• Necessitamos de um modelamento intermediário entre o modelo inicial
(Máquina de estados) e a linguagem (Assembly). Desta forma o fluxograma é
uma excelente ferramenta para o interfaceamento desta situação.

34
Algoritmos

4.1 – Introdução
4.2 – Fluxogramas
4.3 - Algoritmos Numéricos

35
Fluxograma

Algoritmos Numéricos
• Como nosso objetivo final é a construção de algoritmos que possam
ser codificados e posteriormente executados em computadores.
Partiremos agora para o estudo dos algoritmos numéricos.

• Começaremos nosso estudo para solucionar um problema matemático


que consiste em acharmos os termos da seqüência de Fibonacci.

• Nesta seqüência os dois primeiros termos são conhecidos 0 e 1 e os


demais devem ser encontrados a partir dos mesmos. A regra básica
para se descobrir o próximo termo é que ele seja a soma dos dois
anteriores.

• Partindo dos dois primeiros construiremos a seguinte seqüência:


0,1,1,2,3,5,8,13,21,34,55,.. tendo como limite superior o valor 1000.
36
Fluxograma

Algoritmos Numéricos
• Antes de escrever o fluxograma vamos analisar o problema
calculando manualmente.

• O primeiro passo é definir as variáveis envolvidas no problema.


• Com base no enunciado para que eu ache o novo termo da seqüência
necessito somar o penúltimo e o último termo da seqüência.

• Desta forma, serão utilizadas três variáveis sendo que cada uma irá
conter a informação dos itens sublinhados.

37
Fluxograma

Algoritmos Numéricos
• Montando a seqüência de Fibonacci.

Termo Penúltimo termo Último termo Novo termo


1 0
2 1
3 0 1 1
4 1 1 2
5 1 2 3
6 2 3 5
7 3 5 8
8 5 8 13
9 8 13 21

• Montando o fluxograma.

38
Fluxograma

Algoritmos Numéricos
• Montando o Fluxograma.
Descritivo Formal

Ache a soma do último e do


penúltimo elemento. (2)

39
Fluxograma

Algoritmos Numéricos
• Linguagem Formal

• O fluxograma em linguagem
formal é o que mais se
aproxima de um problema
matemático ou de um
programa de computador.

• Nunca colocar nomes como:


X, Y ou Z para uma identificar
variável.

• Nunca utilizar o sinal de igualdade, para atribuir um valor a uma


variável, pois poderemos cair em uma inconsistência matemática como
neste caso soma = soma +1.
40
Fluxograma

Algoritmos Numéricos
• Após a criação do fluxograma passaremos para fase de teste ou
validação onde descobriremos se o seu funcionamento encontra-se
correto.

• Para execução do teste deve-se fazer o “Chinês”, processo em que


percorremos linha a linha do fluxograma executando seus comandos.

• Utilizamos neste ensaio um pequeno conjunto de dados hipotéticos.


Sendo assim para montar o chinês deste fluxograma vamos considerar
sua execução enquanto o novo termo for menor que 25.

41
Fluxograma
Passo (Comando) Penúltimo Último Novo
Algoritmos Numéricos 1 0e 1 0 1
2 2 1
• Montando o Chinês. 3 3 < 25
4 4e 5 1 1
5 2 2
6 3 < 25
7 4e 5 1 2
8 2 3
9 3 < 25
10 4e 5 2 3
11 2 5
12 3 < 25
13 4e 5 3 5
14 2 8
15 3 < 25
16 4e 5 5 8
17 2 13
18 3 < 25
19 4e 5 8 13
20 2 21
21 3 < 25
22 4e 5 13 21
23 2 44
24 3 > 25

• Estendendo o ensaio para enquanto novo termo for menor que 1000,
também funcionará. 42
Fluxograma

Algoritmos Numéricos

• Faça um algoritmo de uma subrotina que receba o raio (cm) de círculo e


retorne M se a área é maior que 100 cm2.

• Faça um algoritmo de uma subrotina que verifique se o valor B é


múltiplo de A, ou seja, se o resto de B/A é igual zero, para A≠0. Caso seja
múltiplo retorno a letra M.

43
Fluxograma

Arquitetura de um Sistema Microprocessado


• Vamos observar como este algoritmo seria processado caso
utilizássemos um computador.

• Embora o modelo de John von Newmann não seja o único, ele será de
grande utilidade para o entendimento deste problema.

44
Fluxograma

Arquitetura de um Sistema Microprocessado


• Esta arquitetura apresenta três elementos
básicos:

• CPU (Unidade de Processamento Central)


– responsável pelo controle e
processamento dos dados do sistema. É
capaz de acessar, ler e escrever, os dados
presentes na memória e I/O. O
processador possui uma pequena memória
local denominada registradores.

• Memória – retém informações escritas pela CPU ou por outros


dispositivos para que futuras leituras possam ser realizadas.

• I/O (Input/Output) – dispositivos que possibilitam a troca de


informações entre CPU e os elementos externos ao sistema.
45
Fluxograma

Arquitetura de um Sistema Microprocessado


• Embora não esteja explicitado, a troca de informações entre CPU e
memória ou I/O é feita através de vias (fios) denominados barramentos
que interligam todo o sistema.

• A quantidade de memória presente no sistema é fundamental para


definir o tamanho do programa que o sistema poderá executar assim
como a quantidade de informações que o mesmo poderá armazenar.

• Embora sendo menos crítico, a quantidade de I/Os também é um


problema, pois um número reduzido de I/Os irá limitar o número de
elementos externos que poderão se conectar ao sistema.

• Sabendo-se que o sistema possui uma grande quantidade de memórias


e I/Os, como será possível a identificação de um destes elementos?

46
Fluxograma
Arquitetura de um Sistema Microprocessado
• Para cada elemento de memória e I/O será associado um Endereço,
sendo este, o elemento identificador.
• É possível observar que em cada endereço de memória ou I/O existirá
uma lacuna denominada Conteúdo que será responsável pelo
armazenamento de uma informação.

47
Fluxograma

Algoritmos Numéricos
• Retornando ao fluxograma da seqüência de Fibonacci apresentaremos
duas possibilidades distintas de representação de um mesmo
fluxograma, sendo as representações distintas definidas pela forma de
armazenamento das variáveis.

• Para o primeiro caso,


apresentado no fluxograma ao
lado, foram utilizadas as
memórias locais da CPU, ou
seja, os registradores. Desta
forma ao codificarmos este
fluxograma associamos para
cada variável um registrador.

48
Fluxograma

Algoritmos Numéricos
• Neste caso cada variável do nosso
problema está associada a um
endereço de memória.

• Supondo que as variáveis: AptPenult,


AptUlt e AptNovo correspondam
respectivamente aos endereços 1000H,
1001H e 1002H, teremos que indicar
no fluxograma as três atribuições
relativas a estas variáveis.

• Devemos encarar agora o nome da variável AptNovo, por exemplo, como


o apelido do endereço de memória 1002H. Pois é muito mais fácil
lembrar o que significa o termo “AptNovo” do que o endereço “1002H”.
49
Fluxograma

Algoritmos Numéricos
• Carregando uma informação na
memória tendo o endereço como
referência .
(AptPenult)0.

• Da mesma forma caso seja necessário


atribuir o valor do último ao penúltimo
teremos que colocá-los entre parênteses
(AptPenult)  (AptUlt).

50
Fluxograma

Algoritmos Numéricos
• Vamos analisar o mesmo problema
considerando que uma equipe fosse
contratada para resolver este problema.

• Esta equipe é composta por três


funcionários denominados Computador
Mestre, Leitor e Atribuidor.
• Suponha que para a memória do sistema
fossem utilizadas pequenas caixas onde cada
uma delas significa um endereço de memória.

• Dentro de cada caixa existe um papel onde


nele está escrito o valor de cada variável.
• Existe também uma janela de vidro nas caixas para
que a leitura do valor seja feito sem que se abra a
caixa. Isto elimina o risco de alteração do valor contido
51
na mesma em uma simples operação de leitura.
Fluxograma

Algoritmos Numéricos
• Sobre a mesa do mestre existe o
fluxograma da seqüência de Fibanacci
indicando o que deve ser feito pelo
computador.

• Partiremos de um determinado ponto onde


o fluxograma esteja em plena execução.

• Considerando que a execução esteja no


passo 19 do chinês, onde o computador
acabou de atribuir ao “Penúltimo” termo da
seqüência o valor do ”Último” e ao último o
valor obtido na variável “Novo”.
• Teremos a situação indicada nas caixas ao
lado.
52
Fluxograma

Algoritmos Numéricos
• O mestre pega o próximo comando (2)
do fluxograma onde está indicado que
seja executada a soma dos dois últimos
termos.

• Para processar a soma o primeiro


passo é fazer a leitura dos dois últimos
termos.

• O mestre passa a tarefa para o


leitor e este a executa fazendo a
anotação dos valores e entregando
de volta ao mestre.

53
Fluxograma

Algoritmos Numéricos
• Com os valores na mão o
mestre faz a soma obtendo o
valor 21. O mestre passa ao
atribuidor o novo valor que
deve ser colocado na caixa
Novo.

• Como apresentado anteriormente podemos observar que toda operação


de leitura preserva o conteúdo da variável enquanto na operação de
escrita o valor anterior é perdido.

• Podemos também observar que um endereço de memória é como a


caixa onde guardamos a informação. Já a informação é o valor presente
no pedaço de papel que corresponderá ao dado, também chamado de
conteúdo de memória, que manipulamos nos computadores.
54
Fluxograma

Algoritmos Numéricos
• Duas soluções variável em registro X memória.

• Registro se aplica somente a problemas com volume de dados reduzido,


pois o número de registradores dentro da CPU é limitado.

• O número de registros presentes nas CPU é da ordem de unidades e em


alguns casos na ordem de unidades dezenas. Exemplos:
Z80 – 7 registros de 8 bits
CPU MSP430 – 12 registros de 16 bits

55
Fluxograma

Algoritmos Numéricos
• Para fixar a utilização de memórias nos fluxogramas vamos trabalhar
um novo exemplo. Faça o cálculo da média de idade de um grupo de 100
pessoas.

• Suponha que estas médias estejam presentes na memória do


computador sendo que a primeira idade encontra-se no endereço “de
apelido” END_INÍCIO e as demais idades nos endereços subseqüentes.

• Para resolução deste e dos demais fluxogramas faremos uma


consideração importante e que será aprofundada em um outro momento
do nosso curso. Para cada endereço de memória existe único byte
associado, ou seja, o Momento
maior valor depossível
Fé armazenado em uma
lacuna de memória é o valor 255 ou 0FFh.

56
Fluxograma

Algoritmos Numéricos
• Vamos aproveitar o momento da construção deste novo fluxograma e
fazer algumas recomendações gerais e depois apresentar alguns passos
básicos para a construção de um fluxograma.
• Recomendações gerais:
• Lembre-se que você não está escrevendo um fluxograma só
para o seu entendimento. Caso você esteja em sala de aula,
tenha pena de seu professor e contribua com o resultado de sua
nota. Caso você esteja numa empresa, provavelmente este
fluxograma poderá ter sua codificação realizada por outra pessoa
de sua equipe.
• Escolha sempre nomes representativos para suas variáveis.

• Após ou durante a prova, não adianta conferir com o colega,


Cuidado: Meu filho, caso a solução esteja igual,
pois não existe uma única solução.
POR FAVOR, mude alguma coisa para o bem de todos !!!
57
Fluxograma

Algoritmos Numéricos
• Passos básicos:
• Passo 1 – Leia cuidadosamente a especificação do problema.
Não comece a escrita do fluxograma sem ter a certeza do
entendimento do que foi solicitado. Caso contrário você poderá
escrever um fluxograma, até correto sobre o aspecto lógico, mas
que não faz o que foi solicitado.

• Passo 2 – Identifique as variáveis envolvidas no problema.


Se estas variáveis necessitam de um valor inicial isto deve ser
realizado na primeira caixa de processamento do fluxograma.

Não se preocupe caso alguma variável passe despercebida, pois


durante a escrita do fluxograma correções serão feitas. Para
evitar bagunça no fluxograma sempre faça a primeira caixa de
processamento um pouco maior que o necessário, pois
provavelmente você terá que inserir mais algumas variáveis.
58
Fluxograma

Algoritmos Numéricos
• Passos básicos:
• Passo 3 – Primeiro apresente uma solução para depois
pensar na otimização.

Lembre-se que não existe um único caminho para escrever um


fluxograma. Desta forma, um fluxograma poderá ser mais
eficiente que outro, mas primeiro devemos dar uma solução para
que a partir desta solução possamos implementar possíveis
melhorias.

• Passo 4 – Poderão surgir variáveis auxiliares ao longo do


fluxograma, fique a vontade, pois poderão ser criadas ao
qualquer momento.

59
Fluxograma

Algoritmos Numéricos
• Passos básicos:
• Passo 5 – Ao definir uma determinada ação você deverá lembrar
que uma CPU resolve problemas por etapa e que esta ação talvez
tenha que ser subdividida em um conjunto de ações menores.

• Passo 6 – Se um conjunto de ações começa a se repetir ao longo


do fluxograma é sinal que você está se deparando com uma sub-
rotina.

Defina este conjunto de ações com nome e crie um fluxograma


específico para estas ações. Dividir o problema em subproblemas
torna nossa tarefa mais simples.

60
Fluxograma

Algoritmos Numéricos
• Passos básicos:
• Passo 7 – Quer nota boa? Faça o chinês.
Não dê mole para que o professor descubra o seu erro.
Ache você mesmo e garanta um bom resultado.

• Passo 8 – Otimização, a solução foi boa ou devo melhorar?


Neste momento você poderá verificar se cabe melhoria no seu
fluxograma.
Qual o ganho que você obterá caso implemente mudanças?
Se decisão for uma mudança no fluxograma já escrito aplique as
devidas mudanças e retorne ao passo 4 já se a decisão for pela
escrita de novo fluxograma retorne ao passo 1 para uma análise
mais detalhada do problema.
61
Fluxograma

Algoritmos Numéricos
• Aplicando as dicas para construir o novo fluxograma.
• Passo 1 – Descrição do problema: Construir um fluxograma
cujo papel é calcular a média de idade de 100 pessoas. As
idades encontram-se armazenadas na memória a partir da
posição de memória END_INICIAL. Lembre-se novamente que
END_INICIAL é apenas um apelido de um endereço de
memória.

• Identificando o problema

62
Fluxograma

Algoritmos Numéricos
• Aplicando as dicas para construir o novo fluxograma.

• Passo 2 – Variáveis:
AptIdades – Irá indicar em que posição da memória está
carregada a lista das idades das pessoas.
Total – Responsável por acumular a soma parcial das idades.
Cont – Contador que indicará se já foi somado todas as idades.

63
Fluxograma

Algoritmos Numéricos
• Aplicando as dicas para construir o novo fluxograma.
• Passo 3 – Primeira solução:

64
Fluxograma

Algoritmos Numéricos
• Aplicando as dicas para construir o novo fluxograma.
• Passo 4: A variável Média só surgiu no final do fluxograma e foi
devidamente inserida.

• Passo 5: Dependendo do processador para o qual tenhamos que


codificar este fluxograma não existe a instrução nativa de
divisão. Supondo que este fosse o caso, vamos aplicar para esta
ação (5) a subdivisão em um conjunto de ações.

• Passo 6: Embora o cálculo da Média só seja realizada uma


única vez ao longo do fluxograma, vamos transformar esta
operação em uma sub-rotina, ou seja, um novo fluxograma.

65
Fluxograma

Algoritmos Numéricos
• Montando a subrotina de Divisão.

Retorna

66
Fluxograma

Algoritmos Numéricos
• Chamada da subrotina de Divisão.

Principal Subrotina

67
Fluxograma

Algoritmos Numéricos
• Passo 7: Vamos fazer o chinês considerando um número limitado
de dados.

Passo Comando AptIdades Total Cont


1 1 1000 0 0
2 2 7 1
3 3 =4
4 4 1001
5 2 10 2
6 3 =4
7 4 1002
8 2 11 3
9 3 =4
10 4 1003
11 2 19 4
12 3 =4 68
Fluxograma

Algoritmos Numéricos
• Passo 7: Vamos fazer o chinês da Divisão.

• Dividendo = Total = 19
• Divisor = NUM_PESSOAS = 4.
• Baseado na condição de teste
teremos a média=4 com resto 3.

Passo Comando Dividendo Divisor Quoc


1 1 19 4 0
2 2 OK
3 3 15 1
4 2 OK
5 3 11 2
6 2 OK
7 3 7 3
8 2 OK
9 3 3 4
10 2 NOK
69
11 4 RESTO=3
Fluxograma

Algoritmos Numéricos
• Passo 8: É possível melhorar? A melhoria irá trazer algum ganho
significativo? Se as duas respostas forem verdadeiras é partir para
implementação.
Média
• No fluxograma ao lado
suprimida a variável contador AptIdades END_INICIAL
e o teste de finalização é feito Total 0
(1)
através do AptIdades.
Total Total + (AptIdades)
• É uma outra possibilidade (2)
Exercício
que não deve ser encarada
como uma boa otimização
AptIdades =
visto que o ganho obtido é END_INICIAL + V
Divisão
NUM_PESSOAS
muito pequeno. (3)

AptIdades AptIdades + 1
Fim
(4)

70
Fluxograma

Algoritmos Numéricos

• Faça um algoritmo de uma subrotina que receba três parâmetros:


END_LISTA, TAM_LISTA e VALOR. O algoritmo deverá buscar na lista de
dados presente na memória a partir do endereço END_LISTA o número
de ocorrências do dado especificado em VALOR. Considere que esta lista
seja do tamanho de TAM_LISTA.

• Faça um algoritmo de uma subrotina que receba dois parâmetros:


END_LISTA e TAM_LISTA. O algoritmo deverá buscar na lista de letras
presente na memória a partir do endereço END_LISTA a ocorrência da
palavra FOGO. Considere que esta lista tenha o número de letras
especificado em TAM_LISTA. Caso o algoritmo encontre a palavra FOGO
deverá colocar o valor 1 na variável RESPOSTA, caso contrário colocará o
valor 0. Lembre-se que cada letra ocupa uma posição de memória.

71
Fluxograma

Algoritmos Numéricos

• Faça um algoritmo que monitore por meio de uma contagem de tempo


adimensional (máxima velocidade do sistema) o intervalo de tempo gasto
ao se pressionar uma chave (C) push bottom. Considere nível lógico baixo
para chave pressionada.

72

Você também pode gostar