programação ii licenciatura de ciências da computação original: docentes iscte padoca calado
TRANSCRIPT
Programação II
Licenciatura de Ciências da Computação
Original: Docentes ISCTE Padoca Calado
Aula 2
Introdução à linguagem Java
20083
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 LPBNTradução realizada através de programas:
compiladores
20084
O que é a linguagem Java?
Vai uma chávena?
20085
Linguagem de programação Java
cód-fonte:Ling. Java(p.e. Ola.java)
byte-codes: Linguagem para a máquina virtual
Java (JVM) (p.e. Ola.class)
Compiladorde Java (javac)
Interpretador de linguagemmáquina para a JVM
Processador
Máquina Virtual Java
20086
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)
20087
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!
20088
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
20089
Resolução de um Problema/Tarefa (exemplo de algoritmo para fazer um bolo)
Bolo
Misturar os ingredientes
Cozinhar o bolo
Nota: esquema adaptado de Fundamentos de Programação em Java 2 (Mendes e Marcelino, 2005, p. 7)
200810
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
200811
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
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.
200812
Algoritmo
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)
200813
Problema
Cálculo do máximo divisor comum de dois
inteiros positivos (m e n)
200814
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
não há nenhum número maior que k que divida m e n
200815
Propriedades conhecidas
0 < mdc(m, n), ou seja, 1 <= mdc(m, n)
mdc(m, n) <= min(m, n)
200816
Descrever a solução usando apenas … (pseudo-código)
Se … então …senão …
Enquanto … fazer:
…
Fazer ... até que:
...
Números e variáveis
Operações lógicas: e, ou
200817
Descrever a solução usando apenas …
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?)
200818
Algoritmo do MDC
1( no quadro )
2
3
4
5
6
7
8
200819
Algoritmo do MDC
1 ler m, n // ler 2 inteiros a partir do teclado
se m < n então2
k = m3
senão4
k = n5
enquanto m % k != 0 ou n % k != 0 fazer:6
k = k – 17
fim do enquanto
8 escrever k // enviar resultado para o monitor
200820
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 + "."); }}
200821
Comentários ao programa
1( no quadro )
2
3
4
5
6
7
8
200822
Traçado do programa em execução
( no projector )
2007/2008Introdução à Programação, Aula223
Traçado do programa em execução (exemplo)
200824
Problema
Cálculo do mínimo múltiplo comum de dois
inteiros positivos (m e n)
200825
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)
não há nenhum número menor que mmc que seja simultaneamente múltiplo de m e n
200826
Propriedades conhecidas
• mmc (m, n) >= m e mmc (m, n) > 0
• mmc (m, n) >= n e mmc (m, n) > 0
• mmc (m, n) >= max (m, n)
2007/200827
Algoritmo do MMC
1( no quadro )
2
3
4
5
6
7
8
200828
Algoritmo do MMC
ler m, n // ler 2 inteiros a partir do tecladoteclado
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 // enviar resultado para o monitormonitor
200829
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 mmcwhile (mmc % menor != 0) // Calcular mmc
mmc = mmc + maior;System.out.println("O m.m.c. entre " + m + " e " + n + " é " + mmc + ".");
}}
200830
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 + ".");}
}
200831
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 + ".");
}}
200832
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
Importa tentar encontrar a solução mais simples,
clara, estruturada, eficaz e eficiente para um dado problema
200833
Fases da resolução de problemas
Especificação [humano]
Desenvolvimento do algoritmo [humano]
Concretização do algoritmo na linguagem de progra-maçã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]
200834
A reter...
Java como linguagem de programação de alto nível
Algoritmo: receita finita, definida, com entradas, com
saídas e eficaz
Programa: concretização de algoritmo numa linguagem de programação
Compilador: traduz programa de linguagem de programação
para linguagem máquina
200835
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
200836
Aula 2: Sumário
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