Introdução à Programação ETI e IGE ISCTE
Introdução à Programação Docentes Manuel Menezes de Sequeira Joaquim Esmerado Maria Albuquerque Luís Mota Responsável: Prof. Manuel Menezes de Sequeira Manuel.Sequeira@iscte.pt Gabinete D6.18 Cacifo 202 Telefone 217903909 Telemóvel 962337428 MSN: MMSequeira@hotmail.com Yahoo!: Manuel_Menezes_de_Sequeira Introdução à Programação 2003/2004
Introdução à Programação Informação http://iscte.pt/programacao/p1 http://br.groups.yahoo.com/group/ip-iscte ip-iscte@yahoogrupos.com.br Folhas teóricas Diapositivos das aula teóricas Resumos das aulas práticas Introdução à Programação 2003/2004
Introdução à Programação Avaliação Problema: 10% Em grupo Trabalho Final: 40% Entrega intermédia: avaliação negativa = -3 Entrega final: trabalho completo Em grupo, com discussão individual Frequência: 50% Individual, sem consulta: nota mínima 7 Grupos: 2 alunos Introdução à Programação 2003/2004
Introdução à Programação Objectivos 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
Introdução à Programação Programa (I) Programação procedimental 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
Introdução à Programação Programa (II) Programação baseada em objectos: 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
Introdução à Programação Metodologia 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
Introdução à programação Aula 1 Introdução à programação
Introdução à Programação O que é um computador? Máquina programável genérica Processador Memória rápida RAM e ROM Memória lenta disco rígido Introdução à Programação 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 Introdução à Programação 2003/2004
Introdução à Programação Algoritmo Método de resolução de problema Características: 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
Introdução à Programação 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) 0 < mdc(m, n), ou seja, 1 <= mdc(m, n) mdc(m, n) <= min(m, n) Introdução à Programação 2003/2004
Introdução à Programação Variáveis Nome Tipo m : inteiro 12 Valor Introdução à Programação 2003/2004
Introdução à Programação 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 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 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 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 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 5 Verdadeiro 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 5 Verdadeiro 6 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 5 Verdadeiro 6 7 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 5 Verdadeiro 6 7 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 5 Verdadeiro 6 7 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 5 Verdadeiro 6 7 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 5 Verdadeiro 6 7 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 5 Verdadeiro 6 7 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 5 Verdadeiro 6 7 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 5 Verdadeiro 6 7 Introdução à Programação 2003/2004
Diagrama de actividade Início da actividade Entroncamento Ramificação Transição [¬G] Guarda [G] passo Actividade Fim da actividade Introdução à Programação 2003/2004
Diagrama de actividade do mdc {0 m 0 n} [m < n] [m n] k m k n {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)} k k - 1 {mdc(m, n) k} Introdução à Programação 2003/2004
Introdução à Programação Linguagens Linguagem natural Português Ambígua e imprecisa Linguagem máquina Muito básica: usada pelos computadores Linguagem de programação de alto nível 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++ máquina Compilador de C++ Processador Introdução à Programação 2003/2004
Introdução à Programação 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; 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 Humano Desenvolvimento do algoritmo Concretização do algoritmo na linguagem de programação Tradução do programa para linguagem máquina Computador Execução do programa (e.g., mdc(131, 47)) Introdução à Programação 2003/2004
Introdução à Programação A reter... Programar Resolver problemas Algoritmo Receita finita, definida, com entradas, com saídas e eficaz Correcção de algoritmo Não se demonstra por testes Tipos de linguagens Naturais, de programação de alto nível, máquina, etc. Programa Concretização numa linguagem de programação Compilador Traduz programa de linguagem de programação para linguagem máquina Introdução à Programação 2003/2004
Introdução à Programação Aula 1: Sumário 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