Baixe o app para aproveitar ainda mais
Prévia do material em texto
A1: Apresentação da disciplina. Introdução a Algoritmos e Programação Kazuki Yokoyama kmyokoyama@inf.ufrgs.br Algoritmos e Programação INF01202 – Algoritmos e Programação, 2018/01, Turmas I e J *adaptado do material do prof. Marcelo Walter, prof. Rodrigo Ruas Oliveira e profa. Mariana Recamonde Algoritmos e Programação?! O que significa? O que vamos ver e aprender nesta disciplina? 2 O que é Ciência da Computação? Ciência da Computação é o estudo das fundações teóricas de informação e computação, bem como das técnicas práticas para sua implementação e aplicações em sistemas computacionais É frequentemente descrita como o estudo sistemático de processos algorítmicos que criam, descrevem e transformam informação 3 O que é Computação? 4 ● Como resolver problemas? ● Como usar computadores para nos ajudar a resolver problemas? O que é Computação? 5 ● Como resolver problemas? ○ Criar abstrações que reflitam a realidade, mas a simplifique para poder ser tratável ○ Definir estratégias (procedimentos) que em seu conjunto resolvam o problema ● Como usar computadores para nos ajudar a resolver problemas? ○ Traduzir a estratégia elaborada para um programa que possa ser executado por um computador O que torna um computador tão especial? O que faz uma torradeira? O que faz um computador? 6 Como os computadores são tão flexíveis? ● Calculadora ● Player de músicas ● Câmera fotográfica e edição de fotos ● Editor de texto ● Acesso a paginas web ● GPS ● Telefone ● Jogos ● etc etc… Um mesmo hardware pode executar muitas tarefas diferentes! 7 Como os computadores são tão flexíveis? Aplicações em diversas áreas do conhecimento! 8 Como os computadores são tão flexíveis? 9 Como os computadores são tão flexíveis? Problema Solução (entrada) (saída) 10 Como os computadores são tão flexíveis? Problema SoluçãoAlgoritmo Programa Diferentes tarefas serão executadas por diferentes programas. Um programa implementa uma solução descrita por um algoritmo através do uso de uma linguagem de programação. 11 Computador como uma máquina universal ● Evolução da idéia de máquina para manipular conhecimento/informação ○ Máquina de Turing: equipamento capaz de manipular símbolos em uma fita de acordo com uma série de regras para guardar informações ○ Modelo abstrato dos aspectos lógicos do funcionamento de um computador ● Computabilidade: define as possibilidades e limites da Computação 12 Alan Turing “Pai da computação” Dica de filme 13 Objetivo da disciplina ● Introduzir o uso do computador na solução de problemas, através da construção de PROGRAMAS ● Discutir e aprender sobre: ○ Habilidades e Limites da computação ○ Capacidade de mapear problemas em “algo computacional” ○ “Computational Thinking”; “Computational problem solving” ○ Pensar como cientistas da computação 14 “Computational thinking is the thought process involved in formulating problems and their solutions so that the solutions are represented in a form that can be effectively carried out by an information processing agent.” [Cuny, Snyder, Wing] Objetivo da disciplina ● Da súmula da disciplina: ○ Esta disciplina tem por objetivo introduzir conhecimento e técnicas necessários para projeto e desenvolvimento de soluções de problemas, através da construção de algoritmos e programas que utilizam os princípios da programação estruturada. ○ O aluno que cursou esta disciplina deve ser capaz de analisar problemas e elaborar programas que os solucionem. Deve dominar os comando básicos, estruturar os dados em tipos simples e estruturados, utilizar conceitos de subprogramação e recursão, além de manipular arquivos. 15 Quem…argh…é….você??? Um programador!! Aluno de INF01202 da UFRGS!! O que esperamos para o final da disciplina... 16 Algoritmo? 17 Definição de Algoritmo “Algoritmo é uma sequência finita e lógica de instruções ou passos básicos, especificados de acordo com uma determinada linguagem e que serve para resolver um determinado problema em um tempo finito.” ● Um bom algoritmo pode ser implementado em qualquer linguagem! Por isso precisamos aprender a escrever bons algoritmos!! 18 Não basta saber se comunicar... 19 … é preciso saber o que comunicar! Propriedades de Algoritmos • Possui um estado inicial • Contém uma sequência lógica e finita de ações (comandos), claras e precisas, com fluxo de execução baseado em: – Sequência – Seleção condicional (se isto, então aquilo) – Iteração (repetição, enquanto isto) • Possui dados de entrada • Produz dados de saída corretos • Possui estado final previsível • Deve ser eficaz (executa em tempo razoável) Paradigma de programação estruturada 20 “Receita” Exemplo: algoritmo para fazer um bolo 1. Separe todos os ingredientes: leite, óleo, ovos, farinha de trigo, chocolate em pó, açúcar e fermento 2. Coloque os líquidos na batedeira e bata até misturar bem 3. Coloque os outros ingredientes, e bata novamente até a massa ficar com boa consistência 4. Acrescente o fermento e misture tudo manualmente 5. Leve para assar em forno médio, numa forma untada e enfarinhada 6. Aguarde até o bolo ficar no ponto e retire-o do forno 21 Instruções claras e precisas? Exemplo: algoritmo para fazer um bolo 1. Separe todos os ingredientes: leite, óleo, ovos, farinha de trigo, chocolate em pó, açúcar e fermento 2. Coloque os líquidos na batedeira e bata até misturar bem 3. Leve para assar em forno médio, numa forma untada e enfarinhada 4. Acrescente o fermento e misture tudo manualmente 5. Coloque os outros ingredientes, e bata novamente até a massa ficar com boa consistência 6. Aguarde até o bolo ficar no ponto e retire-o do forno 22 Qual seria o resultado? Qual a sequência correta para um bom chimarrão? (A) (B) (C) (D) (E) (F) (G) (H) O que vamos fazer na disciplina... 1. Análise e definição do problema 2. Projeto do algoritmo 3. Validação do algoritmo (teste de mesa) 4. Implementação do algoritmo usando uma linguagem de programação (codificação do programa) 5. Teste e depuração 6. Execucão do programa Desenvolvimento de algoritmos e construção de programas 24 “Escolher as abstrações e definir as estratégias certas, e implementá-las na forma de um programa de computador” ✓ Ler atentamente o enunciado do problema, até entendê-lo bem. ✓ Identificar os dados de entrada. ✓ Identificar as saídas (resultados esperados). ✓ O que o programa deve fazer (objetivo), isto é, como transformar as entradas em saídas? ✓ Identificar se existem valores ou dados intermediários, usados para transformar as entradas nas saídas. ✓ Pode ser dividido em subproblemas? 25 Análise e definição do problema Exercício ● Desenvolver um algoritmo que ensine um robô a trocar um pneu furado 26 Exercício ● Desenvolver um algoritmo que ensine um robô a trocar um pneu furado ● Entradas: pneu furado, pneu bom ● Saída: carro circulando normalmente ● Objetivo: substituir pneu furado por pneu bom 27 Exercício: solução profissional 28 Exercício: sugestão de algoritmo 29 Programa Troca Pneu: 1. Início 2. Estacione o carro em local seguro 3. Se o pneu estiver realmente furado, então 4. Certifique-se de que o carro está com o freio de mão acionado 5. Desafrouxe os parafusos do pneu furado 6. Instale o macaco no local adequado 7. Eleve o carro 8. Retire completamente os parafusos 9. Retire o pneu furado 10. Coloque o pneu novo 11. Fixe os parafusos no lugar 12. Abaixe o carro 13. Remova o macaco 14. Aperte os parafusos do pneu novo 15. Fim Representação de algoritmos Pseudocódigo vs. fluxograma 30 Terminal: indica ínicio, fim ou ponto de parada Entrada/Saída: operação que lê ou imprime dados Processamento: instrução ou grupo de instruções que realizam processamento Atenção... 31 Paradigmas de programação ● Uso direto de linguagem de máquina é bastante complicado ● Linguagens demais alto nível, “linguagens de programação”, foram criadas para tornar a escrita de programas mais acessível ○ Especificam instruções que serão executadas pelo computador de forma mais próxima a uma linguagem natural ○ São traduzidas para a linguagem de máquina por um programa específico (compilador) 32 Paradigmas de programação ● Toda linguagem de programação possui: ○ uma sintaxe bem definida, que determina as construções corretas a serem utilizadas, ○ uma semântica, que determina conjunto de conceitos a serem usados para estruturar e solucionar o problema: paradigmas de programação ● Paradigma: modelo ou padrão de como uma realidade é entendida e de como se interage com essa realidade ● Na computação: forma como uma solução está estruturada e será executada pelo programa gerado (técnicas, conceitos e recursos) ● Principais paradigmas: ○ Imperativo ou procedural ○ Funcional ○ Lógico ○ Orientação a objetos 33 Paradigmas de programação ● Funcional ○ Programa composto por um conjunto de funções que transformam a entrada na saída desejada (computação como avaliação de funções) ○ Conceitos: função, comportamento aplicação, avaliação ○ Exemplo: Lisp, Miranda, ML, Haskell ● Lógico ○ Solução implementada como avaliação de condições lógicas ou regras de inferência, aplicadas a uma base de conhecimento ○ Conceitos: lógica simbólica, regra, inferência ○ Exemplo: Prolog ● Orientação a objetos ○ Mundo real representado por classes de objetos e as respectivas operações que podem ser realizadas por eles, os quais coexistem e interagem entre si ○ Conceitos: classe, objeto, mensagem , herança, polimorfismo ○ Exemplo: Java, C++ 34 Paradigmas de programação ● Imperativo ou procedural: ○ Solução implementada através de ações, executadas sequencialmente ○ Conceitos: variáveis, atribuição, sequência de comandos ○ Exemplos: C, Pascal, Fortran ○ Programação estruturada: fluxo do programa deve ser estruturado, e evidente a partir da estrutura sintática do programa ■ Programa com um único ponto de entrada e um único ponto de saída ■ Programa composto por blocos de execução (delimitados por um ponto de início e um de término), interconectados por três mecanismos de controle de fluxo de execução: sequência, seleção e iteração ■ Enfatiza utilização de unidades separadas de programas - “módulos” - com objetivo específico e bem definido, mais fáceis de implementar e testar 35 “A arte de programar consiste na arte de organizar e dominar a complexidade dos sistemas” [Dijkstra] Adotado na nossa disciplina! Que linguagem de programação usar? Problema SoluçãoAlgoritmo Programa Qual linguagem de programação utilizar nesta etapa?? 36 37 Que linguagem de programação usar? The TIOBE Programming Community index is an indicator of the popularity of programming languages. 38 ● Linguagem de alto-nível ● Geral ● Força a criação de um modelo mental sobre o que o computador realmente está fazendo (processamento, memória...) ao executar um programa ● Aprendendo a dirigir: carro manual ou carro automático? ○ C é o carro manual! ○ Linguagens mais modernas, como Python, são os carros automáticos! Aprendendo C como primeira linguagem de programação 39 ● Aprendam Linux desde cedo ○ Facilita o desenvolvimento de software ○ É amplamente usado em sistemas embarcados ● Aprendam Git desde cedo ○ É o sistema padrão de versionamento de código ○ É exigido em praticamente qualquer empresa de software ● Pratiquem boas práticas de programação ○ Software é lido mais vezes do que escrito ○ Deixe seus amigos (e o você do futuro) mais felizes Outras dicas (possivelmente úteis) 40 FAQs Frequently asked questions 41 Aulas ● 2 encontros de aulas teóricas ● 1 encontro de aula prática (laboratório): Sala 104/43413. ○ Sextas, 13:30-15:10 (TURMA I) - Prof. Anderson Tavares ○ Sextas, 15:30-17:10 (TURMA J) - Prof. Kazuki Yokoyama ● Presença controlada aula a aula! (frequência mínima de 75% obrigatória!) ● 90 horas-aula = 45 encontros ● Máximo de 12 faltas ● Aulas práticas valem presença ● Entrega dos trabalhos na aula prática, vale nota 42 Recursos: moodle.inf.ufrgs.br 43 Recursos: moodle.inf.ufrgs.br Disciplina INF01202 Algoritmos e Programação (2018/01 Turmas I e J) Código de inscrição: ALG_PROG_TURMASIJ 44 Recursos: facebook.com/inf01202 45 Avaliação da disciplina Média Final = 0,3*P1 + 0,45*P2 + 0,15*AP + 0,1*TF Prova 1 Prova 2 Atividades práticas Trabalho Final* *O trabalho final é pré-requisito para fazer a recuperação! Alunos que não atingiram a média 6, podem fazer recuperação sobre toda matéria. Se a média entre a prova de recuperação e a Média Final for maior do que 6.0, o aluno será aprovado com C. 46 Avaliação da disciplina Notas Conceito Nota ≥ 8.5 A 7.5 ≤ Nota < 8.5 B 6.0 < Nota < 7.5 C Nota < 6.0 D Frequência < 75% FF PROVAS: Prova 01: 25 de abril Prova 02: 25 de junho Recuperação: 04 de julho 47 Monitoria ● Monitor: Rafael Baldasso Audibert (rbaudibert@inf.ufrgs.br) ● Atendimento extra-classe, em horários a serem definidos em breve ● Atendimento deve ser marcado previamente com o monitor, por e-mail 48 Cronograma planejado: disponível no Moodle 49 50 Cronograma planejado: disponível no Moodle Bibliografia: programação em C Livro recomendado Luís Damas - Linguagem C, 10ª edição, 2007, LTC Disponível na biblioteca (pt) 51 Bibliografia: Algoritmos Livro recomendado Cormen, Leiserson, Rivest, Stein - Algoritmos, 3ª edição, 2012, Elsevier (conhecido como CLRS devido aos autores) Disponível na biblioteca (pt e en) 52 Para pensar em casa... ● Qual o algoritmo para: ○ sacar dinheiro de um caixa eletrônico? ○ pegar um livro na biblioteca? ○ trocar uma lâmpada? 53
Compartilhar