Aula 3 - Introdução aos Algoritmos

Conceitos introdutórios, e formas de representação de Algoritmos, pseudocódigo, tipos de dados utilizados, e conceito de variável e constante.

1 - Conceito de Algoritmo

O uso de algoritmos é quase tão antigo quanto a matemática. Com o advento das máquinas de calcular e mais tarde os computadores, o uso de algoritmos ressurgiu com grande vigor, como uma forma de indicar o caminho para a solução dos mais variados problemas.

Algoritmo é o caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitos.

A automação é o processo em que uma tarefa deixa de ser desempenhada pelo homem e passa a ser realizada por máquinas.

Para que a automação de uma tarefa seja bem-sucedida é necessário que a máquina seja capaz de desempenhar cada uma das etapas do processo a ser automatizado com eficiência, de modo a garantir a repetibilidade do mesmo.

Assim, é necessário que seja especificado com clareza e exatidão o que deve ser realizado em cada uma das fases do processo a ser automatizado, bem como a sequência em que estas fases devem ser realizadas.

À especificação da sequência ordenada de passos que deve ser seguida para a realização de uma tarefa, garantindo a sua repetibilidade, dá-se o nome de algoritmo.

Definição de algoritmo:

“Algoritmo é um conjunto finito de regras, bem definidas, para a solução de um problema em um tempo finito e com um número finito de passos.”

Informalmente, um algoritmo é qualquer procedimento computacional bem definido, que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída, produzindo um resultado em um tempo finito.

Para se ter um algoritmo, é necessário:
• Que se tenha um número finito de passos;
• Que cada passo esteja precisamente definido, sem possíveis ambiguidades;
• Que existam zero ou mais entradas, tomadas de conjuntos bem definidos;
• Que existam uma ou mais saídas;
• Que exista uma condição de fim sempre atingida para quaisquer entradas e num tempo finito.

Um programa de computador, nada mais é, que um algoritmo escrito numa forma compreensível pelo computador.

O aprendizado de algoritmos não se consegue, a não ser através de muitos exercícios, exige prática.

Escute essa aula: Conceito de algoritmos

Formas de representação de algoritmos:

Ao longo dos anos, surgiram muitas formas de representar os algoritmos, alguns utilizando linguagens semelhantes às linguagens de programação e outras utilizando formas gráficas.

Dentre as formas de representação de algoritmos mais conhecidas, sobressaltam: A Descrição Narrativa, O Fluxograma Convencional e o Pseudocódigo, também conhecido como Linguagem Estruturada ou Portugol.

Descrição Narrativa:

Nesta forma de representação os algoritmos são expressos diretamente em linguagem natural. Como por exemplo, têm-se os algoritmos seguintes:

Troca de um pneu furado:

✓ Afrouxar ligeiramente as porcas;
✓ Suspender o carro;
✓ Retirar as porcas e o pneu;
✓ Colocar o pneu reserva;
✓ Apertar as porcas;
✓ Abaixar o carro;
✓ Dar o aperto final nas porcas;

Cálculo da média de um aluno:

✓ Obter as notas da primeira e da segunda prova;
✓ Calcular a média aritmética entre as duas;
✓ Se a média for maior ou igual a 7, o aluno foi aprovado, senão ele foi reprovado;

A descrição narrativa possui muitas semelhanças a uma receita de bolo, onde são apresentados os passos a serem seguidos, para que no final, se obtenha um bolo pronto. Quanto mais detalhada e precisa for a “receita”, melhores as chances de se ter um bolo bem feito no final. Nesta analogia, os ingredientes são as entradas de dados e o bolo pronto a saída do algoritmo.

Escute essa aula: Descrição Narrativa

Fluxograma Convencional e Diagrama de Blocos:

É uma representação gráfica de algoritmos onde formas geométricas diferentes implicam ações, (instruções, comandos), distintos. Tal propriedade facilita o entendimento das ideias contidas nos algoritmos.

Principais formas geométricas usadas em fluxogramas:

De modo geral, o fluxograma se resume a um único símbolo inicial, por onde a execução do algoritmo começa, e um ou mais símbolos finais, que são pontos onde a execução do algoritmo se encerra.

Partindo do símbolo inicial, há sempre um único caminho orientado a ser seguido, representando a existência de uma única sequência de execução das instruções, uma exceção, são os símbolos de decisão, de onde pode haver mais de um caminho de saída, (normalmente dois caminhos), representando uma bifurcação no fluxo.

Um diagrama de blocos é uma forma de fluxograma usada e desenvolvida por profissionais da programação, tendo como objetivo, descrever o método e a sequência do processo dos planos num computador.

Exemplo:

Fluxograma do algoritmo de cálculo de média de um aluno:

Escute essa aula: Fluxograma

Pseudocódigo:

Esta forma de representação de algoritmos, também conhecida como português estruturado ou Portugol, é bastante rica em detalhes e, por assemelhar-se bastante à forma em que os programas são escritos.

Esta representação, é suficientemente geral, para permitir que a tradução de um algoritmo nela representado para uma linguagem de programação específica, seja praticamente direta.

A representação de um algoritmo na forma de pseudocódigo é a seguinte:

Algoritmo [nome_do_algoritmo]
[declaração_de_variáveis]
[subalgoritmos]
Início
[corpo_do_algoritmo]
Fim.

Onde:

Algoritmo é uma palavra que indica o início da definição de um algoritmo em forma de pseudocódigo.

[nome_do_algoritmo] é um nome simbólico dado ao algoritmo com a finalidade de distinguí-lo dos demais.

[declaração_de_variáveis] é onde são declaradas as variáveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos como funções.

[subalgoritmos] consiste de uma porção opcional do pseudocódigo onde são definidos os subalgoritmos.

Início e Fim são respectivamente as palavras que delimitam o início e o término do conjunto de instruções do [corpo do algoritmo].

Exemplo:

Pseudocódigo do algoritmo de cálculo da média de um aluno

Indentação

Uma caracterista dos pseucódigos e códigos de linguagens de programação é a indentação de código, observe que após o inicio do algoritmo, foi aplicado uma tabulação [TAB] ao código, após o comando de SE foi utilizado outra tabulação. Para essa forma de organização de texto, se da o nome de indentação, é utilizada pra deixar o pseudocógigo mais legivel, e para saber onde começa e termina determinado comando.

Escute essa aula: Pseudocódigo

2 - Tipos de Dados - Variáveis e Constantes

Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos:

As instruções, que comandam o funcionamento da máquina e determinam a maneira como devem ser tratados os dados e os dados propriamente ditos, que correspondem à porção das informações a serem processadas pelo computador.

Os dados podem ser classificados em tipos, sendo os padrões utilizados na maioria de linguagens, os tipos: Inteiros, Reais, Caracteres e Lógicos.

Tipos Inteiros:

São caracterizados como tipos inteiros, os dados numéricos positivos ou negativos.

Excluindo-se deste qualquer número fracionário (números que possuem virgula). Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1024, entre outros.

Tipos Reais:

São caracterizados como tipos reais, os dados numéricos positivos e negativos e números fracionários (aqui se incluem os números que possuem virgula).

Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1.2, -45.987, entre outros.

Observe que os números 35, 0, -56, podem ser tanto representados como inteiros ou reais.

Tipos Caracteres:

São caracterizados como tipos caracteres, as sequências contendo letras, números e símbolos especiais. Uma sequência de caracteres deve ser indicada entre aspas (“”).

Este tipo de dado também é conhecido como alfanumérico, string, literal ou cadeia. Como exemplo deste tipo de dado, tem-se os valores: “Programação”, “Rua Alfa, 52 Apto 1”, “Fone 574-9988”, “04387- 030”, “ ”, “7” entre outros.

Note que ao representar números como o “7” na forma de caractere, não permite que este seja utilizado em operações matemáticas, como a soma.

Tipos Lógicos:

São caracterizados como tipos lógicos os dados com valor verdadeiro e falso, sendo que este tipo de dado poderá representar apenas um dos dois valores. Ele é chamado por alguns de tipo booleano, devido à contribuição do filósofo e matemático inglês George Boole, na área da lógica matemática.

Escute essa aula: Tipos de Dados

VARIÁVEIS E CONSTANTES

Para armazenar os dados na memória, imagine que a memória de um computador é um grande arquivo com várias gavetas, onde cada gaveta pode armazenar apenas um único valor (seja ele numérico, caractere ou lógico).

Se é um grande arquivo com várias gavetas, é necessário identificar com um nome a gaveta que se pretende utilizar. Desta forma, o valor armazenado pode ser utilizado a qualquer momento.

Conceito e Utilidade de Variável:

Têm-se como definição de variável, tudo aquilo que é sujeito a variações, que é incerto, instável ou inconstante.

Como visto anteriormente, informações correspondentes a diversos tipos de dados são armazenadas nas memórias dos computadores. Para acessar individualmente cada uma destas informações, em princípio, seria necessário saber o tipo de dado desta informação e a posição inicial deste conjunto de bytes na memória.

Para contornar esta situação, criou-se o conceito de variável, que é uma entidade destinada a guardar uma informação.

Basicamente, uma variável possui três atributos: um nome, um tipo de dado associado à mesma e a informação por ela guardada.

Toda variável possui um nome que tem a função de diferenciá-la das demais. Cada linguagem de programação estabelece suas próprias regras de formação de nomes de variáveis.

Adotaremos para os algoritmos, as seguintes regras:

✔um nome de variável deve necessariamente começar com uma letra;
✔um nome de variável não deve conter nenhum símbolo especial, exceto a sublinha ( _ ) e nenhum espaço em branco;
✔um nome de variável não poderá ser uma palavra reservada a uma instrução de programa como as palavras “inicio”, “fim” ou “escreva”.

Exemplos de nomes de variáveis:

Obviamente, é interessante adotar nomes de variáveis relacionados às funções que serão exercidas pelas mesmas dentro de um programa. Por exemplo, as variáveis nota1 e nota2 para armazenarem notas de prova.

Uma vez definidos, os atributos, nome e tipo de dado de uma variável, não podem ser alterados e assim permanecem durante toda a sua existência, desde que o programa que a utiliza não seja modificado.

Por outro lado, o atributo informação, está constantemente sujeito a mudanças de acordo com o fluxo de execução do programa, por isso o nome variável.

Em resumo, o conceito de variável foi criado para facilitar a vida dos programadores, permitindo acessar informações na memória dos computadores por meio de um nome, em vez do endereço de uma célula de memória.

Escute essa aula: Conceito e Utilidade de Variável

Definição de Variáveis em Algoritmos:

Todas as variáveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto se faz necessário para permitir que o compilador reserve um espaço na memória para as mesmas.

Nos algoritmos, todas as variáveis utilizadas serão definidas no início do mesmo, por meio de um comando de uma das seguintes formas:

VAR nome_da_variável : tipo_da_variável
ou
VAR lista_de_variáveis : tipo_das_variáveis

✔ A palavra-chave VAR deverá estar presente sempre e será utilizada um única vez na definição de um conjunto de uma ou mais variáveis;

✔ Numa mesma linha poderão ser definidas uma ou mais variáveis do mesmo tipo; Para tal, deve-se separar os nomes das mesmas por vírgulas;

✔ Variáveis de tipos diferentes devem ser declaradas em linhas diferentes.

Exemplos de definição de variáveis:

VAR

nome: caractere[20]
idade: inteiro
salário: real
tem_filhos: logico
nota1, nota2: inteiro

Observe, que no exemplo acima, foram declaradas 6(seis) variáveis:

A variável nome, é capaz de armazenar dados caractere até 20 caracteres;
a variável idade, capaz de armazenar um número inteiro;
a variável salário, capaz de armazenar um número real;
a variável tem_filhos, capaz de armazenar uma informação lógica, (verdadeiro ou falso).
As variáveis nota1 e nota2, são capazes de armazenarem valores inteiros, desta forma podem ser declaradas na mesma linha, desde que separadas por virgula.

Escute essa aula: Definição de Variáveis em Algoritmos

Conceito e Utilidade de Constantes:

Têm-se como definição de constante, tudo aquilo que é fixo ou estável. Existirão vários momentos em que este conceito deverá estar em uso, quando desenvolvermos programas.

É comum definirmos uma constante no início do programa, e a utilizarmos no decorrer do programa, para facilitar o entendimento, a programação ou então para poupar tempo, no caso de ter que alterar o seu valor, de modo que alterando uma única vez a declaração da constante, todos os comandos e expressões que a utilizam são automaticamente atualizados.

Definição de Constantes em Algoritmos:

Nos algoritmos, as constantes utilizadas serão definidas no início do mesmo, por meio de um comando da seguinte forma:

CONST nome_da_constante = valor

Exemplo de definição de constantes:

CONST

PI = 3.14159
nome_do_site = “REA-LP”

Escute essa aula: Constantes

3 - Expressões e Operadores

Operadores são elementos fundamentais que atuam sobre operandos e produzem um determinado resultado. Por exemplo, a expressão 3 + 2 relaciona dois operandos (os números 3 e 2, por meio do operador (+) que representa a operação de adição.

Os operadores podem ser classificados em:

Binários: quando atuam sobre dois operandos, como os operadores das operações aritméticas básicas, (Soma, Subtração, multiplicação e divisão).

Ex: 3+2;

Unários: quando atuam sobre um único operando, por exemplo, ao inverter o sinal de um número.

Ex: -1;

Outra classificação dos operadores é feita, considerando-se o tipo de dado de seus operandos e do valor resultante de sua avaliação. Segundo esta classificação, os operandos dividem-se em aritméticos, lógicos e literais.

Esta divisão está diretamente relacionada com o tipo de expressão onde aparecem os operadores. Um caso especial, é o dos operadores relacionais, que permitem comparar pares de operandos de tipos de dados iguais, resultando sempre num valor lógico.

Operadores de Atribuição

Um operador de atribuição serve para atribuir um valor a uma variável. Em Algoritmo e no VisuAlg, usamos o operador de atribuição: : =

A sintaxe de um comando de atribuição é:

NomedaVariável := expressão

Exemplo: Nota1:=10

A expressão localizada no lado direito do sinal de igual é avaliada, e armazenado o valor resultante na variável à esquerda. O nome da variável aparece sempre sozinho, no lado esquerdo do sinal de igual deste comando.

Para o exemplo, a variável de nome “Nota1” recebe e armazena o valor inteiro de 10.

Operadores Aritméticos

Os operadores aritméticos se relacionam as operações aritméticas básicas, conforme a tabela abaixo:

A prioridade entre operadores, define a ordem em que os mesmos devem ser avaliados dentro de uma mesma expressão, como visto no módulo: 01 Ordem das operações aritméticas , as operações com prioridade 1 são executadas antes das de prioridade 2 e assim por diante.

Escute essa aula: Operadores de Atribuição e Aritméticos

Operadores Relacionais:

Os operadores relacionais são operadores binários que devolvem os valores lógicos verdadeiro e falso.

Estes operadores são somente usados quando se deseja efetuar comparações. Comparações só podem ser feitas entre objetos de mesma natureza, isto é, variáveis do mesmo tipo de dado. O resultado de uma comparação é sempre um valor lógico.

Por exemplo, só podem ser compradas variáveis inteiras entre si:

5 > 7 ?

Cinco é maior que sete? Não, o resultado dessa operação é o valor lógico Falso.

Considere o seguinte algoritmo:

Escolha := 7
Escolha <= 5
Escolha > 5

Na primeira linha a variável escolha recebe e armazena o valor de 7.

Na segunda linha a variável escolha, (que tem o valor de 7), é menor ou igual a 5? Não, portanto falso.

Na terceira linha a variável escolha, (que tem o valor de 7), é maior que 5? Sim, portanto verdadeiro.

Com valores string, os operadores relacionais comparam os valores ASCII dos caracteres correspondentes em cada string. Uma string é dita "menor que" outra, se os caracteres correspondentes tiverem os números de códigos ASCII menores.

Por exemplo, ao comparar:

a < b

“a é menor do que b?” o valor é verdadeiro, pois a possui um valor menor do que b.

Observe que as letras minúsculas têm códigos ASCII maiores do que os das letras maiúsculas, Portanto:

“algoritmo” > “ALGORITMO”

Observe também, que o comprimento da string se torna o fator determinante na comparação de duas strings, quando os caracteres existentes na string menor são os mesmos que os caracteres correspondentes na string maior. Neste caso, a string maior é dita “maior que” a menor.

“Algoritmo do dia” > “Algoritmo”

Pois “Algoritmo do dia” é uma string maior que “Algoritmo”.

Escute essa aula: Operadores Relacionais

Operadores Lógicos:

Os operadores lógicos ou booleanos são usados para combinar expressões relacionais. Também devolvem como resultado valores lógicos verdadeiro ou falso.

Como visto no módulo: 02 Introdução a lógica.

Fornecendo dois valores ou expressões lógicas, representadas por expressão1 e expressão2, podemos descrever as três operações lógicas a seguir:

expressão1 E expressão2 é verdadeiro somente se ambas, expressão1 e expressão2, forem verdadeiras. Se uma for falsa, ou se ambas forem falsas, a operação e também será falsa.

expressão1 OU expressão2 é verdadeiro se tanto a expressão1 como a expressão2 forem verdadeiras. As operações OU só resultam em valores falsos se ambas, expressão1 e expressão2, forem falsas.

NÃO expressão1 avalia verdadeiro se expressão1 for falsa; de modo contrário, a expressão NÃO resultará em falso, se expressão1 for verdadeira.

Escute essa aula: Operadores Lógicos

Operadores Literais:

Os operadores que atuam sobre caracteres variam muito de uma linguagem para outra. O operador mais comum e mais usado é o operador que faz a concatenação de strings: toma-se duas strings e acrescenta-se, (concatena-se), a segunda ao final da primeira.

O operador que faz esta operação é: +

Por exemplo, a concatenação das strings “ALGO” e “RITMO” é representada por: “ALGO” + “RITMO” e o resultado de sua avaliação é: “ALGORITMO”.

Expressões

O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão ou fórmula matemática, onde um conjunto de variáveis e constantes numéricas relacionam-se por meio de operadores aritméticos compondo uma fórmula, que, uma vez avaliada, resulta num valor.

Expressões Aritméticas:

Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo numérico, seja ele inteiro ou real. Somente o uso de operadores aritméticos, variáveis numéricas e parênteses é permitido em expressões deste tipo.

Exemplo: 2*3 =6

Expressões Lógicas:

Expressões lógicas são aquelas cujo resultado da avaliação é um valor lógico verdadeiro ou falso. Nestas expressões são usados os operadores relacionais e os operadores lógicos, podendo ainda serem combinados com expressões aritméticas. Quando forem combinadas duas ou mais expressões que utilizem operadores relacionais e lógicos, os mesmos devem utilizar os parênteses para indicar a ordem de precedência.

Exemplo: V ou F = V

Expressões Literais:

Expressões literais são aquelas cujo resultado da avaliação é um valor literal, (caractere). Neste tipo de expressões só é usado o operador de literais (+).

Exemplo: “Aula” + “de” + “algoritmos” = “Aula de algoritmos”

Avaliação de Expressões

Não podemos esquecer que existe uma ordem de avaliação de operadores como visto no modulo 01.

As seguintes regras são essenciais para a correta avaliação de expressões:

Deve-se observar a prioridade dos operadores, conforme mostrado nas tabelas de operadores: operadores de maior prioridade devem ser avaliados primeiro.

Se houver empate com relação à precedência, então a avaliação se faz da esquerda para a direita.

Os parênteses usados em expressões, têm o poder de “roubar” prioridade dos demais operadores, forçando a avaliação da sua expressão em seu interior.

Ordem das operações:
Parêntesis, (Dentro dos parênteses, você deve seguir a ordem das operações como faria em uma expressão sem eles.);
Expoentes, (Potenciação) ou Raízes (Radiciação) - (da esquerda para a direita);
Multiplicações e Divisões, (da esquerda para a direita);
Somas e Subtrações, (da esquerda para a direita);

Escute essa aula: Operadores Literais e avaliação de operações

Links Úteis

Canal: Sharpax GameDev

Canal: Node Studio Treinamentos

Canal: RBtech

Referências

  • CORMEN, Thomas H. et al. Algoritmos: teoria e prática. Editora Campus, v. 2, p. 296, 2002.
  • FARRER, Harry; BECKER, Christiano Gonçalves. Algoritmos estruturados: programação estruturada de computadores. Rio de Janeiro: Guanabara, 2000.
  • NETO, Benedito; PEREIRA, Diego; FERNANDES, Sabrina. Apostila de Algoritmo - CEP - Centro De Educação Profissional "Tacredo Neves".