Академический Документы
Профессиональный Документы
Культура Документы
AULAS PRATICAS
Algoritmo
Durante o seu funcionamento o computador segue um programa, um conjunto de instruções bem definidas
que especificam exactamente o que tem de ser feito. Este conjunto de instruções é caracterizado
matematicamente como um algoritmo. Os algoritmos foram estudados muito antes do aparecimento dos
computadores modernos (por exemplo, para efectuar operações aritméticas com números decimais).
Um algoritmo pode ser definido como uma sequência finita de instruções bem definidas e não ambíguas, cada
uma das quais pode ser executada mecanicamente num período de tempo finito com uma quantidade de
esforço finita.
Um algoritmo está sempre associado com um dado objectivo, ou seja, com a solução de um dado problema. A
execução das instruções do algoritmo garante que o seu objectivo é atingido.
Exemplos informais de algoritmos
A descrição de sequências de acções para atingir objectivos tem um papel fundamental na nossa vida
quotidiana. Estamos constantemente a transmitir ou a seguir sequências de instruções, por exemplo, para
preencher impressos, para operar máquinas, para montar objectos, para nos deslocarmos para certo local, etc.
Características de um algoritmo
Existem inúmeros exemplos de algoritmos que utilizamos na nossa vida quotidiana (instruções para fazer uma
chamada telefónica, para procurarmos palavras em dicionários, etc.). Todos eles correspondem a sequências
de passos finitas de instruções que devem ser seguidas de modo a atingir um determinado objectivo.
No entanto, nem todas as sequências de passos para atingir um dado objectivo podem ser consideradas um
algoritmo, pois todo o algoritmo deve possuir três características: ser rigoroso (para não haver ambiguidade,
cada uma das suas instruções tenha uma e só uma interpretação), ser eficaz e ter a garantia de terminar.
Fluxogramas
Um fluxograma é a representação gráfica de um algoritmo. O fluxograma tem a vantagem de permitir
visualizar rapidamente a estrutura de programação utilizada.
Num fluxograma utiliza-se um conjunto de blocos predefinidos, por exemplo:
Início/fim decisão
saída/entrada repetição
de dados
calculo conexão
Existem diferentes tipos de fluxogramas elementares:
Fluxograma linear
Fluxograma com ramificação:
Multi ramificação
repetitivo (ou cíclico)
Pseudo código
Para ilustrar a execução de um algoritmo utiliza-se o chamado pseudo código, que não é mais do que a
utilização de uma linguagem convencional, esquemática, que não necessita de respeitar os “rigores” da sintaxe
das verdadeiras linguagens de programação.
Fluxograma linear (Sequência simples)
1). Elaborar o algoritmo, desenhar o fluxograma e escrever o pseudo código para poder calcular e visualizar o
salário de um trabalhador, recebendo o valor da taxa por hora em vigor e a quantidade das horas trabalhadas
via teclado.
início Entrada: valores de taxa por hora e horas trabalhadas
Saida: valor do Salário
taxaHora,
horasTrab Pseudo código:
início;
ler (taxaHora, horasTrab);
sal taxaHora x horasTrab sal horasTrab x taxaHora;
visualizar (sal);
fim.
sal
fim
1
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
Exercícios: Elaborar o algoritmo, desenhar o fluxograma e escrever o pseudo código para resolução de
seguintes problemas:
1a) calcular o valor total a pagar (IVA incluído) na compra de N computadores de preço P com desconto de 5%
(os valores de N e P devem ser recebidos via teclado).
1b) determinar a quantidade de dias correspondentes a idade de utilizador. Converter para semanas e depois
para horas.
1c) ler uma temperatura em graus Celsius e apresentá-la em graus Fahrenheit (F = (9 x C + 160) : 5).
Fluxograma com ramificação
Selecção simples
2). Introduzir do teclado um número e visualizar uma mensagem somente se o número introduzido for igual a
zero.
início Entrada: um numero
Saida: uma mensagem se o numero for = 0
fim -
Selecção em alternativa
3).Recebendo do teclado os valores das três notas de testes de um aluno calcular a média final e visualizar o
comentário sobre o aluno (aprovado/ reprovado).
Pseudo código:
início início Início;
ler (t1,t2,t3);
med (t1+t2+t3)/3;
t1, t2, t3 t1, t2, t3 se med >= 9.5 então
visualizar (“O aluno é Aprovado”)
med (t1+t2+t3)/3 med (t1+t2+t3)/3 senão
visualizar (“O aluno é Reprovado”);
fim.
+ O aluno é + coment ”Aprovado”
med med
Aprovado
- -
se med >=9.5 então
O aluno é coment ”Reprovado”
coment “Aprovado”
Reprovado
senão
coment “Reprovado”;
coment
visualizar (coment);
fim
fim
Exercícios:
3a) Calcular o salário de um funcionário que recebe um valor fixo por mes, a menos que comete faltas. No
caso de quantidade de faltas ultrapassassem 5 o salário é descontado em 3%.
3b) Determinar o valor de prémio ganho pelo vendedor de cadernos. A meta de venda é de 50 cadernos
num dia, o preço de um caderno é de 15,00 Mt. No caso de conseguir vender mais o vendedor recebe
prémio que é uma décima parte da quantidade vendida. Visualizar ainda o valor total ganho.
3c) Calcular e visualizar o Y.
ln x , se x > 0
Y= e x
, se x ≤ 0
2x - |x + 4|
2
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
4). Considera o exercício sobre o aluno aprovado/ reprovado e adiciona a possibilidade de dispensa.
início Pseudo código:
início
ler (t1,t2,t3);
t1, t2, t3 med (t1+t2+t3)/3;
se med >=14.5 então
coment “Dispensado”
med (t1+t2+t3)/3 senão
se med >= 9.5 então
coment “Admitido”
- + coment ”Dispens” senão
med>=14.5
coment “Excluido”;
- + visualizar (coment);
med >=9.5
- fim.
coment coment
- +
”Reprovado” ”Aprovado”
coment fim
Exercícios:
5). Calcular o salário de um funcionário dependendo de quantidade de faltas cometidas durante um mes. No
caso de quantidade de faltas ultrapassassem 5 o salário é descontado em 3%, se a quantidade de faltas
ultrapassasse 10 o salário é descontado em 10% e se a quantidade de faltas ultrapassasse 15 visualizar uma
mensagem: “Está suspenso!”
6). Entre dois valores diferentes introduzidos determinar qual é o maior.
coment
fim
7). Entre dois valores introduzidos determinar o maior (prever a situação de valores serem iguais).
Pseudo código:
início
início
ler (x, y);
x, y se x = y então
coment “Os valores introduzidos são iguais”
senão
+ x=y + coment “são se x > y então
iguais”
coment “o 1º valor introduzido é o maior”
-
senão
coment “2º é o - + coment “1º é o coment “o 2º valor introduzido é o maior”;
x>y
maior” maior” visualizar (coment);
fim.
coment
fim
3
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
8). Entre três valores diferentes (não iguais entre si) determinar o menor.
fim
Exercícios:
9). Entre três valores diferentes introduzidos determinar o menor.
Fluxograma repetitivo. Uso de contador de repetições.
10). Supomos que pretende-se modificar o algoritmo do ex.1) de forma a permitir o processamento de salário
de mais do que um trabalhador. Neste caso temos que no fim do algoritmo anterior perguntar se utilizador
pretende introduzir dados sobre outro trabalhador. No caso “sim” devemos voltar para o bloco de leitura de
dados, no caso “não”, terminar.
início
início
cont 0
taxaHora, horasTrab
taxaHora horasTrab
sal sal
cont cont + 1
Continuar: +
- Continuar: +
fim
-
cont
fim-
Caso pretender saber o número de vezes que os dados dos outros trabalhadores foram introduzidos, temos
que adicionar mais uma variável. Esta variável (chamamos por contador) será inicializada com o valor zero
(cont ← 0) e na medida que os dados serão introduzidos, o contador vai incrementar em 1 (cont+1).
Exercício:
11). Modificar o ex.4 de modo a permitir calcular e visualizar as quantidades dos alunos aprovados,
dispensados e excluídos de uma turma de 80 alunos.
4
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
cont cont+1
fim
14). Ler do teclado 200 números inteiros (positivos e negativos) e determinar a quantidade de números
negativos.
fim
Exercícios:
16) Fazer o mesmo, mas com teste de condição no inicio.
17) Achar o produto dos primeiros N números ímpares (2 variantes: testando a condição no inicio e no fim).
18) Veja o ex.1). Modifique-o para poder calcular o salário mensal (são 22 dias) dum trabalhador.
5
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
Programas e algoritmos
Um algoritmo, escrito de modo a poder ser executado por um computador, tem o nome de programa. Uma
grande parte do curso é dedicada ao desenvolvimento de algoritmos, e à sua codificação utilizando uma
linguagem de programação (Turbo Pascal, por exemplo).
A constituição de um programa é semelhante à de uma receita. Ao escrevemos um programa, começamos por
descrevermos, numa linguagem apropriada, um algoritmo que efectua a manipulação desses objectos.
Nos nossos programas, iremos manipular valores de variáveis. As variáveis vão-se comportar de um modo
análogo aos ingredientes da receita. Tipicamente, o computador começará por receber certos valores para
algumas das variáveis, após o que efectuará operações sobre essas variáveis, possivelmente atribuindo
valores a novas variáveis e, finalmente, chegara ao conjunto de valores que constituem o resultado do
programa.
Abordagem do topo para a base
Uma das maiores dificuldades relacionadas com o desenvolvimento de programas complicados é o controle da
sua complexidade, ou seja, o modo de limitar o nível de detalhe que temos que considerar em determinado
instante. Um método largamente difundido para limitar a complexidade de um problema é chamado top-down
design (abordagem do topo para base). Ao desenvolver a solução de um problema utilizando o top-down
design, começamos por dividir esse problema em outros mais simples.
PROGRAMAÇÃO EM JAVA
Nossa tarefa não só aprender a Java, mas também melhorar sua habilidade no uso de computador como
ferramenta para solução de problemas. Este processo, geralmente chamado de programação, é composto de
duas tarefas:
• formular um procedimento logicamente coreto e sem ambiguidades, para resolver um dado problema;
• traduzir tal procedimento para uma forma aceitável pelo computador.
“Um programa de computador é, antes de mais nada, um solucionador de problemas”. Um modelo de solução
de problemas inclui sete passos a seguir:
1. Deixar claro o problema.
2. Identificar as entradas e saídas.
3. Desenvolver um procedimento para a solução do problema.
4. Verificar manualmente o procedimento e corrigi-lo, se necessário.
5. Codificar o algoritmo numa linguagem de programação(LP).
6. Executar o programa com dados de teste, depurando (processo de detectar e remover erros - debugging)
quando necessário.
7. Refinar e documentar o programa.
Observamos antes, que a programação consiste em duas tarefas: desenvolvimento de algoritmos e
codificação.
Um algoritmo é uma série de passos usados para resolver um problema. Você produz um algoritmo por meio
de uma analise sistemática do problema. O algoritmo é expresso em uma linguagem chamada pseudocódigo,
que é parecida com uma LP, mas que evita detalhes excessivos (semelhante ao inglês). Em seguida, você
codifica, ou seja, traduz o algoritmo para linguagem que computador entenda (Pascal, Fortran ou outra). Para
isso você deve reduzi-lo a uma sequência de operações primitivas.
19). Criar um programa que escreva no ecrã a frase “Ola!!! Como está?”
public class Ola
{ public static void main(String args[])
{ System.out.println("Ola!!! Como está?"); //escreve Ola!!!
}
}
O processo de escrita, compilação e execução de um programa através de linha de comando de MS-DOS:
• Escrever o programa em Java utilizando para isso um qualquer processador de texto;
• Salvar o programa num ficheiro com extensão .java e com nome igual ao nome do programa;
• A partir de prompt do MS-DOS (antes disso, adiciona linha path=c:\j2sdk1.4.2\bin no ficheiro
autoexec.bat, para isso se usa o comando edit c:\>edit autoexec.bat) chamar o compilador de Java
referindo o ficheiro a compilar:
C:\Pratica> javac Ola.java
O compilador compila o código existente no ficheiro. Se não houver erros de sintaxe no código, este
passo resulta na criação de ficheiro contendo a versão do programa em bytecode com extensão .class.
• Executar o programa com o comando:
C:\Pratica> java Ola
Este comando lança o intérprete de Java que traduz as instruções em bytecode para o código binário
do computador que esteja a ser utilizado e promove a respectiva execução.
6
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
VISUALIZAÇÃO NO ECRÃ
20). Utiliza o ambiente do Gel. Pretende-se escrever a frase “Tres...dois...um zero...Ola!!!” com cada
palavra em nova linha
public class TresDoisUm
{ public static void main(String args[])
{ System.out.println("Tres...");
System.out.println("Dois...");
System.out.println("Um...");
System.out.println("Zero...");
System.out.println("Ola!!!");
}
}
Pode-se fazer o mesmo utilizando uma única instrução System.out.println e parâmetros \n e \t
public class TresDoisUmPoema
{ public static void main(String args[])
{ System.out.println("Tres...\n\tDois...\n\t\tUm...\n\t\t\tZero...\nOla!!!");
}
}
21) Codifique em Java o pseudocódigo do primeiro exercício feito nas aulas práticas (sobre o cálculo
do salário dum trabalhador). Compile e execute.
public class SalUmTrab
{ public static void main (String args[])
{ //Declaração de constante
final byte TAXA_HORA = 30;
//Declaração de variáveis
byte horasTrab;
float salario;
//Lê horas trabalhadas
System.out.println("Intr. a quantidade de horas trabalhadas ");
horasTrab = Le.umByte();
//Calcula salario
salario = horasTrab * TAXA_HORA;
//Mostra salario calculado
System.out.println("O salario do trabalhador = "+ salario+ ",00 Mt." +
" que corresponde a " + horasTrab + " hora(s) trabalhadas");
}
}
22).Ao chegar a cantina, o cliente dirige-se ao computador para encomendar a sua refeição. Surge-lhe o
seguinte menu:
MENU
Hamburger 12 Mt.
CheeseBurger 14.5 Mt.
Batatas fritas 5 Mt.
Sumo 3.5 Mt.
De seguida tem que responder a um conjunto de perguntas para indicar as quantidades que deseja:
Hamburger ?
CheeseBurger ?
Batatas fritas ?
Sumo ?
Finalmente surge-lhe no ecrã a seguinte mensagem:
Hamburger CheeseBurg Batatas fr Sumo A pagar
2 0 1 2 36.0
Elabore um programa para simular o funcionamento destas operações.
public class Hamburger_tab//Cap3,ex.4, A.Mendes
{ public static void main (String args[])
{ //Declaração de CONSTANTES
final double P_HAM=12.0, P_CHEESE=14.5, P_BAT=5.0, P_SUMO=3.5;
//Declaração de variáveis
byte ham,cheese,bat,sumo;
double total;
//Visualização do Menu
System.out.println ("**** MENU ****");
System.out.println ("Hamburger "+P_HAM+" Mt.");
System.out.println ("CheeseBurger "+P_CHEESE+" Mt.");
System.out.println ("Batatas fritas "+P_BAT+" Mt.");
7
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
}
}
}
INSTRUÇÃO while
31). Recebendo um qualquer número positivo, devolver a soma dos seus dígitos. Por exemplo, se o
inteiro fornecido for 1234, o programa deverá devolver 10 (1+2+3+4).
Algoritmo: Para conseguir somar os dígitos, é necessário separá-los. Como o número de dígitos não é
conhecido, não é possível saber quantas vezes a operação de separação terá que ser realizada. Desta forma,
o processo de separação terá que ser repetido enquanto houver dígitos para somar (está é a condição).
Ler o número para a variável num
Inicializar a variável soma com zero
Enquanto num > 0 faz
digito = num % 10 (separa um dos dígitos e guarda na variável digito)
num = num / 10 (elimina o algarismo das unidades)
soma = soma + digito
Fim_Enquanto
Escrever o valor de soma
Em Java:
public class SomaDigitos //separa da direita
{ public static void main (String args[])
{ int num, digito, temp, soma = 0;
System.out.println("Intr. um numero maior que zero:");
num = Le.umInt();
temp = num;
while (num > 0)
{ digito = num % 10;
num = num / 10;
soma = soma + digito;
}
System.out.println("A soma dos digitos de "+temp+" = "+soma);
}
}
VALIDAÇÃO
No problema da soma dos dígitos, verificou-se que a solução não funcionava bem se o utilizador fornecesse
um número negativo em vez de um número positivo. Para evitar que o programa produza resultados
incorrectos, é conveniente verificar se o número fornecido está dentro da gama pretendida e, no caso negativo,
pedir ao utilizador que introduza um novo número. O algoritmo seguinte traduz este processo:
Pedir o número ao utilizador
Ler o número para a variável num
Se num < 0
Dá uma mensagem indicando que o número é incorrecto
Fim_Se
Se o número for incorrecto, deve repetir as instruções anteriores
Em Java:
public class SomaDigitosComValidacao
{ public static void main (String args[])
{ int num, digito, temp, soma = 0;
do //ciclo de validação
{ System.out.println("Intr. um numero maior que zero:");
num = Le.umInt();
temp = num;
if (num < 0)
System.out.println("Numero é negativo!");
} while (num < 0);
while (num > 0)
{ digito = num % 10;
num = num / 10;
soma = soma + digito;
}
System.out.println("A soma dos digitos de numero "+temp+" = "+soma);
}
}
32).ex 30 modificar acrescentando a validação
public class MesSwitchComValidacao
{ public static void main (String args[])
{ byte mes;
11
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
12
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
14
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
15
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
return x;
}
public static int[] gerirArmazenar(byte q)
{ int val[] = new int [q]; //declaracao local da referencia
for (byte i=0; i < q; i++)
val[i] = (int)(Math.random()*100); //gere numeros aleatorios e armazena no array
return val;
}
public static void visualValores(int v[]) //recebe refer. ao array
{ for (byte k=0; k < v.length; k++)
System.out.print(v[k]+", ");
System.out.println();
}
public static void contarParImpares (int x[])
{ byte contPar = 0, contImpar = 0;
for (byte j=0; j < x.length; j++)
if (x[j] % 2 == 0)
contPar++;
else
contImpar++;
System.out.println("na lista de "+x.length+" valores existem "+contPar+
" num.pares e "+contImpar+" num.impares");
}
}
47). Num array substituir todos os valores negativos pelos zeros e contar a quantidade de
substituições. Visualizar o array inicial e final.
public class ArrayPassParamSubstNegativos
{ public static void main (String []args)
{ int q = validarN();
int num[] = lerArmazenar(q);
System.out.println("Antes de substituir:");
visualizar(num);
System.out.println("a quantidade de substituicoes feitas= "+ substContar (num));
System.out.println("Depois de substituir:");
visualizar(num);
}
public static int validarN()
{ int quant;
do
{ System.out.println("introduza a quantidade");
quant=Le.umInt();
if(quant <= 0)
System.out.println("A quantidade nao e valida");
} while(quant <= 0);
return quant;
}
public static int[] lerArmazenar(int qua)
{ int z[]=new int [qua];
for (int i = 0; i < qua; i++)
{ System.out.println("introduza o"+(i+1)+"-o numero: ");
z[i]=Le.umInt();
}
return z;
}
public static int substContar(int x[])
{ for( int i = 0, cont = 0; i < x.length; i++)
if (x[i] < 0)
{ x[i]=0;
cont++;
}
return cont;
}
public static void visualizar(int y[])
{ for(int i=0;i<y.length;i++)
System.out.print (y[i] + ", ");
}
}
18
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
48).Multiplicar dois arrays de comprimento igual, criando um novo 3-o array. Conteúdo do 1-o são
números naturais: 1,2,3,.... Conteúdo do 2-o são múltiplos de 5.
public class ArrayParamMultArrays
{ public static void main (String args[])
{ int quant = lerQuantValidar();
int [] lista1,lista2,lista3 = new int [quant];
lista1 = criarAr1(quant);
lista2 = criarAr2(quant);
lista3 = multiplicar(lista1,lista2);
visualArray (lista1,1);
visualArray (lista2,2);
visualArray (lista3,3);
}
public static int lerQuantValidar()
{ int quant;
do
{ System.out.print("Introduza a quantidade de elementos pretendida: ");
quant=Le.umInt();
System.out.println(quant);
if (quant<=0)
System.out.println("a quantidade nao e valida");
} while(quant<=0);
return quant;
}
public static int[] criarAr1 (int q)
{ int v1[] = new int [q];
x[i] = Le.umChar();
System.out.println(x[i]);
}
return x;
}
public static void visualLista(char z[])
{ for (int j=0; j < z.length; j++)
System.out.print(z[j]+" ");
System.out.println();
}
public static void ordenacao (char x[])
{ for (int i = 0; i < x.length-1;i++)
trocaElementos(x,i,indiceMin(x, i, x.length-1));
}
public static void trocaElementos(char m[], int a, int b)
{ char aux = m[a];
m[a] = m[b];
m[b] = aux;
}
public static int indiceMin(char w[], int inicio, int fim)
{ int i_menor = inicio;
for (int k = inicio+1; k <= fim; k++)
if (w[i_menor] > w[k])
i_menor = k;
return i_menor;
}
}
CLASSES E OBJECTOS
50). Numa turma de N (<30) rapazes e meninas pretende-se saber qual é o mais alto de cada sexo.
Elabore a classe Aluno, com a informação que considerar necessária, para utilizar num programa que
determine o pretendido.
public class AlunoR_M
{ // Atributos
private char sexo; // Sexo do aluno
private double altura; // Altura do aluno
// Construtor , equivale a validacao de sexo
public AlunoR_M ()
{ sexo = validarS();
altura = validarAlt();
}
private char validarS()
{ char s;
do
{ System.out.print("Sexo? ");
s = Le.umChar();
System.out.println (s);
} while (s != 'M' && s != 'm' && s != 'F' && s != 'f');
return s;
}
private double validarAlt()
{ double alt;
do
{ System.out.print("Altura? ");
alt = Le.umDouble();
System.out.println (altura);
} while (alt < 0.0 || alt > 2.5);
return alt;
}
// Devolve o sexo do aluno
public char getSexo ()
{ return sexo; }
// Devolve a altura do aluno
public double getAltura ()
{ return altura; }
}
------------------------------------------------
20
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
21
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
22
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
55). Escreve uma aplicação em Java que permita achar a flat do tipo3 cujo aluguer é o mais barato e
que fica no andar não superior a 5º de todos os existentes na base de dados duma imobiliária. Elabore
a classe Flat com a informação sobre o tipo de flat (2-5), andar (1-15) e valor de aluguer em USD (100-
2000). Armazene toda a informação num array de objectos. Visualize no ecrã todos os dados
introduzidos e calculados. Valide todos os dados numéricos criando um único método para isso.
public class Flat
{ private int tipo;
private int andar;
private int precoAlug;
//construtor
public Flat()
{ System.out.println ("Introduza o tipo do flat (2-5): ");
tipo = validar(2,5);
System.out.println ("Introduza o andar(1-15): ");
andar = validar(1,15);
System.out.println ("Introduza o valor de aluguer USD(100-2000): ");
precoAlug = validar(100,2000);
}
private int validar(int a, int b)
{ int x;
do
{ x = Le.umInt();
if (x < a || x > b)
System.out.println("valor invalido!");
} while (x < a || x > b);
return x;
}
public int getTipo() { return tipo; }
public int getPreco() { return precoAlug; }
public int getAndar() { return andar; }
//acumula num String os dados de uma flat
public String toString ()
{ return tipo+"\t"+andar+"\t"+precoAlug; }
}
-------------------------------------------------------
public class FlatTodos
{ //Atributo
private Flat fl[];
//Construtor
public FlatTodos()
{ System.out.print("Quantos flat existem?: ");
int quant = validarQuant();
System.out.println(quant);
fl = new Flat[quant];
for (int i = 0; i < quant; i++)
fl[i] = new Flat();
}
private int validarQuant()
{ int q;
do
{ q = Le.umInt();
if (q <0)
System.out.println(" Quantidade negativa!");
} while (q <0);
return q;
}
private int precoAlugBarato()
{ int b=2000, indice=0;
for (int j = 0; j < fl.length; j++)
if (fl[j].getPreco()<b && fl[j].getTipo()==3 && fl[j].getAndar()<5)
{ b = fl[j].getPreco(); //guarda o preco mais barato
indice = j; //guarda o indice do objecto cujo aluger é menor
}
return indice;
}
public String infoFlatEscolhida()
{ int ind = precoAlugBarato();
23
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
ARRAY BIDIMENSIONAL
58) Achar a soma de valores da N- ma coluna, escolhida pelo utilizador num array X x Y
public class Array2SomaColunaNarrayXY
{ public static void main (String args [])
{ System.out.print (" Quantas linhas pretende: ");
byte linhas = validar();
System.out.print (" Quantas colunas pretende: ");
25
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
28
Elab. por engª Tatiana Kovalenko Fev-Jun 2007
Eng.Inf, 1ano Aulas Páticas Programação e Algoritmos 1
g.fillOval(-40,-40,80,80);
g.setColor(Color.white);
g.fillOval(MID-20,TOP,40,40);
g.fillOval(MID-35,TOP+35,70,50);
g.fillOval(MID-50,TOP+80,100,60);
g.setColor(Color.black);
g.fillOval(MID-10,TOP+10,5,5);
g.fillOval(MID+5,TOP+10,5,5);
if (i % 2 == 0)
{ g.drawArc(MID-10,TOP+20,20,10,180,180);
g.drawLine(MID-25,TOP+60,MID-50,TOP+40);
g.drawLine(MID+25,TOP+60,MID+55,TOP+60);
g.drawString("Ta frio!Que bom!",5,55);
}
else
{ g.drawArc(MID-10,TOP+20,20,10,0,180);
g.drawLine(MID-25,TOP+60,MID-50,TOP+60);
g.drawLine(MID+25,TOP+60,MID+55,TOP+40);
g.drawString("Esta calor! Vou derreter!",5,55);
}
i++;
g.drawLine(MID-20,TOP+5,MID+20,TOP+5);
g.fillRect(MID-15,TOP-20,30,25);
try
{ Thread.sleep(500);
} catch (Exception e) {}
g.clearRect(0, 0, getSize().width, getSize().height);
}
}
}
64). Rectângulo em movimento
import java.awt.*; //Cap6.2 Deitel
import java.applet.*;
public class ApplAnimRectMoveHoriz extends Applet
{ final int COMPRIMENTO = 30;
final int LARGURA = 20;
final int DX = 10;
public void paint (Graphics g)
{ int maxX = getSize().width; // Obtém dimensões do Applet
int maxY = getSize().height;
int x = 0;
boolean direcao = true;
while (true) { // Ciclo nunca termina
g.setColor (Color.black);
g.fillRect(x, (maxY-LARGURA)/2, COMPRIMENTO, LARGURA); // Desenha rectângulo
try // Espera
{ Thread.sleep (300);
} catch (Exception e) {}
g.clearRect(x, (maxY-LARGURA)/2, COMPRIMENTO, LARGURA); // Apaga rectângulo
if (direcao) // Verifica se chegou aos limites do Applet
{ x = x + DX;
if ((x + COMPRIMENTO) > maxX) // Sim, inverte deslocamento
{ x = x - DX;
direcao = false;
}
}
else // Sim, inverte deslocamento
{ x = x - DX;
if (x < 0)
{ x = x + DX;
direcao = true;
}
}
}
}
}
29
Elab. por engª Tatiana Kovalenko Fev-Jun 2007