1.0 ​​​​​​​Fundamentos de algoritmos

Suplemento de Aula

Fonte: Adaptado de https://devschannel.com

Editado em: 19.09.2024

  1. 1.0 ​​​​​​​Fundamentos de algoritmos 
  2. Sintaxe de um algoritmo.
  3. A semântica de um algoritmo
  4. Defafio
    1. Saque eletrônico
    2. O que você aprendeu:
  5. Material Extra
  6. Links

Antes de introduzirmos o conceito de Algoritmo, vamos primeiro ter uma breve introdução ao conceito de Lógica de Programação.

O conteúdo deste material tem o objetivo de preparar você, que está iniciando na área da programação e nunca aprendeu nenhuma linguagem de programação, a entender com mais facilidade o que for ensinado na linguagem que você aprender, e por isso (quando você for procurar tutoriais online) haverá tutoriais que não são diretamente ligados a Lógica de Programação, mas que vão te beneficiar quando você tiver um primeiro contato com uma linguagem de programação.

Além disso, também há exemplos de linguagens de programação reais: PHP e C++. Acredito que é benéfico comparar as diferenças de sintaxe e algumas características de linguagens de programação reais, porém sem tirar o foco do objetivo dos tutoriais, que é Lógica de Programação. Esses exemplos são mostrados apenas para ilustrar conceitos e fazer comparações.

O que é Lógica de Programação?

A lógica de programação (ou, por extensão, lógica computacional) é uma forma de **organizar pensamentos** que permite a **tradução do raciocínio lógico humano** para a **linguagem das máquinas**, permitindo que elas realizem alguma determinada tarefa – [Lucas Custódio| https://blog.betrybe.com/author/lucas-martins/​​​​​​​].

Fonte: Unicamp

Lógica de Programação é um conjunto de técnicas para a criação de algoritmos, que envolvem a tradução de problemas do mundo real em conjuntos de instruções. Algoritmos são conjuntos de instruções que servem para cumprir uma ação.

A definição é bem genérica, e pode ser aplicada em outras áreas de conhecimento, não apenas na computação. Como o termo se adequou muito à área da computação, ele é muito usado nessa área.

Ainda, de acordo com (De Souza, M.A.F et al, 2016), existe um algoritmo embutido em toda a tarefa, independente de ela ser relacionada a um programa de computador. Em nosso cotidiano, executamos toda e qualquer tarefa utilizando algoritmos, mesmo não percebendo isso. Atos como comer, respirar, ir para a escola, dirigir um automóvel, resolver uma prova, estudar, cozinhar, fazer uma refeição, consertar o motor de um automóvel, etc. São tarefas que podem ser descritas por meio de algoritmo.

Por outro lado. Existem algoritmos que precisamos aprender para poder realizar certas tarefas específicas, como por exemplo. Aquelas ligadas a engenharia e a computação. Assim, para especificar um processo de montagem de um circuito eletrônico, um processo químico industrial e um programa eficiente de pesquisa de informações em um banco de dados. Entretanto, as são necessárias informações e conhecimentos adicionais aos que já possuímos. Desse modo, conclui-se que:

Algoritmos não servem apenas para programar computadores, são de uso geral.

Algoritmos e Lógica de Computação – 2Ed

O termo algoritmo é derivado do nome do matemático árabe Abu Ja’far Mohammed ibn Musa al
Khowarizmi
(825), que escreveu um livro com procedimentos para efetuar operações com números escritos
em algarismos indus (os algarismos do sistema de numeração decimal, conhecidos, hoje, como indu-arábicos).

Não se preocupe se você está começando e não entendeu nada dessa definição. Aos poucos, as coisas vão ficar mais claras e fáceis de entender. Os tutoriais são voltados para iniciantes e são cheios de exemplos.

Para facilitar o seu entendimento, exemplifiquemos o conceito de algoritmo. Algoritmos podem representar problemas de programação, mas também podem ser usados para representar problemas do cotidiano. Para iniciantes, é melhor começar citando algoritmos que falam de coisas do nosso cotidiano. Por isso, vou mostrar abaixo os passos de um algoritmo para escovar os dentes:

1. Se não estiver no banheiro, ir até lá
2. Pegar a pasta dental e abri-la
3. Pegar a escova dental e passar um pouco da pasta dental nela
4. Escovar os dentes
5. Lavar a boca
6. Lavar a escova dental
7. Guardar a pasta dental e a escova dental
Algoritmo 1.1 Algoritmo informal em forma de passos

Além dessa representação de um algoritmo, que é uma descrição literal dos passos que o compõem, também é muito comum representar um algoritmo usando pseudocódigo ou fluxogramas.


O pseudocódigo, como o prefixo indica, é um código falso. Ele não precisa seguir nenhuma sintaxe específica. Ele não é uma linguagem de programação. Ele é muito usado ao ensinar Lógica de Programação e também para descrever as instruções de um algoritmo. Como há uma liberdade na escrita do pseudocódigo, ele pode ser escrito em qualquer idioma, sem restrições. Ele pode ser escrito em um caderno, mas também pode ser escrito em um computador. Veja abaixo um exemplo de pseudocódigo:

real peso, altura, imc
escreva("Digite o seu peso\n")
leia(peso)
escreva("Digite a sua altura\n")
leia(altura)
imc = peso / (altura * altura)
escreva("Seu IMC é: ", imc, "\n")

Esse pseudocódigo foi criado no Portugol Studio e segue algumas regras de sintaxe dele. Porém, um pseudocódigo, em si, não tem nenhuma regra de sintaxe pré-estabelecida. Mas, quando você usa um programa que executa os algoritmos que você escreve, como o Portugol Studio, é necessário criar algumas regras para que o programa possa entender o que você escreveu e transformar o seu pseudocódigo em um pequeno programa.


Fluxogramas representam um algoritmo de uma forma gráfica, através de formas e símbolos. Você vai ver fluxogramas em detalhes depois.


Existem ferramentas que podem ser usadas para criar algoritmos usando essas representações de algoritmos (pseudocódigos e fluxogramas). Nos exemplos, vamos trabalhar com o Portugol Studio para a criação de pseudocódigos e vamos usar, a princípio, o draw.io para trabalhar com fluxogramas.


Você já deve ter ouvido dizer que é preciso aprender primeiro Lógica de Programação para depois aprender uma linguagem de programação. Será que isso é mesmo verdade? Será que se você não aprender Lógica de Programação, você não vai conseguir aprender uma linguagem de programação que você quer aprender ou não vai conseguir programar bem nessa linguagem?


É recomendável que você aprenda Lógica de Programação antes de aprender a sua primeira linguagem de programação, porque isso vai te ajudar muito e acelerar o aprendizado da linguagem. Mas isso não quer dizer que você não vai conseguir aprender uma linguagem de programação ou que não vai conseguir programar bem nela se você não aprender Lógica de Programação.​​​​​​​

Formalização de um algoritmo

De acordo com Marco Furlan (2016) a tarefa de especificar os algoritmos para representar um programa consiste em detalhar os dados que serão processados pelo programa e as instruções que vão operar sobre esses dados. Embora a especificação possa ser feita livremente, é importante formalizar a descrição dos algoritmos segundo alguma convenção, para que todas as pessoas envolvidas na sua criação possam entende-lo na mesma forma.

Em primeiro lugar, é necessário definir um conjunto de regras que regulem a escrita do algoritmo, isto é, regras de sintaxe. Em segundo, é preciso estabelecer as regras que permitam interpretar um algoritmo, que são as regras semânticas.

Sintaxe de um algoritmo.

Antecipando o leitor, a sintaxe de um algoritmo resume-se nas regras para escrevê-lo corretamente. Em computação, essas regras indicam quais são os tipos de comandos que podem ser utilizados também como neles, escreverem expressões. As expressões de um comando em um algoritmo realizam algum tipo de operação com os dados envolvidos, isto é, operam com valores que resultam em outros valores que são usados pelo algoritmo.

Os tipos de comandos de um algoritmo também são denominados estruturas de programação. Existem apenas 3 tipos de estruturas que podem ser utilizadas para escrever qualquer programa: estruturas sequenciais, de decisão e de repetição. Por exemplo, um algoritmo que emprega apenas as estruturas sequenciais são os que tem sua execução direta e imperativa, não havendo nenhum tipo de condição a ser verificada e nenhum desvio em seu caminho. Já outro caso seria um algoritmo que usa estrutura de repetição, que possui uma condição que, se for verdadeira, terminará a sua execução.

Computacionalmente, é uma convenção de que os dados, manipulados por um programa, são categorizados em tipos de dados que torna simples seu uso para o programador, mas que na realidade, para a máquina, são traduzidos em valores binários. Assim é possível manipular diversos tipos de dados em um algoritmo: números inteiros e reais, valores lógicos, textos etc.

A manipulação desses dados é feita por meio de variáveis e valores constantes, que representam no texto do algoritmo, os dados que serão armazenados na memória do computador. O significado de variável é similar àquele empregado na matemática: representar um valor, porém com um significado físico por trás; esse valor será armazenado na memória de um computador. Já por outro lado, um valor constante representa um valor que não pode ser alterado, ou seja, imutável, como o número 25, o nome “Hans” e assim por diante.

Uma variável pode ser manipulada de muitas formas. Os valores constantes, os resultados de expressões envolvendo as variáveis podem ser atribuídos a estas. Para escrever as expressões corretamente, é necessária também uma sintaxe. Essa sintaxe depende do tipo de variáveis envolvidas e determina quais são os operadores que podem ser aplicados. Além dos operadores propriamente ditos, especificam se algumas funções e procedimentos predefinidos úteis, que simplificam algumas tarefas corriqueiras em computação, como ler os dados digitados por um usuário, escrever resultados na tela do computador, calcular o seno de um número etc.

Vejamos um exemplo para entender essa tal de sintaxe. Desejamos especificar um algoritmo para calcular e exibir na tela do computador a área de um triângulo de base b e altura h, em que os valores de b e de h são fornecidos pelo usuário via teclado. Antes de mais nada, a solução desse problema é imediata, pois sabe-se que a área s de um triângulo de base b e altura h é dada por s = b x h / 2.

Um algoritmo para se resolver esse problema pode ser definido de maneira informal, como ilustrado pelo Algoritmo 1.2. Observe que essa descrição está em português e não é conveniente que seja traduzida para uma linguagem de computador.

1. Inicio
2. Pedir para o usuário digitar os valores de b e de h.
3. Calcular a área s usando a fórmula s = b x h / 2
4. Exibir o valor de s na tela.
5. Fim
Algoritmo 1.2 Algoritmo informal para calcular a área de um triângulo

Como tarefa de escrever, este mesmo algoritmo, utilizando uma representação mais formal. Primeiro será considerada a representação por fluxograma (ver capitulo 2.0), cujo resultado é apresentado na Figura 1.0.

Figura 1 – Fluxograma para calcular a área de um triângulo.

Nessa representação, a sintaxe para a escrita de um algoritmo é dada pelos símbolos do fluxograma e pelas regras para a escrita das expressões. A regra geral de um fluxograma estabelece que este deva ser escrito com seus símbolos básicos, interligados por linhas com ou sem setas que indicam a direção em que os comandos devem ser executados. Sua interpretação deve começar em um símbolo de início e terminar em um símbolo de fim. O início e fim de algoritmo são representados por dois retângulos de cantos arredondados, que são sempre os mesmos para qualquer fluxograma.

Os dados do problema — a base, a altura e a área — são representados pelas variáveis b, h e s. O símbolo do trapézio representa um comando que possibilita ao usuário digitar os valores que serão atribuídos às variáveis b e h. O símbolo do retângulo representa um comando para ser executado de forma imperativa.

Por sua vez, o comando representado pela flecha esquerda () permite copiar para a variável s valor da expressão (b*h)/2. Observe que existe uma regra para se escrever essa expressão: * significa multiplicação e /, divisão. Por fim, o símbolo de um retângulo de cantos arredondados mais achatado à esquerda significa exibir o valor da variável s na tela.

Agora será considerado esse mesmo algoritmo, utilizando-se uma representação em pseudocódigo denominado Portugol (conforme o aluno aprenderá nos próximos capítulos) apresentado pelo Algoritmo 1.3.

1. inicio
2. leia(b,h).
3. s ← (b * h) / 2
4. exiba(s).
5. fim
Algoritmo 1.3 Algoritmo em Portugol para calcular a área de um triângulo

Nesse caso, a sintaxe é dada pelos comandos dessa pseudolinguagem. A regra geral para se escrever um algoritmo nessa representação determina que este deva ser delimitado pelas palavras início e fim e os comandos, logo após os símbolos de início, devem ser executados sequencialmente, de cima para baixo. O comando leia corresponde a um procedimento que automaticamente pede para o usuário digitar dois valores e estes são copiados para as variáveis b e h. A expressão do cálculo de s tem o mesmo significado que no caso do fluxograma, e o comando exiba mostra na tela do computador o valor da variável s.

A semântica de um algoritmo

A semântica de um algoritmo estabelece regras para a sua interpretação. O símbolos ou comandos de algoritmo, por si só, não tem significado, a menos que este seja bem definido.

Por exemplo, considere o fluxograma da Figura 1, o símbolo de retângulo representa um comando que deve ser executado de forma imperativa, isto é, sem condição  alguma. É definido, geralmente, como um símbolo e, no seu interior, figura uma expressão que deve ser avaliada, podendo ser qualquer uma, desde que seja válida para esse símbolo.

Por exemplo, um algoritmo para calcular a área de um triângulo, mostrado no fluxograma da figura a expressão utilizada no interior do retângulo é s<-(b*h)/2, caracterizando-se por ser válida, pois usa os símbolos definidos para um fluxograma e sua semântica é multiplicar o valor de b pelo valor de h, dividir esse resultado por 2 e copiá-lo para a variável s.

Dessa forma, semântica de um algoritmo sempre acompanha a sua sintaxe. Fornecendo um significado. A importância da formalização de um algoritmo. Sua sintaxe e semântica podem ser resumidos assim:

  1. Evitar ambiguidade, pois definem regras sintáticas e semânticas que sempre são  interpretadas da mesma forma;
  2. a criação de símbolos ou comandos desnecessários na criação de um algoritmo: Representam um conjunto mínimo de regras que pode ser utilizado em qualquer algoritmo.
  3. Permitir uma aproximação com as regras de uma linguagem de programação, fazendo assim uma fácil tradução de um algoritmo para sua implementação no computador.

Atividades

  1. Faça o estudo do material disponibilizado pelo professor no Atividade Extraclasse 01​​​​​​​ 
  2. Responda a avaliação disponível no AVEA Moodle – Avaliação 01​​​​​​​

Desafio

Saque eletrônico

Suponha que você tenha um colega que é o mais novo cliente do seu banco e ele quer aprender a sacar dinheiro no caixa eletrônico. Você tem uma solução para o problema dele e, então resolve ensiná-lo a sacar dinheiro. Para tanto você escreve num papel as instruções. Na prática você criou um algoritmo.


Traga suas perguntas e dúvidas para o fórum e compartilhe com seus colegas.

O que você aprendeu:

– Lógica como organização do pensamento
– Lógica computacional
– Algoritmo e Pseudocódigo

Título
Texto genérico.

Se suporte ao tópico ou página

Material Extra

Expert Academy