ALGORITMO E
PROGRAMAÇÃO
Engenharia Elétrica
Visão geral da disciplina
O desenvolvimento de algoritmos, antes da construção
de programas, garante uma visão adequada e
entendimento do problema a ser tratado, reduzindo a possibilidade de erros lógicos em um produto final de software.
Elaborados os algoritmos, eles poderão ser
implementados posteriormente em qualquer linguagem de programação sequencial
Objetivo
Apresentar a importância da construção de algoritmos
e as habilidades necessárias nessa etapa de construção do programa.
Identificar possíveis estruturas e técnicas que podem
ser utilizadas no projeto de algoritmos.
Estabelecer um primeiro contato com a linguagem de
programação C++, através da qual poderão ser implementados os programas correspondentes aos algoritmos projetados.
Competências
Raciocinar de forma lógica e abstratas, tornando-se apto
ao desenvolvimento de algoritmos
Reconhecer as melhores estruturas, técnicas e estilos de
programação a serem aplicados na resolução de um determinado problema.
Utilizar a linguagem C++ para implementação de
Ementa
Conceitos iniciais
Definição de algoritmos Forma de representação
Tipos de dados, variáveis e constantes Instruções primitivas
Estrutura de decisão
Condicional simples Condicional composta Múltiplas escolhas Estrutura de repetição
Controlado por variável Teste no inicio
Conceitos iniciais:
Conceito de
problema
O que é um problema?
Substantivo Masculino.
Questão matemática proposta para ser resolvida. Questão difícil, delicada, suscetível de diversas soluções.
Qualquer coisa de difícil explicação; mistério, enigma.
Dúvida, questão.
Conceitos iniciais:
Conceito de
problema
Problemas fazem parte do nosso cotidiano.
Exemplo de problemas cotidianos:
Trocar a resistência de um chuveiro. Definir onde Almoçar.
Sempre que nos deparamos com um problema
buscamos um procedimento para solucionar o
mesmo.
Conceitos iniciais:
Conceito de
problema
Por exemplo, para trocar a resistência de um
chuveiro devemos:
Adquirir uma resistência nova;
Localizar o chuveiro a ser manipulado; Abrir o chuveiro;
Retirar a resistência defeituosa; Colocar a resistência nova;
Fechar o chuveiro;
Conceitos iniciais:
Conceito de
lógica
O que orientou a obtenção dos procedimentos para as soluções
vislumbradas?
A lógica.
O que é lógica?
A lógica é o ramo da Filosofia e da Matemática que estuda os métodos e princípios que permitem fazer distinção entre raciocínios válidos e não válidos,
determinando o processo que leva ao conhecimento verdadeiro.
O uso da lógica é primordial na solução de problemas. Com ela é
possível alcançar objetivos com eficiência e eficácia.
Ninguém ensina outra pessoa a pensar, mas a desenvolver e
Conceitos iniciais:
Conceito de
algoritmo
Ao utilizarmos a lógica para listar passos ordenados que
resultam na solução de um determinado problema estamos construindo um algoritmo.
Contrapondo o que normalmente se imagina, o termo
algoritmo não foi originado na computação e muito menos pode ser utilizado apenas no contexto
computacional.
Podemos definir um algoritmo como:
uma sequencia de passos que visa atingir um objetivo
bem definido;
uma sequencia de passos bem definida que deve ser
seguida para a realização de uma tarefa ou solução de um problema.
Conceitos iniciais:
Conceito de
algoritmo
Como vimos os conceitos de algoritmo são bem amplos, sendo
importante salientar que qualquer tarefa que siga determinado padrão pode ser descrita por um algoritmo, como por exemplo: ALGORITMO: TROCAR UMA LÂMPADA
PASSO 1: Pegar a lâmpada nova PASSO 2: Pegar a escada
PASSO 3: Posicionar a escada embaixo da lâmpada queimada
PASSO 4: Subir na escada coma lâmpada nova
PASSO 5: Retirar a lâmpada queimada PASSO 6: Colocar a lâmpada nova PASSO 7: Descer da escada
PASSO 8: Ligar o interruptor PASSO 9: Guardar a escada
PASSO 10: Jogar a lâmpada velha no lixo
ALGORITMO: SACAR DINHEIRO PASSO 1: Ir até o caixa eletrônico PASSO 2: Colocar o cartão
PASSO 3: Digitar a senha PASSO 4: Solicitar o saldo
PASSO 5: Se o saldo for maior ou igual à quantia desejada, sacar a quantia desejada; caso contrário sacar o valor do saldo
PASSO 6: Retirar dinheiro e cartão PASSO 7: Sair do caixa eletrônico
Conceitos iniciais:
Conceito de
algoritmo
Conforme vimos até o momento a descrição
narrativa em linguagem natural foi utilizada na
descrição dos algoritmos.
Qual a vantagem?
Não há a necessidade de aprender nenhum novo
conceito.
Qual a desvantagem?
Em virtude da ambigüidade presente na linguagem
natural a descrição narrativa é passível de mais de uma interpretação.
Conceitos iniciais:
Conceito de
algoritmo
Um exemplo de ambigüidade presente em uma sentença
na linguagem natural é:
O policial escutou o barulho da porta.
Esta frase pode ter pelo menos três interpretações:
1. O policial escutou o barulho produzido pela porta 2. O policial estava junto à porta e escutou o barulho.
Conceitos iniciais:
Conceito de
algoritmo
Características
Finitude: um algoritmo sempre deve terminar após um
número finito de passos.
Definição: cada passo do algoritmo deve ser bem definido e
sem ambiguidades, ou seja, não deve dar margem para uma interpretação dupla
Entradas: um algoritmo deve ter zero ou mais entradas, que
são as informações que devem ser fornecidas antes do algoritmo ser iniciado.
Saídas: um algoritmo deve ter uma ou mais saídas. O
número de saídas tem uma relação específica com as entradas.
Efetividade: todo algoritmo deve ser descrito por operações
básicas e possíveis de ser realizadas de forma precisa, dentro de um determinado tempo, por qualquer pessoa.
Conceitos iniciais:
Conceito de
algoritmo
Abstração: processo de identificar as
propriedades relevantes do fenômeno que está
sendo modelado.
Um algoritmo é uma abstração da realidade.
É importante considerarmos que pode haver
mais de um algoritmo para resolver um
determinado problema.
Conceitos iniciais:
Conceito de
algoritmo
“Bife acebolado”
1. Limpar a peça de carne. 2. Fatiar a carne em bifes.
3. Cortar as cebolas em rodelas. 4. Repetir, para cada bife:
4.1) levar bife à frigideira;
4.2) aguardar dourar, virando ambas as faces; 4.3) retirar bife e colocar sobre papel toalha até
secar;
4.4) retirar do papel toalha e juntar numa travessa. 5. Levar as cebolas fatiadas ao fogo até dourar.
6. Colocar as cebolas douradas sobre os bifes. 7. Servir
Conceitos iniciais:
Conceito de
algoritmo
Objetos de entrada: Carne Cebola Óleo Objetos de saída: Bifes acebolados Atores, executores: Faca Travessa Fogão cozinheiro e panelaProcessamen
to de Dados
Entrada
Saída
Receber dados,
realizar
operações, gerar
respostas.
Programar é basicamente
construir algoritmos.
Conceitos iniciais:
Conceito de
Conceitos iniciais:
Conceito de
algoritmo
Algoritmos em programação: Descrever uma tarefa de
maneira a ser facilmente programável
Passos:
1. Determinar o objetivo;
2. Determinar a(s) entrada(s); 3. Determinar a(s) saída(s); 4. Determinar a(s) ação(ões);
5. Construir o algoritmo (definir as operações e a
sequencia das mesmas);
Conceitos iniciais:
Conceito de
algoritmo
Algoritmos não se aprende:
Copiando algoritmos;
Estudando algoritmos;
Algoritmos só se aprende:
Construindo algoritmos;
Conceitos iniciais:
Formas de
representação
Do ponto de vista computacional um algoritmo será
implementado em uma linguagem de computação gerando um programa, o qual visa instruir um
computador (uma máquina) a executar determinada tarefa.
Devemos ter consciência que um computador não é
dotado da capacidade de tomar decisões com base em premissas.
Portanto, não podemos instruir um computador com
Conceitos iniciais:
Formas de
representação
Contudo, quando falamos em algoritmo sob o enfoque
computacional, como já foi mencionado, não podemos utilizar uma descrição narrativa para representar um algoritmo.
Sendo assim, veremos dois métodos para representação
de algoritmos:
fluxograma – representação gráfica;
pseudocódigo (português estruturado) –representação
Conceitos iniciais:
Formas de
representação
Fluxograma:
Vantagem – a representação gráfica é mais concisa
que a representação textual.
Desvantagem – é necessário aprender a simbologia
dos fluxogramas.
Pseudocódigo:
Vantagem – sua transcrição para qualquer
linguagem de programação é quase que direta.
Desvantagem – é necessário aprender as regras do
Conceitos iniciais:
Formas de
representação
Tipos de algoritmo
Do ponto de vista computacional, podemos estabelecer a existência de três tipos de algoritmos:
Algoritmo Descritivo (pseudocódigo) Algoritmo Gráfico (fluxograma)
Seta de fluxo de dados
Conceitos iniciais:
Formas de
representação
Fluxograma convencional:
TERMINAL
Indica o INÍCIO ou FIM de um processamento
Exemplo: Início do algoritmo PROCESSAMENTO
Processamento em geral Exemplo: Calculo de dois números
ENTRADA MANUAL
Indica entrada de dados via Teclado EXIBIR/SAÍDA Mostra informações ou resultados Exemplo: Mostre o resultado do cálculo DECISÃO Permite elaborar processos de decisão
Representação do algoritmo para cálculo da média entre três notas de um aluno.
Verdadeiro Falso
Conceitos iniciais:
Formas de
Conceitos iniciais:
Formas de
representação
Pseudocódigo: algoritmo “CálculoMédia” var N1, N2, N3, MÉDIA: Real; Início Leia (N1, N2, N3); MÉDIA ← (N1 + N2+N3)/3; Se (MÉDIA > 7) então Escreva ("Aprovado"); Senão Escreva ("Reprovado"); fimse FimalgoritmoConceitos iniciais:
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.
Os dados propriamente ditos, que correspondem à
porção das informações a serem processadas pelo computador.
A classificação apresentada a seguir não se aplica a
nenhuma linguagem de programação específica; pelo contrário, ela sintetiza os padrões utilizados na maioria das linguagens.
Conceitos iniciais:
tipos de
dados, variáveis e constantes
Tipos de dados
InteiroSão caracterizados como tipos inteiros, os dados numéricos positivos ou
negativos. Excluindo-se destes qualquer número fracionário. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1024 entre outros.
Real
São caracterizados como tipos reais, os dados numéricos positivos e negativos e
números fracionários. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1.2, -45.987 entre outros.
Caractere ou Literal
São caracterizados como tipos caracteres, as sequencias contendo letras, números e símbolos especiais. Uma sequencia 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.
Lógico
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.
Conceitos iniciais:
tipos de
dados, variáveis e constantes
Variáveis: é um espaço de memória que recebeu um nome
(nome_da_variável) e armazena um valor que pode ser
modificado durante a execução do algoritmo. 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
Conceitos iniciais:
tipos de
dados, variáveis e constantes
Nome da variável: são os nomes utilizados para
referenciar variáveis, funções ou vários outros objetos definidos pelo construtor do algoritmo.
letras, números e sublinhado(_);
não podem começar com números ou caracteres especiais; não podem ser iguais a uma palavra-reservada e nem iguais a
um nome de uma função declarada pelo construtor do algoritmo ou disponibilizada pelo método utilizado para construção de algoritmos
Exemplos de definição de variáveis:
VAR
nome: caractere
Idade, dataNascimento: inteiro salário: real
Conceitos iniciais:
tipos de
dados, variáveis e constantes
Constantes: são valores fixos, tais como números. Estes
valores não podem ser alterados pelas instruções do algoritmo, ou seja, é um espaço de memória cujo valor não deve ser alterado durante a execução de um
algoritmo.
Nos algoritmos, todas as constante 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
Conceitos iniciais:
tipos de
dados, variáveis e constantes
Palavras-reservadas: são identificadores predefinidos
que possuem significados especiais para o interpretador do algoritmo
Operadores e expressões
Podemos definir uma expressão como uma fórmula
matemática, em que um conjunto de variáveis e constantes numéricas se relacionam através de
operadores aritméticos. Essa fórmula, quando avaliada, resulta num valor.
Exemplo: a = b2 + c2 – d
A expressão acima, de acordo com o que você aprendeu
na matemática, tem quatro variáveis (‘a’, ‘b’, ‘c’ e ‘d’). Se atribuirmos valores a três delas, poderemos encontrar, facilmente, o valor da quarta.
Operadores e expressões
Os operadores são os símbolos específicos que relacionam
as variáveis e constantes em uma expressão. Eles são responsáveis pela execução das operações que serão
realizadas sobre os dados armazenados nessas variáveis e constantes.
As expressões e seus operadores estão sempre em
conformidade com os tipos de dados que manipulam.
Há três tipos de expressões:
aritméticas (envolvendo dados numéricos); lógicas (envolvendo dados lógicos);
Operadores e expressões:
expressões aritméticas
Operador Expressão Exemplos Prioridade
+ Adição A + b, 5 +7 3
- Subtração 8 - 4, x – y 4
/ Divisão 20 / 4, x / y 2
* Multiplicação 3 * a, x * y 2
Mod ou % Resto da divisão inteira 25 % 4 (resulta 1) 2
Operadores e expressões:
expressões lógicas
As expressões lógicas estabelecem relações de
comparação entre variáveis e constantes, de forma que o seu resultado só pode assumir um valor:
verdadeiro ou falso.
Essas expressões podem utilizar dois tipos de
operadores:
operadores relacionais; operadores lógicos.
Operadores e expressões:
operadores relacionais
Operador Descrição Exemplos
= Igual A=B, 8=8 <> Diferente X<>Y, 7<>5 > Maior que X>Z, 9>8 >= Maior ou igual A>=5, 8>=5 < Menor X < Y , 2<3 <= Menor ou igual B<=C, 2<=4
Operadores e expressões:
operadores lógicos
Além dos operadores relacionais, as expressões lógicas
lidam com os operadores lógicos. Esses operadores são utilizados para combinar os resultados de expressões
relacionais, retornando, ao final, um resultado verdadeiro ou falso.
Os operadores lógicos são:
OU – disjunção E – conjunção NÃO – negação
Operadores e expressões:
operadores lógicos
Valores OU E NÃO V V V ou V = V V e V = V Não V = F V F V ou F = V V e F = F F V F ou V = V F e V = F Não F = V F F F ou F = F F e F = F Operador Prioridade OU 3 E 2 NÃO 1Operadores e expressões:
operadores lógicos
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 sub-expressão em seu interior.
Entre os quatro grupos de operadores existentes, a saber,
aritmético, lógico, literal e relacional, há uma certa prioridade de avaliação: os aritméticos e literais devem ser avaliados primeiro; a seguir, são avaliadas as sub-expressões com operadores relacionais e, por último os operadores lógicos são avaliados.
Instruções primitivas
Você já sabe que um algoritmo é uma sequência de passos
utilizados para atingir um determinado objetivo. Para
executar um algoritmo, você deve informar ao computador o que você deseja que ele faça. A essas informações que você transmite ao computador, damos o nome de
instruções primitivas.
As instruções primitivas são os comandos básicos que
executam as tarefas essenciais ao longo de um algoritmo. Esses comandos permitem a comunicação do computador com o usuário e com os dispositivos de entrada e saída.
Instruções primitivas
Dispositivos de entrada são os meios através dos
quais você pode transmitir informações ao computador. Por exemplo: teclado e mouse.
Dispositivos de saída são os meios através dos quais o
computador se comunica com você. Por exemplo: monitor, impressora, caixas de som.
Podemos dizer, diante disso, que, sem as instruções
primitivas, o algoritmo torna-se inútil, pois sem elas não haveria possibilidade de comunicação entre o programa e o mundo exterior. Não seria possível, por exemplo, o
usuário saber o resultado do algoritmo ou informar algum dado importante para a sua execução.
Instruções primitivas
Sintaxe é a forma como o comando deve ser escrito
para que possa ser entendido pelo programa que vai executar o algoritmo.
Semântica é o significado da instrução, ou seja, o
que você está ordenando que o computador faça ao transmitir essa instrução.
Instrução de atribuição
Ela é representada pelo símbolo ‘←’ (seta para a
esquerda).
A instrução de atribuição nos permite armazenar
informações dentro das variáveis. Essas informações podem ser valores ou expressões.
A sintaxe de uma atribuição é a seguinte:
Instrução de atribuição
Veja os exemplos abaixo:
media ← 8.5Nesse exemplo, estamos armazenando no espaço de memória correspondente à variável media o valor 8.5
media ← (nota1 + nota2)/2
Neste outro exemplo, estamos armazenando no espaço de
memória correspondente à variável media o valor resultante da expressão (nota1 + nota2)/2.
Outros exemplos:
precoTotal ← preço_unitario * quantidade nome ← “Maria”
sexo ← “F” idade ← 16
idade_atual ← ano_atual – ano_nascimento temFilhos ← falso
Instrução de atribuição
Em fluxograma, a instrução de atribuição é
representada, como vimos na aula sobre formas de representação de algoritmos, pelo símbolo a seguir:
Veja agora, na Figura 1, um dos exemplos que
acabamos de mencionar, segundo esse tipo de representação
Na Figura 1, vemos a atribuição de valores às variáveis a e
b e a atribuição de uma expressão à variável igualdade. Observe, a seguir, o algoritmo da Figura 1 em
pseudocódigo: algoritmo "atribuicao" var a, b : inteiro igualdade : logico inicio a 5 b 7 igualdade a = b fimalgoritmo
Instrução de atribuição
Instrução de saída de dados
A instrução de saída de dados é a instrução através da
qual o computador se comunica com você durante a execução do algoritmo. Isso é feito, geralmente,
através da exibição de alguma informação na tela.
São duas as sintaxes possíveis para essa instrução: escreva (“Mensagem ao usuário”)
escreva (<variável_ou_lista_de_variáveis>)
A palavra reservada escreva é utilizada para instruir o
computador a mostrar algo na tela, que pode ser o valor armazenado em uma variável ou uma
informação, solicitação ou alerta em forma de texto entre aspas duplas.
Exemplo:
escreva (“Digite o valor da primeira nota: ”) escreva (media)
A representação da instrução de saída de
dados em um fluxograma utiliza o seguinte símbolo:
Na Figura 2, veja como a representação do
exemplo da Figura 1 se torna mais interessante, quando acrescido da
instrução de saída, com o resultado do algoritmo.
Instrução de saída de dados
inicio A<-5 B<-7 Igualdade<-a=b igualdade fim
Veja o símbolo de saída de dados, o qual exibe o valor
armazenado na variável igualdade. Veja, também, abaixo, a representação do algoritmo em
pseudocódigo. O que você acha que aparecerá na tela ao executar o algoritmo? algoritmo "atribuicao_saida" var a, b : inteiro igualdade : logico inicio a 5 b 7 igualdade a = b escreva (igualdade) fimalgoritmo
Instrução de entrada de dados
A instrução de entrada de dados é a instrução
através da qual você ordena o computador a
realizar alguma tarefa.
A sintaxe desse tipo de instrução é a seguinte:
leia (<variável_ou_lista_de_variaveis>)
Da mesma forma que a palavra escreva, em
nossos algoritmos, a palavra leia é uma palavra
reservada. Essa palavra é utilizada para
ordenar ao computador que leia os dados que
foram inseridos pelo usuário e os armazene em
espaços que foram reservados na memória.
Exemplo:
A representação dessa instrução em
fluxograma é feita com o seguinte símbolo:
Vamos ver o exemplo que vimos nas
Figuras 1 e 2, acrescidos da instrução de entrada de dados. Observe a Figura 3.
inicio Igualdade<-a=b igualdad e fim “Determine um valor para a”
“Determine um valor para b”
a
b
Instrução de entrada de dados
Veja que, agora, o algoritmo solicita ao usuário que
determine um valor para ser armazenado em cada uma das variáveis que foram criadas. Examine o pseudocódigo do algoritmo abaixo: algoritmo "atribuicao_entrada_saida" var a, b : inteiro igualdade : logico inicio
escreva ("Determine um valor para 'a':") leia (a)
escreva ("Determine um valor para 'b':") leia (b)
igualdade a = b escreva (igualdade) fimalgoritmo
Encontrar o consumo médio de um veículo, conhecidos a distância total
e o volume de combustível consumido para percorrer tal distância. Algoritmo “Consumo”
var
consumo, distancia, volume:real; Inicio
escreva("Calcula o consumo médio de combustível");
escreva("Qual a distancia (Km) percorrida pelo veiculo? "); leia(distancia);
escreva("Quantos litros de combustível foram gastos no trajeto? "); leia(volume);
consumo volume/distancia;
escreva("O consumo medio de combustível foi de ", consumo, " litros/km");
escreva("O carro fez ", distancia/volume, "km com 1 litro"); Fimalgoritmo
Exemplos
Calcular o valor da função f(x,y) = 3x2 + 2y2 - xy em um
ponto qualquer do plano cartesiano. Algoritmo “PontoNoPlano”
var
fxy, x, y:real; Inicio
escreva("Calculo da função f(x,y) = 3x^2 + 2y^2 - xy"); escreva("Digite as coordenadas x e y de um ponto: "); leia(x,y);
fxy (3*x^2) + (2*y^2) - (x*y); escreva("O valor da função f(x,y) ");
escreva(“Para x = ", x, " e y = ", y, " é igual a ", fxy); Fimalgoritmo
Exemplos
Um algoritmo que lê o valor do raio e calcule a área do
círculo correspondente.
algoritmo "Calcula Área Circulo“ Const pi=3.14;
Var
Area, Raio: real; Inicio
Escreva("Entre com o raio: "); Leia (Raio);
Area Pi*Raio^2;
Escreva("A área do circulo com o raio ", Raio, " é ", Area); fimalgoritmo