Este documento apresenta um resumo sobre programação funcional em Haskell. Ele discute o editor WinHugs, tipos de dados, definições de funções, escopo e tratamento de exceções.
O documento descreve as características da linguagem de programação funcional Standard ML e sua extensão CPN ML, incluindo tipos de dados, declaração de variáveis e funções, recursividade, casamento de padrões e inscrições para modelagem de redes de Petri coloridas.
O documento resume os principais tipos de dados e operadores em C#. Apresenta tipos primitivos como int, float e bool e tipos complexos como arrays, enumerações e estruturas. Descreve também operadores aritméticos, relacionais e lógicos e declarações como if/else e laços de repetição.
O documento discute operadores e estruturas de controle de fluxo na linguagem Java. Ele explica os diferentes tipos de operadores como aritméticos, lógicos e de atribuição, além de estruturas como if/else, for loops e switch cases. O documento também fornece detalhes sobre precedência de operadores e conversão de tipos.
O documento apresenta um mini-curso de Java Básico ministrado por duas professoras. O mini-curso irá apresentar os principais conceitos de Java e Orientação a Objetos em apenas 3 horas e incluirá apresentações, práticas e esclarecimento de dúvidas. A agenda inclui tópicos como variáveis, tipos primitivos, controle de fluxo, classes, herança e interfaces.
1) O documento apresenta uma introdução ao Python, abordando tópicos como tipos de dados básicos, operadores, strings, listas e como aprender a programar de forma autodidata.
2) São explicados conceitos como blocos de código, comentários, números inteiros e de ponto flutuante, booleanos, None, strings, conversão entre encodings e operações com listas.
3) Dicas como usar o interpretador interativo, help, dir e documentação são dados para quem deseja aprender Python de forma independente.
O documento fornece um resumo sobre a linguagem de programação PHP. Ele descreve que o PHP foi desenvolvido originalmente por Rasmus Lerdorf em 1994 e passou por diversas versões desde então. Também apresenta as principais características, funcionalidades, tipos de dados e estruturas suportadas pela linguagem PHP.
Python é uma linguagem de programação multi-paradigma, interpretada e de tipagem dinâmica que possui uma biblioteca extensa. O documento apresenta os objetivos, características, sintaxe básica, controle de fluxo, orientação a objetos, programação funcional e módulos em Python.
O documento discute conceitos importantes de opicionais em Swift, como:
1) Opcionais podem representar a ausência de valor e são úteis para representar valores que podem ou não existir;
2) Existem diferentes formas de lidar com valores opcionais, como desempacotamento forçado, vinculação opcional e operador nil coalescing;
3) Valores opcionais podem ser encadeados para acessar propriedades e métodos de forma segura.
O documento descreve as características da linguagem de programação funcional Standard ML e sua extensão CPN ML, incluindo tipos de dados, declaração de variáveis e funções, recursividade, casamento de padrões e inscrições para modelagem de redes de Petri coloridas.
O documento resume os principais tipos de dados e operadores em C#. Apresenta tipos primitivos como int, float e bool e tipos complexos como arrays, enumerações e estruturas. Descreve também operadores aritméticos, relacionais e lógicos e declarações como if/else e laços de repetição.
O documento discute operadores e estruturas de controle de fluxo na linguagem Java. Ele explica os diferentes tipos de operadores como aritméticos, lógicos e de atribuição, além de estruturas como if/else, for loops e switch cases. O documento também fornece detalhes sobre precedência de operadores e conversão de tipos.
O documento apresenta um mini-curso de Java Básico ministrado por duas professoras. O mini-curso irá apresentar os principais conceitos de Java e Orientação a Objetos em apenas 3 horas e incluirá apresentações, práticas e esclarecimento de dúvidas. A agenda inclui tópicos como variáveis, tipos primitivos, controle de fluxo, classes, herança e interfaces.
1) O documento apresenta uma introdução ao Python, abordando tópicos como tipos de dados básicos, operadores, strings, listas e como aprender a programar de forma autodidata.
2) São explicados conceitos como blocos de código, comentários, números inteiros e de ponto flutuante, booleanos, None, strings, conversão entre encodings e operações com listas.
3) Dicas como usar o interpretador interativo, help, dir e documentação são dados para quem deseja aprender Python de forma independente.
O documento fornece um resumo sobre a linguagem de programação PHP. Ele descreve que o PHP foi desenvolvido originalmente por Rasmus Lerdorf em 1994 e passou por diversas versões desde então. Também apresenta as principais características, funcionalidades, tipos de dados e estruturas suportadas pela linguagem PHP.
Python é uma linguagem de programação multi-paradigma, interpretada e de tipagem dinâmica que possui uma biblioteca extensa. O documento apresenta os objetivos, características, sintaxe básica, controle de fluxo, orientação a objetos, programação funcional e módulos em Python.
O documento discute conceitos importantes de opicionais em Swift, como:
1) Opcionais podem representar a ausência de valor e são úteis para representar valores que podem ou não existir;
2) Existem diferentes formas de lidar com valores opcionais, como desempacotamento forçado, vinculação opcional e operador nil coalescing;
3) Valores opcionais podem ser encadeados para acessar propriedades e métodos de forma segura.
O documento descreve os principais conceitos da linguagem de programação C++, incluindo variáveis, tipos de dados, operadores, estruturas condicionais e de repetição. É apresentada a sintaxe básica e exemplos de declaração de variáveis, uso de operadores, comandos if/else e laços for e while.
O documento apresenta um guia rápido de referência sobre variáveis, tipos de dados, operadores e fluxos de controle na linguagem Java, incluindo a declaração e inicialização de variáveis, tipos primitivos, constantes, operadores aritméticos, relacionais e lógicos. Também aborda comentários, strings, entrada e saída de dados, e convenções de codificação.
O documento discute sobre pilha e heap, variáveis primitivas e de referência, literais, atribuições, escopo de variáveis, wrappers, autoboxing, sobrecarga, garbage collector. As principais informações são: 1) Variáveis de instância e objetos ficam no heap, variáveis locais na pilha; 2) Variáveis primitivas armazenam valores diretamente, enquanto referências armazenam endereços de objetos no heap; 3) Wrappers permitem usar primitivos como objetos.
Este documento apresenta uma agenda para um mini-curso gratuito sobre a linguagem de programação Go. A agenda inclui tópicos como motivação, configuração de ambiente, estrutura da linguagem, funções, valores compostos, tipos personalizados, módulos, execução concorrente e utilitários. O objetivo é fornecer uma introdução abrangente aos principais recursos e conceitos da linguagem Go.
Este documento fornece um guia rápido sobre variáveis, tipos de dados, operadores e estruturas de controle na linguagem Java, descrevendo oito tipos primitivos, como declarar e inicializar variáveis, operadores aritméticos e lógicos, fluxos como if/else e loops. Também apresenta convenções de codificação e dicas do Eclipse para desenvolvimento em Java.
O documento discute tipos de dados e operadores em Java. Ele explica:
1) Identificadores e como nomear variáveis, métodos e classes.
2) Como usar comentários e declarar e inicializar variáveis.
3) Diferentes tipos de operadores aritméticos, relacionais e lógicos.
4) Tipos primitivos como int, double, boolean e char e como fazer conversões entre eles.
Este documento fornece uma introdução aos fundamentos da linguagem Java, incluindo tipos de dados primitivos, operadores, declaração e uso de variáveis, comentários e identificadores. O documento também discute conversões entre tipos de dados como casting e promoção.
Este documento fornece instruções básicas para converter código em pseudocódigo (Portugol) para C#. Ele explica as regras para nomes de variáveis e tipos de dados, como atribuir valores, operadores, estruturas de controle e repetição, e comandos básicos para console e janelas.
Swift é uma nova linguagem de programação desenvolvida pela Apple para aplicativos iOS e OS X. A apresentação introduz Swift, discutindo sua sintaxe familiar, tipos de dados, variáveis e constantes, comentários e conversões de tipos. O documento também explica como iniciar no Xcode playground e alguns dos operadores básicos da linguagem.
Este documento apresenta os principais conceitos de tipos funcionais em Haskell, incluindo:
1) Tipos básicos como Bool, Char, Int e suas propriedades;
2) Listas e tuplas como estruturas de dados e suas diferenças;
3) Tipos funcionais e como Haskell lida com funções de múltiplos argumentos usando currying.
4) Conceitos avançados como polimorfismo, sobrecarga e classes.
5) Um desafio com exercícios sobre tipos e classes.
O documento discute sobre memória de computadores e ponteiros em C. Explica que cada byte na memória tem um endereço numérico e cada objeto ocupa bytes consecutivos, tendo um endereço associado. Também define ponteiros como variáveis que armazenam endereços de memória e discute operações com ponteiros.
Python não força o programador a pensar em objetos, mas eles fazem parte da linguagem desde o início, incluindo conceitos avançados como sobrecarga de operadores, herança múltipla e introspecção. Com sua sintaxe simples, é muito natural aprender orientação a objetos em Python
O documento discute os conceitos de polimorfismo de inclusão, polimorfismo paramétrico e tipos parametrizados em sistemas de tipos. O polimorfismo de inclusão permite que um tipo tenha subtipos que herdam suas operações, como em linguagens orientadas a objetos. O polimorfismo paramétrico permite escrever funções polimórficas que operam em famílias de tipos. Tipos parametrizados derivam tipos através da substituição de variáveis de tipo por tipos concretos.
O documento discute iteradores e iteráveis em Python, incluindo: 1) Como obter iteradores de objetos através da função built-in iter(); 2) Como iter funciona com dois argumentos para criar um iterador; 3) Tipos iteráveis como sequências e suas interfaces; 4) Listas de compreensão versus expressões geradoras.
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
Lua é uma linguagem de script dinâmica e leve usada para automatizar tarefas e adicionar lógica e funcionalidade a outros sistemas. Ela é portátil, simples, eficiente e pode ser embutida ou acoplada a várias linguagens e plataformas. Lua é amplamente usada em jogos e tem bibliotecas para strings, tabelas, matemática e depuração.
O documento resume os principais conceitos de lógica de programação, incluindo tipos de dados primitivos, constantes, variáveis, identificadores, declaração e atribuição de variáveis, e entrada e saída de dados.
O documento explica que a memória de um computador é composta de bytes, cada um com um endereço único. Objetos na memória como variáveis e strings ocupam bytes consecutivos, e cada objeto tem seu próprio endereço. Alocação dinâmica de memória permite reservar espaços de tamanho variável usando funções como malloc() e free().
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
Fundamentos da Programação 6:
• Manipulação de caracteres
• Relação entre os tipos char e int
• Tipos de valor vs. tipos de referência
Apresentação 6 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
Fundamentos da Programação 3:
• Funções/repórteres e listas em Snap!
• Utilizações típicas de variáveis
Apresentação 3 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
Apresentação para o Hack Thursday (http://hackthursday.com/) sobre a linguagem C. Pode servir como uma introdução para a linguagem. O material é inspirado nesse curso aqui: http://www.cs.cf.ac.uk/Dave/C/ Para quem não participou da apresentação pode ser mais didático olhar o link.
Those are the slides (pt_BR) used to give a small overview about Haskell before starting the coding dojo at Liferay Recife. Our coding dojo used the word-wrapping kata (http://codingdojo.org/kata/WordWrap) and the results can be seen here: https://github.com/brandizzi/haskell-dojo-word-wrap
Este manual fornece informações sobre a linguagem C/C++. Ele contém três capítulos principais: Introdução, Elementos do Programa e Tipos de Dados e Declarações. O manual é de domínio público e pode ser copiado e distribuído livremente, incentivando contribuições para seu aprimoramento.
O documento descreve os principais conceitos da linguagem de programação C++, incluindo variáveis, tipos de dados, operadores, estruturas condicionais e de repetição. É apresentada a sintaxe básica e exemplos de declaração de variáveis, uso de operadores, comandos if/else e laços for e while.
O documento apresenta um guia rápido de referência sobre variáveis, tipos de dados, operadores e fluxos de controle na linguagem Java, incluindo a declaração e inicialização de variáveis, tipos primitivos, constantes, operadores aritméticos, relacionais e lógicos. Também aborda comentários, strings, entrada e saída de dados, e convenções de codificação.
O documento discute sobre pilha e heap, variáveis primitivas e de referência, literais, atribuições, escopo de variáveis, wrappers, autoboxing, sobrecarga, garbage collector. As principais informações são: 1) Variáveis de instância e objetos ficam no heap, variáveis locais na pilha; 2) Variáveis primitivas armazenam valores diretamente, enquanto referências armazenam endereços de objetos no heap; 3) Wrappers permitem usar primitivos como objetos.
Este documento apresenta uma agenda para um mini-curso gratuito sobre a linguagem de programação Go. A agenda inclui tópicos como motivação, configuração de ambiente, estrutura da linguagem, funções, valores compostos, tipos personalizados, módulos, execução concorrente e utilitários. O objetivo é fornecer uma introdução abrangente aos principais recursos e conceitos da linguagem Go.
Este documento fornece um guia rápido sobre variáveis, tipos de dados, operadores e estruturas de controle na linguagem Java, descrevendo oito tipos primitivos, como declarar e inicializar variáveis, operadores aritméticos e lógicos, fluxos como if/else e loops. Também apresenta convenções de codificação e dicas do Eclipse para desenvolvimento em Java.
O documento discute tipos de dados e operadores em Java. Ele explica:
1) Identificadores e como nomear variáveis, métodos e classes.
2) Como usar comentários e declarar e inicializar variáveis.
3) Diferentes tipos de operadores aritméticos, relacionais e lógicos.
4) Tipos primitivos como int, double, boolean e char e como fazer conversões entre eles.
Este documento fornece uma introdução aos fundamentos da linguagem Java, incluindo tipos de dados primitivos, operadores, declaração e uso de variáveis, comentários e identificadores. O documento também discute conversões entre tipos de dados como casting e promoção.
Este documento fornece instruções básicas para converter código em pseudocódigo (Portugol) para C#. Ele explica as regras para nomes de variáveis e tipos de dados, como atribuir valores, operadores, estruturas de controle e repetição, e comandos básicos para console e janelas.
Swift é uma nova linguagem de programação desenvolvida pela Apple para aplicativos iOS e OS X. A apresentação introduz Swift, discutindo sua sintaxe familiar, tipos de dados, variáveis e constantes, comentários e conversões de tipos. O documento também explica como iniciar no Xcode playground e alguns dos operadores básicos da linguagem.
Este documento apresenta os principais conceitos de tipos funcionais em Haskell, incluindo:
1) Tipos básicos como Bool, Char, Int e suas propriedades;
2) Listas e tuplas como estruturas de dados e suas diferenças;
3) Tipos funcionais e como Haskell lida com funções de múltiplos argumentos usando currying.
4) Conceitos avançados como polimorfismo, sobrecarga e classes.
5) Um desafio com exercícios sobre tipos e classes.
O documento discute sobre memória de computadores e ponteiros em C. Explica que cada byte na memória tem um endereço numérico e cada objeto ocupa bytes consecutivos, tendo um endereço associado. Também define ponteiros como variáveis que armazenam endereços de memória e discute operações com ponteiros.
Python não força o programador a pensar em objetos, mas eles fazem parte da linguagem desde o início, incluindo conceitos avançados como sobrecarga de operadores, herança múltipla e introspecção. Com sua sintaxe simples, é muito natural aprender orientação a objetos em Python
O documento discute os conceitos de polimorfismo de inclusão, polimorfismo paramétrico e tipos parametrizados em sistemas de tipos. O polimorfismo de inclusão permite que um tipo tenha subtipos que herdam suas operações, como em linguagens orientadas a objetos. O polimorfismo paramétrico permite escrever funções polimórficas que operam em famílias de tipos. Tipos parametrizados derivam tipos através da substituição de variáveis de tipo por tipos concretos.
O documento discute iteradores e iteráveis em Python, incluindo: 1) Como obter iteradores de objetos através da função built-in iter(); 2) Como iter funciona com dois argumentos para criar um iterador; 3) Tipos iteráveis como sequências e suas interfaces; 4) Listas de compreensão versus expressões geradoras.
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
Lua é uma linguagem de script dinâmica e leve usada para automatizar tarefas e adicionar lógica e funcionalidade a outros sistemas. Ela é portátil, simples, eficiente e pode ser embutida ou acoplada a várias linguagens e plataformas. Lua é amplamente usada em jogos e tem bibliotecas para strings, tabelas, matemática e depuração.
O documento resume os principais conceitos de lógica de programação, incluindo tipos de dados primitivos, constantes, variáveis, identificadores, declaração e atribuição de variáveis, e entrada e saída de dados.
O documento explica que a memória de um computador é composta de bytes, cada um com um endereço único. Objetos na memória como variáveis e strings ocupam bytes consecutivos, e cada objeto tem seu próprio endereço. Alocação dinâmica de memória permite reservar espaços de tamanho variável usando funções como malloc() e free().
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
Fundamentos da Programação 6:
• Manipulação de caracteres
• Relação entre os tipos char e int
• Tipos de valor vs. tipos de referência
Apresentação 6 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
Fundamentos da Programação 3:
• Funções/repórteres e listas em Snap!
• Utilizações típicas de variáveis
Apresentação 3 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
Apresentação para o Hack Thursday (http://hackthursday.com/) sobre a linguagem C. Pode servir como uma introdução para a linguagem. O material é inspirado nesse curso aqui: http://www.cs.cf.ac.uk/Dave/C/ Para quem não participou da apresentação pode ser mais didático olhar o link.
Those are the slides (pt_BR) used to give a small overview about Haskell before starting the coding dojo at Liferay Recife. Our coding dojo used the word-wrapping kata (http://codingdojo.org/kata/WordWrap) and the results can be seen here: https://github.com/brandizzi/haskell-dojo-word-wrap
Este manual fornece informações sobre a linguagem C/C++. Ele contém três capítulos principais: Introdução, Elementos do Programa e Tipos de Dados e Declarações. O manual é de domínio público e pode ser copiado e distribuído livremente, incentivando contribuições para seu aprimoramento.
1. O documento descreve operações básicas em Python como variáveis, entrada e saída de dados, e estruturas condicionais IF.
2. Variáveis armazenam valores e tipos de dados como inteiros, floats e strings. Comandos como print exibem saídas e input permitem entrada de dados do usuário.
3. Estruturas IF executam blocos de código condicionalmente dependendo de expressões booleanas, permitindo diferentes fluxos de execução.
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
O documento apresenta uma introdução ao Python, abordando tópicos como:
- Blocos de código por indentação
- Tipos de dados básicos como números, strings, listas e dicionários
- Operadores e funções com esses tipos de dados
- Listas comprehensions para gerar listas de forma concisa
O documento descreve os tipos primitivos em Java, incluindo seus tamanhos e faixas de valores. Também discute literais, conversões entre tipos, operadores aritméticos e bitwise.
Este documento apresenta uma aula sobre Python, abordando: 1) revisão dos conceitos básicos da linguagem; 2) exemplo de programa que calcula a média de notas de alunos; 3) uso de funções como input e convertendo strings para números; 4) desafio da aula anterior para ordenar nomes digitados.
Este documento fornece uma introdução ao framework Ruby on Rails para desenvolvimento de web games, cobrindo tópicos como:
1) Uma breve introdução a linguagem Ruby;
2) Explicação das principais classes e estruturas de dados como Integer, String, Array, Hash;
3) Demonstração de operadores, fluxo de controle e convenções de nomenclatura;
4) Discussão sobre o padrão MVC usado no Rails e como ele se aplica aos modelos, views e controllers.
Este documento apresenta os fundamentos da linguagem Java, incluindo: 1) Uma introdução à linguagem Java e seus tipos primitivos; 2) Estruturas de controle como if/else e switch/case; 3) Estruturas de repetição como for e while. O objetivo é fornecer uma revisão geral dos conceitos básicos da programação em Java.
Python apresenta conceitos fundamentais da linguagem como tipos de dados, controle de fluxo, funções, classes e módulos. O documento também discute quem usa Python e suas principais características como tipagem dinâmica e orientação a objetos.
Este documento fornece instruções para implementar um compilador dividido em 4 etapas: 1) Análise léxica e sintática com inserção na tabela de símbolos, 2) Geração de código intermediário, 3) Otimizações simples, 4) Geração de código assembly. A análise léxica reconhece tokens como palavras-chave e operadores, enquanto a análise sintática define regras gramaticais. Um conflito de precedência no if/else é resolvido atribuindo maior precedência
Este documento apresenta os principais conceitos da linguagem de programação Python em menos de 10 minutos, incluindo tipos de dados, variáveis, expressões, estruturas de controle, funções, classes, objetos e um exemplo de programa.
O documento apresenta uma introdução à linguagem de programação Ruby, descrevendo sua história desde a criação em 1993, características como variáveis, métodos, classes, módulos e estruturas de controle, e exemplos de código.
O documento apresenta os fundamentos da linguagem Java, incluindo tipos de dados, declaração de variáveis, estruturas de controle como if/else e switch/case, e estruturas de repetição como for, while e do/while. O objetivo é fornecer uma revisão geral dos conceitos básicos da programação em Java.
1. O documento discute boas práticas de programação como indentação correta, nomes consistentes e comentários.
2. É recomendado comentar o código de uma forma que ajude a compreensão, mas evitar comentários desnecessários.
3. A apresentação também aborda padrões de codificação, princípios como DRY (Don't Repeat Yourself) e YAGNI (You aren't gonna need it), além de evitar muitos níveis de indentação e linhas muito longas.
JavaScript é a linguagem do browser e mais popular do mundo. Foi criada em 1995 para o Netscape e adotada pela Microsoft em 1996. Apesar de sua má fama inicial devido a problemas como variáveis globais e parseInt, JavaScript possui "partes boas" como funções como valores, objetos dinâmicos e JSON que a tornaram uma linguagem importante.
O documento discute conceitos fundamentais de orientação a objetos em Python, incluindo:
1) Objetos Python possuem atributos (dados) e métodos (comportamentos);
2) Classes definem tipos de objetos com atributos e métodos comuns;
3) Instâncias de classes são objetos concretos que herdam atributos e métodos da classe.
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
O documento apresenta uma introdução ao workshop de Python realizado na IEEE Week '17. Apresenta brevemente conceitos fundamentais da linguagem como variáveis, funções, listas, dicionários e operações com strings. Explica também como ler e processar dados de ficheiros e da internet usando bibliotecas como urllib e json.
Esse material tem o objetivo de ser uma introdução as principais características da linguagem Python, tais como sintaxe básica, tipos de dados, operadores, estrutura condicional, estrutura de repetição e orientação a objetos. Após a introdução a linguagem, o Django é apresentado de maneira pratica, desenvolvendo um CRUD para exemplificar suas principais características e vantagens, esse CRUD é feito passo a passo e após seu termino é feito uma introdução básica aos recursos do Admin do Django.
O documento fornece uma introdução à linguagem de programação Java, descrevendo seus principais conceitos como identificadores, tipos de dados, operadores, declaração de variáveis, conversão de tipos, entrada de dados e exercícios de exemplo.
O documento resume uma assembleia com estudantes de engenharia da computação sobre assuntos acadêmicos. Aborda a estrutura da UFC e do curso, ingresso e custos, oportunidades de bolsas, sistemas institucionais, TCC, estágios, atividades complementares, Enade e direitos e deveres dos estudantes.
Este documento discute o tópico de programação lógica em Prolog. Ele fornece uma introdução aos principais conceitos como fatos e regras, operadores, estruturas, recursividade e listas. O documento também discute como iniciar um programa Prolog e usar recursividade para processar listas de maneira eficiente.
O documento discute técnicas de programação orientada a objetos, incluindo polimorfismo, sobrecarga e herança múltipla. Aborda conceitos como polimorfismo de inclusão, redefinição de métodos e exemplos de sobrecarga de métodos construtores e operadores.
1) O documento discute expressões e atribuições em linguagens de programação, incluindo precedência e associatividade de operadores, sobrecarga de operadores, conversões de tipo e diferentes formas de atribuição.
2) É explicado que expressões são fundamentais para especificar computações e que atribuições são essenciais para alterar valores de variáveis.
3) São descritas regras gerais para avaliação de expressões aritméticas, relacionais e booleanas, assim como a avaliação curto-circuito e atribuição de modo misto.
Greenfoot é uma ferramenta educacional para ensinar programação orientada a objetos usando cenários visuais. Ele permite que estudantes criem aplicações gráficas em Java e experimentem conceitos de programação de forma engajada e concreta. Greenfoot fornece um ambiente de desenvolvimento baseado no BlueJ com recursos como classes World e Actor, controles de execução e editor de classes.
O documento discute conceitos de programação como variáveis dinâmicas, abstração e recursividade. Ele introduz tópicos como sistemas analógicos versus digitais, computadores, software, linguagens de programação e compiladores. Também explica variáveis dinâmicas versus estáticas, alocação dinâmica de memória, estruturas de dados dinâmicas e ponteiros. Por fim, aborda abstração, tipos abstratos de dados, interfaces, classes e métodos abstratos.
O documento introduz conceitos básicos de interface gráfica em Java, incluindo componentes GUI como JLabel, JButton e JTextField, tratamento de eventos, layouts de componentes e caixas de diálogo.
O documento discute diferentes tipos de dados, incluindo primitivos como inteiros e caracteres, e tipos definidos pelo usuário como matrizes e registros. Ele explica como cada tipo é representado e operado em linguagens de programação, além de questões de projeto relacionadas a cada tipo.
O documento discute os conceitos de nomes, variáveis e escopo em linguagens de programação. Aborda tópicos como formas de nomes, tipos de variáveis, vinculação de atributos, compatibilidade de tipos e escopo estático.
Este documento discute sintaxe e semântica de linguagens de programação. Ele introduz os conceitos de sintaxe, que define as estruturas válidas de uma linguagem, e semântica, que define o significado dessas estruturas. Também apresenta métodos formais como gramáticas livres de contexto e notação de Backus-Naur para descrever formalmente a sintaxe de uma linguagem.
O documento descreve a evolução de linguagens de programação, desde as primeiras linguagens de máquina até linguagens modernas. Ele discute linguagens como FORTRAN, ALGOL, COBOL, LISP, BASIC, C, Java e Lua, destacando suas características e aplicações.
1. O documento apresenta uma introdução ao LaTeX, abordando o que é LaTeX, sua estrutura, ambientes e referências.
2. A seção sobre o que é LaTeX discute suas definições, vantagens e histórico.
3. O LaTeX é uma linguagem de editoração que permite produzir documentos com aparência profissional de forma fácil e prática.
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdfenpfilosofiaufu
Caderno de Resumos XVIII Encontro de Pesquisa em Filosofia da UFU, IX Encontro de Pós-Graduação em Filosofia da UFU e VII Encontro de Pesquisa em Filosofia no Ensino Médio
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24, Pr Henrique, EBD NA TV, Lições Bíblicas, 2º Trimestre de 2024, adultos, Tema, A CARREIRA QUE NOS ESTÁ PROPOSTA, O CAMINHO DA SALVAÇÃO, SANTIDADE E PERSEVERANÇA PARA CHEGAR AO CÉU, Coment Osiel Gomes, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, de Almeida Silva, tel-What, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique, https://ebdnatv.blogspot.com/
O Que é Um Ménage à Trois?
A sociedade contemporânea está passando por grandes mudanças comportamentais no âmbito da sexualidade humana, tendo inversão de valores indescritíveis, que assusta as famílias tradicionais instituídas na Palavra de Deus.
Slides Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 10, Central Gospel, A Batalha Do Armagedom, 1Tr24, Pr Henrique, EBD NA TV, Revista ano 11, nº 1, Revista Estudo Bíblico Jovens E Adultos, Central Gospel, 2º Trimestre de 2024, Professor, Tema, Os Grandes Temas Do Fim, Comentarista, Pr. Joá Caitano, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique
Folheto | Centro de Informação Europeia Jacques Delors (junho/2024)Centro Jacques Delors
Estrutura de apresentação:
- Apresentação do Centro de Informação Europeia Jacques Delors (CIEJD);
- Documentação;
- Informação;
- Atividade editorial;
- Atividades pedagógicas, formativas e conteúdos;
- O CIEJD Digital;
- Contactos.
Para mais informações, consulte o portal Eurocid:
- https://eurocid.mne.gov.pt/quem-somos
Autor: Centro de Informação Europeia Jacques Delors
Fonte: https://infoeuropa.mne.gov.pt/Nyron/Library/Catalog/winlibimg.aspx?doc=48197&img=9267
Versão em inglês [EN] também disponível em:
https://infoeuropa.mne.gov.pt/Nyron/Library/Catalog/winlibimg.aspx?doc=48197&img=9266
Data de conceção: setembro/2019.
Data de atualização: maio-junho 2024.
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Biblioteca UCS
A biblioteca abriga, em seu acervo de coleções especiais o terceiro volume da obra editada em Lisboa, em 1843. Sua exibe
detalhes dourados e vermelhos. A obra narra um romance de cavalaria, relatando a
vida e façanhas do cavaleiro Clarimundo,
que se torna Rei da Hungria e Imperador
de Constantinopla.
LIVRO MPARADIDATICO SOBRE BULLYING PARA TRABALHAR COM ALUNOS EM SALA DE AULA OU LEITURA EXTRA CLASSE, COM FOCO NUM PROBLEMA CRUCIAL E QUE ESTÁ TÃO PRESENTE NAS ESCOLAS BRASILEIRAS. OS ALUNOS PODEM LER EM SALA DE AULA. MATERIAL EXCELENTE PARA SER ADOTADO NAS ESCOLAS
2. 0. Sumário
Editor WinHugs
Nomes
Avaliação de funções
Definições dos tipos das funções
Associatividade
Tipos de Dados
Escopo
Definições Locais
Tratamento de Exceções
Prova de Programas
3. 1. Editor WinHugs
:? – comando Help (o princípio de tudo)
:? 2 + 3 <enter>
5
:? (1 * 6) == (3 ‘div’ 5) <enter>
False
:? maximo (quadrado 2) 1 <enter>
4
Palavras reservadas:
case else infix module type
class hiding infixl of where
data if infixr renaming
default import instance then
deriving in let to
4. 1. Editor WinHugs (exemplo.hs)
{-##############################################
exemplo.hs
Este arquivo eh um exemplo de um arquivo .hs. Os programas aqui
mostrados podem ser conseguidos na pagina de Haskell:
http://www.haskell.org que contem links importantes para quem
quer fazer parte de listas de usuarios de Haskell em todo mundo.
###############################################-}
resposta :: Int -- Uma constante inteira
resposta = 42
novalinha :: Char
novalinha = ’n’
sim :: Bool
sim = True
5. 1. Editor WinHugs (exemplo.hs)
maior :: Bool
maior = (resposta > 71)
quadrado :: Int -> Int
quadrado x = x*x
todosIguais :: Int -> Int -> Int -> Bool
todosIguais n m p = (n == m) && (m == p)
{-##########################-}
6. 1. Editor WinHugs
Principais comandos de Hugs
Comando Ação realizada
:? Aciona o help
:e Chama o script atual
:e exemplo.hs Edita o arquivo exemplo.hs
:l exemplo.hs Carrega o script exemplo.hs e limpa outros arquivos carregados
:a exemplo.hs Carrega o script exemplo.hs sem limpar os outros arquivos
:q Termina a sessão
Ver Prelude.hs;
Roteiro:
◦ Criar código-fonte: *.hs
◦ Carregar no WinHugs (:l ou :load)
◦ Executar suas funções
7. 1. Editor WinHugs
Comentários no código:
◦ com “- -”, que representa um comentário até o final da linha
corrente;
◦ ou com os símbolos “{-” e “-}” envolvendo todo o texto a se
tornar um comentário, que podem englobar até várias linhas
Uma função, em Haskell, pode ser representada
graficamente por uma caixa que recebe um ou mais
parâmetros como entrada, processa estes
parâmetros e constrói um resultado que é único.
A aplicação de uma função consiste no processo se
colocar os parâmetros na função.
resultado
parâmetro(s) função
8. 2. Nomes
Os nomes em Haskell são sensíveis a caracteres
◦ as letras maiúsculas são distintas das letras minúsculas.
Os nomes, também chamados de identificadores, devem
ser iniciados
◦ sempre por uma letra maiúscula, se for um tipo,
◦ ou minúscula, se for uma variável ou o nome de alguma função.
Estes nomes são seguidos, opcionalmente, por uma seqüência
de letras maiúsculas ou minúsculas, dígitos, sublinhado ou
acentos agudos.
As palavras reservadas da linguagem são sempre escritas em
letras minúsculas.
type Par = (Int, Int)
somaAmbos :: Par -> Int
somaAmbos (primeiro, segundo) = primeiro + segundo
9. 3. Avaliação de funções
leftmost-outermost
avaliação preguiçosa (lazy evaluation)
◦ só avalia uma expressão se ela for realmente
necessária e no máximo uma vez (avaliação
curto-circuito).
Testar:
todosIguais (quadrado 3) resposta (quadrado 2)
11. 4. Definições dos tipos das funções
Um tipo é uma coleção de valores onde todos eles têm as mesmas
características.
◦ Por exemplo, os números inteiros, os quadros, os caracteres, os strings de
caracteres, etc.
Em Haskell, se incentiva que todos os parâmetros de entrada e a
saída tenham seus tipos explicitados pelo programador como uma
forma de facilitar a checagem de tipos e de evitar muitos erros de
programação.
◦ No entanto, os tipos podem também ser inferidos a partir das definições das
funções.
+ :: Int -> Int -> Int e
escala :: Quadro -> Int -> Quadro
Int Int
Int +
Quadro Quadro
escala
Int
13. 5.1. Testes
eZero :: Int -> Bool
eZero 0 = True
eZero _ = False
fat :: Int -> Int
fat 0 = 1
fat n = n * fat (n -1)
14. 6. Tipos de dados
Admite:
◦ tipos primitivos e;
◦ tipos estruturados;
tipos definidos pelo usuário a partir de outros
tipos.
Os tipos primitivos:
◦ inteiro (Int ou Integer), booleano (Bool),
caractere (Char), cadeia de caracteres
(String), ponto flutuante (Float ou Double)
e o tipo lista.
15. 6.1. Tipo Inteiro
Os valores do tipo Integer são representados com o dobro da
quantidade de bits necessários para representar os valores do tipo
Int.
Operadores aritméticos para valores dos tipos
+, * adição e multiplicação
ˆ exponenciação
- subtração (infixa) e inversor de sinal (prefixa)
div divisão inteira (prefixa), ou ‘div‘ (infixa)
mod módulo (prefixa), ou ‘mod‘ (infixa)
abs valor absoluto de um inteiro
negate troca o sinal de um inteiro
Operadores relacionais: Int −> Int −> Bool
>, >=, ==, / =, <=, <
16. 6.1. Tipo Inteiro
Exemplo: série de fibonacci
0, 1, 1, 2, 3, 5, 8, 13, ...
fibonacci :: Int -> Int
fibonacci 1 = 0
fibonacci 2 = 1
fibonacci n = fibonacci(n-1) + fibonacci(n-2)
mdc :: Int -> Int -> Int
mdc n m
|m == n = n
|m > n = mdc m n
|otherwise = mdc (n - m) m
17. 6.2. Tipo Bool
Os únicos valores booleanos são True e False
Função Nome Tipo
&& and && :: Bool − > Bool − > Bool
|| or || :: Bool − > Bool − > Bool
not inversor not :: Bool − > Bool
A função Ou exclusivo
exOr :: Bool -> Bool -> Bool
exOr True x = not x
exOr False x = x
18. 6.3. O tipo caractere
São literais escritos entre aspas simples.
Caracteres especiais para utilizações específicas
‘t’ tabulação ‘” aspas simples
‘n’ nova linha ‘”’ aspas duplas
‘’ uma barra invertida ‘34’ ?
funções pré-definidas em Haskell feitas para
converter caracteres em números e vice-versa.
◦ toEnum :: Int − > Char
◦ fromEnum :: Char − > Int
19. 6.4. O tipo cadeia de caracteres
Os criadores de Haskell admitiram duas
formas para este tipo:
◦ É um tipo predefinido;
podem ser escritos entre aspas duplas
“Constantino”
◦ Ou pode ser considerado como uma lista de
caracteres
Descrita como type String = [Char]
usando a notação de lista de caracteres (entre aspas
simples).
[’C’, ’o’, ’n’, ’s’, ’t’, ’a’, ’n’, ’t’, ’i’, ’n’, ’o’].
20. 6.4. O tipo cadeia de caracteres
Exemplos:
◦ “baleia”− > baleia
◦ −>
◦ “99a116”− > cat
◦ “jeri”++ “qua”++ “quara”− > jeriquaquara
Exercício:
◦ Defina uma função charToName :: Char − > Int que converte
um dígito em seu valor (por exemplo, ‘8’ em 8). O valor de um
caractere não dígito deve ser 0 (zero).
21. 6.5. O tipo ponto flutuante
Os valores do tipo ponto flutuante (números reais) pertencem aos
tipos Float ou Double;
A diferenças entre os valores destes tipos se verificam na
quantidade de bits necessários para representá-los.
22. 6.6. Os tipos de dados estruturados
Os tipos estruturados são construídos a partir
de outros tipos, sejam eles primitivos ou
estruturados.
Tipo produto cartesiano:
◦ representado em Haskell pelas tuplas;
◦ representado registros ou estruturas em linguagens
imperativas
◦ o tipo (t1, t2, ..., tn) consiste de tuplas de valores (v1,
v2, ..., vn) onde v1 :: t1, v2 :: t2, ..., vn :: tn
23. 6.6. Os tipos de dados estruturados
Exemplo:
◦ type Pessoa = (String, String, Int)
◦ maria :: Pessoa
◦ maria = ("Maria das Dores", "225-0000", 22)
◦ intP :: (Int, Int)
◦ intP = (35, 45)
◦ somaPar :: (Int, Int) -> Int
◦ somaPar (x, y) = x + y
◦ shift :: ((Int, Int), Int) -> (Int, (Int, Int))
◦ shift ((a,b),c) = (a, (b,c))
24. 6.6. Os tipos de dados estruturados
Mais exemplos:
◦ nome :: Pessoa -> String
◦ fone :: Pessoa -> String
◦ idade :: Pessoa -> Int
◦ nome (n, p, a) = n
◦ fone (n, p, a) = p
◦ idade (n, p, a) = a
◦ somaPar :: (Int, Int) -> Int
Requer um argumento: tupla
◦ somaPar (a, b) = a + b
Cuidado, são diferentes!!!
◦ somaDois :: Int -> Int -> Int
◦ somaDois a b = a + b Requer dois argumentos
25. 7. Escopo
O escopo de uma definição é a parte de um programa
na qual ela é visível e portanto pode ser usada.
Em Haskell, o escopo das definições é todo o script.
ehImpar, ehPar :: Int -> Bool
ehImpar 0 = False
ehImpar n = ehPar (n-1)
ehPar 0 = True
ehPar n = ehImpar (n-1)
26. 8. Definições Locais
Através de palavras reservadas: where, let, in, if, then,
else, ...
somaQuadrados :: Int -> Int -> Int
somaQuadrados n m = quadN + quadM
where
quadN = n * n
quadM = m * m
let x = 3 + 2; y = 5 - 1 in x^2 + 2*x*y - y
27. 8. Definições Locais
As definições locais são visíveis apenas na equação onde elas
foram declaradas. As variáveis que aparecem do lado
esquerdo também podem ser usadas em definições locais.
maxq :: Int -> Int -> Int
maxq x y
|sqx > sqy = sqx
|otherwise = sqy
where
sqx = sq x
sqy = sq y
sq :: Int -> Int
sq z = z * z
28. 8. Definições Locais
As definições locais podem ser usadas antes que elas sejam
definidas e também podem ser usadas em resultados, em guardas
ou em outras definições locais.
maxThreeOccurs :: Int -> Int -> Int -> (Int, Int)
maxThreeOccurs n m p = (max, eqCount)
where
max = maxiThree n m p
eqCount = equalCount max n m p
maxiThree :: Int -> Int -> Int -> Int
maxiThree a b c = maximo (maximo (a, b), c)
equalCount :: Int -> Int -> Int -> Int -> Int
equalCount val n m p equalCount val n m p
= isN + isM + isP = isval n + isval m + isval p
where where
isN = if n == val then 1 else 0 isval :: Int − > Int
isM = if m == val then 1 else 0 isval x = if x == val then 1 else 0
isP = if p == val then 1 else 0
29. 8.1 Cálculo
Um exemplo bastante conhecido é o de encontrar as
raízes reais de uma equação do segundo grau. Neste
caso teremos como entrada a equação a * xˆ2 + b * x +
c = 0.
Para construirmos esta solução, a saída será a string “A
equação 1.0 * x^2 + 5.0 * x + 6.0= 0.0 tem duas raízes
reais e distintas: -2.0 e -3.0”.
Para isto vamos construir duas funções, sendo uma para
o caso da função ter duas raízes reais e distintas e a
outra para o caso dela ter duas raízes reais e iguais.
30. 8.1 Cálculo
umaRaiz :: Float -> Float -> Float -> Float
umaRaiz a b c = -b / (2.0 * a)
duasRaizes :: Float -> Float -> Float -> (Float, Float)
duasRaizes a b c = (d + e, d - e)
where
d = -b/(2.0*a)
e = sqrt (b^2 - 4.0*a*c)/(2.0*a)
saida :: Float -> Float -> Float -> String
saida a b c = cabecalho a b c ++ raizes a b c
31. 8.1 Cálculo
cabecalho :: Float -> Float -> Float -> String
cabecalho a b c = "A equacao nnt"++ show a ++ "*x^2 + " ++
show b ++ "*x + " ++ show c ++ " = 0.0" ++ "nntem "
raizes:: Float -> Float -> Float -> String
raizes a b c
| b^2 > 4.0*a*c = "duas raizes reais e distintas: " ++ show f ++ "
e " ++ show s
| b^2 == 4.0*a*c = "duas raizes reais e iguais: " ++ show
(umaRaiz a b c)
| otherwise = "nenhuma raiz real "
where (f, s) = duasRaizes a b c
32. 9. Tratamento de Exceções
O tratamento de exceções é uma forma de se programar
que previne a ocorrência de erros devido a entradas não
previstas
◦ ao tempo em que indica quais as providências que o computador deve
tomar no caso dessas entradas ocorrerem
◦ sem ter que necessariamente abortar o programa ou deixar que ele
entre em loops infinitos até extinguir toda a memória.
No caso da equação do segundo grau, quando a entrada para
o coeficiente a for zero, não será possível a divisão de
qualquer número por ele.
umaRaiz a b c
|(a /= 0.0) = -b/ (2.0 * a)
|otherwise = error "umaRaiz chamada com a == 0"
33. 10. Prova de Programas
Uma prova é uma argumentação lógica ou matemática para
verificar se alguma premissa é ou não válida em quaisquer
circunstâncias.
Este tema tem importância fundamental na construção de
programas, uma vez que deve-se ter a garantia de que o
programa esteja correto e que ele resolva exatamente o problema
para o qual foi codificado.
No entanto, existe um dilema: aversão pela prova de programas.
Por se acreditar que é uma técnica de fundamentação matemática
e, portanto, teórica.
A prova de programas em qualquer linguagem imperativa é
realmente tediosa, no entanto, ela se torna quase natural em
uma linguagem funcional como Haskell.
34. 10. Prova de Programas
No entanto, um cuidado deve ser tomado,
para que se evitem alguns erros de
avaliação. A avaliação de uma expressão
pode:
◦ parar e dar uma resposta (totalVendas 2).
O valor da expressão é definido, ou
◦ nunca parar (totalVendas (-2)).
O valor da expressão é indefinido.
Qual o valor de 0*e?
35. 10. Prova de Programas
Existem em Haskell três formas de se
formalizar provas: a prova direta, a prova
por casos e a prova por indução
matemática.
10.1. Prova Direta
◦ A verificação da prova direta é feita pela
aplicação das definições das funções.
36. 10.1. Prova Direta
troca :: (Int, Int) -> (Int, Int)
troca (a, b) = (b, a)
cicla, recicla :: (Int, Int, Int) -> (Int, Int, Int)
cicla (a, b, c) = (b, c, a)
recicla (a, b, c) = (c, a, b)
troca (troca (a, b)) = (a, b)?
cicla (recicla (a, b, c)) = recicla (cicla (a, b, c))?
37. 10.2. Prova por Casos
maximo :: Int -> Int -> Int
maximo n m
|n >= m = n
|otherwise = m
Assertiva: “Para quaisquer números n e m, maximo n m >= n”?.
Para quaisquer números m e n definidos, tem-se: m > n ou n >= m.
Então, se n >= m: maximo n m = n. Portanto, maximo n m >= n.
Se m > n: maxi n m = m e m > n. Portanto, maximo n m > n.
Logo, maximo n m >= n.
38. 10.3. Prova por Indução Matemática
10.3.1. Indução Matemática
◦ Sistemas de Provas -> Especificação Formal
◦ Para provar que uma propriedade P(n) é
válida para todo natural n, deve-se:
Caso base: Provar P(n), para n = 0.
Passo indutivo: Para n > 0, provar P(n), assumindo
que P(n-1) é válida.
fatorial 0 = 1 -- (fat 1)
fatorial n = n * fatorial (n - 1) -- (fat 2)
Como provar?
39. 10.3. Prova por Indução Matemática
Podemos agora provar a seguinte propriedade
dos naturais:
◦ P(n): fatorial n > 0, para todo natural n.
O esquema de prova é feito da seguinte forma:
◦ Caso base (P(0)): fatorial 0 = 1 (por fat 1) e 1 > 0. Logo
fatorial 0 > 0.
◦ Passo indutivo (P(n)): fatorial n = n * fatorial (n-1), (por
fat 2) admitindo-se que n>0. A hipótese de indução
informa que fatorial (n-1) > 0, ou seja, a propriedade P é
válida para n-1.
40. 10.3. Prova por Indução Matemática
Assim o fatorial de n é o produto de dois
fatores sendo ambos maiores que zero, ou
seja, temos >0 * >0. O produto de dois
números positivos é também positivo. Logo,
maior que 0.
Como a propriedade P é válida para o caso
base e para o passo indutivo, então ela é
válida para todo n natural. Esta última parte
é a conclusão da prova.
41. 10.3. Prova por Indução Matemática
10.3.2. Prova por Indução
◦ Enquanto uma indução formula provas para P(0), P(1), ..., a
definição recursiva constrói resultados para fatorial 0, fatorial 1,
....
◦ Esta forma de prova normalmente é aplicada à funções definidas
por recursão primitiva uma vez que representa tão somente um
processo de tradução;
◦ Guia de passos a ser seguido nos esquemas de provas por
indução em Haskell [Simon Thompson]
Estágio 0: escrever o objeto da prova em linguagem natural,
Estágio 1: escrever o objeto da prova em linguagem formal,
Estágio 2: escrever os sub-objetos da prova por indução:
P(0):
P(n), para todo n>0, assumindo P(n-1)
Estágio 3: Provar P(0)
Estágio 4: Provar P(n), para n>0, lembrando que deve e pode usar P(n-1)
42. 10.3. Prova por Indução Matemática
Exemplo:
power2 :: Int −> Int
power2 0 = 1 (1)
power2 r = 2 * power2 (r - 1) (2)
sumPowers :: Int − > Int
sumPowers 0 = 1 (3)
sumPowers r = sumPowers (r-1) + power2 r (4)
Provar que sumPowers n + 1 = power2 (n + 1).
43. 10.3. Prova por Indução Matemática
Estágio 0: provar que a soma das potências de 2 de 0 a n,
adicionada a 1 é igual a (n + 1)-ésima potência de 2.
Estágio 1: provar P(n): sumPowers n + 1 = power2 (n+1)
Estágio 2: sumPowers 0 + 1 = = power2 (0 + 1), para n = 0?
sumPowers n + 1 = = power2 (n + 1), para n > 0?,
assumindo que sumPowers (n - 1) + 1 = power2 n
Estágio 3: sumPowers 0 + 1 = 1 + 1 = 2 –por (3)
power2 (0 + 1) = 2 * power2 0 = 2 * 1 = 2 –por (2)
logo, a prova é válida para o caso base.
sumPowers n + 1 = sumPowers (n-1) + power2 n + 1 –por (4)
= sumPowers(n-1) + 1 + power2 n –pela comutatividade de +
= power2 n + power2 n –pela hip. de indução
= 2 * power2 n
= power2 (n+1) –por (2)
44. 10.3. Prova por Indução Matemática
Exercícios:
◦ Prove que, para todo número natural n,
fac (n + 1) >= power2 n.
◦ Prove que, para todo número natural n,
fib (n+1) >= power2 (n div 2).
45. Resumo
Em Haskell, uma função é uma operação que
transforma suas entradas em uma saída.
Um tipo é uma coleção de objetos similares.
Todo objeto deve ter um tipo claramente
definido.
As funções definidas em um programa em
Haskell podem ser usadas na avaliação de
expressões.
Tipos de dados primitivos e as tuplas.
Exceções e provas.