Introdução à Programação ETI e IGE ISCTE Docentes Manuel Menezes de Sequeira Joaquim Esmerado Maria Albuquerque Luís Mota Responsável: 2 Prof. Manuel Menezes de Sequeira [email protected] Gabinete D6.18 Cacifo 202 Telefone 217903909 Telemóvel 962337428 MSN: [email protected] Yahoo!: Manuel_Menezes_de_Sequeira Introdução à Programação 2003/2004 Informação 3 http://iscte.pt/programacao/p1 http://br.groups.yahoo.com/group/ip-iscte [email protected] Folhas teóricas Diapositivos das aula teóricas Resumos das aulas práticas Introdução à Programação 2003/2004 Avaliação Problema: 10% Trabalho Final: 40% 4 Entrega intermédia: avaliação negativa = -3 Entrega final: trabalho completo Em grupo, com discussão individual Frequência: 50% Em grupo Individual, sem consulta: nota mínima 7 Grupos: 2 alunos Introdução à Programação 2003/2004 Objectivos 5 Conhecer abordagens típicas de resolução de problemas Ser capaz de planear resolução de problemas, desenhando e estruturando programas Dominar ambiente de desenvolvimento e respectivas ferramentas Ter conhecimentos intermédios de C++ Introdução à Programação 2003/2004 Programa (I) Programação procedimental 6 Tipos, variáveis e constantes Modularização, abstracção e encapsulamento Rotinas Noções de programação por contrato: asserções Controlo de fluxo Desenvolvimento de ciclos Agregados Introdução à Programação 2003/2004 Programa (II) Programação baseada em objectos: 7 Tipos abstractos de dados Invariantes de classe Classes e categorias de acesso De novo modularização, abstracção e encapsulamento Introdução à Programação 2003/2004 Metodologia 8 Aulas teóricas (2 x 50m) Aulas laboratoriais (3 x 50m) Aulas de dúvidas Esclarecimento de dúvidas via correio electrónico Por vezes no canal #C++ do IRC Introdução à Programação 2003/2004 Aula 1 Introdução à programação O que é um computador? Máquina programável genérica Processador Memória rápida Memória lenta 10 Introdução à Programação RAM e ROM disco rígido 2003/2004 Arte de Resolver Problemas Diz-se que só se compreende realmente um assunto depois de o ter ensinado a alguém. Na realidade, só se compreende realmente um assunto depois de o ter ensinado a um computador. Donald E. Knuth 11 Introdução à Programação 2003/2004 Algoritmo Método de resolução de problema Características: 12 Finitude: tem de terminar Definitude: cada passo bem definido Entradas: zero ou mais, de conjunto bem definido Saídas: uma ou mais, dependem das entradas Eficácia: operações todas executáveis Introdução à Programação 2003/2004 Problema Cálculo do máximo divisor comum de dois inteiros positivos Entradas: m e n Saídas: k, tal que k = mdc(m, n) 13 0 < mdc(m, n), ou seja, 1 <= mdc(m, n) mdc(m, n) <= min(m, n) Introdução à Programação 2003/2004 Variáveis Nome Tipo m : inteiro 12 Valor 14 Introdução à Programação 2003/2004 Algoritmo do mdc 1 se m < n então 2 k <- m 3 senão 4 k <- n 5 enquanto m ÷ k <> 0 ou n ÷ k <> 0 faça-se: 6 k <- k – 1 7 fim do enquanto 8 15 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição 16 m n k m<n m ÷ k <> 0 n ÷ k <> 0 Introdução à Programação m ÷ k <> 0 ou n ÷ k <> 0 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 17 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 18 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 19 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 20 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 7 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 21 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 7 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 22 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 7 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 7 12 8 6 Falso Falso Verdadeiro Verdadeiro 23 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 7 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 7 12 8 6 Falso Falso Verdadeiro Verdadeiro 6 12 8 6 Falso Falso Verdadeiro Verdadeiro 24 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 7 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 7 12 8 6 Falso Falso Verdadeiro Verdadeiro 6 12 8 6 Falso Falso Verdadeiro Verdadeiro 7 12 8 5 Falso Verdadeiro Verdadeiro Verdadeiro 25 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 7 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 7 12 8 6 Falso Falso Verdadeiro Verdadeiro 6 12 8 6 Falso Falso Verdadeiro Verdadeiro 7 12 8 5 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 5 Falso Verdadeiro Verdadeiro Verdadeiro 26 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 7 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 7 12 8 6 Falso Falso Verdadeiro Verdadeiro 6 12 8 6 Falso Falso Verdadeiro Verdadeiro 7 12 8 5 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 5 Falso Verdadeiro Verdadeiro Verdadeiro 7 12 8 4 Falso Falso Falso Falso 27 Introdução à Programação 2003/2004 Traçado do algoritmo do mdc Transição m n k m<n m ÷ k <> 0 n ÷ k <> 0 m ÷ k <> 0 ou n ÷ k <> 0 1 12 8 ? Falso ? ? ? 4 12 8 ? Falso ? ? ? 5 12 8 8 Falso Verdadeiro Falso Verdadeiro 6 12 8 8 Falso Verdadeiro Falso Verdadeiro 7 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 7 Falso Verdadeiro Verdadeiro Verdadeiro 7 12 8 6 Falso Falso Verdadeiro Verdadeiro 6 12 8 6 Falso Falso Verdadeiro Verdadeiro 7 12 8 5 Falso Verdadeiro Verdadeiro Verdadeiro 6 12 8 5 Falso Verdadeiro Verdadeiro Verdadeiro 7 12 8 4 Falso Falso Falso Falso 8 12 8 4 Falso Falso Falso Falso 28 Introdução à Programação 2003/2004 Diagrama de actividade Início da actividade Entroncamento Transição Ramificação [¬G] Guarda [G] Actividade passo Fim da actividade 29 Introdução à Programação 2003/2004 Diagrama de actividade do mdc {0 m 0 n} [m < n] [m n] km kn {k = min(m, n)} {mdc(m, n) k} [m ÷ k = 0 n ÷ k = 0] {mdc(m, n) < k} [m ÷ k 0 n ÷ k 0] {k = mdc(m, n)} kk-1 {mdc(m, n) k} 30 Introdução à Programação 2003/2004 Linguagens Linguagem natural Linguagem máquina Muito básica: usada pelos computadores Linguagem de programação de alto nível 31 Português Ambígua e imprecisa Sem ambiguidades nem imprecisões Não tão penosa como linguagem máquina Introdução à Programação 2003/2004 Linguagem de programação C++ Linguagem C++ Compilador de C++ Linguagem máquina Processador 32 Introdução à Programação 2003/2004 Programa mdc em C++ #include <iostream> using namespace std; int main() { cout << "Introduza dois inteiros positivos: "; int m, n; cin >> m >> n; int k; if(m < n) k = m; else k = n; while(m % k != 0 or n % k != 0) --k; } 33 cout << "O máximo divisor comum de " << m << " e " << n << " é " << k << endl; Introdução à Programação 2003/2004 Fases da resolução de problemas Especificação Desenvolvimento do algoritmo Computador Execução do programa (e.g., mdc(131, 47)) 34 Humano Tradução do programa para linguagem máquina Humano Concretização do algoritmo na linguagem de programação Humano Computador Introdução à Programação 2003/2004 A reter... Programar Algoritmo Concretização numa linguagem de programação Compilador 35 Naturais, de programação de alto nível, máquina, etc. Programa Não se demonstra por testes Tipos de linguagens Receita finita, definida, com entradas, com saídas e eficaz Correcção de algoritmo Resolver problemas Traduz programa de linguagem de programação para linguagem máquina Introdução à Programação 2003/2004 Aula 1: Sumário 36 Computador como máquina programável Programação: arte de resolver problemas Conceito de algoritmo Conceitos de linguagens naturais, de programação e máquina Programa: concretização dum algoritmo Fases da resolução dum problema usando um computador Introdução à Programação 2003/2004