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
Download

Document