Programação Funcional Apontamentos (Versão 1.16)
|
|
|
- Octavio Canedo
- 6 Há anos
- Visualizações:
Transcrição
1 Programação Funcional Apontamentos (Versão 1.16) Pedro Quaresma de Almeida 1 2 de Outubro de Departamento de Matemática da Universidade de Coimbra.
2 Conteúdo 1 Introdução Diferentes Metodologias Metodologia de Programação Formal O Cálculo λ sem Tipos Síntaxe e Redução Estratégia de redução e Church-Rosser Completude de Turing do cálculo λ e pontos fixos Conceitos Básicos em Set Introdução Objecto Inicial e Objecto Terminal Produto Equalizador Quadrado Cartesiano Co-produto Co-equalizador Quadradro Co-cartesiano Exponenciação A Definições auxiliares 34 1
3 Capítulo 1 Introdução 1.1 Diferentes Metodologias No prosseguimento do estudo da construção de programas correctos que sejam soluções de problemas típicos das ciências da computação, um factor, que frequentemente é apontado como causa das dificuldades nesta construção, é o próprio paradigma da programação sequencial imperativa. As características da programação sequencial estão, conceptualmente, muito distantes das noções normalmente usadas na descrição dos problemas. Estas requerem abordagens formais para poderem ser descritas de um modo preciso e, normalmente têm uma natureza estática: isto é, o problema é o mesmo independentemente do instante de tempo em que é observado (existem, obviamente, excepções). Por seu lado, a programação imperativa não é nada formal, muito pouco precisa e é dinâmica no sentido em que a dimensão tempo procura substituir a dimensão da complexidade: um programa grande é decomposto em problemas simples que são resolvidos um de cada vez, sequencialmente no tempo. Daqui resulta que a resolução de problemas seria bastante mais simples se a metodologia de construção de programas seguisse de perto a metodologia de descrição dos problemas. Por isso será conveniente programar de um modo: formal, preciso, e em que a estrutura e complexidade do problema se manifeste directamente na estrutura e complexidade do programa. Algumas metodologias de descrição de problemas que têm vindo a ganhar importância crescente são: Modelos, baseados na teoria dos conjuntos, para as estruturas de informação e descrição funcional das operações sobre essas estruturas. Lógica de primeira ordem sob várias formas particulares. Regras de simplificação ou substituição. Teorias algébricas axiomáticas (a chamada teoria dos tipos abstractos de dados); Teoria dos objectos e das comunicações entre objectos [10]. Existem outras metodologias, designadamente ligadas à noção de processo e comunicação entre processos, mas, como envolvem directamente o tempo como componente intrínseca do problema, não serão tratadas neste curso. 2
4 1.2. METODOLOGIA DE PROGRAMAÇÃO FORMAL Versão A cada uma das metodologias atrás referenciadas está associada uma (ou mais) metodologias de programação que, em maior ou menor grau, satisfazem as condições já referidas. A primeira destas metodologias deu origem à metodologia formal mais antiga: a chamada programação funcional. Existem imensas abordagens distintas a esta metodologia, muitas delas, porém, muito longe de formais e precisas. Duas das que melhor satisfazem as nossas condições, centram-se nas linguagens ML [11, 14] e Haskell [3, 13, 7, 6]. A lógica de primeira ordem foi sempre um veículo para a criação de metodologias de descrição de problemas: uma das primeiras áreas abordadas pelas metodologias formais foi a criação de demonstradores de teoremas. No entanto a sua complexidade e a indecidibilidade da lógica de primeira ordem não permitia a criação de sistemas computacionais que reproduzissem toda a teoria. Assim procurou-se encontrar um fragmento da lógica de primeira ordem que fosse decidível e bem adaptado à construção de linguagens de programação, a lógica das cláusulas de Horn é um desses fragmentos sendo a base da linguagem de programação em lógica Prolog [8]. A terceira metodologia está ligada à demonstração de teoremas por simplificação sistemática de formulas lógicas mas também, à descrição de problemas através de regras de transformação. Este tipo de descrição de problemas deu origem a sistemas computacionais que têm o nome genérico de sistemas de reescrita. Um desses sistemas chama-se ERIL. Os tipos abstractos de dados são uma metodologia básica em ciências da computação. A família de linguagens descendentes da linguagem OBJ constituem uma família de linguagens que implementam estes conceitos, temos nomeadamente as linguagens OBJ3 [5], CafeOBJ [4], e Maude. Em relação às metodologias que usam objectos como conceito base tem-se que, infelizmente não existem sistemas computacionais que assentem sobre uma metodologia formal e precisa. Inversamente as (poucas) descrições precisas da noção de objecto não têm suporte em qualquer sistema computacional que seja acessível. Metodologias de objectos com descrição formal mas sem suporte computacional são, por exemplo, OBLOG e FOOPS. A situação inversa tem muitos mais representantes: Smalltalk, Actor, C++, Java, etc. 1.2 Metodologia de Programação Formal Programas e problemas são, normalmente, sistemas grandes e complexos. A capacidade humana para entender tais sistemas é limitada e só consegue ter sucesso quando consegue aplicar uma de duas estratégias: a abstracção e a modularidade. A abstracção é a capacidade para agrupar um número elevado de casos concretos diferentes (mas semelhantes) numa única entidade a que podemos dar o nome de classe, isto é, as propriedades comuns a todos os casos concretos de modo a que, face a essas propriedades, seja possível: prever os efeitos das transformações a que, eventualmente, estejam sujeitos os diferentes casos dentro da classe; validar frases lógicas que se apliquem universalmente a todos os casos da classe. A estratégia de abstracção baseia-se em três técnicas fundamentais: Instanciação Dada uma classe criar um dos seus casos (uma instância da classe); Abstracção Dados dois ou mais casos concretos, caracterizar a menor classe que os contém como instâncias;
5 1.2. METODOLOGIA DE PROGRAMAÇÃO FORMAL Versão Validação Dada uma classe e um caso concreto verificar se o caso é uma instância da classe ou Prever os efeitos de transformações em instâncias de classe ou Validar frases lógicas quantificadas universalmente às instâncias da classe. A modularidade é a capacidade para decompor casos complexos numa colecção de casos mais simples (chamados módulos) e em regras de composição de tal modo que: A análise (ou síntese) de qualquer um dos módulos seja independente da análise (ou síntese) dos restantes. De preferência cada módulo deve ser uma instância de uma classe de módulos bem conhecida. É possível construir o significado do caso complexo por aplicação das regras de composição ao significado dos módulos. Analogamente, se o problema for de síntese, as regras de composição devem permitir construir o sistema global a partir dos módulos. Uma das características importantes em qualquer metodologia é o seu suporte à abstracção e à modularidade. O modo mais directo para uma metodologia de programação poder suportar abstracção é o facto de possuir uma teoria de tipos bem desenvolvida. As linguagens ML e Haskell (ao contrário do seu ilustre antecessor, Lisp [1]) possuêm tal teoria de tipos. O mesmo se passa com o CafeOBJ e, em certo grau, com o sistema de reescrita ERIL. Apenas o Prolog (tal como o Lisp) não suporta qualquer teoria de tipos sendo que, dificilmente suporta as técnicas de abstracção. A mesma observação pode ser feita em relação à modularidade; dada a íntima relação entre estes dois conceitos, não é coincidência que uma teoria de tipos bem desenvolvida esteja ligada a uma boa gestão de módulos. As linguagens ML, Haskell e CafeOBJ suportam ambas modularidade de programas. Porém nem Prolog nem Eril suportam qualquer tipo de modularidade. A apresentação das várias metodologias terá em vista sempre o modo como estas técnicas podem (ou não) ter um suporte adequado. Se todas estas metodologias oferecem tantas vantagens quando comparadas com a programação imperativa, qual a razão porque a grande maioria dos programas que correm na generalidade dos sistemas informáticos continuam a ser imperativos? A resposta é simples: eficiência na execução. A programação imperativa está ligada intimamente à arquitectura da máquina que os executa e, como dissemos, substitui a dimensão complexidade do problema pela dimensão tempo. De certo modo podemos dizer que um problema grande divide a ocupação da máquina, pelos seus módulos ou componentes, através de fatias de tempo. Quando a complexidade total do problema é reflectida na estrutura do programa e não partilhada no tempo, é natural que tal programa seja, à partida, mais exigente em termos de recurso da máquina. Por outro lado, as metodologias de programação formal, fazem automaticamente para qualquer programa um conjunto de serviços genéricos que não existem nas metodologias de programação imperativas; em particular, toda a gestão de memória, é usualmente transparente ao programa que não lida com problemas de detalhe de implementação. Na programação imperativa os custos da implementação estão sempre presentes e, portanto, é mais simples melhorar a eficiência do programa.
6 1.2. METODOLOGIA DE PROGRAMAÇÃO FORMAL Versão A programação formal, porém, oferece um tipo mais importante de eficiência: a eficiência no desenvolvimento e a garantia de correcção.
Lógica Proposicional
Lógica Proposicional Lógica Computacional Carlos Bacelar Almeida Departmento de Informática Universidade do Minho 2007/2008 Carlos Bacelar Almeida, DIUM LÓGICA PROPOSICIONAL- LÓGICA COMPUTACIONAL 1/28
Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I
Paradigmas Paradigmas Tradicional Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I Paradigmas Tradicional Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I OO Simula-67, Smalltalk, C++, Eiffel, Object Pascal,
Linguagens de Programação Princípios e Paradigmas
Copyright The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Linguagens e Ambientes de Programação 2002-2003 Linguagens de Programação Princípios e Paradigmas Gladys Castillo
Revisão: linguagens de programação
Revisão: linguagens de programação Definição, histórico, paradigmas e semântica Prof. Thiago A. S. Pardo [email protected] Definição Uma linguagem de programação é uma linguagem destinada a ser usada
Linguagens de Programação Funcional
Linguagens de Programação Funcional Conceitos de Linguagens de Programação Pedro Libório Setembro de 2013 2 Roteiro Introdução Funções matemáticas Fundamentos das linguagens de programação funcionais A
Programação Orientada a Objetos
Curso Profissional de Gestão e Programação de Sistemas Informáticos Disciplina: Programação e Sistemas de Informação Programação Orientada a Objetos Módulos 9/10/11 POO 2016/2017 História A OO surgiu no
Paradigmas de Computação Paralela
Paradigmas de Computação Paralela Modelos e Linguagens de Computação Paralela João Luís Ferreira Sobral jls@... 1 Dezembro 2015 Razões para a computação paralela (cf. Skillicorn & Talia 1998) O mundo é
1 Introdução à Programação O que é? Para que serve?... 1
Nesta aula... Conteúdo 1 Introdução à Programação 1 1.1 O que é?................................. 1 1.2 Para que serve?............................. 1 2 Linguagens de programação 2 2.1 Programação estruturada........................
Projeto e Análise de Algoritmos. Introdução. Prof. Ademir Constantino Universidade Estadual de Maringá Departamento de Informática
Projeto e Análise de Algoritmos Introdução Prof. Ademir Constantino Universidade Estadual de Maringá Departamento de Informática Projeto e Análise de Algoritmos Eu penso que o projeto de algoritmos eficientes
Programação Orientada a Objectos - P. Prata, P. Fazendeiro
Programação Orientada a Objetos 1.1 - Perspectiva histórica: Conceitos A evolução das linguagens de programação tem-se feito na procura de ferramentas: -cada vez mais próximas da percepção humana - e que
Paradigmas de Linguagens Computacionais (PLC) (Apresentação da disciplina)
Paradigmas de Linguagens Computacionais (PLC) (Apresentação da disciplina) George Darmiton da Cunha Cavalcanti ([email protected]) Informações Básicas Professor George Darmiton da Cunha Cavalcanti Monitores
Linguagens de Programação
Visão Geral Faculdade de Computação - UFU Agosto - 2009 1 Princípios 2 O que é uma linguagem de programação? Linguagens naturais facilitam a expressão e o intercâmbio de idéias entre as pessoas. Assim
SCC-5832 Teoria da Computação
Teoria da Computação SCC-5832 Teoria da Computação João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos
ÍNDICE. Lição 8 Conceitos Fundamentais da Teoria dos Conjuntos 49. Representação Simbólica dos Conceitos Fundamentais da Teoria dos
ÍNDICE Prefácio PARTE I LÓGICA ARISTOTÉLICA Lição 1 Introdução. Lógica Aristotélica: Noções Básicas 9 Lição 2 O Quadrado da Oposição 15 Lição 3 Conversão, Obversão e Contraposição 21 Lição 4 A Teoria do
Marcos Castilho. DInf/UFPR. 16 de maio de 2019
16 de maio de 2019 Motivação Quais são os limites da computação? O que é um Problema de decisão? Um problema de decisão é um conjunto de perguntas, cada uma das quais tem um SIM ou um NÃO como resposta.
Fundamentos da Programação de Computadores
Universidade do Minho Escola de Engenharia Departamento de Sistemas de Informação Fundamentos da Programação de Computadores Licenciatura em Tecnologias e Sistemas de Informação 1º Ano 1º Semestre Ano
Linguagens de Programação e Programação Funcional
Linguagens de Programação e Programação Funcional GSI004 Aula 01* Faculdade de Computação UFU *baseada nos slides do Professor Paulo Henrique Ribeiro Gabriel 30 de setembro de 2014 GSI004 Aula 01 30 de
Histórico de Linguagens de Programação
Bacharelado em Ciência da Computação PARADIGMAS DE PROGRAMAÇÃO Histórico de Linguagens de Programação Prof. Claudinei Dias email: [email protected] Objetivos Geral: Estudar as características
MINISTÉRIO DA EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS DIRETORIA DE GRADUAÇÃO
DISCIPLINA: Linguagens de Programação CÓDIGO: 2ECOM.031 Data de Elaboração: Janeiro/2012 Carga Horária: Total: 30 h/a; Semanal: 02 aulas; Créditos: 02 Modalidade: Prática Classificação do Conteúdo pelas
ao paradigma imperativo
PARADIGMA FUNCIONAL PARADIGMA FUNCIONAL: INTRODUÇÃO G Exemplos de linguagens funcionais LISP - Início: LP puramente funcional - Depois: acréscimo de alguns recursos imperativos (aumentaram eficiência de
SCC Teoria da Computação e Linguagens Formais
SCC-0205 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis/ [email protected]
Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 1ª Parte Prof. Sandra Pais Soares
Curso Profissional de Gestão e Programação de Sistemas Informáticos Programação e Sistemas de Informação Módulo 1 1ª Parte Prof. Sandra Pais Soares Linguagens de Programação Linguagens de Programação Uma
Lógica Computacional
Lógica Computacional Lógica de Operadores Booleanos Interpretações Tautológicas, Lógicas e Analíticas Funcionalidade / Tabelas de Verdade dos Operadores Booleanos Consequências Tautológica, Lógica e Analítica
Linguagens Formais e Autômatos P. Blauth Menezes
Linguagens Formais e Autômatos P. Blauth Menezes [email protected] Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação - P. Blauth Menezes
Redutibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)
Redutibilidade Mário S. Alvim ([email protected]) Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Mário S. Alvim ([email protected]) Redutibilidade DCC-UFMG (2018/02) 1 / 46 Redutibilidade:
Programação I Apresentação
Programação I Apresentação Prof. Carlos Alberto [email protected] [email protected] Referências JUNIOR, D. P.; NAKAMITI, G. S.; ENGELBRECHT, A. de M. E.; BIANCHI, F. Algoritmos e Programação
Lógica Computacional
Lógica Computacional 3.ano LCC e LERSI URL: http://www.ncc.up.pt/~nam/aulas/0304/lc Escolaridade: 3.5T e 1P Frequência:Semanalmente serão propostos trabalhos aos alunos, que serão entregues até hora e
Introdução. Parte 01. Desenvolvimento de Programação Orientada a Objetos. Prof. Pedro Neto
Introdução Parte 01 Prof. Pedro Neto Aracaju Sergipe - 2011 Conteúdo 1. Introdução i. Paradigmas de ii. Motivação da OO iii. Desafio das novas tecnologias iv. Ambientes de Desenvolvimento Modernos v. OO
Introdução à Computação: Máquinas Multiníveis
Introdução à Computação: Máquinas Multiníveis Beatriz F. M. Souza ([email protected]) http://inf.ufes.br/~bfmartins/ Computer Science Department Federal University of Espírito Santo (Ufes), Vitória,
Fundamentos de Cálculo Lambda
Instituto Superior Técnico Universidade Técnica de Lisboa Lisboa, 2 de Novembro de 2006 Índice Introdução Aplicação e Abstracção Axiomática Aplicação Introdução Aplicação e Abstracção Axiomática FA F é
Juliana Kaizer Vizzotto. Universidade Federal de Santa Maria. Disciplina de Teoria da Computação
Universidade Federal de Santa Maria Disciplina de Teoria da Computação Quais são as capacidades e limitações fundamentais dos computadores? Funções Computáveis Algoritmo: descrição finitade uma computação
Circuitos sequenciais Adaptado dos transparentes das autoras do livro The Essentials of Computer Organization and Architecture
Capítulo 3 Circuitos sequenciais Adaptado dos transparentes das autoras do livro The Essentials of Computer Organization and Architecture Objectivos Conhecer alguns dos principais circuitos digitais sequenciais
3. Linguagem de Programação C
Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Linguagem de programação C 3.1. Conceitos
Paradigmas de Linguagem de Programação. Aspectos Básicos
Paradigmas de Linguagem de Programação Aspectos Básicos Introdução Nesta segunda etapa de nossos estudos, veremos: aspectos básicos de programa e linguagem de programação; revisão de conceitos de compilador
Programação Orientada a Objetos
Programação Orientada a Objetos Herança e Polimorfismo Msc. Paulo de Tarso F. Júnior 1 Projeto Orientado a Objetos O que desejam? Produção de projetos conceitualmente simples o bastantes para serem entendidos
SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.
SEMÂNTICA program simples = var x : int := 3 in x := x + 5 end. rode =? Rogério Rocha Roteiro Introdução Sintaxe Semântica Dinâmica (Métodos formais) Operacional Axiomática Denotacional Estática Conclusão
Paradigmas de Linguagens
Paradigmas de Linguagens Paradigma Imperativo Professora Sheila Cáceres Paradigma Imperativo Um pouco de historia Paradigma fundamentado no conceito de máquina de Turing. A máquina de Turing é uma abstração
Aula 08 Introdução à Algoritmos. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes
Aula 08 Introdução à Algoritmos Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/ Agenda da Aula Introdução aos Algoritmos: Conceitos Iniciais; Programa
FGSL 2017 Programação Funcional
Programação Funcional λfλx.f(f(fx)) motivos para aprender Sobre Mim Arquiteto de Software na TOTVS Goiânia Equipe de Framework, Engenharia e Inovação Centenas de milhares de linhas de códigos escritas
Tratamento dos Erros de Sintaxe. Adriano Maranhão
Tratamento dos Erros de Sintaxe Adriano Maranhão Introdução Se um compilador tivesse que processar somente programas corretos, seu projeto e sua implementação seriam grandemente simplificados. Mas os programadores
Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens
Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens 1 Introdução Estudar computação do ponto de vista teórico é sinônimo de caracterizar
Programação em Comunicações. Programação Orientada por Objectos. Ademar Aguiar.
Programação em Comunicações Programação Orientada por Objectos www.fe.up.pt/~aaguiar [email protected] 1 Objectivos Apresentar os princípios e conceitos base sobre orientação por objectos (objectos,
CAP. VI ANÁLISE SEMÂNTICA
CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve
Capítulo 7. Expressões e Sentenças de Atribuição
Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário
PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar
- Aula 1 - O NÍVEL DA LÓGICA DIGITAL 1. INTRODUÇÃO Na parte inferior da hierarquia da figura abaixo encontramos o nível da lógica digital, o verdadeiro hardware do computador. Este nível situa-se na fronteira
Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação
Aula 03 Prof. Max Santana Rolemberg Farias [email protected] Colegiado de Engenharia de Computação Linguagens de Programação A primeira linguagem de programação foi criada por Ada Lovelace. Amiga
SCC Introdução à Teoria da Computação
SCC-0505 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis/ [email protected]
Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto
Suporte para Programação Orientada a Objeto Cristiano Lehrer Categoria das Linguagens que Suportam POO Suporte a POO acrescentado a uma linguagem já existente: C++ (também suporta programação procedural
Algoritmos 3/17/ Algoritmos como área de estudo e investigação
Algoritmos e Complexidade Ana Teresa Freitas INESC-ID/IST ID/IST 3/17/2005 1 O que é um algoritmo? Algoritmos: Sequência de instruções necessárias para a resolução de um problema bem formulado [passíveis
Pré-Cálculo. Humberto José Bortolossi. Aula 6 29 de março de Departamento de Matemática Aplicada Universidade Federal Fluminense
Pré-Cálculo Humberto José Bortolossi Departamento de Matemática Aplicada Universidade Federal Fluminense Aula 6 29 de março de 2010 Aula 6 Pré-Cálculo 1 Implicações e teoria dos conjuntos f (x) =g(x) u(x)
TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO SISTEMAS DE GESTÃO DE BASE DE DADOS CONCEITOS BÁSICOS
TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO CONCEITOS BÁSICOS Necessidade das base de dados Permite guardar dados dos mais variados tipos; Permite um rápido e fácil acesso aos dados; Acelera os processos de
Complexidade computacional
Complexidade computacional CLRS sec 34.1 e 34.2 Algoritmos p. 1 Algumas questões Por que alguns problemas parecem ser (computacionalmente) mais difíceis do que outros? Algoritmos p. 2 Algumas questões
1 Lógica de primeira ordem
1 Lógica de primeira ordem 1.1 Sintaxe Para definir uma linguagem de primeira ordem é necessário dispor de um alfabeto. Este alfabeto introduz os símbolos à custa dos quais são construídos os termos e
DELEGAÇÃO REGIONAL DO ALENTEJO CENTRO DE FORMAÇÃO PROFISSIONAL DE ÉVORA REFLEXÃO 5
REFLEXÃO 5 Módulos 0782, 0783, 0784 e 0785 1/5 23-05-2013 Esta reflexão tem como objectivo partilhar e dar a conhecer o que aprendi nos módulos 0782 Programação em C/C++ - Estrutura Básica e Conceitos
Conceitos de Linguagens de Programação - Características. Paavo Soeiro
Conceitos de Linguagens de Programação - Características Paavo Soeiro Motivação Para que possa escolher uma linguagem apropriada ao problema. Melhorar o entendimento da linguagem utilizada. Facilitar o
1 Postulado de Church-Turing 1
1 Postulado de Church-Turing 1 Alguns modelos alternativos no estudo da computabilidade Turing: Máquina de Turing Gödel-Kleene: Funções recursivas Church: Cáluculo λ (funções definidas por termos λ) Post:
Nomes, vinculações e escopos
Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual
Apostila 06. Objetivos: Estudar a Computabilidade Estudar a Decidibilidade Estudar a Redutibilidade
Cursos: Bacharelado em Ciência da Computação e Bacharelado em Sistemas de Informação Disciplinas: (1493A) Teoria da Computação e Linguagens Formais, (4623A) Teoria da Computação e Linguagens Formais e
Lógica Computacional
Aula Teórica 1: Apresentação Departamento de Informática 14 de Fevereiro de 2011 O que é a lógica? Lógica: de que se trata? A lógica está na base do raciocínio É um processo inerentemente humano, tão básico
Introdução. PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa
Introdução PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa Resumo Funcionamento da cadeira Intuição sobre programação orientada-a-objectos A linguagem Java: história
Computação e Programação
Computação e Programação MEMec, LEAN - 1º Semestre 2015-2016 Aula Teórica 10 Exemplo de desenvolvimento de Programa Modular: Máquina de venda de bilhetes D.E.M. Área Científica de Controlo Automação e
DOCUMENTO DE ADEQUAÇÃO MESTRADO EM ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA UNIVERSIDADE NOVA DE LISBOA PEÇA B
DOCUMENTO DE ADEQUAÇÃO DO MESTRADO EM ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA UNIVERSIDADE NOVA DE LISBOA (ESTRUTURA CURRICULAR E PLANO DE ESTUDOS) B2 FORMULÁRIO 1. Estabelecimento de
Introdução à Computação
Introdução à Computação Jordana Sarmenghi Salamon [email protected] [email protected] http://inf.ufes.br/~jssalamon Departamento de Informática Universidade Federal do Espírito Santo Agenda
Matemática Discreta para Ciência da Computação
Matemática Discreta para Ciência da Computação P. Blauth Menezes [email protected] Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação
Lógica Computacional DCC/FCUP 2017/18
2017/18 Funcionamento da disciplina Docentes: Teóricas: Sandra Alves Práticas: Sandra Alves e Nelma Moreira Página web http://www.dcc.fc.up.pt/~sandra/home/lc1718.html (slides de aulas e folhas de exercícios,
