Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Algoritmo e Programação Engenharia Elétrica Prof(a): Carla Ferreira Coelho 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/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/C++ para implementação de algoritmos. Conceitos iniciais: Conceito de 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 aperfeiçoar esta técnica, com persistência e constância. Sempre que pensamos a lógica nos acompanha: Um bebê sabe que precisa chorar para receber atenção Um casal com 3 filhos notou que um vaso estava quebrado, enquanto 2 das crianças estavam na escola. Quem é o culpado? A gaveta está fechada. A caneta está dentro da gaveta. Precisamos primeiro abrir a gaveta para depois pegar a caneta. O pensamento e a lógica podem ser expresso através da palavra falada ou da palavra escrita. Um mesmo pensamento pode ser expresso em inúmeros idiomas, tanto oralmente quanto por escrito. Vamos estudar uma forma única de representação Conceitos iniciais: Conceito de lógica Exercício: Em um torneio de atletismo, Barnabé, Gumercindo e Teodoro participaram das provas de 100 metros rasos, salto em distância e arremesso de dardo. Cada um deles conseguiu um primeiro lugar, um segundo lugar e um terceiro. Descubra o que cada um conquistou, sabendo que: Gumercindo venceu Barnabé no salto em distância; Teodoro chegou atrás de Gumercindo no arremesso de dardo; Barnabé não chegou em primeiro nos 100 metros rasos. Conceitos iniciais: Conceito de lógica Resultado: Conceitos iniciais: Conceito de lógica Nome 100 metros Arremessode dardo Saltoem distância Barnabé 2º 1º 3º Gumercindo 3º 2º 1º Teodoro 1º 3º 2º 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. Conceitos iniciais: Conceito de algoritmo Podemos definir Algoritmo como: O pensamento descrito como uma sequencia de passos que visam atingir um objetivo Algoritmos no dia-a-dia: Receita de bolo, orientação para se chegar em algum endereço Qual sua importância na programação? Representar o raciocínio, independentemente de detalhes computacionais, que podem ser acrescentados mais tarde Focalizar primeiro na resolução algorítmica do problema, possibilitando depois codificá-la em qualquer linguagem Conceitos iniciais: Conceito de algoritmo 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: O policial escutou o barulho produzido pela porta O policial estava junto à porta e escutou o barulho. O policial escutou o barulho que veio através da porta. 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. 15 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. 16 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 17 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 panela 18 Processamento de Dados Entrada Saída Receber dados, realizar operações, gerar respostas. Programar é basicamente construir algoritmos. Conceitos iniciais: Conceito de algoritmo 19 Conceitos iniciais: Conceito de algoritmo Algoritmos em programação: Descrever uma tarefa de maneira a ser facilmente programável Passos: Determinar o objetivo; Determinar a(s) entrada(s); Determinar a(s) saída(s); Determinar a(s) ação(ões); Construir o algoritmo (definir as operações e a sequencia das mesmas); Executar o algoritmo (teste de mesa) 20 Conceitos iniciais: Conceito de algoritmo Algoritmos não se aprende: Copiando algoritmos; Estudando algoritmos; Algoritmos só se aprende: Construindo algoritmos; Testando algoritmos 21 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 sentenças dúbias. 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 textual. 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 pseudocódigo. 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) Algoritmo Codificado (linguagem de programação) 25 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 26 Representação do algoritmo para cálculo da média entre três notas de um aluno. Verdadeiro Falso Conceitos iniciais: Formas de representação 27 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 Fimalgoritmo 28 Conceitos 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 Inteiro: Sã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. Conceitos iniciais: tipos de dados, variáveis e constantes Tipos de dados 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_de_dados> ou VAR <lista_de_variáveis> : <tipo_de_dados> Observações: 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. 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. Observações: Podem ser utilizados 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 tem_filhos: lógico 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 CONST nome_da_empresa = “Enxuga Gelo SA” Conceitos iniciais: tipos de dados, variáveis e constantes Palavras-reservadas: são identificadores predefinidos que possuem significados especiais para o interpretador do algoritmo 35 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); literais (envolvendo caracteres e strings). 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 Modou % Resto da divisão inteira 25%4 (resulta 1) 2 ^ Potenciação 2^3 (resulta 8) 1 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 VouV = V VeV = V NãoV = F V F VouF = V VeF = F F V FouV = V FeV = F NãoF = V F F FouF = F FeF = F Operador Prioridade OU 3 E 2 NÃO 1 Operadores 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: <nome_da_variavel > ← <valor_ou_expressão> Instrução de atribuição Veja os exemplos abaixo: media ← 8.5 Nesse 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 igualdade ← a=b 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 Instrução de atribuição Inicio a 5 b 7 igualdade a=b fim 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 fim igualdade 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 saída de dados 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: leia (nota1) 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 igualdade 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 Instrução de entrada de dados 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 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 � �
Compartilhar