Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lógica de programação Cid R. de Andrade Aula 01 O que é Lógica? Lógica Lógica é o estudo sistemático do raciocínio, do pensamento dedutivo. O emprego da lógica nos leva à melhor maneira de usar o pensamento na busca de solução de problemas. É fortemente ligada à Matemática e à Filosofia. Lógica ✓ Todos os homens são mortais ✓ José é homem ✓ Logo, José é mortal Silogismo Compreendendo lógica de programação Indutivo Abdutivo Dedutivo Compreendendo lógica de programação Conclui uma verdade geral a partir de um número suficiente de casos particulares. Exemplo: Todo gato é mortal, todo cão é mortal, todo peixe é mortal... Raciocínio indutivo Não é baseado em funções da verdade, mas de casualidade. Utilizado em Semiótica e Comunicação. Ex.: Vendo uma pegada de equino e não estando na África, ela deve ser de cavalo. Raciocínio abdutivo Ao contrário da indução, conclui-se uma verdade particular a partir de um princípio geral. Ex.: Todos os cariocas são brasileiros. Maria é carioca. Então, Maria é brasileira. Raciocínio dedutivo Falsos raciocínios pretensiosamente lógicos são utilizados para enganar pessoas. Ex.: Minha sogra acha que eu sou um ninguém. Ninguém é perfeito. Logo... Cuidado com falácias Funcionamento dos computadores Sistemas computacionais têm três unidades básicas: Entrada Processamento Saída Funcionamento dos computadores • Um computador sem programas é inútil. Programas de computador Primeiro passo O mais importante passo para desenvolver um programa de computador é compreender o problema a ser abordado. Aula 02 Conceito e representação de algoritmos Conceito O que é algoritmo? Sequência finita de instruções bem definidas e sem ambiguidade, que devem ser executadas em um tempo finito e com esforço finito, para solução de um problema. • Leia um valor numérico. • Leia um outro valor numérico. • Some os dois valores. • Escreva o resultado da soma na tela. Português Estruturado Fluxograma Número Some-os Resultado Início Fim Número Tipos de algoritmos Pseudocódigo ou Português Estruturado. Tipos de algoritmos Descrição narrativa. Ex.: Descascar três batatas, cortar longitudinalmente em formato de palitos, aquecer uma frigideira com óleo, mergulhar as batatas até ficarem douradas, retirar as batatas, colocar sobre um prato com papel toalha, salpicar com sal antes de servir. Tipos de algoritmos Fluxograma ou Diagrama de Blocos. Tipos de algoritmos Diagrama de Chapin (Nassi-Shneiderman). Tipos de algoritmos INÍCIO escreva (*informe sua idade:*) leia (IDADE) FIM escreva (*você é jovem*) escreva (*você é velho*) IDADE <25 SIM NÃO É possível obter pequenos programas sem algoritmos após muita experiência. Programas mais complexos são quase impossíveis de serem obtidos sem algoritmos bem planejados. Importância Primeiros passos em programação estruturada Compreensão do problema Ter clareza dos dados a serem obtidos (Entradas), de como devem ser manipulados (Processamento) e de quais resultados serão exibidos (Saídas) Primeiro passo Pesquisa por soluções anteriores. Compreensão e definição do ambiente. Rascunho inicial. Projeto Algoritmo. Conversão em linguagem de programação. Testes e implementação. Gerenciamento. Conclusão Aula 03 Tipos de dados Tipos de dados Dados vs informação Heghlu’meH QaQ jajvam Dados computacionais Caracter (char) Inteiro (int) Ponto flutuante (float/double) Não definido (void) Tipos primitivos Dados: variáveis Identificadores Tipos Variáveis em programas Variáveis e linguagens Exemplos de identificador: nomeDoCliente, dataDaCompra Dados: constantes Variáveis constantes Declaração prévia Constantes Variáveis Finais Declaração prévia Sem atribuição prévia Exemplos π e Aula 04 Operadores aritméticas Operadores aritméticos +, -, * e / (soma, subtração, multiplicação e divisão) -a (negação de a) a % b (módulo ou resto da divisão inteira, por exemplo, 11 % 3 é 2) a ^ b ou a ** b (exponenciação) a \ b (divisão inteira, por exemplo, 11 \ 3 é 3) Operadores aritméticos Exemplo Início Fim num1 Soma <- num1 + num2 Soma num2 Exemplo <script> var num1, num2, soma; num1 = prompt (“Digite um número”); num2 = prompt (“Digite outro”); soma = num1 + num2; document.write (soma); </script> Exemplo <script> var num1, num2, soma; num1 = prompt(“Digite um número”); num1 = parseInt(num1); num2 = prompt(“Digite outro”); num2 = parseInt(num2); soma = num1 + num2; document.write(soma); </script> Conversão de expressões matemáticas Conversão de expressões matemáticas Cada linguagem de programação pode ter distintas implementações de: Precedência Operadores Aninhamento IMC = Peso Altura * Altura IMC = peso / (altura * altura) Código <script> var peso, altura, imc; peso = prompt(“Digite peso”); peso = parseInt(peso); altura = prompt(“Digite altura”); altura = parseFloat(altura); imc = peso / (altura * altura); document.write(imc); </script> Combinando algoritmos, variáveis, constantes e expressões aritméticas programa AreaDeCírculo leia raio área = π * (raio^2) escreva área Português Estruturado Fluxograma Início raio Area <- pi* (raio^ 2) Fim area Combinando algoritmos <script> var raio, area; const pi = 3.1415; raio = prompt(“Digite raio”); raio = parseFloat(raio); area = pi * raio * raio; document.write(area); </script> Aula 05 Título aula 5Ambientes de programação e desenvolvimento Recursos de autocompletar Indentação e formatação Debuggers Compilação Ambientes de programação Editores de texto simples: Atom Notepad++ vim Microsoft Visual Studio Code Codeanywhere Editores Ambientes de Desenvolvimento Integrado: Eclipse NetBeans Aptana IDE Linguagens de programação Interpretadas ou compiladas. Estruturada ou Orientada a Objetos. Fracamente ou Fortemente Tipadas (e outros). Baixo nível ou alto nível. Tipos de linguagem Principais linguagens Java C C++ Python Swift C# Javascript PHP Ruby Conversão de algoritmos em programas Processo Preocupação com legibilidade. Compreensão e revisão. Processo Reprodução fidedigna. Formatação. Aula 06 Título aula 6Testes de mesa O Teste de Mesa é uma técnica para testes de algoritmos. Testes de mesa Como é realizado? Não há um procedimento padrão. Cada programador desenvolve sua própria técnica. Testes de mesa Partir do Português Estruturado. Escrever o código em papel e seguir as instruções linha a linha. Registrar as alterações em variáveis e em qual linha elas ocorrem. Sugestão Soma de dois números. Teste de mesa Teste de Mesa Início Fim num1 Soma <- num1 + num2 Soma num2 Teste de mesa Início Ler num1 Ler num2 Soma = num1 + num2 num1 void 5 5 5 num2 void void 7 7 soma void void void 12 TDD, desenvolvimento guiado por testes O que é TDD? Técnica para desenvolvimento com alta qualidade. TDD Como funciona? Desenvolvedor cria um caso de teste para cada funcionalidade. Testes são executados (todos devem falhar). Escrever código somente para passar no teste. TDD Executar testes até que todos sejam aprovados. Refatoração: código para versão final. Repetir todos os testes. TDD Testes de caixa preta e caixa branca O Analista de Testes tem acesso ao código-fonte. São desenvolvidos testes para verificar cada parte do programa. Executar testes. Caixa branca Sem acesso ao código-fonte. São testados os requisitos do programa e os erros mais comuns (datas de nascimento no futuro, campos obrigatórios, números fora da faixa prevista etc.). Caixa preta Qualidade em desenvolvimento Software deixandode ser produto artesanal. Competição exige atenção a falhas, custos e prazos. Qualidade em desenvolvimento Como obter qualidade de desenvolvimento? A qualidade do software está relacionada com a qualidade do processo de desenvolvimento. Planejamento é primordial. Qualidade em desenvolvimento Aula 07 Título aula 7Conceito de estruturas de controle Estruturas de Controle Referem-se à ordem na qual as instruções são executadas. Primórdios Na origem do desenvolvimento havia farto uso de instruções GoTo. Embora prático, era fonte de muitos erros de programação. É utilizado pelos maiores hackers, de forma polêmica. Sequencial De seleção De repetição Tipos de Estruturas Operadores relacionais < <= > >= Operadores relacionais Operadores relacionais = == <> ou != Desvio condicional simples Pouquíssimos programas têm execução linear sequencial somente. Desvios condicionais garantem execução de trechos de código de acordo com expressões booleanas. Desvio condicional simples Se/então: programa Temperatura leia temperatura se temperatura > 30 então escreva “Está calor” Desvio condicional simples <script> var temperatura; const limite = 30; temperatura = prompt(“Digite temperatura”); temperatura = parseInt(temperatura); if (temperatura > limite) { document.write(“Está calor”); } </script> Desvio condicional simples Aula 08 Título aula 8Operadores lógicos Lógica de George Boole: • Investigação das leis do pensamento baseada em somente dois valores: - Verdadeiro (Diferente de 0) - Falso (0) Álgebra Booleana Duas ou mais expressões têm um resultado verdadeiro se todas forem verdadeiras. Se tenho carro e tenho dinheiro para o combustível então posso viajar. Operador E Um conjunto de expressões só será falso se todas as expressões forem falsas. Se tenho carro ou tenho moto, então posso viajar. Se posso embarcar no ônibus ou no avião, então posso viajar. Operador OU Este operador inverte o resultado da expressão. Se não tenho carro, então não posso viajar. Operador NÃO Desvio condicional composto programa Temperatura leia temperatura se temperatura > 30 então escreva “Está calor” caso contrário escreva “Está normal” Se/Então/Caso Contrário <script> var temperatura; const limite = 30; temperatura = prompt (“Digite temperatura”); temperatura = parseInt (temperatura); if (temperatura > limite) { document.write (“Está calor”); } else { document.write(“Está normal”); } </script> Se/Então/Caso contrário Desvio condicional encadeado programa Temperatura leia temperatura se temperatura > 30 então escreva “Está calor” caso contrário se temperatura < 15 então escreva “Está frio” caso contrário escreva “Está normal” Se/Então aninhados <script> var temperatura; const limiteAlto = 30, limiteBaixo = 15; temperatura = prompt(“Digite temperatura”); temperatura = parseInt(temperatura); if (temperatura > limiteAlto) { document.write(“Está calor”); } else if (temperatura < limiteBaixo) { document.write(“Está frio”); } else { document.write(“Está normal”); } </script> Se/Então aninhados Aula 09 Título aula 9Teste lógico no início da repetição Estruturas de repetição Permitir a execução repetida de um conjunto de instruções é um dos mais poderosos recursos que um programador pode utilizar. Estruturas de repetição Tomar cuidados com: Valores iniciais devem estar consistentes Variável de controle deve ser alterada de forma correta Condição de saída da estrutura deve ser atingida Evitar o loop infinito Enquanto programa ContagemRegressiva contador = 10; enquanto contador >= 0 escreva contador contador = contador - 1 Enquanto <script> var contador = 10; while (contador >= 0) { document.write(contador); document.write("<br>"); contador = contador - 1; } </script> Teste lógico no fim da repetição Repita enquanto programa ContagemRegressiva contador = 10; repita escreva contador contador = contador - 1 enquanto contador >= 0 Repita enquanto <script> var contador = 10; do { document.write(contador); document.write("<br>"); contador = contador - 1; } while (contador >= 0) </script> Repetição por contagem Repita para/de até programa Contagem repita para contador de 10 até 0 escreva contador Repita para/de até <script> for (contador = 10; contador >= 0; contador = contador - 1) { document.write(contador); document.write("<br>"); } </script> Comparando os métodos de repetição Comparação Repita para/de até é o mais eficiente, mas nem sempre é possível utilizá-lo. Repita enquanto tem eficiência intermediária. Enquanto é o menos eficiente, contudo sempre poderá ser utilizado. Aula 10 Título aula 10Estrutura de dados: vetores Vetores (Arrays) Imagine ter de fazer um programa para calcular a idade média das pessoas em uma mesa de bar, sabendo-se que o bar admite mesas para no máximo seis pessoas. var idade1, idade2, idade3, idade4, idade5, idade6 Vetores Imagine agora alterar este programa para calcular a idade média dos torcedores em um estádio de futebol para 60 mil pessoas. var idade1, idade2, ……., idade59998, idade59999, idade60000 Vetores Um vetor é uma variável que agrupa diversos valores de um mesmo tipo de dados. 43 25 37 35 42 idade Vetores programa MediaDeIdades media = 0 repita para c de 1 até 6 leia idade[c] media = media + (idade[c]/6) repita para c de 1 até 6 escreva idade[c] escreva media Vetores <script> var media = 0; var idadeCada; var idade = []; const qtde = 6; for (c = 0; c < qtde; c = c + 1) { idadeCada = prompt("Digite idade #" + (c+1)); idade[c] = parseInt(idadeCada); media = media + idade[c] / qtde; } for (c = 0; c < qtde; c = c + 1) { document.write(idade[c]); document.write("<br>"); } document.write("Média é "); document.write(media); </script> Estrutura de dados: matrizes Matrizes Uma matriz pode ser compreendida como um vetor que tem outros vetores em cada posição. Matrizes Uma visão mais simples é uma tabela: Elemento [4,1] Elemento [3,2] Matrizes Matrizes podem ser multidimensionais. notas[periodo,sala,numeroChamada,bimestre,pro va] Ordenação de vetores Ordenação Muitas vezes, é necessário ordenar os valores de um vetor, seja de forma numérica, lexicográfica ou outra. Ordenação Técnicas embutidas nas linguagens. Métodos simples (Inserção, Seleção, Bolha, Combinado). Métodos sofisticados (Merge, Heap, Shell, Radix, Quick e suas variações). Ordenação • Procurar como “comparison animation sort” • São comparadas ordenações de dados aleatórios, quase ordenados, invertidos e com poucos valores. Aula 11 Título aula 11Realizando pesquisas em vetores Pesquisa Outro tipo de algoritmo muito utilizado e estudado é o de pesquisa em vetores. Pesquisa Pressupõe-se que os vetores estejam ordenados. Pesquisa Se necessário, deve-se ordenar o vetor antes da realização das pesquisas. Pesquisas sequenciais Sequencial Nada mais faz do que procurar o valor um a um, sequencialmente. Algoritmo programa BuscaSequencial vetor = [111,222,333,….,888,999] achei = -1 busca = 444 repita para c de 0 até 8 se vetor[c] = busca então achei = c escreva achei Código <script> var vetor = [111,222,333,444,555,666,777,888,999]; var achei = -1; const busca = 444; const tamanho = vetor.length; for (c = 0; c < tamanho; c = c + 1) { if (vetor[c] == busca) { achei = c; } } document.write(achei); </script> Pesquisas binárias Binária Método mais eficiente. Procura a busca pelo meio e vai dividindo o vetor cada vez em uma metade. Algoritmo programa BuscaSequencial vetor = [111,222,333,….,888,999] achei = -1, busca = 444 esquerda = 0, direita = 8 enquanto (esquerda <= direita) meio = (direita + esquerda)\2 se busca = vetor[meio] então achei = meio caso contrário se busca < vetor[meio] então direita = meio –1 senão esquerda = meio + 1 escreva achei Código <script> var vetor = [111,222,333,444,555,666,777,888,99 9]; var achei = -1; var meio; const busca = 444; var direita = vetor.length; var esquerda = 0; while (esquerda <= direita) { meio = parseInt((direita + esquerda) / 2); if (busca == vetor[meio]) { achei = meio; esquerda = direita + 1;//Hack } else if (busca < vetor[meio]) { direita = meio - 1; } else { esquerda = meio + 1; } } document.write(achei); </script> Aula 12 Título aula 12Uso de procedimentos e funções Sub-rotinas Podemos dividir um programa em módulos. Estes módulos podem ser Procedimentos ou Funções. Função Uma função realiza uma operação qualquer e retorna um valor. “Compre 500 gr de muçarela e depois diga-me quanto você gastou” Procedimento Um procedimento realiza uma operação e não retorna um valor. “Compre 500 gr de muçarela” Variáveis globais e locais Globais e locais As variáveis de um programa podem ser globais ou locais. Variáveis globais podem ser utilizadas em qualquer parte do programa, incluindo suas funções e procedimentos. Globais e locais Uma variável local só pode ser acessada no local em que ela for declarada. Sempre que possível, devemos evitar o uso de variáveis globais. Parâmetros Parâmetro Se for necessário, podemos passar valores para as funções e para os procedimentos por meio de parâmetros. Algumas linguagens distinguem a passagem de parâmetros por valor ou por referência. Parâmetro Na passagem por valor, as alterações não são refletidas em outras partes do programa. Na passagem por referência, as alterações são refletidas no resto do programa e isso deve ser evitado. Função <script> var numero = promptInt("Digite um número"); document.write(numero); function promptInt(texto) { var x = prompt(texto); return parseInt(x); } </script> Procedimento <script> escrevaLinha(111); escrevaLinha(333); escrevaLinha(555); escrevaLinha(777); function escrevaLinha(x) { document.write(x); document.write("<br>"); } </script> Aula 13 Título aula 13Conceitos de programação orientada a objetos POO POO = programação orientada a objeto. É um paradigma de análise, projeto e desenvolvimento de software. Baseia-se no uso de objetos. POO O foco não está na sequência de instruções, mas na descrição dos objetos. POO Um programa para um jogo de pôquer, por exemplo, seria feito planejando-se o que ocorre com os jogadores, o baralho, as mãos de cartas e assim por diante. Classes e objetos Classes e objetos A primeira dúvida que algumas pessoas têm é saber com clareza o que são classes ou objetos. Classes e objetos Uma classe é a descrição genérica de algo. Exemplo: a descrição do que é um aparelho de televisão. Um objeto é uma instância, ou seja, alguma coisa que pertence àquela classe. Exemplo: TV da sua sala. Classes e objetos Uma forma clara de compreender: uma classe é um conjunto de coisas e um objeto é algo pertencente a este conjunto. Seu aparelho de celular é um objeto da classe celulares. Este curso é um objeto da classe cursos. Classes e objetos Outra forma simples é tentar escrever uma frase com “… é um...” Rex é um cachorro. Neste caso, Rex é um objeto da classe cachorros. Características de POO (Programação orientada a objetos) Características de POO Classes definem atributos e métodos Herança Características de POO Encapsulamento Polimorfismo A linguagem Java Java Linguagem de programação orientada a objetos. Desenvolvida pela Sun (hoje Oracle) na década de 1990. Java Independente de plataforma Máquina Virtual Extensível Segurança
Compartilhar