Universidade Federal do Espírito Santo Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres [email protected] CT VII - Sala 32 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Por que programar? para criar ferramentas para automatizar processos para simulações computacionais … A que se destina esse curso? aprendizagem de conceitos e métodos básicos para a construção de um programa em um computador para a resolução de problemas O que é necessário? um computador um editor de texto aprender uma linguagem de programação aprender a utilizar um interpretador de programas no linux e/ou no windows O que é um computador? máquina de processar dados numéricos ou simbólicos hardware + dispositivos software é capaz de interpretar dados, produzir novos resultados, aceitar novos conceitos para interpretação de novas situações. Arquitetura de Von Neumann Hardware + dispositivos todo o processamento e armazenamento de informações em um computador são realizados via sinais digitais chamados de bits: 0 (desligado) e 1 (ligado) byte: agrupamento de 8 bits Memória: memória RAM (Random Acess Memory) memória ROM (Read Only Memory) memória auxiliar ou externa (cd, usb, disco rígido,...) O que faz um computador? Dados Processamento resolve problemas de forma automática!!! Resultado Para que usar um computador? tradução e edição de textos reconhecimento de imagens gerenciamento de bancos roteamento de mensagens em redes de computadores … O que é programar? identificar, organizar e codificar o conhecimento para a descrição de um conceito para o computador. O que é necessário para programar? compreender o problema a ser resolvido; planejar uma solução; descrever a solução por linguagem de programação; meio de uma testar o programa com o objetivo de verificar se ele resolve o problema. Navegação automática de robos a) qual o problema que quero resolver? compreensão do problema b) é preciso fornecer informações? dados de entrada Fonte: google images Navegação automática de robos c) qual a estratégia de solução que devo adotar? planejando a solução d) como automatizar o processo? codificando por meio de um programa de computador e) funciona? TESTES!!!! Fonte: google images Linguagem de Programação formalismo: padrões segundo os quais um agente possa interpretar e/ou descrever informação formalismo = sintaxe + semântica Por que usar linguagem de programação? não é possível ainda usar linguagem natural para programar no computador; a linguagem de máquina é difícil de ser compreendida; são mais próximas da linguagem natural, podendo-se focar no problema e não nas dificuldades de entendimento da linguagem; tradutores. Propriedades de um programa correção: o programa deve descrever corretamente o conhecimento segundo a intenção desejada e para cada entrada, deve executar e parar com a saída correta soma x y = x + y f x = 1/x eficiência: o programa deve usar de forma adequada os recursos da máquina (espaço de memória e tempo de execução) ordenação de elementos Ordenação de elementos Bubble sort Quick sort Fonte: google images Paradigmas de Linguagem de Programação uma forma específica de se pensar em programação Exemplos: – procedural – funcional o que fazer! como fazer! partir da rua X andar 100 metros virar a direita subir e descer a ladeira virar a esquerda andar 20 metros chegou ao destino Fonte: google images Programação Funcional elaborar programas para uma máquina funcional que: – avalia expressões escritas segundo regras sintáticas bem definidas; – aceita a definição de novas funções; – avalia funções Máquina Funcional lê expressão avalia exibe resultado 2+4 Soma de 2 e4 6 Máquina funcional usuário: 4 – 2 resposta: 2 usuário: f 3 - 2 resposta: definição de f não conhecida usuário: carrega arquivo com funções resposta: ok usuário: f 3 - 2 resposta: 2 Arquivo texto fx=x+1 Recordando funções matemáticas associação entre elementos de dois conjuntos A e B tal que o conjunto de partida A seja igual ao domínio da função; em outras palavras: seja F uma função de A em B. Então F representa o conjunto de pares ordenados (x,y) tais que para todo x A, existe y B, tal que (x, y) F. Função total e parcial Seja f uma função de A em B. Então: f é uma função total: Domínio (f) = A f é uma função parcial: Domínio (f) A Exemplos a) A = {a, b, c}, B = {1, 2, 3} f: A B tq f = {(a,1), (b,1), (c,3)} b) A = {1, 2, 3}, B = {a, e, i, o, u} f: A B tq f = {(1,a), (2,e), (2,i), (3,o)} c) A = {a, b, c}, B = {1, 2, 3} f: A B tq f = {(a,1), (b,1)} Descrições Funcionais extensional: explicitados todos os elementos são f = {(a,1), (b,2), (c,3)} intencional: os elementos são descritos através de um critério de pertinência f = {(x,y) | x e y = 2x} Exemplos a) f: tq f (x) = 1/x b) g: tq g(y) = y – 1 c) f: tq f (x) = x2 - 1 Exercícios 1. Conceitue programação de computadores. 2. Quais os principais paradigmas de programação e o que os diferenciam. 3. Faça uma descrição intencional da função: F = {1,3,5,7,...}. 4. Faça uma listagem de outros exemplos de programas de computador que são usados hoje em diferentes áreas do conhecimento e por diferentes profissionais. 5. Apresente exemplo de outras linguagens técnicas usadas pelo ser humano para descrever conhecimento. 6. Os conceitos de correção e de eficiência, se aplicam a qualquer artefato. Escolha 3 artefatos quaisquer e discuta os dois conceitos.