Programação II Licenciatura de Ciências da Computação Original: Docentes ISCTE Padoca Calado Aula 2 Introdução à linguagem Java da Aula 1... Programar: resolver problemas de modo a obter soluções finitas, bem definidas e eficazes Tipos de linguagens: naturais, de programação de alto nível, máquina, etc. Necessidade de um meio de tradução: LPAN LPBN Tradução realizada através de programas: compiladores 3 2008 O que é a linguagem Java? Vai uma chávena? 4 2008 Linguagem de programação Java cód-fonte: Ling. Java Compilador de Java (javac) (p.e. Ola.java) byte-codes: Linguagem para a máquina virtual Java (JVM) (p.e. Ola.class) Máquina Virtual Java Processador 5 Interpretador de linguagem máquina para a JVM 2008 Criar, compilar e executar um programa em JAVA Nota: esquema retirado do livro Fundamentos de Programação em Java 2 (Mendes e Marcelino, 2005, p. 21) 6 2008 Exemplo de programa simples em Java // Benvindo.java: Este programa mostra no ecrã // a mensagem Benvindo ao JAVA! public class Benvindo { public static void main(String[] argumentos) { System.out.println(“Benvindo ao JAVA!"); } } Nota: a classe deve sempre ter o mesmo nome do ficheiro com o cód. fonte! 7 2008 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 8 2008 Resolução de um Problema/Tarefa (exemplo de algoritmo para fazer um bolo) Misturar os ingredientes Bolo Cozinhar o bolo Nota: esquema adaptado de Fundamentos de Programação em Java 2 (Mendes e Marcelino, 2005, p. 7) 9 2008 Programação de computadores Início da aprendizagem da programação Fundamental: • Desenvolver aptidões para criar soluções e para traduzir essas soluções em programas • Aptidões para escrita de programas contendo: • mecanismos de escolha de instruções • mecanismos de repetição de instruções • agregados (grupos) de dados relacionados 10 2008 Algoritmo Descreve como um dado problema é resolvido Apresenta-se essencialmente como: • Conjunto de acções a ser executado • A ordem pela qual essas acções são executadas 11 Ajudam o programador: Planificação do programa antes de o escrever (codificar) numa dada linguagem de programação Para o programador noviço, codificar directamente não é fantasticamente natural. 2008 Algoritmo 12 Método de resolução de um 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 (em tempo útil) 2008 Problema Cálculo do máximo divisor comum de dois inteiros positivos (m e n) 13 2008 Problema Cálculo do máximo divisor comum de dois inteiros positivos (m e n) Entradas: m e n Saídas: k, tal que k = mdc(m, n), i.e: m e n são divisíveis por k (o resto da divisão por k é zero), e 14 não há nenhum número maior que k que divida m e n 2008 Propriedades conhecidas 0 < mdc(m, n), ou seja, 1 <= mdc(m, n) mdc(m, n) <= min(m, n) 15 2008 Descrever a solução usando apenas … (pseudo-código) Se … então …senão … Enquanto … fazer: … Fazer ... até que: ... 16 Números e variáveis Operações lógicas: e, ou 2008 Descrever a solução usando apenas … 17 Operações lógico-aritméticas: x < y (x menor que y?), x + y (soma de x e y) x – y (subtracção de x e y) x / y (resultado da divisão de x por y) x * y (resultado da multiplicação de x por y) x % y (resto da divisão de x por y) x = y (x passa a ter o valor de y) x == y (x é igual a y?), x != y (x é diferente de y?) 2008 Algoritmo do MDC 1 ( no quadro ) 2 3 4 5 6 7 8 18 2008 Algoritmo do MDC 1 ler m, n // ler 2 inteiros a partir do teclado se m < n então 2 k=m 3 senão 4 k=n 5 enquanto m % k != 0 ou n % k != 0 fazer: 6 k=k–1 7 fim do enquanto 8 19 escrever k // enviar resultado para o monitor 2008 Programa MDC em Java import java.util.Scanner; public class CalculadorDoMDC { public static void main(String[] args) { Scanner teclado = new Scanner (System.in); System.out.print ("Introduza um inteiro positivo: "); int m = teclado.nextInt(); System.out.print("Introduza outro inteiro positivo: "); int n = teclado.nextInt(); int k = 0; if(m < n) k = m; else k = n; while(m % k != 0 || n % k != 0) --k; System.out.println("O mdc entre " + m + “ e " + n + " é " + k + "."); } } 20 2008 Comentários ao programa 1 ( no quadro ) 2 3 4 5 6 7 8 21 2008 Traçado do programa em execução ( no projector ) 22 2008 Traçado do programa em execução (exemplo) 23 Introdução à Programação, Aula2 2007/2008 Problema Cálculo do mínimo múltiplo comum de dois inteiros positivos (m e n) 24 2008 Problema Cálculo do mínimo múltiplo comum de dois inteiros positivos (m e n) Entradas: m e n Saídas: mmc, tal que mmc = mmc(m, n), i.e: mmc é múltiplo de m e de n (o resto da divisão de mmc pelo menor entre m e n é zero) 25 não há nenhum número menor que mmc que seja simultaneamente múltiplo de m e n 2008 Propriedades conhecidas 26 • mmc (m, n) >= m e mmc (m, n) > 0 • mmc (m, n) >= n e mmc (m, n) > 0 • mmc (m, n) >= max (m, n) 2008 Algoritmo do MMC 1 ( no quadro ) 2 3 4 5 6 7 8 27 2007/2008 Algoritmo do MMC ler m, n // ler 2 inteiros a partir do teclado se m > n então maior = m menor = n senão maior = n menor = m fim do se inicializar mmc = maior enquanto mmc % menor != 0 fazer: mmc = mmc + maior fim do enquanto escrever mmc 28 // enviar resultado para o monitor 2008 Programa MMC em Java (1) import java.util.Scanner; public class CalcMMC1 { public static void main (String args[]) { Scanner teclado = new Scanner (System. in); System.out.print ("Introduza um inteiro positivo: "); int n = teclado.nextInt(); System.out.print ("Introduza outro inteiro positivo: "); int m = teclado.nextInt(); int maior, menor, mmc; if (n < m) { // Calcular o maior e o menor entre m e n maior = m; menor = n; } else { maior = n; menor = m; } mmc = maior; // Inicializar mmc while (mmc % menor != 0) // Calcular mmc mmc = mmc + maior; System.out.println("O m.m.c. entre " + m + " e " + n + " é " + mmc + "."); } } 29 2008 Programa MMC em Java (2) import java.util.Scanner; public class CalcMMC2 { public static void main (String args[]) { (...) int mmc; /* Calcular o maior e o menor entre m e n * atribuir a m o maior valor e a n o menor * Inicializar mmc com o maior dos valores */ if (n < m) mmc = m; else { mmc = n; n = m; m = mmc; } // Calcular mmc while (mmc % n != 0) mmc = mmc + m; System.out.println("O m.m.c. entre " + m + " e " + n + " é " + mmc + "."); } } 30 2008 Programa MMC em Java (3) import java.util.Scanner; public class CalcMMC2 { public static void main (String args[]) { (...) int mmc; /* Calcular o maior e o menor entre m e n * atribuir a m o maior valor e a n o menor * Inicializar mmc com o maior dos valores */ if (m < n) { mmc = n; n = m; m = mmc; } mmc = m; // Calcular mmc while (mmc % n != 0) mmc = mmc + m; System.out.println("O m.m.c. entre " + m + " e " + n + " é " + mmc + "."); } } 31 2008 Algoritmos - optimização Não existe uma única forma de resolver um problema Não existe um algoritmo perfeito... mas Alguns algoritmos são mais perfeitos do que outros 32 Importa tentar encontrar a solução mais simples, clara, estruturada, eficaz e eficiente para um dado problema 2008 Fases da resolução de problemas 33 Especificação [humano] Desenvolvimento do algoritmo [humano] Concretização do algoritmo na linguagem de programação [humano] Tradução do programa para linguagem máquina [computador/compilador] Execução do programa para problema particular (e.g., mdc(131, 47)) [computador/JVM] 2008 A reter... Java como linguagem de programação de alto nível Algoritmo: receita finita, definida, com entradas, com saídas e eficaz 34 Programa: concretização de algoritmo numa linguagem de programação Compilador: traduz programa de linguagem de programação para linguagem máquina 2008 A ler... Capítulos 1 e 2 e secções 3.1 e 3.2 do livro: Y. Daniel Liang, "Introduction to Java Programming", 5ª Edição, Prentice-Hall, 2005. ISBN: 0-13-185721 - 5 35 2008 Aula 2: Sumário 36 Noções de algoritmo e de programa Programa: concretização de um algoritmo Descrição de um algoritmo: resolução através de pseudo-código Programação: arte de resolver problemas Fases da resolução dum problema usando um computador 2008