Lógica de Programação Introdução Introdução Neste capítulo Introdução à Lógica de Programação Algoritmizando a Lógica Conceitos e Exemplos de Algoritmos Noções de Fluxo de Controle Lógica de Programação Lógica: A palavra lógica vem do grego Logos e significa razão, pensamento. O pai da lógica é o filósofo Aristóteles, ele chamou sua lógica de “silogismo”, que significa ligação. Ele deu esse nome porque a lógica trata da ligação formal dos juízos feito pelo pensamento. Seus textos sobre lógica foram escritos em sua obra “Primeiros Analíticos”. O silogismo é uma forma de análise que procura decompor em partes os argumentos e as proposições de um argumento e seus termos. Mais tarde o conjunto de seus escritos silogísticos foi chamado de Organon, palavra grega que significa “instrumento”. A lógica, portanto, é um instrumento para se pensar corretamente. Ciência que estuda as formas do pensamento, Correção do pensamento ou correção do raciocínio, Arte do bem pensar, Ordem no pensamento. Lógica de Programação 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) pode 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 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. ALGORITMO É o pensamento descrito como uma sequência 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 Importância dos Algoritmos Fase de resolução do problema Problema Solução em forma de algoritmo Passo difícil Solução como programa de computador Fase de resolução do problema Descrição Narrativa Um método direto, simplesmente especificar seus passos verbalmente. Porém a linguagem natural é prolixa, imprecisa, pouco confiável. Por isso não é adequada. Diagrama de bloco Nome Símbolo Descrição Fluxo Indica o sentido do fluxo de operações Terminal Indica início, fim ou ponto de parada de um programa Entrada x,y Início do algoritmo Início O valor de cada nota é armazenado nas variáveis n1,n2 e n3 n1,n2,n3 Indica operação de entrada de dados para os locais chamados de x e y na memória O valor da média é calculado e armazenado na variável M M=(n1,n2,n3)/3 Saída x,y Indica a possibilidade de desvio para mais de um ponto do programa Decisão Cálculo Indica operação de saída ou de impressão dos valores x e y x=y+z M>=60? N S Indica operação aritmética Conector Indica conexão entre dois pontos de um algoritmo que estejam na mesma página Conector Indica conexão entre dois pontos de um algoritmo que estejam em página diferentes Você foi aprovado Fim Você foi reprovado É verificado se o valor de M é maior ou igual a 60. Se sim(S), é exibida a mensagem Você foi aprovado. Caso Contrário (N), é exibida a mensagem Você foi reprovado Fim do algoritmo Pseudo Linguagem Consiste em representar textualmente os passos envolvidos na resolução do problema. Para evitar ambiguidade, utiliza-se de um conjunto de regras que visam restringir e estruturar o uso do português na representação dos algoritmos. Aproxima-se muito do código fonte de linguagens de programação reais. Exemplo de um Algoritmo Início inteiro: n1,n2,n3,m; escreva(“Informe a primeira nota”); leia(n1); escreva(“Informe a segunda nota”); leia(n2); escreva(“Informe a segunda nota”); leia(n3); m (n1 + n2 + n3)/3; se(m>=60) então escreva(“Você foi Aprovado”); senão escreva(“Você foi Reprovado”); fimse; Fim. // Início do algoritmo // Declaração das variáveis // Mensagem para o usuário // Leitura da primeira nota // Mensagem para o usuário // Leitura da segunda nota // Mensagem para o usuário // Leitura da terceira nota // Atribuição de valor através de operação // Teste de seleção // Se a condição for verdadeira // Mensagem para o usuário “Aprovado” // caso contrario, (se condição falsa). // Mensagem para o usuário // Final do teste de seleção // Fim do algoritmo Tipos de Dados Existem quatro tipos de dados utilizados na construção de algoritmos. Inteiro: informação numérica que pertença ao conjunto dos números inteiros Exemplo: 8, -5, 10, 0, 1, etc. Real: Informação numérica que pertença ao conjunto dos números reais Exemplo: 0.15, -5.14, 10. 2, 2E23, etc. Caracter: Informação composta por um caracter, ou conjunto de caracteres Exemplo: “Ciência da Computação”, “A”, “US$”, etc Lógico: Informação que possa assumir apenas duas situações. Exemplo: V ou F Identificadores Um identificador é o nome dado às informações de caráter variável. Existem algumas regras de formação de identificadores que devem ser obedecidas. 1. Devem começar com um caracter alfabético 2. Podem ser seguidos por mais caracteres alfabéticos ou numéricos 3. Não devem ser usados caracteres especiais ou símbolos de operadores aritméticas 4. Não podem ser palavras reservadas. Identificadores válido: ano, idade, U2, nota1, nota_2 Identificadores inválidos: C&A, 4x, nota 1, nota 2, a/b, a#b, A+B Declaração de variáveis No ambiente computacional, as informações variáveis são guardadas em dispositivos eletrônicos denominados memória. Para diferenciar cada uma destas variáveis utilizamos os identificadores. Exemplo: Inteiro: x; real: salario; logico: resposta; caracter: endereco; Comandos Básicos Declaração de Variáveis Comandos de entrada de dados Ex. Ex. caracter: nome; leia (nome); inteiro: x,idade,soma; leia (x,idade); real: y,salario; leia (y,salario); logico: val1; Comando de saída de dados Comandos de atribuição Ex. Ex. escreva(“Hello Word!”); soma y * salario; escreva(nome); val1 1 > 4+3; escreva(“Seu nome e”,nome); escreva(“Seu salario e: ”,salario); Exemplo de um Algoritmo Início fim. // Início do algoritmo inteiro: val1, val2, soma; // Declaração das variáveis escreva(“Digite o 1 números a ser somado”); // Mensagem para o usuário leia(val1); // Leitura da variáveis val1 escreva(“Digite o 2 números a ser somado”); // Mensagem para o usuário leia(val2); // Leitura da variáveis val2 soma (val1+val2); // Calculo da soma escreva(“O valor total é:”,soma); // Mensagem com valor da soma // Fim do algoritmo Operadores Operador aritmético Função Exemplos + soma 2+3; x+y; z+2 - Subtração 4-6; g-k; u-4 * Multiplicação 8*6; x*y; 2*x / Divisão 2/7; x/z; z/2 pot(x,y) Potenciação (xy) pot(2,4); pot(z,3) rad(x) Radiciação ( x ) rad(4); rad(x) mod Resto da divisão 13 mod 2(resulta em 1) Quociente da divisão 9 div 4(resulta em 2) div Hierarquia Parênteses mais internos pot rad * / + - div mod Para operações de mesma prioridade, resolvemos os operadores da esquerda para a direita. A prioridade pode ser alterada com o uso de parêntese Operadores Operador relacional Função Exemplos = Igual x=y; x=z > Maior que 3>2; x>y < Menor que x<y; 2<x >= Maior ou igual a 8>=7; x>=z; z>=2 <= Menor ou igual a 5<=6; x<=6 <> Diferente de 4<>3; x<>z Operadores Operador lógico Função não Negação e Conjunção ou Disjunção não e ou O resultado obtido de uma expressão envolvendo operadores relacionais e/ou lógicos relação é sempre um valor lógico. As expressões lógicas devem ser solucionadas respeitando a seguinte procedência Prioridade As expressões envolvendo os operadores aritméticos, relacionais e lógicos, devem ser solucionadas respeitando a seguinte ordem de prioridade. 1. Parênteses mais internos 2. Operadores aritméticos 3. Operadores relacionais 4. Operadores lógicos Estrutura de seleção se (expressão logica) entao acao fimse; Início inteiro: val1; escreva(“Digite um número”); leia(val1); se (val1<100) entao escreva(“O numero digitado e menor que 100”); fimse; fim. Estrutura de seleção Início inteiro: val1; escreva(“Digite um número”); leia(val1); se (val1<100) entao inicio escreva(“Atencao”); escreva(“O numero digitado e menor que 100”); fim; senao inicio escreva(“Atencao”); escreva(“O numero digitado e igual ou maior que 100”); fim; fimse; se (expressão logica) entao acao 1; senao acao 2; fimse; fim. Estrutura de seleção – Exercício, exemplo I Início inteiro: idade; caracter: nome; escreva(“Digite seu nome:”); leia(nome); escreva(“Informe sua idade:”); leia(idade); se (idade<13) entao escreva(nome,“Você é uma criança”); senao Errado se (idade > 12 e idade<20) se (12<idade<20) entao escreva(nome,“Você é um adolescente”); senao escreva(nome,“Você é um adulto”); fimse; fimse; fim. Estrutura de seleção – Exercício, exemplo II Início inteiro: idade; caracter: nome; escreva(“Digite seu nome:”); leia(nome); escreva(“Informe sua idade:”); leia(idade); se (idade<13) entao escreva(nome,“Você é uma criança”); senao se (idade >12 e idade<20) entao escreva(nome,“Você é um adolescente”); senao se (idade>19) entao escreva(nome,“Você é um adulto”); fimse; fimse; fimse; fim. Errado se (12<idade<20) Estrutura de seleção – Exercício, exemplo III Início inteiro: idade; caracter: nome; escreva(“Digite seu nome:”); leia(nome); escreva(“Informe sua idade:”); leia(idade); se (idade<13) entao escreva(nome,“Você é uma criança”); fimse; se (idade >12 e idade<20) entao escreva(nome,“Você é um adolescente”); fimse; se (idade>19) entao escreva(nome,“Você é um adulto”); fimse; fim. Errado se (12<idade<20) Estrutura de seleção de múltipla escolha escolha(x) caso v1: acao1; caso vn: acaon; caso contrario: acaopadrao; fim escolha Estrutura de seleção de múltipla escolha escolha(x) caso v1: acao1; caso vn: acaon; caso contrario: acaopadrao; fim escolha inicio caracter:tipo; escreva(“Selecione o sabor de pizza Muzzarela(M), Quatro queijos (Q), ou Presunto(P). ”); leia (tipo); escolha(tipo) caso ‘M’: escreva(“A sua pizza de muzzarela esta sendo preparada... ”); escreva(“Aguarde...”); caso ‘Q’: escreva(“A sua pizza de quatro queijos esta sendo preparada... ”); escreva(“Aguarde...”); caso ‘P’: escreva(“A sua pizza de presunto esta sendo preparada... ”); escreva(“Aguarde...”); caso contrario: escreva(“Opcao não disponivel ”); fimescolha; Fim. Estrutura de repetição - com teste no início enquanto(expressao logica) faça acao1; acao2; acao3; fimenquanto; inicio caracter:nome; inteiro: contador; contador 1; escreva(“Informe o seu nome”); leia(nome); enquanto (contador<=3) faça escreva(nome); contadorcontador + 1; fimenquanto; fim; // Início do algoritmo // Declaração de variável nome // Declaração de variável contador // Inicializando a variável contador // Exibindo a mensagem na tela // Armazena o nome informado na variável nome // Início do laço // Imprimindo o conteúdo da variável nome na tela // Incrementando o contador em uma unidade // Fim do laço // Fim do algoritmo Estrutura de repetição - com teste no início inicio real: num,soma; soma 0; escreva(“Informe o numero a ser somado”); leia(num); enquanto (num<>0) faça soma soma+num; escreva(“Informe o número a ser somado”); leia(num); fimenquanto; escreva(“A soma vale;”soma); fim; Estrutura de repetição - com teste no fim repita acao1; acao2; acao3; ate(expressão lógica) inicio inteiro: num; real: soma; soma 0; repita escreva(“Informe o numero a ser somado: ”); leia(num); soma soma+num; ate(num=0); escreva(“A soma vale;”soma); fim; Estrutura de repetição – com variável de controle Para v de vi até vf passo p faça ação 1; ação 2; ação n; fimpara inicio inteiro: controle; para controle de 0 até 10 passo 1 faça escreva(“Este e o numero: ”, controle); fim para; fim; // Início do laço // Fim do laço