Prévia do material em texto
ALGORITMO
ETAPA 1
INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO
CENTRO UNIVERSITÁRIO
LEONARDO DA VINCI
Rodovia BR 470, Km 71, nº 1.040, Bairro Benedito
89130-000 - INDAIAL/SC
www.uniasselvi.com.br
Curso sobre Algoritmo
Centro Universitário Leonardo da Vinci
Organização
Greisse Moser Badalotti
Autor
Marcio Poffo
Reitor da UNIASSELVI
Prof. Hermínio Kloch
Pró-Reitoria de Ensino de Graduação a Distância
Prof.ª Francieli Stano Torres
Pró-Reitor Operacional de Ensino de Graduação a Distância
Prof. Hermínio Kloch
Diagramação e Capa
Renan Willian Pacheco
Revisão
Harry Wiese
3
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
O estudo das técnicas para a resolução de problemas e, consequentemente, a
automatização de tarefas é essencial para a formação de um bom desenvolvedor de
software. O aprendizado da lógica de programação serve de base para o aprendizado
de todas as linguagens de programação existentes atualmente, permitindo que você
desenvolva um raciocínio rápido e conciso.
Para desenvolver um programa de computador, é necessário, primeiramente,
investigar e entender o problema e, uma vez compreendido, é possível buscar ou propor
uma solução para tal – um algoritmo.
Nesta etapa, você estudará os conceitos básicos relacionados à resolução de
problemas por intermédio de algoritmos, além das formas ou métodos de representação
de algoritmos, como, por exemplo, textual, pseudolinguagem e fluxograma. Além disso,
será apresentada uma técnica essencial para a validação e o entendimento de como
determinado algoritmo funciona e como ele se comporta ao longo de sua execução,
conhecida como teste de mesa.
4 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
1. RESOLUÇÃO DE PROBLEMAS
Neste curso, iniciaremos nossos estudos sobre algoritmos. Mas antes de
começarmos, seria útil uma refl exão sobre o signifi cado da palavra “lógica”, bem como
da aplicabilidade de tal conceito no âmbito computacional. Então, o que é lógica? A
palavra lógica está normalmente vinculada à coerência e à racionalidade. Para Forbellone
e Eberspächer (2005, p. 1), a lógica pode ser associada com a “correção do pensamento”,
preocupando-se em determinar quais ações são válidas e quais não são, analisando as
formas e leis do pensamento.
Frequentemente, o conceito de lógica aplica-se apenas ao contexto da matemática,
conforme exemplos de lógica proposicional ilustrados nas Figuras 1.1(a) e 1.1(b). Porém,
a lógica nos acompanha no dia a dia, quando escrevemos, falamos ou pensamos. As
Figuras 1.1(c) e 1.1(d) demonstram alguns exemplos de pensamentos lógicos em nosso
cotidiano.
Figura 1.1 – Exemplos de encadeamento lógico aplicado em diferentes contextos. (a) e (b) silogismos
da lógica proposicional. (c) e (d) sequência lógica aplicada em atividades do cotidiano.
Todo ser humano é um mamífero.
Pedro é um ser humano.
Logo, Pedro é um mamífero.
O Mercosul é composto por países da América do Sul.
O Brasil compõe o Mercosul.
Logo, o Brasil está localizado na América do Sul.
(a) (b)
José é mais velho que Paola.
Paola é mais velha que Thiago.
Logo, José é mais velho que Thiago.
O lápis está dentro da gaveta.
A gaveta está fechada.
Precisamos primeiro abrir a gaveta para depois pegar
o lápis.
(c) (d)
Fonte: O autor
O raciocínio lógico nos permite utilizar corretamente as leis do pensamento e
dos processos de cognição, objetivando a racionalidade e o desenvolvimento de técnicas
para a produção de soluções logicamente válidas e coerentes. Imagine se, no exemplo
exposto na Figura 1.2, o disjuntor principal não fosse desligado? Ou se não houvesse
uma escada disponível? Como trocaríamos a lâmpada queimada?
Figura 1.2 – Sequência lógica dos passos para se trocar uma lâmpada queimada
Fonte: O autor
5
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
Manzano e Oliveira (2016) ressaltam a importância do raciocínio lógico quando
aplicado pelos profissionais da área de tecnologia da informação envolvidos com o
desenvolvimento de sistemas e programas computacionais, pois estes têm como funções
o desenvolvimento de soluções para os mais diversos problemas com eficiência e eficácia.
A lógica de programação permite definir a sequência lógica (sequência de passos/
instruções) para o desenvolvimento. É uma técnica de encadear pensamentos para atingir
um determinado objetivo ou solucionar um problema. De uma maneira geral, instruções
referem-se a um conjunto de regras ou nomes definidos para a realização ou emprego
de algo. No âmbito computacional, uma instrução é o que indica ao computador uma
ação elementar a executar.
É importante ressaltar que uma instrução, tomada de forma isolada, não tem
muito sentido. Deve-se colocar em prática o conjunto de todas as instruções, na
ordem correta, para se obter o resultado desejado (como exposto na Figura 1.2). E, ao
organizarmos as instruções de maneira lógica e concisa, elaboramos um algoritmo!
Mas o que é um algoritmo?
Formalmente, um algoritmo é uma sequência finita de passos (instruções)
que levam à execução de uma tarefa ou à solução de um determinado problema.
Considerando que, ao longo do desenvolvimento de um algoritmo estamos definindo
uma “norma de execução dos passos/instruções”, é necessário obedecermos a algumas
premissas básicas no momento de sua construção, como a definição de passos/instruções
simples e sem ambiguidade, e a organização dos passos/instruções de forma ordenada;
O conceito de algoritmo é geral, podendo ser aplicado a qualquer circunstância,
não estando limitado apenas ao contexto computacional. Perceba que uma receita de
bolo é um exemplo de algoritmo, contendo os passos, ingredientes, quantidades e a
sequência necessária para a conclusão de uma tarefa: a preparação de um bolo (Figura
1.3).
Figura 1.3 – Uma receita de bolo é um algoritmo
Fonte: o autor
6 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
Um algoritmo determina um padrão de comportamento a ser seguido, e não deve
ser confundido com a solução do problema. Ele determina um dos inúmeros caminhos
(entre outras palavras, o conjunto de passos) que levam à solução para um determinado
problema. Além disso, um algoritmo garante, sempre que executado sob as mesmas
condições, o mesmo resultado.
Todo problema a ser solucionado por intermédio de um algoritmo precisa ser
claro e bem definido. Devemos extrair todas as informações a respeito do problema
e relacioná-las com o conhecimento atual que se tem do assunto, a fim de descrever
os passos para se chegar à sua solução. O Algoritmo 1.1 é um exemplo simples e bem
definido de um algoritmo (sem estruturas mais complexas como seleção e repetição)
para se resolver o jogo das Torres de Hanói (Figura 1.4). Por definição, temos que:
A Torre de Hanói consiste de uma base com três pinos e um certo número N de
discos de diâmetros diferentes, colocados um sobre o outro em um dos pinos, em
ordem decrescente de seus diâmetros, de baixo para cima [...]. O jogo consiste
em transferir a torre de discos para um dos outros dois pinos, movimentando
um disco de cada vez, utilizando-se um dos pinos livres como auxiliar e nunca
colocando um disco sobre outro de diâmetro menor. (DEPARTAMENTO DE
MÁTEMATICA – UFOP, 2017, p. 1).
Tabela 1.1 – Algoritmo para resolver o problema das Torres de Hanói
Início
1. Mover um disco da haste A para a haste B.
2. Mover um disco da haste A para a haste C.
3. Mover um disco da haste B para a haste C.
4. Mover um disco da haste A para a haste B.
5. Mover um disco da haste C para a haste A.
6. Mover um disco da haste C para a haste B.
7. Mover um disco da haste A para a haste B.
Fim
Fonte: O autor
Figura 1.4 – O problema das Torres de Hanói com três discos de diâmetros diferentes (em ordemdecrescente por diâmetro) e três hastes: A, B e C. Tendo como objetivo final a transferência
de todos os discos da haste A (situação inicial) para a haste B (situação final), utilizando a
haste C como haste auxiliar.
Fonte: O autor
7
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
A Figura 1.5 ilustra a execução do algoritmo da Tabela 1.1, proposto anteriormente.
Perceba que para um mesmo problema, podem existir diversos algoritmos que
solucionem o problema (poderíamos começar movendo o disco menor para a haste C,
no passo 1). No entanto, deve-se observar qual dentre os possíveis algoritmos é o mais
eficiente para se economizar horas de processamento.
Figura 1.5 – Ilustração passo a passo de cada uma das etapas descritas no algoritmo da tabela 1.1
Fonte: O autor
Até o momento estudamos algoritmos para resolver problemas das mais diversas
áreas (veja o exemplo do algoritmo da Tabela 1.2). Isso é possível porque essa estruturação
sequencial dos passos para se desenvolver um algoritmo não está vinculada apenas ao
âmbito computacional. O fluxo de execução, independentemente do contexto em que
o algoritmo está inserido, é linear, de cima para baixo, assim como é a sequência pela
qual lemos este livro, do início ao fim.
Tabela 1.2 – Algoritmo para ligar o ar-condicionado de uma sala de aula
Início
1. Colocar as pilhas no controle do ar-condicionado.
2. Se deslocar próximo ao ar-condicionado.
3. Ligar o aparelho.
4. Selecionar a temperatura desejada.
Fim
Fonte: O autor
8 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
1.1. ETAPAS DE UM ALGORITMO
Um algoritmo, quando programado em um computador, é constituído por três
partes principais: entrada, processamento e saída (Figura 1.6). Isto signifi ca que, para
resolver qualquer problema computacionalmente, teremos dados que servirão como
entrada para o algoritmo, procedimentos que irão tratar os dados de entrada (sendo
estes fornecidos no momento em que o programa está em execução ou podem estar
embutidos dentro do mesmo), e uma saída – fruto da etapa de processamento.
Figura 1.6 – Etapas básicas de um algoritmo
Fonte: O autor
A etapa de entrada de dados é a parte em que o computador recebe as informações
necessárias para que o algoritmo possa ser executado com sucesso. Estas informações
podem ser armazenadas na memória principal de um computador ou na memória
secundária para algum uso futuro (caso você tenha alguma dúvida sobre a diferença
entre ambas as memórias, consulte a Figura 1.8, que apresenta a organização das
estruturas básicas que compõe um computador).
Na etapa de processamento, o computador, por meio de um programa executado
em sua memória primária, avalia todas as expressões lógicas, relacionais e algébricas,
assim como todas as estruturas de seleção e repetição presentes no algoritmo. Nesta
etapa, também é feito a transformação dos dados de entrada, realizando todos os
procedimentos para se chegar no resultado fi nal.
Por fi m, na etapa de saída, todos os resultados da etapa anterior (ou parte
deles) são enviados para o mundo externo por intermédio dos dispositivos de saída
do computador, como: monitor, impressora, fax, caixa de som. Estes resultados podem
servir como entrada para outro algoritmo, ou serem usados como fonte de informação
para o usuário do computador, e assim facilitar suas tomadas de decisões.
Vamos analisar um problema computacional prático, a fi m de compreender
melhor estas três etapas fundamentais de um algoritmo.
Marcelo foi contratado para desenvolver um algoritmo que calcule o Índice de
Massa Corporal (IMC) de uma pessoa. Tal índice indica se um ser humano adulto está
acima do peso, obeso ou em seu peso ideal. A fórmula para se calcular o IMC é a seguinte:
. Como Marcelo deve proceder para desenvolver o algoritmo requerido?
Quais são os passos e/ou ações que ele deve tomar? Lembre-se de que um algoritmo
9
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
especifica com clareza e de forma correta as instruções que um software deverá conter
para que, ao ser executado, forneça os resultados esperados.
Num primeiro momento, Marcelo deve compreender bem qual é o problema a ser
resolvido pelo algoritmo (Figura 1.7). Feito isto, podem-se extrair todas as informações a
respeito desse problema (dados e operações), relacioná-las com o conhecimento atual (ou
disponível) que se tem do assunto – cálculo do IMC. Finalmente, uma vez compreendido
como resolver o problema, resta descrever claramente os passos (ou instruções) para se
chegar à solução do problema.
Figura 1.7 – A tarefa de especificar um algoritmo
Fonte: EBAH (2017).
Quais são as instruções, então, necessárias para que Marcelo desenvolva o
algoritmo para o qual fora contratado? Como o objetivo do algoritmo é calcular o IMC
de uma pessoa adulta (envolvendo a informação de peso e altura dessa mesma pessoa),
devemos saber quais são os valores a serem considerados na fórmula.
Assim, essas informações devem ser consideradas para a etapa de entrada do
algoritmo. Sendo que, ao longo do processamento, o peso e a altura serão utilizados
para efetuar o cálculo necessário da fórmula referida. Portanto, as primeiras instruções
poderiam ser: “Informe o peso da pessoa” e “Informe a altura da pessoa”.
Munido de todas as informações necessárias para se calcular o IMC, Marcelo
pode agora se preocupar com a etapa de processamento, a qual irá, de fato, realizar
a aritmética necessária para se obter o valor do IMC, dividindo o valor do peso pelo
quadrado da altura. Depois de obtido e armazenado o resultado, Marcelo deve ainda se
preocupar com a última etapa, a etapa de saída, exibindo o resultado em um monitor
ou qualquer outro dispositivo de saída do computador.
Viu só? Nem é tão complicado quanto parecia! Veja como ficou o algoritmo
desenvolvido por Marcelo (algoritmo da Tabela 1.3), descrito em uma linguagem bem
10 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
simples. Antes de começarmos a estudar quais as diversas maneiras para formalizarmos
um algoritmo, é preciso esclarecer alguns outros aspectos, como a diferença de um
algoritmo para um programa, e também alguns outros conceitos sobre dados e instruções.
Tabela 1.3 – Algoritmo para efetuar o cálculo do Índice de Massa Corporal (IMC)
Início
1. Solicitar e armazenar o peso da pessoa para a qual se deseja calcular o IMC.
2. Solicitar e armazenar a altura da pessoa para a qual se deseja calcular o IMC.
3. Calcular e armazenar o resultado da fórmula matemática:
4. Exibir o resultado em um dispositivo de saída, como, por exemplo, o monitor.
Fim
Fonte: O autor
Figura 1.8 – Organização dos blocos funcionais de um computador. A memória primária é
acessada diretamente pela Unidade Lógica e Aritmética (ULA) do microprocessador,
podendo ser de leitura e escrita (RAM, do inglês Random Access Memory) ou apenas
de leitura (ROM, do inglês Read Only Memory). Já a memória secundária não é
acessada diretamente pela ULA, mas sim por meio de controladores, ocasionando
uma performance/velocidade de acesso e escrita inferior quando comparado à
memória principal.
Fonte: Wikipédia (2017)
11
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
2. ALGORITMOS VS. PROGRAMAS
Algoritmos são um conjunto de etapas para realizar a execução de uma tarefa
(CORMEN, 2014). Neste sentido, um algoritmo é um procedimento. Na seção anterior
foi apresentado um exemplo de algoritmo para executar a tarefa de calcular o IMC de
uma pessoa.
Um algoritmo é transformado em programa após ser convertido para uma
linguagem de programação aceita por um computador real (CORMEN, 2014).
Neste sentido, um programa utiliza representações e estruturas mais específicas
que dependemde um computador real, que após compilado, pode ser executado por um
computador real (JUNIOR et al., 2012). Para o aprendizado, é importante desenvolver
um algoritmo para uma solução, para então depois convertê-lo para uma linguagem
de programação real.
Analise o simples algoritmo apresentado na tabela a seguir, que trata de realizar
a multiplicação entre dois números informados.
Tabela 2.1 – Algoritmo para calcular a multiplicação de números positivos
Início
1. Solicitar o primeiro número a ser multiplicado.
2. Solicitar o segundo número, que será utilizado como multiplicador.
3. Calcular a multiplicação seguindo a fórmula matemática:
4. Exibir o resultado em um dispositivo de saída, como, por exemplo, o monitor.
Fim
Fonte: O autor
Agora, para demonstrar a diferença entre algoritmo e programa, vamos antecipar
um pouco nosso conteúdo, transformando o algoritmo da Tabela 2.1 em pseudocódigo,
apresentando a seguir a conversão dele para duas linguagens de programação
interpretadas por computador, Delphi e Java.
12 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
Tabela 2.2 – Algoritmo da tabela 2.1 convertido em pseudocódigo
Algoritmo Multiplicao positivos
Declaração de variáveis
numero1,
numero2,
resultado,
contador: Inteiro;
Inicio
Escreva(“Escreva o primeiro numero”);
Leia(numero1);
Escreva(“Escreva o segundo numero”);
Leia (numero2);
resultado ← 0;
contador ← 0;
Enquanto contador < numero2 Faça
resultado ← resultado + numero1;
contador ← contador + 1;
Fim-Enquanto
Escreva(resultado);
Fim
Fonte: O autor
Agora observe a tabela a seguir, que apresenta o algoritmo acima convertido
na linguagem Delphi, muito utilizada no desenvolvimento de software. Note que a
lógica permaneceu a mesma, assim como as estruturas de variáveis. Porém, a sintaxe
do comando for (loop), que você conhecerá mais adiante, é bem diferente, embora a
lógica seja a mesma.
13
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
Tabela 2.3 – Algoritmo da tabela 2.1 convertido para a linguagem Delphi
procedure TForm1.multiplicacaoPositivos;
var
numero1,
numero2,
resultado,
contador :Integer;
begin
numero1 := StrToInt(Edit1.Text);
numero2 := StrToInt(Edit2.Text);
contador := 0;
resultado := 0;
for contador := 0 to numero2-1 do
begin
resultado := resultado + numero1;
end;
ShowMessage(IntToStr(resultado)); // apresenta uma mensagem
end;
Fonte: O autor
Na tabela a seguir, apresenta-se o mesmo algoritmo convertido para a linguagem
Java, também muito utilizada no desenvolvimento de software. Novamente, a sintaxe do
comando for (loop), é um pouco diferente do algoritmo, embora a lógica seja a mesma.
Tabela 2.4 – Algoritmo da tabela 2.1 convertido para a linguagem Java
private void multiplicacaoPositivos(){
int numero1 = 0;
int numero2 = 0;
int resultado = 0;
int contador = 0;
Scanner s = new Scanner(System.in);
System.out.println("Digite o primeiro número");
numero1 = s.nextInt();
System.out.println("Digite o segundo número");
numero2 = s.nextInt();
for (contador = 0; contador <= numero2-1; contador++){
resultado = resultado + numero1;
}
System.out.println(resultado);
}
Fonte: O autor
14 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
Os programas de computador possuem procedimentos, também chamados por
funções ou métodos, conforme pode ser analisado nos algoritmos 1.5 e 1.6, que possuem
o método “multiplicacaoPositivos” que realiza a tarefa do cálculo, o qual é chamado de
algum ponto do programa (CORMEN, 2014).
3. DADOS E INSTRUÇÕES
Inicialmente, vamos entender a diferença entre dados e informações. Os dados
representam pequenos significados ou registros não tratados, que isoladamente não
podem transmitir uma mensagem ou informação. Neste contexto, informação pode ser
entendida por dados tratados, isto é, o resultado de processamento de dados, dos quais
podem serem tomadas decisões. Neste caso, a saída de um algoritmo é uma informação,
isto é, um dado tratado.
Uma instrução, ou ação, comanda o funcionamento da máquina e determina como
os dados devem ser tratados. Neste sentido, um programa é um conjunto de instruções
que tratam dados, e estes são transformados em informações (TEIXEIRA, 2011).
As instruções de algoritmos, assim como das linguagens de programação,
referem-se diretamente aos dados que serão tratados, diferentemente das instruções da
linguagem de máquina que referem-se à localização física dos dados (TEIXEIRA, 2011).
Por isso que a programação em linguagens de alto nível torna-se mais fácil e legível.
As instruções primitivas são os comandos que efetuam as tarefas essenciais para
a operação de um computador, como a entrada e saída de dados, assim como a sua
movimentação na memória da máquina. Estas instruções estão inseridas na maioria das
linguagens de programação, para que destas se consiga desenvolver um programa que
realize alguma tarefa necessária. Como e de onde estas instruções recebem os dados
para processar?
• Dispositivos de entrada: É o meio pelo qual são transferidos os dados do usuário
ou de dispositivos de memória secundários para a memória do computador. São
exemplos destes dispositivos: teclado, mouse, discos, pen drives etc.
•Dispositivos de saída: É o meio pelo qual os dados tratados são transferidos do
computador para o usuário ou aos dispositivos de memória secundários. São
exemplos destes: monitor de vídeo, impressora, pen drives etc.
A instrução primitiva de atribuição, ou simplesmente conhecida por atribuição,
é o principal meio para transferir dado para uma variável de memória. Segue na tabela
a seguir um exemplo de atribuição em pseudocódigo.
15
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
Tabela 3.1 – Exemplo de atribuição de valor para uma variável em memória
variavel1 ← 100
Fonte: O autor
4. MÉTODOS PARA REPRESENTAÇÃO DE ALGORITMOS
Os algoritmos computacionais podem ser descritos como um roteiro para a
solução de problemas do mundo real, independentemente da plataforma tecnológica
ou ainda da linguagem de programação (TEIXEIRA, 2011). Isso quer dizer que não
importa qual tecnologia será utilizada para solucionar um determinado problema, pois
a lógica independe disso. O que importa são os procedimentos, isto é, as instruções a
serem seguidas pelo algoritmo estarem corretas, pois é desta forma que os dados gerados
estarão corretos. Neste sentido, imagine a necessidade de desenvolver um programa
que calcule o desconto dos produtos vendidos em uma loja de roupas. Se o cálculo não
estiver correto, serão cobrados os produtos incorretamente.
Para representar os roteiros a serem seguidos pelo computador, foram originadas
diversas formas de representar os algoritmos, principalmente por pseudocódigos e
também por fluxogramas (TEIXEIRA, 2011).
4.1 PSEUDOCÓDIGO
O uso da linguagem natural pode provocar alguns problemas durante a
interpretação do algoritmo, se este estiver em um grau de complexidade elevado. Este
é um dos motivos do surgimento do pseudocódigo.
O pseudocódigo representa um algoritmo de forma independente das linguagens
de programação, utilizando um subconjunto da linguagem falada e que não possua
ambiguidades, possibilitando assim o desenvolvimento de algoritmos mais legíveis
(GARCIA, 2007).
Um algoritmo deve iniciar pelo seu cabeçalho, que é a primeira linha que apresenta
a sua identificação, conforme apresentado na primeira linha da Tabela 4.1, cuja linha
deve apresentar o nome do algoritmo, o qual deve estar relacionado com a tarefa a ser
executada (EDELWEISS; LIVI, 2014).Logo após, devem ser escritas as declarações, isto
é, a lista de variáveis a serem utilizadas no algoritmo, cujos nomes devem indicar qual
sua utilidade no programa, como por exemplo, uma variável que receberá um cálculo, a
qual pode ser chamada de “resultado” (EDELWEISS; LIVI, 2014). Após a declaração das
variáveis, entre as palavras reservadas “Inicio” e “Fim”, devem ser escritas as instruções
do algoritmo. Observe a Tabela 4.1, que exemplifica o formato geral de um algoritmo.
16 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
Tabela 4.1 – Formato geral de um pseudocódigo
Algoritmo <identificador>
Lista de Variáveis
Inicio
<Intruções a serem executadas>
Fim
Fonte: O autor
Neste sentido, podemos dizer que um computador é basicamente uma máquina
que recebe dados, os processa e então os libera de forma tratada. Em um pseudocódigo,
como em linguagens de programação, as instruções são incluídas uma em cada
linha, representando a sua ordem de serem executadas. Além disso, a boa prática de
programação menciona que se deve utilizar a endentação, que é a tabulação na frente
das linhas, o que torna a leitura do algoritmo mais legível e fácil de compreender. Os
dados são o local onde os valores são armazenados e as instruções são a manipulação
destes dados. Durante o desenvolvimento de instruções, aparecem a necessidade de
utilização de operadores, variáveis e funções, os quais serão estudados mais adiante.
Agora que entendemos os conceitos de algoritmos e pseudocódigo, vamos propor
um algoritmo e depois transformá-lo em um pseudocódigo. Tomemos os problemas a
seguir para serem solucionados por algoritmos.
a) Desenvolver um algoritmo que efetue a soma de dois números inteiros informados
pelo usuário cujo resultado seja escrito em um dispositivo de saída.
Tabela 4.2 – Algoritmo desenvolvido para o problema atual
Início
1. Solicitar o primeiro número ao usuário e então armazená-lo em uma variável.
2. Solicitar o segundo número ao usuário e então armazená-lo em uma outra variável.
3. Somar os dois números e armazenar o resultado da fórmula matemática em outra
variável.
4. Exibir o resultado em um dispositivo de saída, como, por exemplo, o monitor.
Fim
Fonte: O autor
Agora convertemos o algoritmo atual, escrito na Tabela 4.2, para a linguagem
pseudocódigo. Observe como o código-fonte é simples e também compreensível.
17
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
Tabela 4.3 – Pseudocódigo desenvolvido para o problema atual
Algoritmo Soma positivos
Declaração de variáveis
numero1,
numero2,
resultado: Inteiro;
Inicio
Escreva(“Escreva o primeiro numero”);
Leia(numero1);
Escreva(“Escreva o segundo numero”);
Leia(numero2);
resultado ← numero1 + numero2;
Escreva(resultado);
Fim
Fonte: O autor
Basicamente seguiu-se as instruções do algoritmo para implementar o
pseudocódigo. Por exemplo: para solicitar ao usuário o primeiro número, criou-se a
variável “numero1” e incluiu-se o comando “ler(numero1)” para o usuário digitar o
número e atribuir o valor a esta variável. O mesmo foi feito para as demais instruções
de nosso algoritmo.
b) Desenvolver um algoritmo que efetue o cálculo da média de um aluno, informado
pelo usuário. Neste caso, o usuário deve informar o nome do aluno, a nota 1 e a nota
2, e o programa deve calcular a média da nota e então exibir o resultado em um
dispositivo de saída com o nome do aluno e a sua média.
Tabela 4.4 – Algoritmo desenvolvido para o problema atual
Início
1. Solicitar o nome do aluno e armazená-lo em uma variável.
2. Solicitar a primeira nota do aluno e então armazená-la em uma outra variável.
3. Solicitar a segunda nota do aluno e então armazená-la em uma terceira variável.
4. Calcular a média das notas utilizando a fórmula matemática: .
5. Exibir o resultado em um dispositivo de saída, como, por exemplo, o monitor.
Fim
Fonte: O autor
Agora convertemos o algoritmo atual, escrito na Tabela 4.4, para a linguagem
pseudocódigo. Para isso, seguimos o mesmo procedimento: lemos cada instrução e a
convertemos em código.
18 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
Tabela 4.5 – Pseudocódigo desenvolvido para o problema atual
Algoritmo Soma positivos
Declaração de variáveis
nome :String;
nota1,
nota2,
media: Real;
Inicio
Escreva(“Escreva o nome do aluno”);
Leia(nome);
Escreva(“Escreva a nota 1”);
Leia(nota1);
Escreva(“Escreva a nota 2”);
Leia(nota2);
media ← (nota1 + nota2)/2;
Escreva(“O aluno ”, nome, “possui a média ”, media);
Fim
Fonte: O autor
4.2 FLUXOGRAMA
O pseudocódigo, conforme já mencionado, é uma das formas de representar
um algoritmo de maneira que não fique ambíguo e seja independente das linguagens
de programação. Porém, podemos também representar um algoritmo através de um
fluxograma, também conhecido por diagrama de blocos. A utilização de fluxograma
é outra forma de representar a solução para um problema. Fluxograma é uma forma
de representação gráfica que auxilia no processo de início do desenvolvimento de um
programa, facilitando o entendimento de seus passos e de seu processo (OKUYAMA;
MILETTO; NICOLAO, 2014).
Fluxograma é um instrumento gráfico bastante utilizado para a organização e
metodologias de processos, pois facilita o entendimento (VERGUEIRO, 2002). O termo
fluxograma pode ser ainda entendido como a representação gráfica de um fluxo de
trabalho, desenvolvido geralmente por recursos de figuras geométricas normalizadas,
assim como setas que as unem (VERGUEIRO, 2002). Além disso, fluxograma tem por
finalidade apresentar de forma rápida e mais compreensível o fluxo de informações e
as ações da sequência operacional de algum processo.
Um exemplo de um processo é um serviço de uma biblioteca que possui um certo
método, em que as pessoas (bibliotecários, funcionários, estudantes) realizam tarefas,
como empréstimo de livros e devoluções, por exemplo, o que pode ser implantado em
19
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
um sistema de informação. Para isso, é necessário desenvolver um fluxograma para
compreender todo o processo, e depois implementá-lo em linguagens de programação
(VERGUEIRO, 2002).
Neste sentido, um fluxograma preocupa-se com todos os detalhes existentes
em um algoritmo, utilizando as figuras geométricas para representar as ações a serem
executadas, assim como a entrada e saída de dados, as unidades de armazenamento, o
fluxo dos dados e também tomadas de decisões (RITA, 2009).
De forma geral, o fluxograma pode ser entendido como uma representação
esquemática de um processo, desenvolvido através de gráficos, que ilustra a sequência
de passos de forma descomplicada (JUNIOR et al., 2012). Em um fluxograma, cada
passo é representado por um desenho (forma geométrica), representando o problema
de forma geral (JUNIOR et al., 2012). Os principais elementos de um fluxograma são
apresentados na figura a seguir.
Figura 4.2.1 – Elementos mais utilizados de um fluxograma
20 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
Fonte: Rita (2009, p. 18-19).
Agora que entendemos a conceituação de fluxograma, vamos desenvolver um
fluxograma para o algoritmo descrito na Tabela 2.1 deste caderno de estudos? Apenas
para relembrar, o problema a ser resolvido é: desenvolver um algoritmo que realize a
multiplicação entre dois números informados.
Vamos desenvolver este fluxograma passo a passo:
a. Inicialize nosso algoritmo com a figura geométrica elipse, figura que demarca
o início e fim do algoritmo.
b. Logo após, crie um paralelogramo inserindo como texto asvariáveis que
receberão a entrada de dados, que neste caso são “numero1” e “numero2”.
c. Aplique a seta da elipse de início para o paralelogramo (dados).
d. Em seguida, crie um retângulo, e neste escreva o cálculo da multiplicação,
utilizando a variável “resultado” recebendo o resultado do cálculo.
e. Aplique a seta do paralelogramo (dados) para o retângulo.
f. Crie um outro paralelogramo, cuja descrição será a variável “resultado”.
g. Crie uma elipse, com a descrição “Fim”.
h. Inclua as setas nas últimas figuras criadas.
Veja na figura a seguir como deve ficar nosso fluxograma.
21
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
Figura 4.2.2 – Fluxograma para algoritmo da tabela 2.1 deste caderno de estudos
Fonte: O autor
Conforme se pode analisar na figura acima, temos um fácil entendimento do
processo que foi desenvolvido como solução do problema. A utilização de fluxograma
também garante que diferentes pessoas que entrarem para trabalhar em um projeto
compreendam os processos mais facilmente.
Vejamos outro exemplo de fluxograma, um pouco mais complexo por ter uma
condição (if). Vamos desenvolver o fluxograma para a devolução de uma obra para
uma biblioteca.
Figura 4.2.3 – Fluxograma para o processo de devolução de obras de uma biblioteca
Fonte: O autor
22 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
5. TESTE DE MESA
Teste de mesa é um meio de validar um algoritmo. Através do teste de mesa
podemos analisar o que ocorre com as variáveis e regras de um algoritmo durante o
fluxo de um programa (MELO, 2013). O teste de mesa, também chamado de teste de
bancada, é uma das ferramentas mais utilizadas para verificar se um algoritmo está
sendo executado corretamente (LEITE, 2006). O teste de mesa aponta para o programador
exatamente o que o programa está processando no momento.
Além disso, podemos descrever um teste de mesa como a tarefa de verificar se
cada um dos passos programados no algoritmo, após o desenvolvimento do mesmo,
está correto. Para fazer um teste de mesa, deve ser lida cada uma das instruções do
algoritmo e ir anotando em um papel, ou em uma tabela, o resultado de cada um dos
passos, o que facilita perceber se existe algum erro ou ainda algum outro meio melhor
para a solução do problema.
Na tabela a seguir, descrevem-se os procedimentos para executar um teste de
mesa simples:
Tabela 5.1 – Procedimentos para executar um teste de mesa simples
1. Desenvolver uma tabela em que cada coluna se refere a uma variável utilizada no
programa.
2. Executar as instruções previstas no algoritmo.
3. Verificar se os resultados estão corretos.
4. Concluir os testes após um número razoável de resultados corretos.
Fonte: O autor
Agora que aprendemos o conceito e como funciona um teste de mesa, que tal
aprendermos na prática? Então vamos rever o algoritmo da Tabela 2.1 deste caderno, e
desenvolveremos o teste de mesa. Analise os dados da figura a seguir que apresenta o
passo a passo, e logo depois a explicação de cada uma das linhas do nosso teste de mesa.
Figura 4.2.4 – Teste de mesa para o algoritmo da tabela 2.1 deste caderno
Fonte: O autor
23
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
Vamos agora analisar o teste de mesa realizado: No passo “Início”, as variáveis
ainda estavam com valor zero, pois o programa ainda não havia iniciado, apenas a
declaração das variáveis. No passo 1, foi solicitado um número para o usuário, o qual
foi atribuído para a variável “numero1”. No passo 2, o segundo número foi solicitado
ao usuário, o qual foi atribuído para a variável “numero2’. No passo 3, foi realizado o
cálculo e atribuído o resultado para a variável “resultado”, que no passo 4 foi exibido
o resultado na tela.
24 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
REFERÊNCIAS
CORMEN, T. H. Desmistificando algoritmos. Rio de Janeiro: Elsevier, 2014.
DEPARTAMENTO DE MATEMÁTICA – UFOP. Disponível em: <http://www.iceb.
ufop.br/demat/perfil/arquivos/0.091292001363381611.pdf>. Acesso em: 20 mar.
2017.
EBAH. Disponível em: <http://www.ebah.com.br/content/ABAAAAFywAF/
algoritmos-logica-programacao?part=2>. Acesso em: 20 mar. 2017.
EDELWEISS, N.; LIVI, M. A. C. Algoritmos e programação: com exemplos em Pascal
e C. Porto Alegre: Bookman, 2014.
FORBELLONE, I. V.; EBERSPACHER, H. F. Lógica de programação: a construção de
algoritmos e estruturas de dados. São Paulo: Prentice Hall, 2005.
GARCIA, N. Linguagem de programação de computadores. E-book, 2007.
JUNIOR, D. P.; NAKAMITI, G. S.; ENGELBRECHT, A. M; BIANCHI, F. Algoritmos e
programação de computadores. Rio de Janeiro: Elsevier, 2012.
LEITE, M. Técnicas de programação: uma abordagem moderna. Rio de Janeiro:
Brasport, 2006.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento
de programação de computadores. São Paulo: Saraiva, 2016.
MELO, D.T. Lógica de programação com VisualG: uma abordagem prática. Mococa-
SP: Ed. do Autor, 2013.
OKUYAMA, F. Y.; MILETTO, E. M.; NICOLAO, M. Desenvolvimento de software:
conceitos básicos. Porto Alegre: Bookman, 2014.
RITA, S. Treinamento em lógica de programação. São Paulo: Digerati, 2009.
TEIXEIRA, C. Construção de algoritmos no século XXI. Independentes, 2011.
VERGUEIRO, W. Qualidade em serviços de informação. São Paulo: Arte & Ciência,
2002.
25
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
WIKIPÉDIA. Desenvolvido pela Wikimedia Foundation. Apresenta conteúdo
enciclopédico. Disponível em: <https://pt.wikipedia.org/wiki/Computador>. Acesso
em: 20 mar. 2017.
Centro Universitário Leonardo da Vinci
Rodovia BR 470, km 71, n° 1.040, Bairro Benedito
Caixa postal n° 191 - CEP: 89.130-000 - lndaial-SC
Home-page: www.uniasselvi.com.br