Você está na página 1de 17

1

Exerccios em Java
usando estruturas
de controle de fluxo
Sistemas Informticos I, 2005-2006
Slides_Java_3
Exerccio
Escreva um programa em Java que calcule a
soma dos nmeros pares entre 2 e 200.
(resultado=10100)
pubIic cIoss SumEvenInfegers{
pubIic sfofic void moin(Sfring[] orgs){
inf sum ~ 0,
for (inf i ~ Z, i ~ Z00, i ~i+Z) {
sum ~ sum+ i,
}
Sysfem.ouf.prinfIn("Sum: " + sum),
}
}
/Soluo
Exerccio Semelhante
Escreva um programa que leia valores
inteiros de um ficheiro e que no final do
programa imprima no crn a mdia dos
nmeros positivos.
O programa termina quando chegar ao final
do ficheiro.
Resoluo
imporf essenfioI.^,
cIoss gef_overoge{
pubIic sfofic void moin(Sfring[] orgs) {
inf voI, confodor~0,
inf somo~0,
doubIe medio,
FiIeIO f ~ new FiIeIO( "inpuf.fxf", FiIeIO.PEADIM0),
whiIe( l f.isEof()){
voI ~ f.reodInf(),
if(voI 0){
somo ~ somo + voI,
confodor ++,
}
}
medio ~ (doubIe)somo/confodor,
Sysfem.ouf.prinfIn("Medio dos voIores posifivos ~ "+ medio),
}
}
2
Exerccio
Determinar os mltiplos de 5, mas que no
sejam mltiplos de 3, entre 100 e 10000.
imporf essenfioI.^,
cIoss muIfipIos{
pubIic sfofic void moin(Sfring orgs[]){
Sysfem.ouf.prinfIn("Eis os numeros enfre I00 e I0000 que soo
muIfipIos de b mos noo soo de 3:"),
for(inf i ~I00, i ~ I0000, i++){
if((i 7 b ~~ 0)&&(i 7 3 l~ 0))
Sysfem.ouf.prinfIn(i+" "),
}
}
}
/Soluo Exerccio
Escreva um programa que represente um
quadrado de asteriscos. O tamanho do lado
definido pelo utilizador.
Exemplo (n=5):
*****
*****
*****
*****
*****
Soluo
imporf essenfioI.^,
cIoss Asferiscos {
pubIic sfofic void moin(Sfring[] orgs) {
inf Iodo,
Sysfem.ouf.prinf("QuoI o dimenso do quodrodo7 "),
Iodo ~ Ieyboord.reodInf(),
if (Iodo 0) {
for (inf i ~ I, i~ Iodo, i++) {
for (inf j ~ I, j ~Iodo, j++)
Sysfem.ouf.prinf("^"),
Sysfem.ouf.prinfIn(),
}
}
eIse
Sysfem.ouf.prinfIn("Por fovor, infrodu;o um voIor posifivol"),
}
}
Exerccio
Calcular o valor do saldo de um artigo, sabendo
que os descontos so feitos em funo do
preo e segundo a seguinte tabela:
Preo Desconto
P>10000 40%
5000 < P <= 10000 20%
2500 < P <= 5000 10%
outros 5%
3
Soluo
imporf essenfioI.^,
pubIic cIoss soIdo{
pubIic sfofic void moin(Sfring orgs[]){
inf p,
doubIe soIdo,
Sysfem.ouf.prinfIn("QuoI o preo do orfigo: "),
p ~ Ieyboord.reodInf(),
if(p I0000)
soIdo ~ p ^ 0.4,
eIse if(p b000)
soIdo ~ p ^ 0.Z,
eIse if(p Zb00)
soIdo ~ p ^ 0.I,
eIse
soIdo ~ p^0.0b,
Sysfem.ouf.prinfIn("Tero um soIdo de "+ soIdo + " euros"),
Sysfem.ouf.prinfIn("Cusfo finoI do orfigo ~ "+ (p-soIdo)),
}
}
Exerccio
Dados trs nmeros inteiros positivos:
Determinar se estes 3 nmeros podem ser os
comprimentos dos lados de um tringulo
rectngulo;
Determinar a soma dos seus quadrados;
Determinar o quadrado da sua soma;
Determinar a sua mdia aritmtica.
Soluo
imporf essenfioI.^,
pubIic cIoss numeros{
pubIic sfofic void moin(Sfring orgs[]){
inf o,b,c,
inf somo, somo_q,
Sysfem.ouf.prinfIn("VoIor de o~ "),
o ~ Ieyboord.reodInf(),
Sysfem.ouf.prinfIn("VoIor de b~ "),
b ~ Ieyboord.reodInf(),
Sysfem.ouf.prinfIn("VoIor de c~ "),
c ~ Ieyboord.reodInf(),
if(((o^o) ~~ (b^b + c^c)) || ((b^b) ~~ (o^o + c^c)) || ((c^c) ~~ (o^o + b^b)))
Sysfem.ouf.prinfIn("TrionguIo PecfonguIol"),
somo_q ~ o^o + b^b + c^c,
Sysfem.ouf.prinfIn("Somo dos quodrodos~ "+ somo_q),
somo ~ o+b+c,
Sysfem.ouf.prinfIn("Quodrodo do somo ~ "+ (somo^somo)),
Sysfem.ouf.prinfIn("Medio dos nmeros ~ "+ (somo/3.0)),
}
}
Exerccio
Escreva um programa em Java que apresente uma tabela no
crn onde a primeira coluna deve ter os graus de um ngulo
desde 0 a 360 (de 30 em 30). Na 2 coluna apresenta o seno
desse ngulo, na 3 coluna apresenta o coseno e na 4 coluna
apresenta a tangente.
Grau Seno Coseno Tangente
0 0.00 1.00 0.00
30 0.50 0.87 0.58
60 0.87 0.50 1.73
90 1.00 0.00 16331239353195370.00
120 0.87 -0.50 -1.73
150 0.50 -0.87 -0.58
180 0.00 -1.00 -0.00
...
4
Soluo
import java.text.*;
public class SinCos{
public static void main (String[] args){
DecimalFormat df = new DecimalFormat("0.00");
System.out.println("Grau\tSeno\tCoseno\tTangente\n");
for( int d=0; d <= 360; d +=30){
System.out.print( d + '\t');
System.out.print( df.format(Math.sin(d*(Math.PI/180))) + '\t');
System.out.print( df.format(Math.cos(d*(Math.PI/180)))+ '\t');
System.out.print( df.format(Math.tan(d*(Math.PI/180)))+ '\t');
System.out.println();
}
} // main method
} // SinCos class
Converte graus
para radianos
Exerccio
Escreva um programa que calcule qual o
menor e o maior de 10 nmeros inteiros
introduzidos pelo utilizador.
Exemplo:
8 23 45 2 56 3 7 12 38 43
Maior=56
Menor=2
Soluo
imporf essenfioI.^,
cIoss MoiormenorI0 {
pubIic sfofic void moin(Sfring[] orgs) {
inf num, moior, menor,
for (inf i~0,iI0,i++) {
Sysfem.ouf.prinf("Infrodu;o um n": "),
num ~ Ieyboord.reodInf(),
if (i ~~ 0) { //
moior ~ num,
menor ~ num,
}
// moior ~ Mofh.mox(moior,num),
// menor ~ Mofh.min(menor,num),
if (num menor)
menor~num,
if (num moior)
moior~num,
}
Sysfem.ouf.prinfIn("O moior n" infrodu;ido foi: " + moior),
Sysfem.ouf.prinfIn("O menor n" infrodu;ido foi: " + menor),
}
}
Exerccio
Escreva um programa que calcule e
apresente todos os divisores de um nmero.
Exemplo:
input = 12
divisores = 1, 2, 3, 4, 6, 12
5
Soluo
imporf essenfioI.^,
cIoss Divisores {
pubIic sfofic void moin(Sfring[] orgs) {
inf n, i,
Sysfem.ouf.prinf("Infrodu;o um nmero: "),
n ~ Ieyboord.reodInf(),
Sysfem.ouf.prinfIn("Os divisores de " + n + " so "),
for( i ~ I, i ~ n, i++ )
if( n 7 i ~~ 0 )
Sysfem.ouf.prinfIn(i),
}
}
Exerccio
Escreva um programa que leia 2 ns inteiros
e apresente a sua soma se ambos forem
pares, o seu produto se ambos forem
mpares ou o nmero mpar se um deles for
par e o outro mpar.
Exemplos:
input: x=4, y=8 ----- result = 12
input: x=3, y=9 ----- result = 27
input: x=4, y=11 ----- result = 11
Soluo
imporf essenfioI.^,
cIoss PuresImpures {
pubIic sfofic void moin(Sfring[] orgs) {
inf numI, numZ,
Sysfem.ouf.prinf("I" M": "),
numI ~ Ieyboord.reodInf(),
Sysfem.ouf.prinf("Z" M": "),
numZ ~ Ieyboord.reodInf(),
if (numI7Z~~0)
if (numZ7Z ~~ 0)
Sysfem.ouf.prinfIn("Ambos so pores. PesuIfodo: "+ (numI + numZ)),
eIse
Sysfem.ouf.prinfIn("I" e por, Z" e mpor. PesuIfodo: "+ numZ),
eIse
if (numZ7Z l~ 0)
Sysfem.ouf.prinfIn("Ambos so mpores. PesuIfodo: "+ numI^numZ),
eIse
Sysfem.ouf.prinfIn("I" e mpor, Z" e por. PesuIfodo: "+ numI),
}
}
Soluo b
imporf essenfioI.^,
cIoss PuresImpures {
pubIic sfofic void moin(Sfring[] orgs) {
inf numI, numZ,
Sysfem.ouf.prinf("I" M": "),
numI ~ Ieyboord.reodInf(),
Sysfem.ouf.prinf("Z" M": "),
numZ ~ Ieyboord.reodInf(),
if (numI7Z~~0)&&(numZ7Z ~~ 0)
Sysfem.ouf.prinfIn("Ambos so pores. PesuIfodo: "+ (numI + numZ)),
eIse if ((numI7Zl~0)&&(numZ7Z l~ 0)
Sysfem.ouf.prinfIn("Ambos so mpores. PesuIfodo: "+ numI^numZ),
eIse{ // um e por, oufro e impor,,,, quoI deIes e o impor...
if(numI l~ 0) // numI e o mpor
Sysfem.ouf.prinfIn(numI),
eIse // numZ e o mpor
Sysfem.ouf.prinfIn(numZ),
}
)
6
Exerccio
1. Escreva um programa que determine se um
determinado ano (introduzido pelo
utilizador) um ano bissexto ou no.
2. Os anos bissextos so mltiplos de 4, no
so mltiplos de 100, com excepo dos
anos que so mltiplos de 400, que tambm
so bissextos.
3. Por exemplo, os anos 1996 e 2000 so
bissextos, enquanto que os anos 1998 e
1900 so comuns.
Soluo
imporf essenfioI.^,
cIoss isseto {
pubIic sfofic void moin(Sfring orgs[]) {
inf ono,
Sysfem.ouf.prinf("QuoI e o ono7 "),
ono ~ Ieyboord.reodInf(),
if (((ono 7 4 ~~0) && (ono 7 I00 l~ 0))|| (ono 7 400~~0))
Sysfem.ouf.prinfIn(" O ono " +ono+ " e bissexfo"),
eIse
Sysfem.ouf.prinfIn(" O ono " +ono+ " e comum"),
}
}
Exerccio
Ler trs nmeros inteiros e determinar qual
deles o maior e qual o menor.
Soluo
imporf essenfioI.^,
pubIic cIoss moior_menor{
pubIic sfofic void moin(Sfring orgs[]){
inf o,b,c,
inf moior, menor,
Sysfem.ouf.prinfIn("VoIor de o~ "),
o ~ Ieyboord.reodInf(),
Sysfem.ouf.prinfIn("VoIor de b~ "),
b ~ Ieyboord.reodInf(),
Sysfem.ouf.prinfIn("VoIor de c~ "),
c ~ Ieyboord.reodInf(),
if(o b){
if(o c){
moior ~ o,
if(b c)
menor ~ c,
eIse
menor ~ b,
}eIse{
moior ~ c,
menor ~ b,
}
}eIse{
if(b c){
moior ~ b,
if(o c)
menor ~ c,
eIse
menor ~ o,
}eIse{
moior ~ c,
menor ~ o,
}
}
Sysfem.ouf.prinfIn("Moior ~ "+moior),
Sysfem.ouf.prinfIn("Menor ~ "+menor),
}
}
7
Exerccio
A srie de Fibonnaci dada por:
F(0) = 0
F(1) = 1
F(n) = F(n-2) + F(n-1) (n>=2)
Escreva um programa para apresentar os
primeiros 20 termos desta srie.
Soluo
imporf essenfioI.^,
cIoss fibonocci{
pubIic sfofic void moin(Sfring orgs[]){
inf fi, fj, fk,
fi ~ 0, // f(0).. f(i-Z)
fj ~ I, // f(I).. f(i-I)
Sysfem.ouf.prinfIn(fi+" "),
Sysfem.ouf.prinfIn(fj+" "),
for(inf i~0, i Z0, i++){
fk ~ fi + fj,
Sysfem.ouf.prinfIn(fk+" "),
fi ~ fj,
fj ~ fk,
}
}
}
Exerccio
Um hotel concebeu uma forma original de
cobrar aos seus clientes. A 1 noite custa
50, a segunda 25 (50/2), a n-sima
custa 50/n. Calcule a cobrana a efectuar
a um cliente que fique n noites no hotel
(preo a pagar por noite e o total).
Soluo
imporf essenfioI.^,
cIoss hofeI{
pubIic sfofic void moin(Sfring orgs[]){
inf n,
doubIe cusfo, preo~b0.0,
doubIe cusfo_fofoI~0.0,
Sysfem.ouf.prinfIn("QuoI o nmero de noifes:"),
n ~ Ieyboord.reodInf(),
for(inf i~I, i~ n, i++){
cusfo ~ preo / i, //preo voi diminuindo
Sysfem.ouf.prinfIn("Cusfo do "+i+"o noife~"+cusfo),
cusfo_fofoI~ cusfo_fofoI + cusfo,
}
Sysfem.ouf.prinfIn("Cusfo TofoI~"+cusfo_fofoI),
}
}
8
Exerccio
Escreva um programa para calcular a soma dos
digitos de um nmero.
Exemplos:
43 -> 7
432 -> 9
3271 -> 13
Resoluo
imporf essenfioI.^,
// CoIcuIor o somo dos digifos de um nmero
pubIic cIoss SomoDigifos {
pubIic sfofic void moin(Sfring orgs[]) {
Iong num,
inf somo ~ 0,
Sysfem.ouf.prinfIn ("Escrevo o nmero: "),
num ~ Ieyboord.reodInf(),
whiIe (num 0) {
somo ~ somo + (num 7 I0),
num ~ num / I0,
}
Sysfem.ouf.prinfIn ("Somo dos dgifos~"+somo),
}
}
Gerador de Nmeros
Escreva um programa que execute em ciclo, a gerar
nmeros aleatrios entre 1 e 6. O programa deve
terminar quando sair um 6 e deve imprimir no crn
quantos nmeros que foram gerados.
Como gerar um nmero inteiro entre 1 e 6:
inf number ~ (inf) Mofh.fIoor(o^Mofh.rondom())+I,
random()- Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
floor(double a) - Returns the largest (closest to positive infinity) double value that is not greater than the
argument and is equal to a mathematical integer.
Estrutura do Programa
1. Gera um nmero entre 1-6 e imprime no crn
2. Incrementa contador de tentativas
3. Enquanto esse nmero for diferente de 6 repete:
1. Gera um novo nmero entre 1-6 e imprime
2. Incrementa contador de tentativas
4. Imprime no crn o nmero total de tentativas
number ~ (inf) Mofh.fIoor(o^Mofh.rondom())+I,
9
Soluo
pubIic cIoss MyDice{
pubIic sfofic void moin( Sfring orgs[] ){
inf numero_fenfofivos ~ I,
inf number ~ (inf) Mofh.fIoor(o^Mofh.rondom())+I,
Sysfem.ouf.prinf( number + " " ),
whiIe (number l~ o){
number ~ (inf) Mofh.fIoor(o^Mofh.rondom())+I,
numero_fenfofivos++,
Sysfem.ouf.prinf( number + " " ),
}
Sysfem.ouf.prinfIn( "(" + numero_fenfofivos + " fenfofivos)" ),
}
}
Jogo: Adivinhar um nmero
Escreva um programa em Java que comea por
gerar um nmero entre 1 e 100 e depois pede ao
utilizador para adivinhar esse nmero. O programa
executa em ciclo at o nmero ser adivinhado.
Eis a estrutura:
1. Gera nmero (n) entre 1 e 100.
2. Pergunta ao utilizador qual o nmero
3. Enquanto a resposta no estiver certa
1. Se a tentativa do utilizador for menor do que o nmero n
1. Diz ao utilizador que o nmero est acima
2. Se a tentativa do utilizador for maior do que o nmero n
1. Diz ao utilizador que o nmero est abaixo
3. Pede ao utilizador uma nova tentativa
4. Imprime certo! no crn
Resoluo
imporf essenfioI.^,
pubIic cIoss My0uess{
pubIic sfofic void moin(Sfring[ ] orgs){
//gero um nmero oIeoforio enfre I e I00:
inf Mogic_Mum ~ (inf) Mofh.fIoor(I00^Mofh.rondom())+I,
Sysfem.ouf.prinf( "QuoI o suo fenfofivo: " ),
inf user0uess ~ Ieyboord.reodInf(),
whiIe (user0uess l~ Mogic_Mum){
if (user0uess Mogic_Mum)
Sysfem.ouf.prinfIn( "Esfo oIfo..." ),
eIse
Sysfem.ouf.prinfIn( "Esfo boixo..." ),
Sysfem.ouf.prinf( "QuoI o suo proximo fenfofivo: " ),
user0uess ~ Ieyboord.reodInf(),
}
Sysfem.ouf.prinfIn( "ACEPTOUl" ),
}
}
Exerccio
Calcular as coordenadas de um projctil e fazer a
sua representao usando a classe Graph.
Se o projctil lanado a uma velocidade inicial de
m/s e segundo um ngulo sobre a horizontal
ento as coordenadas x,y do projctil t segundos
depois do lanamento so dadas pelas seguintes
frmulas:
Considera-se que no existe resistncia do ar.
Os graus na frmula devem ser em radianos.

) cos( t x =
2
) sin(
2
gt
t y =

180 _ = radians
10
Resoluo parcial...
imporf essenfioI.^,
pubIic cIoss MyProjecfiI{
pubIic sfofic void moin(Sfring[ ] orgs){
doubIe o, u,
Sysfem.ouf.prinf( "Infrodu;o o grou inicioI (em grous): " ),
o ~ Ieyboord.reodDoubIe(),
Sysfem.ouf.prinf( "Infrodu;o o veIocidode inicioI: " ),
u ~ Ieyboord.reodDoubIe(),
o ~ o^Mofh.PI/I80, //converfer poro rodionos
0roph froj ~ new 0roph(),
froj.sefAxes(0, 400, 0, Ib0),
....
froj.oddPoinf(x, y),
}
}
}
Resoluo
imporf essenfioI.^,
pubIic cIoss MyProjecfiI{
pubIic sfofic void moin(Sfring[ ] orgs){
doubIe o, u,
Sysfem.ouf.prinf( "Infrodu;o o grou inicioI (em grous): " ),
o ~ Ieyboord.reodDoubIe(),
Sysfem.ouf.prinf( "Infrodu;o o veIocidode inicioI: " ),
u ~ Ieyboord.reodDoubIe(),
o ~ o^Mofh.PI/I80, //converfer poro rodionos
0roph froj ~ new 0roph(),
froj.sefAxes(0, 400, 0, Ib0),
doubIe f ~ 0,
doubIe df ~ 0.b, //fime sfep
doubIe g ~ 9.8,
doubIe x ~ 0,
doubIe y ~ 0,
froj.oddPoinf(x, y),
whiIe (y ~ 0){
f ~ f + df, //updofe fime
x ~ u^f^Mofh.cos(o),
y ~ u^f^Mofh.sin(o) - 0.b^g^f^f,
froj.oddPoinf(x, y),
}
}
}
Output (60, 60 m/s)
Determinar se um nmero
Primo
Escreva um programa em Java que indique
se um determinado nmero (P) primo ou
no. Eis um possvel algoritmo:
P o nmero que vai ser testado. Temos que verificar se
conseguimos encontrar qualquer nmero N, em que d resto
zero. Se no existir nenhum nmero N ento P um nmero
primo.
Se P deve ser mpar ento os nmeros N devem ser todos
mpares.
N comea no nmero 3.
Quando paramos o teste? Quando N=P?
No preciso, podemos parar quando N atingir
Se existir um factor superior a deve existir um outro factor
menor que , que dever ter sido encontrado.
P
N
P
P
P
11
Algoritmo
Pede ao utilizador para introduzir o nmero P
N=3
Encontra resto da diviso (R = P % N)
Enquanto e repete:
Incrementa N por 2 (N = N + 2)
Calcula R (R = P % N)
Se P um nmero Primo!
Caso contrrio, P no primo.
0 R
0 R
P N
Soluo
imporf essenfioI.^,
pubIic cIoss Prime{
pubIic sfofic void moin(Sfring[] orgs){
inf p,
Iong n, r,
booIeon is_prime~foIse,
Sysfem.ouf.prinfIn("QuoI o nmero que quer fesfor7 "),
p ~ Ieyboord.reodInf(),
if (p ~~ I || p ~~ Z) //prime by definifion
is_prime ~ frue,
eIse if (p7Z ~~ 0) //numero por
is_prime ~ foIse,
eIse {
n ~ 3,
r ~ p 7 n,
whiIe (r l~ 0 && n Mofh.sqrf(p)){
n ~ n+Z,
r ~ p 7 n,
}
if (r l~ 0)
is_prime ~ frue,
eIse
is_prime ~ foIse,
}// upper eIse
if(is_prime)
Sysfem.ouf.prinfIn("O numero "+p+" e um nmero Primol"),
eIse
Sysfem.ouf.prinfIn("O numero "+p+" MO e um nmero Primo..."),
}
}
Teste comos seguintes nmeros primos:
193707721
2147483647
Exerccio
Escreva um programa em Java para inverter
os digitos de um nmero positivo.
Exemplo:
input: 1234
result: 4321
Soluo
cIoss inverfe{
pubIic sfofic void moin(Sfring orgs[]){
inf n,x,
booIeon done~foIse,
inf numero~0,
Sysfem.ouf.prinfIn("QuoI o nmero :"),
n ~ Ieyboord.reodInf(),
if(n ~ 0){
Sysfem.ouf.prinfIn("Deverio fer infrodu;ido um nmero posifivo..."),
Sysfem.exif(0),
}
whiIe(ldone){
x ~ n 7 I0,
Sysfem.ouf.prinfIn("x ~ " + x),
numero ~ numero ^ I0,
numero ~ numero + x,
Sysfem.ouf.prinfIn("numero ~ " + numero),
n ~ n / I0,
if(n ~ 0)
done ~ frue,
}
Sysfem.ouf.prinfIn("numero ~ " + numero),
}
}
12
Exerccio
Um nmero inteiro no negativo diz-se
perfeito se igual soma dos seus
divisores prprios.
Por exemplo, 6 um nmero perfeito
porque 6=2+3+1.
Dado n, determine todos os nmeros
perfeitos inferiores a n.
Soluo
imporf essenfioI.^,
cIoss perfeifo{
pubIic sfofic void moin(Sfring orgs[]){
inf n,p,somo,
Sysfem.ouf.prinfIn("QuoI o voIor de n: "),
n ~ Ieyboord.reodInf(),
Sysfem.ouf.prinfIn("Eis os nmeros perfeifos ofe "+n+":"),
for(p~3, p ~ n, p++){ // o numero p voi de 3 ofe n
somo ~ 0,
// coIcuIo o somo dos divisores do numero p
for(inf i~I,i p, i++)
if(p 7 i ~~ 0)
somo ~ somo + i,
if(somo ~~ p) // p e um numero perfeifo
Sysfem.ouf.prinf(p+" "),
}
Sysfem.ouf.prinfIn(),
Sysfem.ouf.prinfIn("~~~~~~~~~~~~~~~~"),
}
}
Exerccio
k k k k
x x y x 2 . 1 ) 7 . 0 sin 1 (
1
+ =
+
k k
x y =
+
21 . 0
1
Escreva um programa em Java, que usando a classe Graph,
represente o seguinte fractal que dado pela seguinte frmula:
Comece com xo=yo=0.0.
Deve representar os pontos em separado no grfico da figura
usando as seguintes instrues:
0roph one ~ new 0roph(),
one.sefDrowingSfyIe(0rophobIe.PLOTPOIMTS),
one.sefAxes(-I,0.b,-0.b,Z),
// ...
one.oddPoinf(,,,),
Soluo
imporf essenfioI.^,
pubIic cIoss frocfoI{
pubIic sfofic void moin(Sfring[ ] orgs){
0roph one ~ new 0roph(),
one.sefDrowingSfyIe(0rophobIe.PLOTPOIMTS),
one.sefAxes(-I,0.b,-0.b,Z),
doubIe x0~0.0,
doubIe y0~0.0,
doubIe xI,yI,
one.oddPoinf(x0,y0),
for (inf i ~ I, i ~ b000, i++){
xI ~ y0^(I+Mofh.sin(0.7^x0)) - I.Z^Mofh.sqrf(Mofh.obs(x0)),
yI ~ 0.ZI - x0,
one.oddPoinf(xI,yI),
x0~xI,
y0~yI,
}
}
}
13
Resultado Exerccio
A seguinte frmula usada para modelar o
crescimento limitado da populao quando existem,
por exemplo, restries de alimento:
y
k+1
= r.y
k
(1-y
k
)
Fenmenos interessantes ocorrem quando o valor de
r est entre 3 e 4 (conhecido pelo caos matemtico).
Escreva um programa em Java para representar a
evoluo de y sobre k, usando a classe Graph.
Teste por exemplo com 3.9, e y
0
=0.2.
Soluo
imporf essenfioI.^,
pubIic cIoss modeI{
pubIic sfofic void moin(Sfring[ ] orgs){
0roph one ~ new 0roph(),
one.sefAxes(0,I00,0,I),
doubIe y0~0.Z,
doubIe yI,
doubIe r~3.9,
one.oddPoinf(0.0,y0),
for (inf i ~ I, i ~ I00, i++){
yI ~ r^y0^(I-y0),
one.oddPoinf((doubIe)i,yI),
y0~yI,
}
}
}s
Resultado
14
Exerccio
A Espiral de Arquimedes representada pela
seguinte frmula:
r = a.
x = r.cos( )
y = r.sin( )
Escreva um programa em Java, usando a class
Graph, que represente uma espiral de
Arquimedes. (por ex: a=0.1, =0.1.....50).

Soluo
imporf essenfioI.^,
pubIic cIoss orchimedes{
pubIic sfofic void moin(Sfring[ ] orgs){
0roph one ~ new 0roph(),
doubIe x,y,r,oIfo,
doubIe o ~ 0.I,
for (inf i ~ I, i ~ b00, i++){
oIfo ~ i^0.I,
r ~ o^oIfo,
x ~ r^Mofh.cos(oIfo),
y ~ r^Mofh.sin(oIfo),
one.oddPoinf(x,y),
}
}
}
Resultado Exerccio
A equao de uma elipse em coordenadas polares
dada pela seguinte frmula:
r = a.(1-e
2
)/(1 e.cos)
a o semi-eixo maior;
e a ecentrecidade.
O cometa Halley que nos visitou em 1985/86 move-
se numa trajectria elptica em rbita do Sol. O semi-
eixo maior (a) igual a 17.9 A.U. (A.U.= 1 unidade
astronmica, aprox. distncia da Terra ao Sol, 149.6
milhes kms).
A ecentricidade da rbita 0.967276.
Escreva um programa em Java que desenhe a rbita
do cometa Halley e a rbita da Terra (neste ltimo
caso, assuma uma rbita circular).
15
Soluo
import essential.*;
import java.awt.*;
public class halley{
public static void main(String[ ] args){
Graph one = new Graph();
one.setAxes(-5,40,-10,10);
one.setPointShape(new CirclePoint(PointShape.UNFILLED));
one.setDrawingStyle(Graphable.PLOTPOINTS);
double x,y,r,alfa,theta;
double a = 17.9;
double e = 0.967276;
for (int i = 1; i <= 500; i++){
theta = i*0.1;
r = (a*(1-e*e))/(1-e*Math.cos(theta));
x = r*Math.cos(theta);
y = r*Math.sin(theta);
one.addPoint(x,y);
}
one.addPoint(0,0); // sol
for(int i=0; i < 360; i+=10){ // terra
alfa = i;
r= Math.PI;
x = r*Math.cos(alfa);
y = r*Math.sin(alfa);
one.addPoint(x,y);
}
}
}
Resultado
Nmeros Triangulares
1 3 6 10
1 3 6 10 15 21 28 36 45 55 66 ...
Programa em Java
Escreva um programa em Java que calcule
os primeiros 100 nmeros triangulares e os
armazene num vector. Deve tambm
apresent-los no crn.
De seguida escreva mais um pedao de
cdigo que prove a seguinte propriedade:
1+3=4 (2
2
)
3+6=9 (3
2
)
6+10=16 (4
2
)
10+15=25 (5
2
)
1 3 6 10 15 21 28 36 45 55 66 ...
16
Os nmeros de Bonatchi
1=1
1+1=2
1+2=3
2+3=5
3+5=8
5+8=13
8+13=21
13+21=34
1 1 2 3 5 8 13 21 34 55 89 144 233 ...
Programa em Java
Escreva um programa em Java para calcular
os 40 primeiros nmeros da srie de
Bonatchi.
1 1 2 3 5 8 13 21 34 55 89 144 233 ...
Srie de Bonatchi
1 1 2 3 5 8 13 21 34 55 89 144 233 ...
1+1+3+8+21=34
1+2+5+13+34=55
1+1+3+8+21+55=89
...
Acrescente mais um pedao de cdigo no
seu programa de modo a provar que esta
regra verdadeira.
17