Baixe o app para aproveitar ainda mais
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 Márcio 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 ordem decrescente 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 dependem de 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 deVariá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 as variá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
Compartilhar