=
n n n
i
n
i
Para corprovar os resu|lados de aroos os lerros, gere ur rurero a|ealr|o para r erlre 0e 100.
Exerc. 32: 0oserve o cd|go da l|gura segu|rle e d|ga qua| o resu|lado do resro:
public class Exercicio
{
public static void main(String[ ] args){
int count =0;
for (int i=0; i<3; i++)
resume:
for (int j=0; j<4; j++)
for (int k=0; k<5; i++) {
++count;
if (i==1 && j==2 && k==3) break resume;
}
System.ou.println(\tcount= + count);
}
}
Exerc. 33: 0oserve o cd|go da l|gura segu|rle, ool|do a parl|r do arler|or cor a|guras rod|l|caoes. Nesle caso,
d|ga qua| o resu|lado apreserlado:
public class Exercicio {
public static void main(String[ ] args) {
int count =0;
for (int i=0; i<3; i++){
resume:
for (int j=0; j<4; j++)
for (int k=0; k<5; i++) {
++count;
if (I==1 && j==2 && k==3) break resume;
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra ZZ
System.ou.println(\tcount= + count);
}
}
}
Exerc. 31: 0oserve o cd|go da l|gura segu|rle e |rd|que, caso ex|slar, os erros ex|slerles:
public class Exercicio {
public static void main(String [ ] args){
System.out.print(0);
int fib0 = 0;
int fib1 = 1;
int fib2 = 1;
while (fib2<1000);
{
fib0=fib1;
fib1=fib2;
fib2=fib0 + fib1;
System.out.print( , + fib1);
}
}
Exerc. 35: Escreva ur prograra er Java, que |rpr|ra ro crar a corlager de 1 a 10.
Exerc. 3: ur oarco verda roeda eslrarge|ra (0|ares, Frarcos, L|oras, elc.) e |eva ura cor|ssao de 2 do va|or
lrarsacc|orado ra|s 1 Euro. Escreva ur prograra para |rd|car qua| o va|or a pagar por ura cerla verda de roeda.
0 prograra receoe a quarl|a e l|po de roeda a adqu|r|r. As laxas de cro|o ex|sler ro prograra coro corslarles.
Exerc. 3Z: 3uporra que ur reslaurarle ler a segu|rle ererla:
Prego 1.50C
8alalas Fr|las 0.Z5C
3uro 0.55C
8o|o 0.85C
A||nea A
3o||c|le o rurero de doses de cada ur dos e|ererlos e |rd|que a laclura d|scr|r|rada.
A||nea
Nao possive| sal|slazer ped|dos ro va|or |rler|or a 2.5C.
A||nea 6
0s ped|dos de va|or super|or a 25C lr ur descorlo de 20.
Exerc. 38: ura cerla erpresa laor|ca rolores cor polrc|as corpreerd|das erlre 1 e 99cv. Ao processar
|rlorraao soore ur desles rolores, ur prograra usa ur de lrs proced|rerlos, de acordo cor a polrc|a do
rolor. Parl|rdo do pr|rcip|o que o prograra esl escr|lo er Java e de que a var|ve| |rle|ra Pol represerla a polrc|a
do rolor a ser laor|cado, escreva ura |rslruao |l que execule o proced|rerlo corresporderle de acordo cor a
laoe|a segu|rle:
Polrc|a do rolor Acao a execular
Pol < 1 Versager de erro
1 <= Pol < 5 Pw1
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra Z8
5 <= Pol < 20 Pw2
20<= Pol < 100 Pw3
Pol >= 100 Versager de erro
As cord|oes das |rslruoes |l rao dever ler corjuroes.
Exerc. 39: Escreva ur prograra er Java que corverla rolas quarl|lal|vas de 0 a 20 er rolas qua||lal|vas de rau a
exce|erle, ul|||zardo ura eslrulura de |l's ercadeados e que ver|l|que o ||r|le super|or das garas de cada ura das
rolas qua||lal|vas.
Cors|dere que:
0-1 : Vau
5-9 : Vediocre
10-13 : 3ul|c|erle
11-1Z : 8or
18-20 : Vu|lo 8or
Exerc. 10: Escreva ur prograra er Java para ca|cu|ar os juros e o rovo sa|do de ura corla oarcr|a, lerdo er
alerao que se o sa|do lor |rler|or a 1.000 a corla rao receoe juros e paga ura laxa ao oarco (ru|la). Caso a corla
al|rja ur sa|do regal|vo carce|ada. 0 prograra dever ler a ru|la represerlada por ura corslarle. 0ever |er o
sa|do arler|or, o rurero de reses ao l|r do qua| quereros ca|cu|ar o sa|do, e a laxa de juros arua|. Parla do
pr|rcip|o de que rao r rov|rerlos ra corla e de que os juros s sao ca|cu|ados ro l|r do rurero de reses
espec|l|cado.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra Z9
6 - Sub-Programas
T|p|carerle, ur prograra corresporde a |rp|ererlaao de ura so|uao para ur delerr|rado proo|era. Vu|las
vezes, os proo|eras a reso|ver sao deras|ado corp|exos, pe|o que ros serl|ros oor|gados a parl|-|os er proo|eras
ra|s pequeros, por lorra a lac|||lar a descooerla da so|uao. Esles suo-proo|eras, para a|r de ra|s pequeros, lr
ura so|uao ra|s s|rp|es. A esla eslralg|a de reso|uao de proo|eras crara-se 'd|v|de ard corquer, ou seja,
d|v|d|r para corqu|slar: reso|ver os suo-proo|eras corduz-ros a so|uao g|ooa|.
Para cada suo-proo|era ex|sle ura |rp|ererlaao possive| soo a lorra de prograra, dai a des|graao de suo-
prograra:
Cr|aros secoes do prograra que execular larelas especil|cas, cor ur corjurlo de |rslruoes a curpr|r
ru|lo oer del|r|do
ura vez lraoa|rardo er corjurlo, eslas secoes (por vezes laror craradas de rol|ras), corlr|ouer
para a reso|uao do proo|era gera| e ra|s corp|exo.
Vantagens da Ut|||zao de 8ub-Programas
usardo suo-prograras ||r|laros a corp|ex|dade da so|uao g|ooa| a cusla da sua corjugaao.
Corlr|ouiros a|rda para a c|areza e |eg|o|||dade dos prograras po|s o cd|go que reso|ve cada larela esl separado.
lderl|l|car-se ra|s lac||rerle os dados recessr|os e os resu|lados produz|dos por cada larela.
Ev|la-se a ex|slrc|a de cd|go redurdarle (|.e. que rao laz la|la, repel|do), po|s reur|rdo o cd|go corur a larelas
d|lererles poderos re-aprove|l-|o er porlos d|sl|rlos do prograra.
6hamada de um 8ub-Programa
ur suo-prograra |derl|l|cado por ur rore que |re alr|ouido pe|o prograrador. E a esle rore que ur
prograrador se relere quardo prelerde ul|||zar o suo-prograra er queslao. 8asla dar a |rd|caao do rore de ur
suo-prograra segu|do de parrles|s curvos a aor|r e a lecrar (), para que o corjurlo de |rslruoes que o corpoer
sejar execuladas. vereros ra|s ad|arle que se o suo-prograra recess|lar de dados de erlrada para ser execulado
derlro desses parrles|s que la|s dados |rao surg|r ( o que se crara de passager de parrelros).
Exemp|o 1:
resultado = Math.pow(2,4);
Cor esla |rslruao eslaros a crarar o suo-prograra pow, ex|slerle ra c|asse Math da ||rguager Java. Esle suo-
prograra serve para ca|cu|ar a polrc|a de ur rurero x e|evado a oulro rurero y. Nesle caso ca|cu|ros o va|or de
2
1
(dardo coro parrelros os va|ores 2 (x) o va|or 1 (y) ), que resu|la er 1. E esle o va|or cor que a var|ve|
resu|lado |r l|car aps a crarada do suo-prograra.
Exemp|o 2:
numero = Math.random();
Nesle caso crarros o suo-prograra rardor, laror perlercerle a c|asse Valr. Esle suo-prograra gera ur
rurero a|ealr|o e, coro poderos ver|l|car, rao prec|sa de rerrur parrelro de erlrada para elecluar os c|cu|os a
que se propoe.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 80
6r|ao de 8ub-Programas
ur suo-prograra corsl|luido por:
Caoea|ro: corjurlo de pa|avras reservadas (que vereros ra|s ad|arle qua|s sao e para que server),
rore do suo-prograra, ||sla de parrelros (que pode ser vaz|a) erlre parrles|s curvos.
lrslruoes: corjurlo de |rslruoes recessr|as ao curpr|rerlo dos oojecl|vos do suo-prograra.
0eve ser cr|ado ro ro|lo de ur prograra para que possa ser execulado e ser ul||.
Nota: E |rporlarle que arles do suo-prograra sejar co|ocados corerlr|os |rd|cal|vos do props|lo que esle serve.
0ever laror dar-se rores sugesl|vos aos suo-prograras, que |rd|quer de lorra c|ara para que que esles
server, la| coro ro caso das var|ve|s.
Exemp|o 3:
public class Programa
{
public static void main(String[] args)
{
System.out.println("1 instruo executada pelo main");
imprimeMensagem() // chamada do sub-programa imprimeMensagem
System.out.println(3 instruo executada pelo main");
}
// imprimeMensagem : sub-programa que escreve a mensagem
// Ol Mundo! no cran
public static void imprimeMensagem()
{
System.out.println("Ol Mundo!");
}
}
ur suo-prograra pode (ou rao) ler que produz|r a|gur resu|lado para o exler|or (ou seja, para quer |re ped|u que
execulasse a larela a que esl desl|rado).
Corsoarle lerra ou rao que produz|r esses resu|lados, ur suo-prograra pode ser c|ass|l|cado da segu|rle lorra:
Proced|rerlo
Furao
0s proced|rerlos e luroes er Java crarar-se mtodos. l rlodos que apreserlar va|ores de relorro e oulros
que rao o lazer.
6.1 - Procedimentos
ur proced|rerlo ur suo-prograra que corlr ur corjurlo de |rslruoes a execular de lorra ur|lr|a e alr|ca
para curpr|r cor delerr|rada larela.
Para que a larela seja execulada, o proced|rerlo pode ou rao ler de receoer dados de erlrada. Execula as
|rslruoes que o corpoer ura a ura al al|rg|r o l|r. 0u lodas sao oer suced|das e a larela curpr|da ou, se
a|gura la|ra, o proced|rerlo la|ra e a larela rao se curpr|u. E |slo que s|gr|l|ca operaao alr|ca/ur|lr|a.
Cabealho do sub-programa
Instrues a executar
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 81
ur proced|rerlo rao relorra va|ores, o que er Java |derl|l|cado pe|a pa|avra void arles do rore do rlodo
(suo-prograra). 0 rlodo |rpr|reVersager do exerp|o 3 ac|ra derorslrado ur exerp|o s|rp|es de
proced|rerlo.
6.2 - Funes
ura lurao ur suo-prograra |drl|co a ur proced|rerlo, cor a d|lerera de que apreserla ur va|or coro
resu|lado da sua execuao.
E ur rlodo que ler va|or de relorro (rao void, ao corlrr|o do proced|rerlo).
A lorra de ura lurao apreserlar ur resu|lado recorrer a |rslruao return.
A |nstruo Return
Esla |rslruao |rlerrorpe a execuao do suo-prograra correrle e o l|uxo de execuao do prograra devo|v|do ao
l|r da |rslruao er que o suoprograra lo| crarado.
return <expresso>;
0 va|or da expressao o va|or de relorro do rlodo.
Er delerr|rados proced|rerlos (rlodos void), a |rslruao return pode aparecer de lorra exp|ic|la (ser
<expresso>), aperas para |rlerrorper a execuao do rlodo (aps ver|l|caao de ura dada cord|ao, por
exerp|o).
Exemp|o 1:
public class ExemploFuncao
{
public static void main(String[] args)
{
double varA;
varA = 10.5;
System.out.println(2 instruo executada pelo mtodo main");
System.out.println(varA);
varA = funcao(); // invocacao do mtodo funcao
System.out.println(varA);
System.out.println("5 instruo executada pelo mtodo main");
}
// funcao: soma 2 numeros aleatorios e retorna o resultado da soma
static double funcao()
{
double valor1, valor2, resultado;
valor1 = Math.random();
valor2 = Math.random();
resultado = valor1 + valor2;
return resultado;
}
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 82
Nesle exerp|o, o prograra corea por alr|ou|r o va|or 10.5 a var|ve| varA de l|po double.
Er segu|da, |rpr|re ura rersager ro crar, segu|da do va|or da var|ve|.
Ao lazerros varA = funcao(); eslaros a crarar o rlodo que ler o rore funcao. Nesle rorerlo, o
corlro|o da execuao passa para esse suo-prograra. E|e l|ca erlao ercarregue de execular a sua larela, que resle
caso sorar do|s rureros a|ealr|os e apreserlar ro l|ra| o resu|lado da sora.
0erlro do rlodo lurao o que acorlece o segu|rle: gerado ur rurero a|ealr|o por re|o da crarada ao
rlodo random da c|asse Math e co|ocado o seu va|or derlro da var|ve| valor1. 0e segu|da, gerado rovo
rurero a|ealr|o da resra lorra e o seu va|or co|ocado derlro da var|ve| valor2. Por l|r, co|oca-se o
resu|lado da sora derlro da var|ve| resultado.
Para lerr|rar, a lurao ler de relorrar o resu|lado do c|cu|o elecluado, devo|verdo o corlro|o ao prograra
pr|rc|pa|. Para |sso recorre a |rslruao return. Ao lazer return resultado; a lurao lerr|ra,
apreserlardo o va|or da var|ve| resu|lado a quer a crarou, que resle caso lo| a lurao main (alravs de
varA=funcao() ). A corc|usao de lodos esles passos que o resu|lado do c|cu|o elecluado pe|o rlodo
funcao l|ca arrazerado derlro da var|ve| varA.
0 prograra prossegue erlao cor as reslarles |rslruoes que ler a execular, que cors|sler aperas er escrever o
rovo va|or da var|ve| varA ro crar e ura u|l|ra rersager ('5 |rslruao execulada pe|o rlodo ra|r).
6.3 - Parmetros
J lo| rerc|orado que, por vezes, para poder corcrel|zar delerr|rada larela, ur suo-prograra prec|sa de dados de
erlrada ( |rag|reros que a larela era preparar ur oo|o para ser coz|rrado... prec|saros dos |rgred|erlesl Far|rra,
ovos, aucar, elc. ).
A esses dados de erlrada crararos parrelros. 3ao var|ve|s que relererc|ar d|lererles l|pos de dados dos qua|s
o suo-prograra recess|la para |evar a caoo a sua larela.
Esles poder ser c|ass|l|cados da segu|rle lorra:
Parmetros Forma|s: Aque|es que sao dec|arados ro caoea|ro do suo-prograra (derlro dos parrles|s
curvos...) e que poder ser ul|||zados por e|e ro o|oco de |rslruoes que ler para execular.
Parmetros Actua|s: Taror crarados de parrelros corcrelos, sao os va|ores que os parrelros
lorra|s adqu|rer durarle a execuao do suo-prograra.
Exemp|o 1:
public class ProcedimentoComParametros
{
public static void main(String[] args)
{
int pcA = 10, pcB = 20;
System.out.println(2 instruo executada pelo mtodo main");
procComParams(pcA, pcB); // invocao do mtodo procComParams
System.out.println(4 instruo executada pelo mtodo main");
}
// procComParams: recebe dois inteiros e imprime no cran a sua soma
// imprime tambm a soma de duas variveis
// locais (internas) ao procedimento
public static void procComParams( int pfA, int pfB) // PROCEDIMENTO
{
int varLocalC = 11, varLocalD = 12;
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 83
System.out.println (2 Instruo executada pelo metodoVoid_2");
System.out.println (pfA+pfB);
System.out.println (varLocalC+varLocalD);
System.out.println (5 Instruo executada pelo metodoVoid_2");
}
}
Nesle exerp|o, veros a ||sla de parrelros lorra|s dec|arada ro caoea|ro do rlodo, |derl|l|cada pe|os do|s
|rle|ros pfA e pfB.
No prograra pr|rc|pa| ver|l|caros que a var|ve| pcA corea por ler o va|or 10 e pcB o va|or 20. 0epo|s de
|rpr|r|r ura rersager, |rvocado o rlodo procComParams. Nessa a|lura sao dadas coro parrelro ao
rlodo as var|ve|s pcA e pcB. Esles sao os parrelros aclua|s ou corcrelos, porque represerlar os va|ores cor
os qua|s o rlodo va| lraoa|rar er lerpo de execuao para |evar a caoo a sua larela.
0s va|ores de pcA e pcB sao cop|ados, respecl|varerle, para derlro das var|ve|s pfA e pfB, por |sso, quardo
derlro do rlodo lazeros System.out.println (pfA+pfB); sa| 30, coro ser|a de esperar.
Exemp|o 2:
public class FuncaoComParams
{
public static void main(String[] args)
{
int pcA = 1, pcB = 20, varC = 30;
System.out.println(2 instruo executada pelo mtodo main");
System.out.println(varC);
varC = funComParams(pcA, pcB); // invocao do mtodo funComParams
System.out.println(varC);
System.out.println(6 instruo executada pelo mtodo main");
}
public static int funComParams(int pfA, int pfB) // FUNO
{
return (pfA+pfB);
}
}
Esle exerp|o ru|lo sere|rarle ao arler|or, exceplo ro laclo de que agora leros ura lurao, cujos parrelros
lorra|s sao pfA e pfB. 0s parrelros aclua|s sao pcA e pcB, e a lurao apreserla coro resu|lado a co|ocar
derlro da var|ve| varC a sora dos parrelros aclua|s (ou seja, os va|ores de pfA e pfB er lerpo de
execuao).
Esserc|a|rerle r a reler que os parrelros lorra|s server para |rd|car qua|s sao os l|pos de dados de erlrada que
ur suo-prograra recess|la para poder curpr|r cor os seus oojecl|vos, ao passo que os parrelros aclua|s
represerlar va|ores corcrelos durarle a execuao do suo-prograra.
l ura re|aao d|recla erlre parrelros lorra|s e parrelros aclua|s, ro serl|do de que a cada parrelro lorra|
corresporde ur parrelro rea| (apesar de raver ||rguagers er que possive| espec|l|car parrelros opc|ora|s. Ta|
rao o caso do Java.). Ass|r serdo, o rurero de parrelros lorra|s e parrelros aclua|s para ur suo-prograra
ler de ser |gua| e os l|pos dos resros laror lr de corresporder. 0u seja, se delerr|rado rlodo espera ur
int segu|do de ur char, cors|derado ur erro s|rlcl|co se o prograrador ao crarar esse rlodo erv|ar
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 81
pr|re|ro ur char e depo|s ur int ou resro passar va|ores de oulro l|po qua|quer. 0s parrelros lr de eslar
pe|a order espec|l|cada e lr de ser do resro l|po.
6.4 - Passagem de Parmetros
Passar parrelros a ur suo-prograra s|gr|l|ca crarar esse suo-prograra dardo-|re coro erlrada os dados que de
que e|e recess|la.
Ex|sler do|s l|pos de passager de parrelros:
Por Va|or: o parrelro lorra| receoe ura cp|a do va|or do parrelro aclua|, serdo que |rlerrarerle
aperas corsegue rudar o va|or da cp|a e rao o or|g|ra|.
Por Refernc|a: o parrelro lorra| receoe ura relerrc|a para o va|or do parrelro aclua|. Logo,
|rlerrarerle corsegue rudar o va|or aporlado por essa relerrc|a, o que ler coro corsequrc|a a
rod|l|caao do va|or do parrelro aclua|.
Em Java, a passager de parrelros serpre le|la por va|or.
Exemp|o 1 (passagem de parmetros por va|or}:
public class ProcComParams // pegando num dos exemplos anteriores...
{
public static void main(String[] args)
{
int pcA = 10, pcB = 20; // valores iniciais de pcA e pcB
// vo ser usados como parmetros actuais
// para o mtodo procComParams
procComParams(pcA, pcB); // invocacao do mtodo procComParams
// vamos ver o que se passa dentro do
// mtodo...
// depois de procComParams ter terminado e ter modificado
// o valor dos seus parmetros...
System.out.println(pcA = + pcA); // pcA manteve o valor 10!
System.out.println(pcB = + pcB); // pcB manteve o valor 20!
}
public static void procComParams(int pfA, int pfB) // PROCEDIMENTO
{
// pfA recebe uma cpia do valor de pcA
// pfB recebe uma cpia do valor de pcB
pfA = pfA + 2; // mudamos o valor de pfA
pfB = pfB * 3; // mudamos o valor de pfB
// imprimimos os dois valores
System.out.println (pfA = + pfA);
System.out.println (pfB = + pfB);
}
}
vejaros a|rda a represerlaao er rerr|a do suced|do...
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 85
20 10 20 10 20 10 20 10
AAAAAA AAAAAB AAAAAC AAAAAD AAAAAE AAAAAF AAAAB0 AAAAB1
20 10 20 10
AAAAAA AAAAAB AAAAAC AAAAAD AAAAAE AAAAAF AAAAB0 AAAAB1
// Antes da invocao de procComParams!
// Invocao de procComParams!
pcA pcB pfA pfB
pcA pcB
pfA pfB
pfA e pfB so
CPIAS de pcA e
pcB!
pfA e pfB so
CPIAS de pcA e
pcB!
60 12 20 10 60 12 20 10
pfA e pfB
mudaram de
valor mas pcA e
pcB No!
pfA e pfB
mudaram de
valor mas pcA e
pcB No!
F|gura 39. 0erorslraao do corce|lo de passager de parrelros por va|or
T|pos de dados er Java que rao sejar pr|r|l|vos sao oojeclos (dos qua|s la|areros ra|s ad|arle). As var|ve|s que
represerlar oojeclos sao ra rea||dade relerrc|as (aporladores) para zoras de rerr|a orde esles eslao
arrazerados.
Ao passar coro parrelro para ur suo-prograra ura var|ve| que represerla ur desles l|pos, eslaros a passar
ura cp|a da relerrc|a para o resro. lslo s|gr|l|ca que, se derlro do suo-prograra l|zerros a|gura operaao
soore essa var|ve|, eslaros ra rea||dade a a|lerar o oojeclo e quer crarou o suo-prograra v essa a|leraao. lslo
provoca ur corporlarerlo |drl|co ao da passager por relerrc|a.
Eroora s ra|s ad|arle possaros ver o que sao oojeclos e coro se corporlar, vejaros a derorslraao desle
corce|lo de relerrc|a:
Exemp|o 2 (passagem de parmetros por refernc|a}:
public class ProcComParams // com um exemplo semelhante
{
public static void main(String[] args)
{
// Criamos uma varivel chamada exemplo, do tipo StringBuffer
// StringBuffer um tipo que representa cadeias de caracteres
// (um dos tais objectos..)
// exemplo uma referncia para a zona de memria onde o
// objecto StringBuffer criado e guardado
StringBuffer exemplo = new StringBuffer(Teste);
// damos essa referncia como parmetro ao mtodo e vamos ver o
// que se passa l dentro...
procComParams(exemplo); // invocacao do mtodo procComParams
System.out.println (exemplo);
}
public static void procComParams(StringBuffer s) // PROCEDIMENTO
{
// s do tipo StringBuffer e tem uma cpia do valor
// da varivel exemplo. Agora apontam ambas para a mesma
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 8
// zona de memria.
// ao modificarmos o valor do objecto apontado por s
// apagando o seu contedo (delete)
// e colocando contedo novo (append)
// estamos a fazer com que essa alterao seja vista no
// programa principal atravs da varivel exemplo
// dado que ambas esto associadas mesma zona de memria!
s.delete(0, s.length());
s.append(Isto FOI um teste passagem por referncia!);
}
}
Er lerros v|sua|s varos ver|l|car o que acorleceu:
Teste
passagem
por
referncia
Teste
passagem
por
referncia
AAAAAA AAAAAB AAAAAC AAAAAD AAAAAE AAAAAF AAAAB0 AAAAB1
// Antes da invocao de procComParams!
// Invocao de procComParams!
exemplo s
AAAAAA AAAAAA Teste
passagem
por
referncia
AAAAAA AAAAAA Teste
passagem
por
referncia
AAAAAA AAAAAB AAAAAC AAAAAD AAAAAE AAAAAF AAAAB0 AAAAB1
exemplo
s
AAAA
AAAAAA
Isto FOI um
teste
passagem
por
referncia
AAAA
AAAAAA
Isto FOI um
teste
passagem
por
referncia
s uma referncia
para o objecto
apontado por
exemplo
s uma referncia
para o objecto
apontado por
exemplo
Logo, quando s muda
de valor, exemplo
tambm sofre as
consequncias!
Logo, quando s muda
de valor, exemplo
tambm sofre as
consequncias!
F|gura 10. 0erorslraao do corce|lo de passager de parrelros por relerrc|a
6.5 - Visibilidade das Variveis
Arles de la|arros er v|s|o|||dade de var|ve|s varos re|erorar coro que ur prograra esl orgar|zado.
Regra gera|, seja er Java seja roulras ||rguagers, ura ap||caao |rlorrl|ca corsl|luida por ur prograra pr|rc|pa|
que ul|||za d|versos suo-prograras que o ajudar ro curpr|rerlo do seu oojecl|vo. (A la| aoordager do d|v|d|r para
corqu|slar, |erorar-se?)
Er Java, ura ap||caao corsl|luida por ura ou ra|s c|asses. ura (e s uma) dessas c|asses corlr ur rlodo
crarado main que o prograra pr|rc|pa|. Esle ul|||za erlao suo-prograras que poder ex|sl|r ra resra c|asse ou
roulras.
Ex|sler lrs regras |rporlarles ra eslruluraao de ur prograra (||vro FCA - Furdarerlos de Prograraao er
Java2):
ur prograra corlr:
o 0ec|araoes de var|ve|s;
o ur suo-prograra pr|rc|pa| crarado main();
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 8Z
o ur corjurlo de suo-prograras del|r|dos pe|o prograrador.
0s suo-prograras corlr:
o 0ec|araoes de var|ve|s;
o lrslruoes e|ererlares (alr|ou|ao, se|ecao, repel|ao, elc.);
o Craradas a oulros suo-prograras (pr-del|r|dos ou cr|ados pe|o prograrador).
0s dela|res de |rp|ererlaao de ur suo-prograra sao |rre|evarles, desde que se sa|oa para que que e|e serve,
que parrelros receoe e que l|po de resu|lado deve produz|r ( coro se losse ura ca|xa regral).
E desle corjurlo de regras e del|r|oes que surge o corce|lo de v|s|o|||dade de ura var|ve|. v|s|o|||dade de ura
var|ve| ura roao assoc|ada ao |oca| orde a var|ve| dec|arada ro prograra.
Poderos erlao c|ass|l|car as var|ve|s da segu|rle lorra:
Var|ve|s |oca|s
Var|ve|s g|oba|s
ura var|ve| dec|arada derlro de ur suo-prograra crarada de var|ve| |oca| a esse suo-prograra. ura var|ve|
|oca| cr|ada serpre que o suo-prograra acl|vado e deslruida quardo esle lerr|ra a sua execuao.
A|rda que raja oulro suo-prograra que corlerra ura var|ve| dec|arada cor o resro rore, eslaros a la|ar de
var|ve|s d|lererles, que ex|sler er espaos de rerr|a separados, por periodos de lerpo d|lererles e v|s|o|||dades
d|lererles, po|s ex|sler er suo-prograras d|sl|rlos.
ura var|ve| g|ooa| aque|a que dec|arada ro |ric|o do prograra e suos|sle al que o prograra lerr|re, serdo
v|sive| derlro de qua|quer suo-prograra que o corsl|lu|. Para a|r de serer v|sive|s derlro de qua|quer suo-
prograra que corsl|lu| a ap||caao, as var|ve|s g|ooa|s poder laror ser ul|||zadas por esses suo-prograras.
Nao ro erlarlo acorse|rado o uso aous|vo desle l|po de var|ve|s dadas as ||r|laoes que causar ra |eg|o|||dade
do cd|go e a lac|||dade cor que provocar o aparec|rerlo de erros d|lice|s de deleclar.
Para a|r d|sso rao corlr|ouer er rada para a reul|||zaao de cd|go po|s lorrar o cd|go deservo|v|do
deperderle do corlexlo de ul|||zaao.
Exemp|o 1:
class VisibilidadeVariaveis
{
private int valor1;
// varivel global
public static int valor2 = 10;
public static void mudaValor2(int v2) {
// novoValor uma varivel local ao mtodo
int novoValor = v2 + valor2;
valor2 = novoValor;
} ...
public static void main(String args[]) { // Resultado = 43!
System.out.println(Valor2 antes da chamada = + valor2);
mudaValor2(33);
System.out.println(Valor2 depois da chamada = + valor2);
}
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 88
6.6 - Exerccios Prticos
0bject|vos da 8r|e:
Cor esla sr|e de proo|eras prelerde-se que o a|uro:
1. Erlerda e sa|oa ap||car as rooes de proced|rerlo e lurao alravs da cr|aao de rlodos
2. 0or|re a serrl|ca da |rvocaao de rlodos
3. Corpreerda os corce|los de parrelro lorra| e aclua|
1. Erlerda as d|lereras erlre a passager de parrelros por va|or e por relerrc|a
5. Corpreerda a d|lerera erlre var|ve|s |oca|s e g|ooa|s
Parte | - 0uestes Ter|cas
1. 0ua|s sao as lases por que passa a ul|||zaao de ur rlodo?
2. 0ua| a d|lerera erlre ur proced|rerlo e ura lurao?
3. No Java ex|sler os corce|los de proced|rerlo e lurao de lorra exp|ic|la? 3e rao ex|sler, coro sao
represerlados? 0 exerp|os.
1. Para que serve a |rslruao relurr?
5. 0 que sao parrelros lorra|s e parrelros aclua|s? Jusl|l|que e d exerp|os.
. ura var|ve| |oca| ura var|ve| que correc|da e esl d|sporive| para ser ul|||zada por loda a ap||caao
e por lodos os oojeclos que a corpoer, verdade|ro ou la|so? Jusl|l|que a resposla que der.
Z. 0 que erlerde por ass|ralura de ur rlodo?
8. 0ue l|pos de passager de parrelros correce? 0ua|s as d|lereras erlre cada ura?
9. Er Java ex|sler lodos os l|pos de passager de parrelros que |rd|cou? Jusl|l|que e d exerp|os para
cada s|luaao rerc|orada.
Parte || - Ap||cao de 6once|tos Usando Pequenos Programas
Exerc. 1: ul|||zardo o rlodo de passager por va|or, cr|e ur prograra orde o ul|||zador |rlroduz do|s rs a|ealr|os e
cor o auxi||o de ur suoprograra relorre o ra|or de erlre os seus argurerlos.
Exerc 2: Escreva ur prograra que ul|||ze ur suoprograra(rlodo) para a lroca de va|ores de duas var|ve|s. Nola
que os va|ores deverao ser receo|dos do ul|||zador, ro prograra pr|rc|pa|. Eslas var|ve|s deverao ser do l|po 3lr|rg.
Exerc. 3: Cor o auxi||o de ur suoprograra(rlodo) orde se lroca corleudo de var|ve|s, laa ur prograra er Java
que ordera lrs 3lr|rgs a|laoel|carerle.
Exerc. 1: Terle elecluar o resro exercic|o ras agora cor |rle|ros, |slo , |rp|ererlar o rlodo de lroca e
posler|orrerle elecluar a orderaao de lrs rureros |rle|ros receo|dos do lec|ado.
0 a sua op|r|ao quarlo ao resu|lado esperado. E suposlo ser sere|rarle ao ool|do cor as 3lr|rgs? Jusl|l|que
porque que la| acorlece.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 89
7 - Classes e Objectos
0s prograras er Java sao deservo|v|dos coro|rardo rovos rlodos e c|asses cor os j ex|slerles ra ||rguager
(a d|la APl Java - App||cal|or Prograrr|rg lrlerlace Java). A APl Java olerece ura sr|e de c|asses e rlodos para
execular desde c|cu|os ralerl|cos, rar|pu|aoes de cade|as de caracleres, rar|pu|aoes de caracleres,
operaoes de |rpul/oulpul, ver|l|caao de erros e ru|las oulras operaoes ule|s. 0lerece de ludo o que ur
prograrador possa prec|sar coro oase para deservo|ver as suas ap||caoes.
A ||rguager de prograraao Java d|z-se or|erlada aos oojeclos. Nur parad|gra de oojeclos, ao corlrr|o do que se
possa persar, rao se procura ura rova lorra de prograrar, ras s|r or|erlarro-ros para ura lorra de persar
aoslracla re|al|varerle a qua|quer proo|era, ul|||zardo para |sso corce|los do rurdo rea|.
A lilu|o de exerp|o: lodos rs leros preserle ra rossa rerle o que ur aulorve|. A del|r|ao desle corle|lo, er
or|erlaao aos oojeclos crara-se c|asse.
Todos rs saoeros a|rda que ur aulorve| ler qualro preus, ler porlas, oarcos para ros serlarros, ur rolor,
elc.ec. lslo sao as propr|edades(alr|oulos) de ur aulorve|, que a|gur del|r|u quardo cr|ou a c|asse.
Por oulro |ado, saoeros a|rda que, rodardo a crave, o rolor se ||ga; que carregardo ro ace|erador depo|s de
ergalada a rudara o aulorve| avara ra|s depressa. Esles sao a|gurs dos corporlarerlos que ur aulorve|
saoe deserperrar. Er lecro|og|a de oojeclos aos e|ererlos que del|rer corporlarerlo crararos rlodos.
Represerlar lurc|ora||dade.
Por l|r, resla-ros ler preserle que |rdeperderlererle da c|asse, c|rcu|ar pe|o rurdo ur ser rurero de |rslrc|as
da resra. Todos os d|as ver|l|caros que r |rersos aulorve|s, parados ou a c|rcu|ar, de jare|as aoerlas ou
lecradas, de cores e lorralos d|lererles, a ve|oc|dades d|lererles, pe|as ruas lora. Essas |rslrc|as lorar cr|adas
recorrerdo a ur rlodo espec|a| deror|rado corslrulor (resle caso, a ||rra de rorlager) e, quardo o seu lerpo
de v|da cregar ao l|r, serao deslruidas pe|o deslrulor (o cerlro de aoale, por exerp|o).
Terdo ura ur|ca c|asse poder cr|ar-se larlas |rslrc|as quarlas lorer prec|so que, lraoa|rardo er corjurlo,
corlr|ouer para a reso|uao de delerr|rado proo|era. A eslas |rslrc|as crararos oojeclos.
Programao 0r|entada aos 0bjectos
Esle l|po de prograraao cors|sle er cr|ar ap||caoes a parl|r de oojeclos.
0eserrar ur prograra passa por:
0el|r|r os oojeclos recessr|os
o 0ua|s as suas caraclerisl|cas
o 0ue lurc|ora||dades dever olerecer
0el|r|r a lorra coro os oojeclos corur|car erlre s| para al|rg|r os oojecl|vos a que o prograra se propoe
7.1 - Objectos
lrslrc|as de c|asses que ercapsu|ar dados e luroes.
Acluar coro lorrecedores de serv|os.
Tr:
o lderl|dade (del|r|da pe|a c|asse);
o Eslado (alr|oulos) - Cada ur correce e guarda os seus dados, ou seja os va|ores dos alr|oulos;
o Corporlarerlo - rlodos, laror del|r|dos pe|a c|asse. Todos os oojeclos da resra c|asse
saoer execular o resro corporlarerlo.
Co|aoora cor oulros oojeclos alravs da lroca de rersagers (|rvocaao de rlodos) para produz|r
resu|lados re|evarles para o dorir|o do proo|era
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 90
0s oojeclos sao rorra|rerle descr|los (alravs das c|asses) recorrerdo a rores, prorores, adjecl|vos ou
advro|os.
7.2 - Classes
0el|r|ao de ur corce|lo que lulurarerle ser |rslarc|ado.
0escreve ur corjurlo de oojeclos do resro l|po e cor a resra eslrulura |rlerra.
0escreve os alr|oulos (|rlorraao) e o corporlarerlo (rlodos) de ur oojeclo.
E |rslarc|ada para cr|ar oojeclos.
0el|r|r ura c|asse |rp||ca:
Espec|l|car os seus alr|oulos (var|ve|s)
Espec|l|car o corporlarerlo dos luluros oojeclos dessa c|asse (rlodos)
7.3 - Atributos
0el|rer caraclerisl|cas das luluras |rslrc|as de ura c|asse.
Tr ur rore ur|co derlro da resra c|asse, ras c|asses d|lererles poder ler alr|oulos cor o resro rore.
7.4 - Mtodos
0el|rer lurc|ora||dade das luluras |rslrc|as de ura c|asse.
3ao rorra|rerle descr|los recorrerdo a veroos, por |rd|carer a|gur l|po de acao.
Perr|ler rod|l|car ou |rlerrogar os oojeclos re|al|varerle ao seu eslado aclua|.
A ul|||zaao dos rlodos passa rorra|rerle por duas lases:
def|n|o (del|r|r o que e que ur rlodo saoe lazer ro ro|lo do oojeclo a que perlerce)
|nvocao (processo de erv|ar rersagers a ur oojeclo para que delerr|rado rlodo do seu
corporlarerlo seja execulado)
ur rlodo ler serpre ura ass|ralura, a qua| corsl|luida por:
l|po de relorro
rore
rurero e l|po de parrelros
0o|s rlodos lr a resra ass|ralura quardo esles e|ererlos sao |drl|cos er aroos. Nao possive| ra resra
c|asse a ex|slrc|a de rlodos cor a resra ass|ralura.
Nota:
Por corverao, er Java, os rores de c|asses corear por |elras ra|uscu|as (ex: NoreC|asse), ao passo que os
rores de oojeclos corear cor r|ruscu|as (ex: rore0ojeclo).
0s rores dos rlodos corear laror por r|ruscu|as (ex: roreVelodo).
0 lorralo gera| de ur rlodo o segu|rle:
// J vimos isto quando falmos de sub-programas!
tipoRetorno nomeMetodo(listaParametros) {
declaracoes;
instrues;
retorno (se for o caso);
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 91
7.5 - Instanciao de Classes
lrslarc|aao o processo de cr|ar |rslrc|as (oojeclos) de ura delerr|rada c|asse.
E ura operaao le|la soore a c|asse e rao soore os oojeclos (dado que os oojeclos j sao |rslrc|as rao laz serl|do
cr|ar |rslrc|as a parl|r de|es...).
Para cr|ar ura |rslrc|a de ura c|asse ul|||zaros o operador new, que quardo execulado a|oca a rerr|a
recessr|a para guardar o oojeclo er causa ra rerr|a.
8|ntaxe NF:
new <nome da classe> ();
ou
new <nome da classe> (<lista de parmetros actuais>);
Exemp|o 1:
Conta c = new Conta();
// A varivel c uma referncia a um objecto.
// A varivel, na verdade, serve como apontador para o
// endereo de memria que o objecto ir ocupar.
7.6 - Referenciar Objectos
Relererc|ar ur oojeclo cors|sle er ul|||z-|o para corcrel|zar delerr|rado oojecl|vo.
Pr|re|ro ur oojeclo ler de ser corslruido, ou seja ler de se a|ocar rerr|a para o guardar. Teros laror de |re
alr|ou|r ura relerrc|a (esles passos sao os que lorar le|los ro exerp|o 1).
Posler|orrerle, relererc|aros o oojeclo ul|||zardo a var|ve| que lo| cr|ada para o ele|lo e erv|ardo rersagers ao
oojeclo.
Essas rersagers, laror coro j rerc|orros, sao |rvocaoes dos rlodos que o oojeclo saoe execular, ou
seja, dos rlodos que lorar del|r|dos ra c|asse a que e|e perlerce.
Exemp|o 2:
System.out.println(OLA);
Ao escrever esla ||rra de cd|go eslaros a erv|ar ura rersager println cor o parrelro OLA ao oojeclo
System.out, ou seja, eslaros a |rvocar o rlodo println ro oojeclo System.out que o cara| de saida
que usaros para escrever lexlo ro crar.
Exemp|o 3:
contaDoBanco.recebeOrdenado (500.5);
Objecto
Mtodo
Parmetros:
dados fornecidos
ao mtodo
contaDoBanco.recebeOrdenado (500.5);
Objecto
Mtodo
Parmetros:
dados fornecidos
ao mtodo
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 92
Ao oojeclo contaDoBanco (parl|rdo do pressuposlo que perlerce a c|asse Conta j usada er exerp|os
arler|ores), eslaros a erv|ar ura rersager recebeOrdenado que ler coro parrelro o va|or 500.5. 0u
seja, eslaros a |rvocar o rlodo recebeOrdenado cor o parrelro 500.5 ro oojeclo contaDoBanco.
Vlodo esse que esl del|r|do ra c|asse Conta.
Exemp|o 4:
Conta c;
c = new Conta(1287,0);
c.obterSaldo(); /* envia a mensagem obterSaldo para o
objecto referenciado pela varivel c */
Conta b = c; /* as variveis b e c passam referenciar o
mesmo objecto */
E possive| a ex|slrc|a de ra|s do que ura relerrc|a para o resro oojeclo. Ex|sle aperas ura cp|a do oojeclo
ras vr|as var|ve|s capazes de o rar|pu|ar. Coro lodas se relerer ao resro oojeclo, se a|gura provocar ura
rod|l|caao soore e|e lodas as oulras vr essa rod|l|caao.
No exerp|o 1, quardo dec|arros a var|ve| o do l|po Conta e l|zeros b = c, passros a ler duas var|ve|s
capazes de rar|pu|ar o oojeclo que lo| cr|ado cor new Conta(1287,0).
3e |rvocarros o rlodo ooler sa|do soore as duas, ooleros o resro resu|lado (b.obterSaldo()ou
c.obterSaldo() aroos relorrar 0).
3e l|zerros b.recebeOrdenado(600.0) eslaros a ad|c|orar 00C ao sa|do da corla. Coro corsequrc|a,
se depo|s l|zerros c.obterSaldo() ver|l|caros que d 00, da resra lorra que b.obterSaldo()
laror va| resu|lar er 00. lslo porque aroas as var|ve|s rar|pu|ar o resro e ur|co oojeclo - b e c so
refernc|as para o mesmo objecto.
Exemp|o 5:
import java.io.*;
import java.util.Random;
public class Untitled1
{
public static void main(String[] args)
{
Random objectoDaClassRandom; // declarao
objectoDaClassRandom = new Random(); // instanciao
int var1, var2; double varD, varG;
var1 = objectoDaClassRandom.nextInt(); // mensagem
var2 = objectoDaClassRandom.nextInt(50); // mensagem
varD = objectoDaClassRandom.nextDouble(); // mensagem
varG = objectoDaClassRandom.nextGaussian(); // mensagem
System.out.println("var1= "+ var1 + " var2=" + var2);
System.out.println("varD= "+ varD + " varG=" + varG);
}
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 93
7.7 - Mtodos e Passagem de Parmetros (reviso)
0s rlodos sao ercarados coro suo-prograras. J v|ros que ur suo-prograra pode receoer parrelros que sao
dec|arados rura ||sla de parrelros lorra|s e quardo lr va|ores assoc|ados sao deror|rados de parrelros
corcrelos ou aclua|s.
v|ros laror que a passager de parrelros para ur suo-prograra (rlodo) pode ser le|la de duas lorras: por
va|or, ou por relerrc|a.
Em Java, rao se esco|re a lorra coro os parrelros sao passados:
Parrelros cujo l|po seja pr|r|l|vo (|rl, srorl, |org, douo|e, ooo|ear, crar,...) sao serpre passados por va|or.
0u seja, derlro do corpo do rlodo o que rar|pu|aros ura cp|a do va|or do parrelro ul|||zado ra
|rvocaao do rlodo.
0ados de l|pos que rao sejar pr|r|l|vos sao oojeclosl
o var|ve|s corresporderles a ur 0ojeclo rao arrazerar o 0ojeclo, ras s|r o erdereo de
rerr|a desse oojeclol (sao relerrc|as)
o 0uardo ur parrelro lorra| ura |rslrc|a de ura c|asse (ur 0ojeclo) o que passado para
o rlodo o erdereo de rerr|a orde esl arrazerado o 0ojeclo (a relerrc|a para o
oojeclo).
o E erlao as a|leraoes execuladas ro |rler|or do rlodo soore o Parrelro Forra| que seja ur
0ojeclo rel|ecler-se ro Parrelro Corcrelo cor que o rlodo lo| |rvocado.
o 0u seja, eslaros perarle ur caso de corporlarerlo er ludo equ|va|ente a passagem por
refernc|a
Exemp|o :
// Exemplo de um programa que demonstra a passagem por valor
class PassagemPorValor
{
// incrementa: recebe um inteiro x e soma-lhe o valor 1
public static void incrementa(int x) {
x = x + 1;
System.out.println (x = + x);
}
public static void main(String [] args) {
PassagemPorValor p;
p = new PassagemPorValor();
int y = 1;
System.out.println(y = + y);
p.incrementa(y);
System.out.println(y = + y);
}
}
// O valor da varivel x alterado,
// mas o valor da varivel y no
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 91
Exemp|o 7:
// Exemplo de um programa que demonstra a passagem por valor
public class PassagemPorValor
{
public static void main(String[] args)
{
int pcA = 10, pcB = 20;
System.out.println(pcA= + pcA + pcB= pcB);
metPassagemValor(pcA,pcB);//invocacao do mtodo metPassagemValor
System.out.println (pcA= + pcA + pcB= pcB);
}
static void metPassagemValor(int pfA, int pfB)
{
pfA = 111;
pfB = 222;
System.out.println(Como o que est a passar para dentro do");
System.out.println(mtodo so os valores 10 e 20 e no);
System.out.println(Os endereos de memria das variveis pcA e);
System.out.println (pcB, os seus valores no so alterados);
}
}
Exemp|o 8:
// Exemplo que demonstra o funcionamento
// das referncias para objectos quando passados
// como parmetros a mtodos
class Referencia {
// redefine: recebe uma referncia para uma conta bancria
// cria uma nova conta, credita a primeira e depois
// credita a nova conta acabada de criar
void redefine (Conta a) {
Conta b = new Conta(567-8,55);
a.creditar(100);
a = b;
a.creditar(100);
}
public static void main(String args[]){
Referencia r;
r = new Referencia();
Conta c = new Conta(123-4,12);
r.redefine(c);
System.out.println(c.getSaldo());
}
}
// no altera o valor de c
// altera o estado do objecto referenciado por c
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 95
7.8 - Construtores
ura das parles ra|s |rporlarles da prograraao or|erlada por oojeclos saoer ul|||zar correclarerle os
corslrulores de oojeclos.
0 corslrulor ur rlodo espec|a| ul|||zado aperas ra cr|aao e |r|c|a||zaao de oojeclos de ura delerr|rada c|asse.
0 seu ur|co e exc|us|vo oojecl|vo |r|c|a||zar os alr|oulos, ou seja, dar um estado |n|c|a| ao objecto.
Poder ex|sl|r corslrulores cor parrelros, corslrulores ser parrelros e corslrulores crarados oelau|r (erlre
oulros que rao varos rerc|orar agora).
E |rporlarle reler que o corslrulor sempre public e ler sempre o mesmo nome que a c|asse para a qua|
cr|ado.
Exemp|o 9:
public class Conta {
private double saldo;
public Conta() { // Construtor sem parmetros
saldo = 0.0; // quando um objecto do tipo conta criado
// com este construtor, fica com saldo 0
}
public Conta(double saldoInicial) { // Construtor com parmetros
saldo = saldoInicial; // quando um objecto do tipo Conta
// criado com este contrutor
// fica com um saldo cujo
// valor inicial dado pela varivel
// dada como argumento (saldoInicial)
}
Conta(String numeroConta, double saldoInicial)
{ // mais um exemplo de um construtor com parmetros
// numeroConta e saldoInicial so os parmetros formais...
numero = numeroConta;
saldo = saldoInicial;
}
}
0uardo rao se del|re rerrur corslrulor ra c|asse que espec|l|ca o oojeclo, a rqu|ra v|rlua| ercarrega-se de cr|ar
ur er lerpo de execuao, equ|va|erle a:
<nome da classe>(){}
Esle corslrulor |r|c|a||za os alr|oulos do oojeclo cor va|ores oelau|r, que corresporder a:
0 se o alr|oulo lor de l|po rurr|co (short, byte, int, long, double,float, char)
false se o alr|oulo lor de l|po boolean
null para relerrc|as
Nota: null represerla ura relerrc|a ru|a, rao ex|slerle, para ur oojeclo perlercerle a ura qua|quer c|asse.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 9
Exemp|o 10:
class Funcionario{
String nome, codigo; // Atributos
float salario;
Funcionario(String nomef,String ident,float sal){ // Construtor
nome=nomef;
codigo=ident;
salario=sal;
}
...
}
class admissao{
public static void main(String args[]){
Funcionario func = new Funcionario(Pedro,15080,150);
...
} // cria uma referncia chamada func para um Funcionrio que
// construdo com o valor inicial Pedro para o nome,
// 15080 para o cdigo e 150 para o salrio
}
Exemp|o 11:
// Exemplo que demonstra a utilizao de um construtor implcito
// ou default
class Funcionario{
// atributos
String nome, codigo;
float salario;
// admite: atribui novos valores aos atributos de um Funcionario
void admite(String nomef,String ident,float sal){
nome=nomef;
codigo=ident;
salario=sal;
}...
} // note-se que a classe Funcionrio no tem construtor!
class admissao{
public static void main(String args[]){
Funcionario ze = new Funcionario(); //chamada ao construtor
//default!
ze.admite(Z,15090,150); // invocao do mtodo admite
...
}
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 9Z
7.9 - Definio de Novas Classes
Para a|r de ul|||zar as c|asses pr-del|r|das pe|a ||rguager, rorra| que seja recessr|o del|r|r rovas c|asses que
ros ajuder a reso|ver os rossos proo|eras (a||s, |sso que leros v|rdo a lazer er ru|los dos exerp|os. A c|asse
Corla, por exerp|o, rao laz parle da ||rguager).
0el|r|r ura c|asse s|gr|l|ca ooedecer a segu|rle eslrulura:
0el|r|r alr|oulos (var|ve|s) de c|asse
0el|r|r alr|oulos (var|ve|s) de |rslrc|a (que vereros ra|s ad|arle) se lor recessr|o
0el|r|r corslrulores
0el|r|r rlodos
NF (s|mp||f|cada}:
<Definio de Classe> ::=
// comentrios sobre a classe
public class <nome da classe>
{
//definio dos atributos de Classe
<tipo1> <atributo1>;
<tipo2> <atributo2>, <atributo3>;
...
//definio dos atributos de Instncia
<tipo1> <atributo1>;
<tipo2> <atributo2>, <atributo3>;
// definio dos construtores
<construtores>
...
// definio dos mtodos de classe
static void <mtodo1>(){...}
static void <mtodo2>(<parmetros>){...}
static <tipo> <mtodo3>(){...}
static <tipo> <mtodo4>(<parmetros>){...}
// definio dos mtodos de instncia
void <mtodo1>(){...}
void <mtodo2>(<parmetros>){...}
<tipo> <mtodo3>(){...}
<tipo> <mtodo4>(<parmetros>){...}
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 98
Exemp|o 12:
// Definir uma Classe
public class A_MinhaClasse ()
{
// Atributo
double contaNoBanco;
// Mtodo
private static recebeOrdenado (double ordenado)
{
// Instruo
contaNoBanco = contaNoBanco + ordenado;
}
}
...
// Criar um objecto a partir da classe definida, ou seja,
// Instanciar a classe
A_MinhaClasse contaDoBanco = new A_MinhaClasse();
7.10 - Variveis de Classe
ura var|ve| de c|asse ur alr|oulo da c|asse que possu| ura caraclerisl|ca ru|lo espec|a|: lodos os oojeclos que
lorer cr|ados a parl|r dessa c|asse parl||rar o resro va|or para esse alr|oulo (la| coro parl||rar os rlodos que a
c|asse del|re).
var|ve|s de c|asse er Java sao del|r|das recorrerdo a pa|avra reservada static (Exerp|o: static double
valor_cambio_dolar).
0a resra lorra que ex|sler var|ve|s esll|cas laror ex|sler rlodos esll|cos. 0s rlodos esll|cos poder
ser |rvocados soore a c|asse, rao recessr|o cr|ar rerrura |rslrc|a da c|asse er que lorar dec|arados para os
poderros ul|||zar (ur oor exerp|o d|slo sao os rlodos del|r|dos ra c|asse Math).
E |rporlarle rerc|orar que os rlodos esll|cos aperas poder rar|pu|ar var|ve|s |oca|s ou erlao alr|oulos
esll|cos.
Exemp|o 13:
// Exemplo que demonstra a utilizao de atributos e mtodos estticos
class Produtoexportacao
{
String nome;
float preco_venda,preco_compra;
static float valor_dolar;
Produtoexportacao(String nome,float precov,float precoc)
{
this.nome=nome;
this.preco_venda=precov;
this.preco_compra=precoc;
}
...
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 99
static void cambio(float valor)
{
valor_dolar=valor;
}
}
class ComercioExterior{
public static void main(String args[])
{
float cotacao = 1.50;
// Chamada de mtodo esttico sem instanciao
Produtoexportacao.cambio(cotacao);
}
}
7.11 - Variveis de Instncia
As var|ve|s de |nstnc|a sao as var|ve|s rao esll|cas del|r|das rura c|asse, lora dos rlodos. 0s oojeclos
cr|ados a parl|r dessa c|asse possuer, cada ur de|es, ura cp|a dessa var|ve|.
0 va|or arrazerado er cada ura dessas cp|as corsl|lu| ura caraclerisl|ca ou propr|edades especil|ca desse
oojeclo.
Perlercer ao oojeclo coro ur lodo e rao a ur rlodo er parl|cu|ar.
7.12 - O Operador de Auto-Referenciao this
A pa|avra reservada this pode ser ul|||zada, derlro de ur o|oco de ur rlodo, para reler|r o oojeclo aclua|.
this ur 'aporlador ou ura relerrc|a para o oojeclo er queslao. usardo esle aporlador, ur rlodo pode
aceder a lodas os alr|oulos da c|asse a que perlerce.
this cr|ado auloral|carerle quardo ur oojeclo crara ur rlodo e 'aporla para o prpr|o oojeclo que crarou
o rlodo.
Exemp|o 14:
class Funcionario{
String nome, codigo;
float salario;
Funcionario(String nome,String codigo,float salario)
{
this.nome=nome; // Acesso aos atributos
this.codigo=codigo;
this.salario=salario;
} // neste caso o operador this ajuda ainda a resolver
// ambiguidades. Caso contrrio como saberamos de que nome
// codigo ou salario se estava a falar?
// nome=nome no tem significado!
// qual deles o atributo da classe funcionrio e qual o
// que foi passado como parmetro?
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 100
7.13 - Exerccios Prticos
0bject|vos da 8r|e:
Cor esla sr|e de proo|eras prelerde-se que o a|uro:
. Correa as oases da prograraao or|erlada pe|os oojeclos
Z. 3a|oa cr|ar rovas c|asses e |rslarc|-|as
Parte | - 0uestes Ter|cas
10. lrd|que a|guras d|lereras erlre a prograraao eslrulurada e a prograraao or|erlada aos oojeclos.
11. ura c|asse e ur oojeclo sao a resra co|sa? 3e rao sao, erlao qua| (ou qua|s) as d|lereras erlre esles
do|s corce|los?
12. No seu porlo de v|sla o que sao alr|oulos, rlodos e rersagers?
13. 0ua|s sao as |rslruoes que recess|la de ul|||zar para proceder a |rslarc|aao de ura c|asse? 0 ur
exerp|o.
11. E possive| ra resra ap||caao ul|||zar ra|s do que ura relerrc|a para o resro oojeclo, lerdo ass|r
lorras d|lererles de rar|pu|ar ura cp|a ur|ca de |rlorraao. verdade|ro ou la|so? 3e lor verdade,
corerle a al|rraao jusl|l|cardo e d exerp|os.
15. Para que serve a |rslruao relurr?
1. 0ua|s sao as lorras que correce para erv|ar rersagers a ur oojeclo?
1Z. 0 que ur corslrulor?
18. 0ue l|pos de corslrulores correce?
19. ur corslrulor pode ou rao ler parrelros. E l|po de relorro, ler?
20. 0|ga o que erlerde por var|ve| de c|asse e var|ve| de |rslrc|a. Verc|ore as d|lereras erlre aroas e
jusl|l|que a resposla.
21. Coro pode cr|ar e ul|||zar var|ve|s de c|asse? lslo , qua|s sao os passos a dar? Jusl|l|que e d exerp|os.
22. Para ul|||zar ura var|ve| e/ou ur rlodo esll|co de ura c|asse recess|la de |rslarc|ar a c|asse?
Jusl|l|que.
23. Vlodos esll|cos poder relererc|ar alr|oulos que rao sejar esll|cos? Jusl|l|que.
21. 0 que e para que serve o operador lr|s?
Parte || - Ap||cao de 6once|tos Usando Pequenos Programas
Exerc. 1: 0ado o leorera de P|lgoras: '0 quadrado da r|polerusa |gua| a sora dos quadrados dos calelos
A||nea A
Proporra ur a|gor|lro para ca|cu|ar a r|polerusa usardo o Teorera de P|lgoras. Escreva-o er pseudo cd|go ou
l|uxograra.
A||nea
Escreva o cd|go de ur prograra er Java para elecluar o c|cu|o ro corpulador
A||nea 6
E|aoora o rlodo para lazer o ca|cu|o e a|lera o prograra para usar o rlodo.
A||nea 0
lderl|l|que ro seu prograra orde eslao as var|ve|s |oca|s
A||nea E
lderl|l|que ro seu prograra se r e orde eslao as var|ve|s g|ooa|s
A||nea F
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 101
Para o rlodo |rd|que orde eslao a |rvocaao, os parrelros lorra|s e os parrelros aclua|s.
Exerc. 2: ur porlo ro espao del|r|do pe|as suas coorderadas carles|aras x e y.
A||nea A
Escreva o cd|go de ura c|asse Java para corcrel|zar a del|r|ao de porlo.
A||nea
Nessa c|asse |rp|ererle rlodos para:
1. 0elerr|rar a d|slrc|a erlre do|s porlos
2. 0elerr|rar a d|slrc|a de ur porlo a or|ger
A||nea 6
Escreva o rlodo ra|r, orde receoer do lec|ado as coorderadas de do|s porlos e roslre o resu|lado do c|cu|o da
d|slrc|a de cada ur de|es a or|ger e do c|cu|o da d|slrc|a erlre s|.
A||nea 0
lderl|l|que ro seu prograra orde eslao as var|ve|s |oca|s.
A||nea E
lderl|l|que ro seu prograra se r e orde eslao as var|ve|s g|ooa|s.
A||nea F
Para o rlodo |rd|que orde esla as |rvocaao, os parrelros lorra|s e os parrelros aclua|s.
Exerc. 3: A lurao para o c|cu|o de coro|raoes de r p a p del|r|da por:
!
!( )!
n
p
n
C
p n p
=
Escreva ur prograra que ca|cu|e Cpr e |rpr|ra os resu|lados para va|ores de r e de p (rureros |rle|ros) dados
pe|o ul|||zador. 0 prograra deve lazer uso da c|asse laclor|a| que serve para ca|cu|ar o laclor|a| de ur rurero e |re
lorrec|da er arexo:
public class Factorial{
static long calcula(int n) {
if (n < 2) return 1;
return n*f(n-1);
}
}
Exerc. 1: lrd|que qua| o resu|lado v|sua||zado ro ecra aps a execuao do segu|rle prograra:
public class VariavelDeClasse {
static int n = 2;
String descricao;
public static void main(String[] args)
{
VariavelDeClasse v1 = new VariavelDeClasse();
v1.n = 1;
VariavelDeClasse.n--;
v1.descricao = "Ola";
VariavelDeClasse v2 = new VariavelDeClasse();
v2.n = 2;
VariavelDeClasse.n++;
v2.descricao = "isto e um teste";
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 102
System.out.print(v1.descricao + " ");
System.out.print(v1.n);
System.out.print(" ** ");
System.out.print(v2.descricao + " ");
System.out.print(v2.n);
}
}
a) 0|a 1 |slo e ur lesle 2
o) 0|a 2 |slo e ur lesle 3
c) 0|a 3 |slo e ur lesle 3
d) 0|a 0 |slo e ur lesle 3
Exerc. 5: No exercic|o arler|or, |rd|que orde se ercorlra ura var|ve| de c|asse e ura var|ve| de |rslrc|a.
Exerc. : Cr|e ur prograra que delerr|re a parl|r das coorderadas de 3 porlos, lorrec|das pe|o ul|||zador, o l|po de
lr|rgu|o que eslas represerlar (equ||lero, |ssce|es ou esca|ero). 0eve laror roslrar se se lrala ou rao de ur
lr|rgu|o reclrgu|o.
Nota:
1. Tr|rgu|o equ||lero ler os 3 |ados |gua|s.
2. Tr|rgu|o |ssce|e ler 2 |ados |gua|s.
3. Tr|rgu|o esca|ero ler os 3 |ados d|lererles.
1. ur lr|rgu|o reclrgu|o quardo ver|l|ca a propr|edade dada pe|o leorera de P|lgoras: o quadrado da
r|polerusa |gua| a sora dos quadrados dos calelos.
0eve |rp|ererlar:
1. A c|asse porlo para represerlar as coorderadas e
2. A c|asse lr|argu|o para represerlar lr|rgu|os.
3. Er separado ler a c|asse que corlr o prograra pr|rc|pa| e laz uso das oulras duas para curpr|r os
oojecl|vos prelerd|dos.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 103
8 - Recursividade
8.1 - Definies
A repel|ao de execuao de ur grupo de |rslruoes para d|lererles va|ores de dados pode ser |rp|ererlada de duas
lorras:
lleral|va (ou exp|ic|la).
Recurs|va (ou |rp|ic|la). 0uardo ur rlodo esl del|r|do er lerros de|e prpr|o.
Por exerp|o, vejaros o c|cu|o do laclor|a| de ur rurero ralura|. Esle pode ser le|lo de duas lorras:
Forra |leral|va
rl = r(r-1)(r-2).1
Forra recurs|va (del|r|rdo-se ura lorra recurs|va da lurao)
1l=1
rl = r(r-1)l
ver|l|ca-se que recorre a s| prpr|a, dai o rore de lurao recurs|va
Nas |rp|ererlaoes recurs|vas, as duas corporerles pr|rc|pa|s de ura del|r|ao recurs|va sao as segu|rles:
ur caso e|ererlar (ou cr|lr|o de parager)
No exerp|o do c|cu|o do laclor|a| esle cr|lr|o dado por 1l=1.
0 caso gera|, ou parle recurs|va, rl=r(r-1)l
A recurs|v|dade ru|lo usada por exerp|o ro c|cu|o de proo|eras ralerl|cos, corludo a recurs|v|dade pode
causar proo|eras de rerr|a er v|rlude da dup||caao de var|ve|s |oca|s, |rc|u|rdo os parrelros.
Exemp|os:
No exerp|o segu|rle ser apreserlado o c|cu|o do laclor|a| de ur rurero ralura| alravs da lorra |leracl|va e
recurs|va.
|terat|va
public class FacInt {
public static void main(String[] args)
{
for (int i = 0; i < 9; i++)
System.out.println("f(" + i + ") = " + factorial(i));
}
static long factorial(int n)
{
long f = 1;
while (n > 1)
f *= n--;
return f;
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 101
}
}
/*
Output:
f(0) = 1
f(1) = 1
f(2) = 2
f(3) = 6
f(4) = 24
f(5) = 120
f(6) = 720
f(7) = 5040
f(8) = 40320
*/
Recurs|va
public class TestFactorialRec
{ public static void main(String[] args)
{
for (int i = 0; i < 9; i++)
System.out.println("f(" + i + ") = " + fact(i));
}
static long fact(int n)
{
if (n < 2) return 1;
return n*fact(n-1);
}
}
/*
Output:
f(0) = 1
f(1) = 1
f(2) = 2
f(3) = 6
f(4) = 24
f(5) = 120
f(6) = 720
f(7) = 5040
f(8) = 40320
*/
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 105
veja-se para esle u|l|ro caso o raslo do c|cu|o do laclor|a|
l(3) = 3 l(2) =
j
2 l(1) = 2
j
1 1 = 1
Para l|ra||zar, repare-se que:
Nura |rp|ererlaao |leral|va o c|c|o esl preserle exp||c|larerle coro eslrulura de repel|ao.
Nura |rp|ererlaao recurs|va o c|c|o esl preserle, ras rascarado por ura eslrulura de se|ecao.
8.2 - Exerccios prticos
Exerc.1 - Faa ura lurao recurs|va que ca|cu|e o va|or de 3, orde 3 = 1 1/3 1/5 1/N.
Exerc.2 - Escreva ura lurao recurs|va que ca|cu|a e relorra o va|or de 3, orde 3 = 1 1/1l l 1/3l 1 /Nl.
Exerc.3 - Escreva ur rlodo recurs|vo que ca|cu|a e relorra o va|or de 3. 3 = 2/1 5/5 10/ 1Z/Z 2/8 ...
(r21)/(r3)
Exerc.1 - Escreva ur rlodo recurs|vo que ca|cu|e o va|or do co-sero de x alravs de 20 lerros da sr|e segu|rle:
co-sero(x) = 1 - x2 x1 - x ....2l 1l l
Exerc.5 - Escreva ura lurao recurs|va que ca|cu|a e relorra a lurao polrc|a X".
Exerc. - Faa ur proced|rerlo recurs|vo que ordere er order crescerle os r e|ererlos de ur veclor de |rle|ros
de r pos|oes.
Exerc.Z - Faa ura lurao recurs|va que ca|cu|e o rdc erlre do|s rureros:
rdc(r1,r2) = r1 , se r2 = 0
rdc(r1,r2) = rdc( r2, r1 rod r2), se r2 l= 0
Exerc.8 - 0ada a lurao X del|r|da aoa|xo:
A|gor|lro X(r,r: |rle|ro): |rle|ro;
inicio
se (n=m) ou (m=0)
entao
X = 1
senao
X = X(n-1,m) + X(n-1,m-1)
fim
0ua| o va|or de X(5,3) ?
0uarlas craradas serao le|las ra ava||aao ac|ra ?
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 10
va|or 1
3aida
Prograra
var|ve| 1
var|ve| 2
var|ve| 3
va|or 2
va|or 3
va|or 1
va|or 2
va|or 3
3aida
va|or 1
va|or r
...
Prograra
var|ave|
9 - Tabelas
9.1 - Motivao
ur prograra que rar|pu|e vr|os va|ores, arrazera esles va|ores er a|guras var|ve|, laz o respecl|vo
processarerlo e erv|a o resu|lado para o exler|or (l|g.-1).
F|gura 11. Arrazerarerlo, processarerlo de va|ores e saida.
Ner serpre os prograras rar|pu|ar lao poucos va|ores, poderdo recess|lar de rar|pu|ar vr|os va|ores. Esles
poder ser ||dos e processados ur de cada vez(l|g.-2).
F|gura 12. Var|pu|aao de vr|os va|ores
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 10Z
lrag|reros agora ur prograra que |r |er vr|os va|ores e |rpr|r|-|os pe|a order |rversa. 0 prograra deve
process-|os 'quase lodos ao resro lerpo para produz|r a saida desejada (l|g. 3).
F|gura 13. Le|lura de vr|os va|ores e sua v|sua||zaao pe|a order |rversa
A a|lerral|va para esle l|po de s|luaoes o uso de Taoe|as, que rao sao ra|s do que ura ||sla de va|ores. Ass|r,
para o exerp|o da l|g. 3 poder|aros arrazerar os va|ores rura var|ve| do l|po laoe|a e aceder aos va|ores pe|a
order desejada (l|g.1).
F|gura 11. Arrazerarerlo de vr|os va|ores rura laoe|a.
va|or 1
3aida
Prograra
...
var|ve| 1
va|or 2
va|or 3
va|or 1
va|or 5
va|or r
var|ve| 2
var|ve| 3
var|ve| 1
var|ve| 5
var|ve| r
...
va|or 1
3aida
Prograra
var|ve|
Taoe|a
va|or 2
va|or 3
va|or 1
va|or 5
va|or r
...
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 108
9.2 - Tabela Unidimensional
Ex|sler duas lorras de dec|arar ura laoe|a er Java:
(1) <l|po> <var|ve|> [ |
(2) <l|po> [ | <var|ve|>
Exemp|os .
(1) |rl lao [ | ;
(2) |rl [ | lao ;
9.2.1 - Variveis Simples e do tipo tabela
Fazerdo ura pequera rev|sao soore as var|ve|s s|rp|es, eslas :
arrazerar ur s va|or.
sao cr|adas quardo da sua dec|araao.
arrazerar l|pos pr|r|l|vos, que sao rar|pu|ados por va|or.
As laoe|as:
sao ur agragado de va|ores, lodos do resro l|po.
eslao |rdexadas a parl|r de 0.
ura vez cr|adas possuer ur lararro l|xo.
sao cr|adas er java d|rar|carerle, ou seja, er lerpo de execuao.
o seu espao auloral|carerle reaprove|lado quardo de|xar de eslar relererc|ados.
9.2.2 - Passos para utilizar uma tabela
0s passos para ul|||zar ura laoe|a sao lrs, dec|araao, |rslarc|aao e relererc|aao:
1) 0eclarao :
int [] tab; // declara uma referncia para uma tabela de inteiros
com qualquer dimenso, iniciada com null
2) lnstanciao :
tab = new int[5] ; //criao de uma tabela com capacidade para 5
inteiros
ru|| lao
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 109
ura laoe|a er java serpre cr|ada d|rar|carerle cor o operador new
0 ird|ce dos e|ererlos corea er 0 e lerr|ra er lararro 1, ou seja, ura laoe|a de lararro
N |rdexada de 0 a N-1. Caso se exceda a d|rersao da laoe|a gerada ura excepao.
0epo|s de |rslarc|ado poderos saoer a sua d|rersao corsu|lardo o alr|oulo s de |e|lura
length ( exp: tab.length).
As laoe|as de va|ores rurr|cos sao |r|c|a||zadas a zero.
A |rslarc|aao (cr|aao) de ura laoe|a pode ser le|la ro rorerlo de dec|araao, se se |rd|car o corleudo.
int tab [ ] = {1,1,2,3,5,8,13,34}; // criada uma tabela com
// 8 elementos
3) Referenciao :
tab[1] = 12; // o elemento com o ndice 1 da tabela
// passa a armazenar o valor 123
lao 1 12
2 3
lao[0| lao[3|
lao[2|
lao[1|
5 8 13 31
... lao[Z|
lao 1 1
2 3
lao[0| lao[3|
lao[2|
lao[1|
5 8 13 31
... lao[Z|
lao
lao[0| lao[1| lao[2| lao[3| lao[1|
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 110
Exemp|o do uso de tabe|a e var|ve|s s|mp|es
Uso Var|ve| 8|mp|es Tabe|a
Atr|bu|o valor = 10.6; tab[3] = 10.6;
Entrada valor = Le.umDouble ( ); tab[3] = Le.umDouble ( );
8a|da System.out.println(valor); System.out.println(tab[3]);
Expresso x = valor / 2; x = tab[3] / 2;
6omparao if (valor > 5.0); if (tab[3] > 5.0);
Parmetros Testa(valor); Testa(tab[3]);
Exemp|os de acesso aos e|ementos de uma tabe|a:
Exemp|o 1
Nesle exerp|o prelerde-se ca|cu|ar o va|or rd|o da p|uv|s|os|dade er 18 aros. Para la|, cr|a-se ura laoe|a que
guarde 18 va|ores e preercresse a laoe|a cor os va|ores da p|uv|s|os|dade:
double [ ] pluv = new double [18];
pluv [0] = 30.55;
pluv [1] = 23.94;
.
//restante valores
0epo|s eleclua-se a sora dos va|ores, que pode ser le|la por duas lorras :
double total = pluv[0] + pluv[1] + pluv[2] + pluv[3]
+ pluv[4] + pluv[5] + pluv[6] + pluv[7]
+ pluv[8] + pluv[9] + pluv[10] + pluv[11]
+ pluv[12] + pluv[13] + pluv[14] + pluv[15]
+ pluv[16] + pluv[17];
ou
double total = 0.0;
for ( int ano = 0; ano < pluv.length; ano ++)
total = total + pluv[ano];
Nota :
re|erore-se que o ird|ce do veclor corea er 0 e pode |r al length-1
Cor o va|or da sora elecluado, poderos ca|cu|ar a rd|a e |rpr|r|r para o ecrar o va|or:
System.out.println(O valor mdia de pluviosidade +(total/pluv.length));
Exemp|o 2
0 exerp|o segu|rle ler coro oojecl|vo ped|r ao ul|||zador o va|or de c|rco |rle|ros, |rpr|r|r ro ecrar os va|ores
|rlroduz|dos, ca|cu|ar a sora, a rd|a e o va|or rx|ro desles va|ores (l|g. 5).
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 111
import Le;
public class MaxTotal{
public static void main(String[] args)
{
int n1[] = new int[5];
int soma=0;
int max=0;
//Ler array
for(int i=0;i<5; i++) {
n1[i]=Le.umInt();
System.out.println(Introduza um valor: );
}
//Mostrar array
for(int i=0;i<5; i++)
System.out.println("i["+i+"]="+n1[i]);
//Calcular mximo, total
for(int i=0;i<5; i++){
soma+=n1[i];
if (max<n1[i])
max=n1[i];
}
//Mostrar resultados
System.out.println("Total:"+soma);
System.out.println("Media:"+(float)soma/n1.length);
System.out.println("Maximo:"+max);
//Nota: na media necessrio fazer uma divisao
//de floats.
}
F|gura 15. Cr|aao e preercr|rerlo da laoe|a do exerp|o 2.
3
1 1
Tabela criada com 5
elementos indexados
de 0 a +
Depois de uma
iteraao
do ciclo
10
11
2
3
1
Depos de duas
iteraoes
do ciclo
Depos das cinco
iteraoes
do ciclo
0
1
2
3
+
indices
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 112
9.2.3 - Acesso a elementos no existentes
Cors|dere o exerp|o 2, do porlo 1.2.1, ro qua| cr|ado e preercr|do ur arra, de c|rco e|ererlos. Caso se lerlasse
aceder a ur e|ererlo |rex|slerle, durarle a execuao do prograra ser|a deleclado ur erro:
n1 [5] = 4; //acesso a um ndice que no existe
0 erro deleclado ser|a:
Java.lang.ArrayIndexOutOfBoundsException:19
At Teste.main(Test.java)
9.3 - Passagem de tabelas como parmetros de mtodos
ura laoe|a pode ser passada coro parrelro a ur rlodo. 0 que passado coro parrelro (por va|or) a
relerrc|a da laoe|a, o que s|gr|l|ca a a|leraraao de ur e|ererlo da laoe|a derlro do rlodo, a|lera a laoe|a or|g|ra|.
Taror possive| passar coro parrelro ur e|ererlo de ura laoe|a, desde que se s|gar as regras relererles ao
seu l|po.
E possive| passar coro parrelro ur e|ererlo de ura laoe|a, desde que se s|gar as regras relererles ao seu l|po.
Exemp|o:
public class programa {
public static void main(String args[]) {
int [] array = new int[2];
array[0]=12;
array[1]=10;
for(int i=0;i<array.length;i++)
System.out.println(array[i]);
metodo_1(array);
for(int i=0;i<array.length;i++)
System.out.println(array[i]);
metodo_2(array[1]);
for(int i=0;i<array.length;i++)
System.out.println(array[i]);
}
public static void metodo_1(int [] varray) {
for(int i=0;i<array.length;i++)
array[i]=array[i]+1;
}
public static void metodo_2(int var) {
System.out.println(O valor recebido :+var);
}
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 113
/*
O output do cdigo atrs apresentado, luz dos conceitos introduzidos
:
12
10
13
11
O valor recebido 11.
13
11
*/
9.4 - Tabela Multidimensional
ura laoe|a ur|-d|rers|ora| represerla ura ||sla de va|ores erquarlo que ura laoe|a ru|l|d|rers|ora| represerla
ura ralr|z, cor ||rras e co|uras.
Cada e|ererlo de ura laoe|a ru|l|d|rers|ora| relererc|ado usardo do|s ird|ces.
Er Java, ura laoe|a ru|l|d|rers|ora| ura laoe|a de laoe|as, ou seja ura laoe|a ur|-d|rers|ora| er que cada
e|ererlo ura relerrc|a para ur oojeclo do l|po laoe|a.
0ec|arao:
<tipo> [ ] [ ] <varivel>
Exemp|o
int [ ] [ ] tab;
0 cd|go ac|ra dec|ara lao coro ura laoe|a o|d|rers|ora| de |rle|ros ou coro ura laoe|a de laoe|as, er que
aperas se cr|a ura relerrc|a.
A |r|c|a||zaao que cr|a a laoe|a cor os corpr|rerlos respecl|vos:
1) tab = new int [2] [3];
ou
2) tab [][]={1,2,3} {4,5,6};
lao[0| 1
2 3
1
5
lao[1|
lao lao[0|[0|
lao[1|[2|
lao[0|[2|
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 111
Para percorrer a laoe|a usar-se c|c|os for ercadeados.
Exemp|o
public class Matriz {
public static void main(string args[]) {
int tab[][] = {{ 1, 2, 3 }, { 4, 5, 6 }};
for(int i = 0; i < tab.length; i++)
for(int j = 0; j < tab[i].length; j++)
System.out.print("tab[" + i + "][" + j + "] = " + tab[i][j]);
}
}
0 Java ura ||rguager lorlererle l|pada, serdo porlarlo o rurero de d|rersoes da ralr|z e o l|po dos e|ererlos
sao del|r|dos. 0 rurero de e|ererlos er cada d|rersao pode var|ar e o corleudo dos e|ererlos de ura laoe|a
pode ser de qua|squer oojeclos ou l|pos pr|r|l|vos.
Exemp|o
0 exerp|o segu|rle roslra ura ralr|z 30 de veclores de corpr|rerlo var|ado.
Random gerador = new Random();
Integer a3[][][] = new Integer[gerador.nextInt(7)][][];
for(int i = 0; i < a3.length; i++)
{
a3[i] = new Integer[gerador.nextInt(7)][];
for(int j = 0; j < a3[i].length; j++)
{
a3[i][j] = new Integer[gerador.nextInt(5)];
for(int k = 0; k < a3[i][j].length; k++)
a3[i][j][k] = new Integer(i*j+k);
}
}
for(int i = 0; i < a3.length; i++)
for(int j = 0; j < a3[i].length; j++)
for(int k = 0; k < a3[i][j].length; k++)
System.out.print("a3["+i+"]["+j+"]["+k+"] = " + a3[i][j][k]);
9.5 - Tabelas de Objectos
As laoe|as de oojeclos rao sao ra|s do que laoe|as er que cada e|ererlo ura relerrc|a a ur oojeclo de ura
delerr|rada c|asse. Todas as laoe|as de oojeclos sao |r|c|a||zadas a null.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 115
Exemp|os:
Tabe|a de 8tr|ngs
No exerp|o er segu|da apreserlado dec|arada ura laoe|a de 3lr|rgs que rao ra|s do que ura laoe|a er que
cada e|ererlo da laoe|a ura relerrc|a a ura String.
final int NUM_NOMES = 5;
// Declarao e instanciao
String[] nome = new String [NUM_NOMES ] ;
// Inicializao ou Atribuio
nome[0] = "Smith";
nome[1] = "Jones";
nome[2] = "Miller";
nome[3] = "Lui";
nome[4] = "Gonzales";
// Sada
System.out.println ("Resultado:");
for (int indice = 0; indice < nome.length; indice ++)
System.out.println (nome[ + indice + "]: " + nome[indice]);
Tabe|a de 0bjectos da c|asse pessoa
0 cd|go da c|asse pessoa, apreserla-se er segu|da:
class Pessoa
{
String nome;
int idade;
String BI;
public Pessoa (String pfN, String pfC, int pfI)
{
nome = pfN;
BI = pfC;
idade = pfI;
}
public void apresentar()
{
System.out.println(Meu nome + nome);
System.out.println(Tenho + idade + anos);
}
public String getBI()
{
return BI;
}
public String toString()
{
return (nome=+nome+com +idade+anos);
}
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 11
A c|asse segu|rle lesla a ul|||zaao da c|asse pessoa.
public class Teste
{
public static void main (String args[])
{
Pessoa Pedro;
Pessoa Nuno;
Pedro = new Pessoa(Pedro Martins,403.234.567, 34);
Nuno = Pedro;
Pedro.apresentar();
Nuno.apresentar();
System.out.println(O BI de Pedro e +Pedro.getBI());
}
}
Er segu|da apreserla-se o cd|go orde se cr|a ura laoe|a de oojeclos da c|asse pessoa, que ura laoe|a er que
cada e|ererlo ura relerrc|a a ur oojeclo da c|asse pessoa.
public class TabelaDeObjectos
{
public static void main(String[] args)
{
//Declarao e Instanciao da tabela
Pessoa[ ] grupo = new Pessoa [4];
//Inicializao dos elementos da tabela (Atribuio)
grupo[0] = new Pessoa("Pedro Sousa", "403234567",34);
grupo[1] = new Pessoa("Antnio Pereira", "233544325",37);
grupo[2] = new Pessoa("Joo Silva", "763234567",40);
grupo[3] = new Pessoa("Joaquim Feliz", "213456567",20);
//Sada
System.out.println("Contedos de cada elemento da tabela:");
for (int pessoa = 0; pessoa < 4; pessoa ++)
System.out.println((pessoa + 1) + " Pessoa do Grupo: " +
grupo[pessoa].toString );
}
}
F|gura 1. Exerp|o grl|co dos resu|lados ool|dos cor o cd|go arler|or
Tabe|a d|nm|ca
No exerp|o apreserlado er segu|da ser cr|ada ura laoe|a d|rr|ca, ||da ura ||sla de rureros |rle|ros lerr|rada
por 0 e depo|s cor os va|ores |||dos ca|cu|ada a rd|a e o va|or rx|ro.
import Le;
public static void main(String args[])
Pedro
3ousa
Arlr|o
Pere|ra
Joao 3||va Joaqu|r
Fe||z
grupo[0| grupo[1| grupo[2| grupo[3|
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 11Z
{
//Declarao de uma tabela de inteiros com
// dimenso ainda indefinida
int tab[ ]={};
int soma=0;
int max=0;
int i=1;
//Ler 1 valor
System.out.print(Insira o 1 inteiro:> );
int n =Le.umInt();
while (n!=0)
{
//criar tabela temporria
int tabTemp[]=new int[tab.length+1];
//copiar valores
for(int j=0;j<tab.length;j++)
tabTemp[j]=tab[j];
//inserir novo valor
tabTemp[tabTemp.length-1]=n;
//colocar a tabela temporria na definitiva
tab = tabTemp;
System.out.print(Insira o + j + inteiro:> );
n = Le.umInt();
}
//Mostrar tabela
for(i=0; i<tab.length; i++)
System.out.println(tab[ + i + "]="+ tab[i]);
//Calcular o valor mximo e a soma total
for(i=0; i<tab.length; i++)
{
soma+ = tab[i];
if (max < tab[i])
max = tab[i];
}
//Mostrar resultados
System.out.println("Total:"+soma);
//Nota: na media necessrio fazer uma divisao
//de floats.
System.out.println("Media:"+(float)soma/n1.length);
System.out.println("Maximo:"+max);
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 118
}
L|sta Te|efn|ca
No exerp|o segu|rle prelerde-se cr|ar ura ||sla le|elr|ca. Para la|, cr|a-se a c|asse Corlaclo, cujos alr|oulos sao o
rore e o le|elore da pessoa:
public class Contacto {
//Atributos
String nome;
int telefone;
//Construtores
public Contacto(String nomeContacto, int telefoneContacto)
{
nome=nomeContacto;
telefone=telefoneContacto;
}
//Mtodos
public String mostrarContacto()
{
return nome + " - " + telefone;
}
public int obterTelefone()
{
return telefone;
}
public String obterNome()
{
return nome;
}
}
Er segu|da vereros a c|asse L|sla le|elr|ca ra qua| rar|pu|ado ura laoe|a de oojeclos do l|po Corlaclo:
public class ListaTelefonica {
//Atributos
private static final int MAXCONTACTOS= 20;
private Contacto contactos [] = new Contacto[MAXCONTACTOS];
private int nContactos=0;
//Construtores
public ListaTelefonica(){
}
//Mtodos
public void adicionar(){
String nome;
int telefone;
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 119
System.out.println("Introduza o nome:");
nome= Le.umaString();
System.out.println("Introduza o telefone:");
telefone= Le.umInt();
Contacto c = new Contacto(nome,telefone);
contactos[nContactos]=c;
nContactos++;
}
public void mostrar(){
for ( int i=0; i<nContactos; i++)
System.out.println(contactos[i].mostrarContacto());
}
public void procurar(){
System.out.println("Qual o telefone:");
int telefone=Le.umInt();
int i=0;
while(i<nContactos && contactos[i].obterTelefone()!=telefone)
i++;
if (i!=nContactos)
System.out.println(contactos[i].mostrarContacto());
else
System.out.println("O nmero no se encontra na lista.");
}
public void ordenar(){
quickSort(0, nContactos-1);
}
private void quickSort( int pri, int ult)
{
int i = pri;
int j = ult;
if (pri > ult)
return;
String pivot = contactos[(pri + ult)/2].obterNome();
do
{
while (contactos[i].obterNome().compareToIgnoreCase(pivot) < 0)
i++;
while (contactos[j].obterNome().compareToIgnoreCase(pivot) > 0)
j--;
if (i <= j)
trocaContactos(i++, j--);
}
while (i <= j) ;
quickSort(pri, j);
quickSort(i, ult);
}
private void trocaContactos(int i, int j){
Contacto tmp = contactos[i];
contactos[i] = contactos[j];
contactos[j] = tmp;
}
//Mtodo Main
public static void main(String[] args)
{
ListaTelefonica listaTelefonica = new ListaTelefonica();
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 120
int seleccao;
do
{
System.out.println("Organizer");
System.out.println("");
System.out.println("1 - Adicionar");
System.out.println("2 - Mostrar");
System.out.println("3 - Procurar");
System.out.println("4 - Ordenar");
System.out.println("5 - Sair");
System.out.println("_______________________");
System.out.println("Qual a sua escolha?");
seleccao = Le.umInt();
switch(seleccao){
case 1:
listaTelefonica.adicionar();
break;
case 2:
listaTelefonica.mostrar();
break;
case 3:
listaTelefonica.procurar();
break;
case 4:
listaTelefonica.ordenar();
break;
case 5:
System.out.println("Adeus.");
break;
default:
System.out.println("Opo errada. Tente de Novo.");
break;
}
}
while(seleccao != 5);
}
}
9.6 - Classe Vector
9.6.1 - Introduo
A c|asse Vector laz parle do package java.util e lurc|ora de lorra |drl|ca a ura laoe|a, perr|l|rdo a
arrazerarerlo de va|ores e a relerrc|a a esles alravs de ur ird|ce. A grarde d|lerera erlre ura laoe|a e ur
oojeclo do l|po Vector que esle pode crescer e d|r|ru|r d|rar|carerle er lararro, erquarlo que ura laoe|a
ler serpre ur lararro l|xo.
0ulra d|lerera cors|sle ro laclo de ur oojeclo do l|po veclor rao ser dec|arado para guardar ur l|po de va|or. ur
oojeclo do l|po Vector gere ura ||sla de relerrc|as para a c|asse Object, perr|l|rdo ass|r guardar qua|quer
l|po de va|or.
9.6.2 - Alguns mtodos da classe Vector
Htodo 0escr|o
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 121
Vector ( ) Cr|a ur veclor vaz|o
void addElement (Object obj) Ad|c|ora o oojeclo espec|l|cado ao l|r
do veclor
void insertelementAt (Object obj, int index) Ad|c|ora o e|ererlo ro ird|ce
espec|l|cado
Object remove ( int index) Rerove ur oojeclo do ird|ce
espec|l|cado e relorra-o
Boolean removeElement (Object obj) Rerove a pr|re|ra ocorrrc|a do
oojeclo espec|l|cado.
void removeElementAt( int index) Rerove ur oojeclo do ird|ce
espec|l|cado
void clear ( ) Rerove lodos os e|ererlos do veclor
Boolean contains (Object obj) Relorra lrue se o oojeclo esl ro veclor
int indexOf (Object obj) Relorra o ird|ce do oojeclo
espec|l|cado. Relorra -1 caso o oojeclo
rao ex|sla.
Object elementAt (int index) Relorra o 0ojeclo ro |rd|ce
espec|l|cado
Booleam isEmpty ( ) Relorra lrue se o veclor esl|ver vaz|o
int size ( ) Relorra o rurero de e|ererlos do
veclor
Nota:
Para ra|s |rlorraoes soore os rlodos d|spor|o|||zados por esla c|asse, corsu|lar a docurerlaao do Java.
Exemp|o
Nesle exerp|o ser cr|ado ur oojeclo da c|asse Vector que arrazerar rores. 3erao depo|s ap||cadas a|guras
operaoes ao veclor, coro |rser|r, rerover, ver|l|car que e|ererlo esl rur delerr|rado ird|ce.
public class Nomes {
public static void main ( String [] args){
Vector nomes = new Vector( );
nomes.addElement(Ricardo);
nomes.addElement(Joo);
nomes.addElement(Nuno);
nomes.addElement(Daniel);
System.out.println(nomes);
Nomes.removeElement(Joo);
System.out.println(nomes);
System.out.println(No ndice 1: + nomes.elementAt(1));
nomes.insertAt(Carlos,2);
System.out.println(Tamanho do vector + nomes.size());
}
}
/*Resultado de sada do exemplo:
Ricardo, Joo, Nuno, Daniel
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 122
Ricardo, Nuno, Daniel
No ndice 1: Nuno
Tamanho do vector 4
*/
9.7 - Exerccios Prticos
Exerc.1 - Escreva ur prograra que preercra ura laoe|a cor os va|ores |rle|ros gerados a|ealor|arerle e |rpr|ra
lodos os va|ores da laoe|a. Acrescerle depo|s as segu|rles lurc|ora||dades ao seu prograra:
lrd|car quarlos va|ores regal|vos eslao guardados ra laoe|a
lrpr|r|r os va|ores pos|l|vos da laoe|a
lrd|car o ra|or va|or da laoe|a
3uosl|lu|r lodos os va|ores d|v|sive|s por 3 pe|o va|or zero
lrd|car a pos|ao do reror va|or da laoe|a
Exerc.2 - lrp|ererle ur rlodo que relorra o produlo dos e|ererlos de ura laoe|a.
A ass|ralura do rlodo a que se segue:
static double produto(int [ ] x)
Exerc.3 - lrp|ererle ur rlodo que relorra o reror va|or de ura laoe|a.
A ass|ralura do rlodo a que se segue:
static double min(double [ ] x)
Exerc.1 - Escrever ur rlodo que, dada ura sequrc|a de n va|ores |rle|ros, relorre a d|lerera erlre os va|ores
rx|ro e rir|ro da sequrc|a.
Exerc.5 - Escrever ur rlodo que rel|re lodas ocorrrc|as de ur caracler carC de ura slr|rg. A ass|ralura do
rlodo a que se segue:
slal|c 3lr|rg rerove(3lr|rg s, crar carC )
Exerc. - Escrever ur prograra que corverla ura slr|rg rura laoe|a de caracleres.
Exerc.Z - Escrever ur rlodo que receoa ur rurero e ura laoe|a e devo|va a pos|ao ra laoe|a orde esle rurero
ocorra ou o va|or -1 ro caso do rurero rao ex|sl|r ra laoe|a. A ass|ralura do rlodo a que se segue:
static int procuraTabela (double v, double[ ] tabDouble)
Exerc.8 - Escrever ur rlodo que |rverla a order dos e|ererlos de ura laoe|a de |rle|ros, passada coro
parrelro.
Exerc.9 - lrp|ererle ur rlodo que suosl|lua o caracler c1 pe|o caracler c2 rura laoe|a. 0 rlodo deve relorrar o
rurero de suosl|lu|oes.
A ass|ralura do rlodo a que se segue:
static int substituicao(char c1, char c2, char[ ] tabCar)
Exerc.10 - Escrever ur prograra que devo|va a pos|ao da u|l|ra ocorrrc|a do va|or rx|ro e a pos|ao da
pr|re|ra ocorrrc|a do va|or rir|ro er ura laoe|a de va|ores do l|po douo|e.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 123
Exerc.11 - Escrever ur rlodo que receoa duas laoe|as e relorre lrue se as laoe|as sao |gua|s.
Exerc.12 - Escrever ur prograra que, para ur dada laoe|a de |rle|ros A, corslrua ura laoe|a P lorrada pe|os
ird|ces dos e|ererlos pares de A. Exerp|o: Para A = ( 1 3 Z 8 ), o prograra deve corslru|r P = ( 3 5 ).
Exerc.13- Escrever ur rlodo (e ur prograra que exerc|le la| rlodo) que delerr|re se os e|ererlos de ura
laoe|a ercorlrar-se er order decrescerle ou rao.
Exerc.11 - Escrever ur prograra que, dada ura sequrc|a de n va|ores |rle|ros (gerados a|ealor|arerle) que
represerlar o resu|lado de n |ararerlos de ur dado, delerr|re o rurero de ocorrrc|as de cada lace ra
sequrc|a ara||sada.
Exerc.15 - 0ada ura sequrc|a de r rureros rea|s, lazer ur prograra que delerr|re os rureros que corpoer a
sequrc|a e a lrequrc|a de la|s rureros ra sequrc|a dada.
Exerp|o:
r = 10
3equrc|a: 3.2 8.1 2.5 3.2 Z.1 8.1 3.2 .3 Z.1 3.2
3aida:
Nur Freq
3.2 1
8.1 2
2.5 1
Z.1 2
.3 1
Exerc.1 - Escrever ur prograra que delerr|re o ra|or va|or er ura ralr|z de va|ores |rle|ros cor r>0 ||rras e
r>0 co|uras. Er segu|da a|lere o prograra arler|or para |rd|car lodas as pos|oes da ralr|z er que se ercorlra la|
va|or rx|ro.
Exerc.1Z - lrp|ererle ur rlodo que relorre o c|cu|o do produlo exlerro erlre duas ralr|zes. A ralr|z resu|larle
ca|cu|a-se da segu|rle lorra p[||[j|=x[||y[j|, orde x e y sao os veclores de erlrada.
A ass|ralura do rlodo :
static double[][] productoExterno(double[] x, double[] y)
Exerc.18 - Escrever ur prograra que |r|c|a|rerle | ur rurero |rle|ro N. 3e o va|or |rlroduz|do lor reror que 2
(do|s) l|ra||zar o prograra. Caso corlrr|o, cr|a d|rar|carerle ura ralr|z de |rle|ros NxN. Er segu|da | ur va|or
para cada pos|ao da ralr|z e, ro l|ra|, roslrar se a ralr|z possu| a|gur va|or repel|do.
Exerc. 19 - 0el|ra ura c|asse weo3|le caracler|zada pe|o rore, erdereo e ||sla de leras que se poder ercorlrar
ro resro. lrp|ererle as segu|rles lurc|orao|||dades a esla c|asse:
0elerr|raao de quarlos leras possu| o Weos|le
ver|l|car se ur delerr|rado lera ex|sle ro Weos|le
Rerover ur lera
E|aoore ura c|asse Cala|ogoweo que |rp|ererla ur arqu|vo soore Weo3|les e cujas lurc|orao|||dades sao:
0elerr|raao do rurero lola| de Weos|les do cal|ogo
L|slar os weos|les que lralar ur delerr|rado lera T
Rerover ur Weos|le
Exerc.20 - lrp|ererle as c|asses que acrar recessr|as para o segu|rle corlexlo:
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 121
ur 8arco gere ur corjurlo de corlas seus c||erles, perr|l|rdo que esles depos|ler, |evarler e ||sler os seus
sa|dos.
Para que ura corla seja correclarerle cr|ada recessr|o o rore e r de corlr|ou|rle do c||erle e ur sa|do rir|ro
de 50C.
0 c||erle s poder rea||zar |evarlarerlos se o seu sa|do ass|r o perr|l|r.
lrp|ererle ura c|asse que perr|la leslar lodas as lurc|ora||dades alrs descr|las para as c|asses que cr|ar.
Exerc.21 - Cod|l|que ura c|asse, des|grada por A|uno cor os segu|rles alr|oulos: nome, numero e md|a.
E|aoore ura c|asse Turma cor as segu|rles caraclerisl|cas:
ura lurra corposla por vr|os a|uros, Cada lurra possu| ura |derl|l|caao ur|ca corposla por ura dig|lo (que
represerla o aro: 1,2,3,1 ou 5) e ura |elra (A,8,C ou 0). Cada lurra s poder ler ro rx|ro 30 A|uros.
Faa ur prograra Esco|a que lesle as c|asses e|aooradas. 0 prograra deve cr|ar duas lurras: 1A e 18, er segu|da
cada lurra deve ser preercr|da cor a |rlorraao soore 10 A|uros, |rlroduz|dos pe|o ul|||zador. Aps a cr|aao e
preercr|rerlo das lurras, o prograra deve rea||zar as segu|rles acoes:
lrpr|r|r lodos os a|uros da lurra 1A cor a rd|a super|or a 15 va|ores.
lrpr|r|r lodos os a|uros cor o rore Joao er aroas as lurras.
0rderar os a|uros pe|o rurero de a|uro er cada ura das lurras.
Ateno: Para os rlodos |rp|ererlados, e|aoore ura so|uao, ra qua| seja prev|slo o aurerlo das lurras da
Esco|a.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 125
10 - Algoritmos de Procura/Pesquisa
10.1 - Introduo
A procura de |rlorraao ura acl|v|dade quol|d|ara: procuraros rureros er ||slas le|elr|cas, pa|avras er
d|c|orr|os, elc.
Esludareros er segu|da do|s rlodos para procurar ur e|ererlo rura laoe|a:
A procura sequerc|a|.
A procura o|rr|a.
A procura de |rlorraao lrequerlererle execulada er laoe|as. Ao |orgo desle capilu|o varos ul|||zar ura laoe|a
preercr|da. varos para la| lazer uso de ura c|asse (Tabe|a) que possu| ur rlodo (preenche) que preercre ura
laoe|a, passada coro parrelro, cor va|ores |rle|ros gerados a|ealor|arerle erlre 0 e 100. 0 cd|go da c|asse
er segu|da apreserlado:
import java.util.Random;
class Tabela {
public static void preenche(int tabela[]){
Random random = new Random();
for (int i=0; i < tabela.length; i++)
tabela[i] = random.nextInt(100);
}
public static void imprime(int tabela[]){
for (int i=0; i < tabela.length; i++)
System.out.println(" "+i+":"+ tabela[i]+"; ");
System.out.println();
}
}
10.2 - Procura Sequencial
10.2.1 - Simples
ura lorra s|rp|es de procurar cors|sle er:
Corear ro |r|c|o da laoe|a.
Corparar sucess|varerle o e|ererlo procurado cor o e|ererlo da laoe|a.
Repel|r o processo al ercorlrar o e|ererlo ou al|rg|r o l|r da laoe|a.
Coro a laoe|a percorr|da sequerc|a|rerle, o a|gor|lro deror|rado por procura sequerc|a|.
No exerp|o segu|rle prelerde-se saoer qua| a pos|ao que o va|or Z5 (se ex|sl|r) ocupa ra laoe|a de rureros.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 12
Pos|ao 0
Corpara-se Z5 cor 10 3ao d|lererles
lrcrererlo a pos|ao
Pos|ao 1
Corpara-se Z5 cor 20 3ao d|lererles
lrcrererlo a pos|ao
Pos|ao 2
Corpara-se Z5 cor Z5 3ao |gua|s
Parar a procura
0 va|or procurado acrado e ocupa a lerce|ra pos|ao da laoe|a.
0 prx|ro exerp|o ul|||za ur prograra que preercre ura laoe|a cor rureros gerados a|ealor|arerle (erlre 0 e
100) e perr|le, er segu|da, procurar rureros que lorar |rser|dos.
public class ProcuraSequencial{
public static int procura (int tab[], int valor) {
int i = 0;
while (i < tab.length && tab[i] != valor )
i++;
if ( i != tab.length)
return(i); // retorna indice;
else
return(-1);
}
public static void main(String[] args){
int tabela[] = new int[100];
Tabela.preenche(tabela);
System.out.println("Resultado:"+procura(tabela,67);
System.out.println("Resultado:"+procura(tabela,33));
System.out.println("Resultado:"+procura(tabela,1));
System.out.println("Resultado:"+procura(tabela,101));
}
}
10 20 Z5 9 1 3
0 1 2 1 3 5 lrd|ce
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 12Z
0 rlodo procura relorra o ird|ce do va|or ra laoe|a se ercorlrar o va|or, caso corlrr|o relorra -1. Nole-se que ro
c|c|o corresporderle a procura propr|arerle d|la,
while (i < tab.length && tab[ i ] != valor ) {
ler de se elecluar corl|ruarerle do|s lesles:
ver|l|car se o va|or desejado lo| ercorlrado e
ver|l|car se o l|r da laoe|a lo| al|rg|do.
Eroora a pr|re|ra ver|l|caao seja esserc|a| a segurda ser|a desrecessr|a se pudesse gararl|r que o va|or a
procurar se ercorlrava ra laoe|a.
10.2.2 - Com Sentinela
ura lcr|ca ul|||zada para presc|rd|r do segurdo lesle cors|sle er ul|||zar ur deror|rado va|or serl|re|a. ur va|or
serl|re|a ur va|or espec|a| que |rser|ros ra laoe|a para gararl|r que a procura ler sucesso. Nesle caso lrala-se de
|rser|r o va|or procurado a segu|r ao u|l|ro e|ererlo da laoe|a.
A ul|||zaao de ur va|or serl|re|a ex|ge a ex|slrc|a de ura pos|ao ad|c|ora| ra laoe|a para arrazerar o va|or
serl|re|a. A pr|re|ra operaao a elecluar, a|rda arles da procura, a |rserao do va|or serl|re|a ro l|ra| da laoe|a.
3e ro l|r da procura o va|or ercorlrado lor o serl|re|a, erlao o va|or procurado rao ex|sle ra laoe|a.
No exerp|o segu|rle procede-se a |rp|ererlaao da procura sequerc|a| cor serl|re|a, ul|||zardo ur prograra que
preercre ura laoe|a cor rureros gerados a|ealor|arerle (erlre 0 e 100) e perr|le, er segu|da, procurar rureros
que lorar |rser|dos.
public class ProcuraSequencialSentinela {
public static int procura(int tab[], int valor){
int i = 0;
tab[tab.length-1] = valor; //SENTINELA
while (tab[ i ] != valor )
i++;
if ( i != tab.length-1)
return(i);
else
return(-1);
}
public static void main(String[] args){
int tab[] = new int[101];
Tabela.preenche(tabela);
System.out.println("Resultado:"+procura(tab,67));
System.out.println("Resultado:"+procura(tab,33));
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 128
System.out.println("Resultado:"+procura(tab,1));
System.out.println("Resultado:"+procura(tab,102);
}
}
10.3 - Procura Binria
A procura sequerc|a| ru|lo s|rp|es, ras pode ex|g|r a |rspecao de lodos os e|ererlos da laoe|a. lslo acorlece
serpre que o e|ererlo que eslaros a procurar rao se ercorlra ra laoe|a.
A procura o|rr|a ura a|lerral|va ra|s el|caz, ras ex|ge que os e|ererlos soore os qua|s a procura esl a ser
elecluada se ercorlrer orderados.
0 a|gor|lro o segu|rle:
1. Ercorlraros o re|o da laoe|a.
2. Cors|deraros u|l|ro o e|ererlo da 1 relade da laoe|a.
3. 3e o e|ererlo procurado reror do que o u|l|ro o e|ererlo da 1 relade da laoe|a, poderos gararl|r
que o procurado rao se ercorlra ra 2 relade da laoe|a.
1. Repel|ros erlao processo para a 1 relade da laoe|a.
5. 3e o e|ererlo procurado ra|or do que o u|l|ro o e|ererlo da 1 relade da laoe|a, poderos gararl|r que
o procurado rao se ercorlra ra 1 relade da laoe|a.
. Repel|ros erlao o processo para a 2 relade da laoe|a.
Z. 3e o e|ererlo ro re|o da laoe|a lor |gua| ao procurado a procura lerr|ra.
8. Nole-se que er cada passo a procura o|rr|a reduz o rurero de e|ererlos a cors|derar para relade
0 prx|ro exerp|o ul|||za ur prograra que | 100 rureros e perr|le, er segu|da, procurar os rureros que lorar
|rser|dos.
public class ProcuraBinaria {
public static int procuraBinaria(int tab[], int valor) {
boolean achou = false;
int alto = tab.length - 1;
int baixo = 0;
int meio = (alto + baixo )/2;
while (!achou && alto >= baixo )
{
if (valor == tab[meio ])
achou = true;
else if (valor < tab[meio ])
alto = meio - 1;
else
baixo = meio + 1;
meio = (alto + baixo )/2;
}
return((achou ) ? meio : -1);
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 129
}
public static void main(String[] args) {
int tabela[] = new int[100
for (int i=0; i < tabela.length; i++)
tabela[i] = i;
System.out.println("Resultado:"+procuraBinaria (tabela,67));
System.out.println("Resultado:"+procuraBinaria (tabela,33));
System.out.println("Resultado:"+procuraBinaria (tabela,1));
System.out.println("Resultado:"+procuraBinaria (tabela,101));
}
}
Exemp|o (Pesqu|sa de um va|or |nex|stente na tabe|a}
F|gura 1Z. Pesqu|sa o|rr|a de ur va|or |rex|slerle ra laoe|a.
public static int procuraBinaria (int tab[], int valor)
{
boolean achou = false;
int alto = tab.length - 1;
1 3 3 5 7 8 9
2
baixo
(>x)
alto
baixo
meio
(>x)
1 |leraao
2 |leraao
alto baixo meio
(<x)
3 |leraao
alto
baixo
1 |leraao
v:
x:
5 7 8 9 1 3 3
3 3 5 7 8 9 1
1 3 3 5 7 8 9
Valor a Procurar
0 va|or 2 rao ex|sle ra laoe|a
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 130
int baixo = 0;
int meio = alto/2;
while (!achou && alto >= baixo ){
if (valor == tab[meio ])
achou = true;
else if (valor < tab[meio ])
alto = meio - 1;
else
baixo = meio + 1;
meio = (alto + baixo )/2;
}
return((achou ) ? meio : -1);
}
Exemp|o (Pesqu|sa de um va|or ex|stente na tabe|a}
F|gura 18. Pesqu|sa o|rr|a de ur va|or ex|slerle ra laoe|a
10.4 - Exerccios prticos
Exerc.1 - lrp|ererle o rlodo rx|ro que relorra o ra|or va|or dos e|ererlos da laoe|a x. ul|||ze o a|gor|lro de
procura sequerc|a|.
Exerc.2 - lrp|ererle o rlodo rir|ro que relorra o ird|ce do e|ererlo de reror va|or da laoe|a laoF. A ass|ralura
do rlodo
1 3 3 5 7 8 9
1
baixo alto meio
(>x)
alto
baixo
meio
(>x)
1 |leraao
2 |leraao
alto baixo meio
(<x)
3 |leraao
v:
x:
5 7 8 9 1 3 3
3 3 5 7 8 9 1
Valor a Procurar
0 va|or 1 ex|sle ra laoe|a
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 131
public static int minimo(float[ ] tabF).
Exerc.3 - lrp|ererle o rlodo procuraCar que relorra o ird|ce da pr|re|ra ocorrrc|a do caracler c1 ra laoe|a
laoCar. ul|||ze o rlodo de procura o|rr|a. A ass|ralura do rlodo :
public static int procuraCar(car[ ] tabCar, car c1)
Exerc.1 - Teros ura laoe|a cor as lerperaluras rd|as ao |orgo dos d|as de rs. 0uereros saoer para ur
delerr|rado rs:
1. 0ua| lo| a lerperalura ra|s oa|xa
2. Er que d|a ocorreu a lerperalura ra|s e|evada
3. 0ua| lo| a d|lerera erlre a lerperalura ra|s oa|xa e a lerperalura ra|s a|la.
Exerc.5 - lrp|ererle o rlodo procuraF|oal que procura ra laoe|a v, que ler coro cr|lr|o de parager o va|or de s,
se esla corler o e|ererlo x. Caso a procura seja rea||zada cor sucesso relorra o ird|ce do e|ererlo, serao relorra
-1. ass|ralura do rlodo
public static int procuraInteiro(int[] v, int x, int s)
Exerc. - ur s|slera de corlro|o de preseras ||gado ao s|slera de rarcaao de porlo, rarlr ura ||sla de lodos
os lraoa|radores que rur delerr|rado rorerlo se ercorlrar derlro da erpresa. E recessr|o |rp|ererlar ur
rlodo que dado o rore de ura pessoa, e|e ros va||de se esla pessoa se ercorlra derlro da erpresa ou rao.
ul|||ze a procura o|rr|a ra |rp|ererlaao desla lurao.
Nota: a ||sla lerr|rada cor a pa|avra ' '
A ass|ralura do rlodo :
public static boolean procuraPessoa(String[ ] v)
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 132
11 - Algoritmos de Ordenao
11.1 - Introduo
ur corjurlo de e|ererlos rorra|rerle orderado para lac|||lar a procura. 0rderaros as co|sas para lac|||lar a
procura e rao por serros ralura|rerle arrurados. lrag|re que ler|a de procurar o rurero de le|elore de ur ar|go
rura ||sla le|elr|ca que rao esl|vesse orderada a|laoel|carerle. 3er|a cal|co cerlarerle.
Er prograraao, a ul|||zaao de laoe|as orderadas perr|le escrever a|gor|lros de procura ra|s el|c|erles.
Nos a|gor|lros de orderaao que serao er segu|da |rlroduz|dos, varos supor que prelerderos orderar ura
sequrc|a de |rle|ros cor ur rx|ro de 100 e|ererlos.
Cor o oojecl|vo de separar a|guras operaoes que se repeler ao |orgo dos exerp|os de orderaao, varos
apreserlar de segu|da ura c|asse (Taoe|a) que perr|le rea||zar as segu|rles luroes, soore ura laoe|a:
Preercr|rerlo de ura laoe|a cor va|ores |rle|ros, rao orderados, gerados a|ealor|arerle.
Troca de e|ererlos de ura laoe|a.
lrpressao dos e|ererlos de ura laoe|a.
import java.util.Random;
class Tabela {
//(1) preenche uma tabela
public static void preenche(int tabela[]) {
Random random = new Random();
for (int i=0; i < tabela.length; i++)
tabela[i] = random.nextInt(100);
}
//(2) troca as posies de dois elementos da tabela
public static void troca(int tabela[], int x, int y){
int tmp;
tmp = tabela[x];
tabela[x] = tabela[y];
tabela[y] = tmp;
}
//(3) Imprime a tabela
public static void imprime(int tabela[]) {
for (int i=0; i < tabela.length; i++)
System.out.println(" "+i+": "+ tabela[i]+" ; ");
System.out.println();
}
// O mtodo main vai variar para cada implementao
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 133
11.2 - BubbleSort
Esle a|gor|lro cors|sle er:
Percorrer os e|ererlos a orderar, corparardo e|ererlos adjacerles e lrocardo os pares de
e|ererlos que se ercorlrar lora de order.
Al que se lerra elecluado ura passager corp|ela er que rao raja rerrura lroca de pos|oes.
Nole que a laoe|a ercorlra-se orderada quardo se eleclua ura passager corp|ela er que rerrur par de
e|ererlos lrocou de pos|ao.
0e ur rodo gera| ura ur|ca passager pe|o corjurlo de e|ererlos rao ordera a laoe|a.
0 lerpo de execuao proporc|ora| a r2, orde r o rurero de e|ererlos a serer orderados.
Cors|dereros a segu|rle laoe|a, orde se ap||car o a|gor|lro 3uoo|e$orr:
vereros a evo|uao da pos|ao dos e|ererlos ao |orgo das passagers e da var|ve| lrocou que perr|le saoer se ao
|orgo da passager rouve lrocas de pos|ao.
Pr|re|ra passager
lrocou = la|se
1 8 1Z 3 11 2
1 8 1Z 3 11 2
1 8 3 1Z 11 2 (lrocou=lrue)
1 8 3 11 1Z 2 (lrocou=lrue)
1 8 3 11 2 1Z (lrocou=lrue)
3egurda passager
lrocou = la|se
1 8 3 11 2 1Z
1 3 8 11 2 1Z (lrocou=lrue)
1 3 8 11 2 1Z
1 3 8 2 11 1Z (lrocou=lrue)
1 3 8 2 11 1Z
Terce|ra passager
lrocou = la|se
3 1 8 2 11 1Z (lrocou=lrue)
3 1 8 2 11 1Z
3 1 2 8 11 1Z (lrocou=lrue)
3 1 2 8 11 1Z
3 1 2 8 11 1Z
0uarla passager
lrocou = la|se
3 1 2 8 11 1Z
3 2 1 8 11 1Z (lrocou=lrue)
1 8 1Z 3 11 2
0 1 2 1 3 5
lrd|ce
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 131
3 2 1 8 11 1Z
3 2 1 8 11 1Z
3 2 1 8 11 1Z
0u|rla passager
lrocou = la|se
2 3 1 8 11 1Z (lrocou=lrue)
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
3exla passager
lrocou = la|se
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
lrocou == la|se - Terr|ral
0 cd|go da |rp|ererlaao do a|gor|lros 8uoo|e3orl apreserlado er segu|da:
public class OrdenacaoBubbleSort {
public static void bubbleSort(int tabela[ ] ) {
boolean houveTroca;
do
{
houveTroca = false;
for (int j = 0; j < tabela.length-1; j++)
if (tabela[j] > tabela[j+1]){
Tabela.troca(tabela, j, j+1);
houveTroca = true;
}
}while (houveTroca);
public static void main(String[] args) {
int tabela[] = new int[100];
Tabela.preenche(tabela); //preenche tabela
Tabela.imprime(tabela); //imprime tabela antes da ordenao
bubbleSort(tabela); //ordena tabela
Tabela.imprime(tabela); //imprime tabela depois de ordenada
}
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 135
11.3 - ShellSort
A orderaao $ne||$orr ura var|arle da orderaao 3uoo|e$orr e cors|sle er corparar e lrocar, rao e|ererlos
adjacerles, ras s|r e|ererlos separados por ur cerlo |rlerva|o.
Coro |rlerva|o |r|c|a| cors|dera-se relade do rurero de e|ererlos a orderar.
Aps ura orderaao corp|ela, do l|po 3uoo|e$orr, cor o |rlerva|o |r|c|a|, esse |rlerva|o d|v|d|do ao re|o e o
processo repele-se para o rovo |rlerva|o.
Esle processo repele-se al que o |rlerva|o seja 1 (corresporderle a ura orderaao por 3uoo|e$orr).
Nole que a orderaao 3re||3orl ra|s el|c|erle (ra|s rp|da) do que a orderaao 3uoo|e$orr porque as pr|re|ras
passagers cors|derar aperas ur suocorjurlo dos e|ererlos a orderar e as u|l|ras passagers j os ercorlrar
parc|a|rerle orderados.
Cors|dereros a laoe|a que lo| usada ro exerp|o do 3uoo|esorr:
vejaros a evo|uao da pos|ao dos e|ererlos ao |orgo das passagers, da var|ve| lrocou que perr|le saoer se ao
|orgo da passager rouve lrocas de pos|ao e da var|ve| |rlerva|o que del|re a d|slrc|a erlre e|ererlos
corparados.
Passager 1
lrlerva|o=3
lrocou=Fa|se
3 8 1Z 4 11 2 (lrocou=lrue)
3 8 1Z 1 11 2
3 8 2 1 11 17 (lrocou=lrue)
Passager 2
lrlerva|o=3
lrocou=Fa|se
3 8 2 4 11 1Z
3 8 2 1 11 1Z
3 8 2 1 11 17
Passager 3
lrlerva|o=1
lrocou=Fa|se
3 8 2 1 11 1Z
3 2 8 1 11 1Z (lrocou=lrue)
3 2 4 8 11 1Z (lrocou=lrue)
3 2 1 8 11 1Z
3 2 1 8 11 1Z
Passager 1
1 8 1Z 3 11 2
0 1 2 1 3 5 lrd|ce
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 13
lrlerva|o=1
lrocou=Fa|se
2 3 1 8 11 1Z (lrocou=lrue)
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
Passager 5
lrlerva|o=1
lrocou=Fa|se
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
2 3 1 8 11 1Z
0 cd|go da |rp|ererlaao do a|gor|lro $ne||$orr apreserlado er segu|da:
public class OrdenacaoShell {
public static void shell (int tabela[ ] ) {
boolean nenhumaTroca;
int intervalo;
intervalo = tabela.length / 2;
do
{
do
{
nenhumaTroca = true;
for (int j = 0; j < tabela.length-intervalo; j++)
if (tabela[j] > tabela[j+intervalo]) {
Tabela.troca(tabela, j, j+intervalo);
nenhumaTroca = false;
}
}while (!nenhumaTroca);
intervalo = intervalo / 2;
}while ( intervalo > 0);
}
public static void main(String[] args){
int tabela[] = new int[100];
Tabela.preenche(tabela); //preenche tabela
Tabela.imprime(tabela); //imprime tabela antes da ordenao
shell(tabela); //ordena tabela
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 13Z
Tabela.imprime(tabela); //imprime tabela depois de ordenada
}
}
11.4 - Ordenao por seleco
A orderaao por se|ecao cors|sle er percorrer os e|ererlos a orderar e, er cada passager, co|ocar ur e|ererlo
ra sua pos|ao correcla:
o Na 1 passager co|oca-se o reror e|ererlo ra sua pos|ao correcla.
o Na 2 passager co|oca-se o segurdo reror.
o E ass|r sucess|varerle.
Cors|dereros rovarerle a laoe|a que lo| usada ro exerp|o do 3uoo|esorr:
vejaros a evo|uao da pos|ao dos e|ererlos ao |orgo das passagers:
Pr|me|ra passagem (4 8 17 3 11 2}
3 8 1Z 4 11 2
2 8 1Z 1 11 3
8egunda passagem (2 8 17 4 11 3}
2 8 1Z 1 11 3
2 4 1Z 8 11 3
2 3 1Z 8 11 4
Terce|ra passagem (2 3 17 8 11 4}
2 3 8 17 11 1
2 3 4 1Z 11 8
0uarta passagem (2 3 4 17 11 8}
2 3 4 11 17 8
2 3 4 8 1Z 11
0u|nta passagem (2 3 4 8 17 11}
2 3 4 8 11 17
0 cd|go da |rp|ererlaao do a|gor|lro apreserlado er segu|da:
public class OrdenacaoSeleccao {
public static void seleccao (int tabela[ ] ){
for (int j = 0; j < tabela.length-1; j++)
for (int k = j+1; k < tabela.length ; k++)
if (tabela[j] > tabela[k])
Tabela.troca(tabela, k, j);
}
1 8 1Z 3 11 2
0 1 2 1 3 5 lrd|ce
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 138
public static void main(String[] args) {
int tabela[] = new int[100];
Tabela.preenche(tabela); //preenche tabela
Tabela.imprime(tabela); //imprime tabela antes da ordenao
seleccao(tabela); //ordena tabela
Tabela.imprime(tabela); //imprime tabela depois de ordenada
}
}
11.5 - Algoritmo QuickSort
E ur a|gor|lro recurs|vo oaseado ra lcr|ca o|v|oe ano conquerl
o Esco|rer ur e|ererlo aro|lrr|o (x) da laoe|a (crarado p|vol)
o Passo de 0|v|sao
0|v|d|r os reslarles er do|s grupos (esquerdo e d|re|lo).
0 grupo esquerdo corposlo pe|os e|ererlos rerores ou |gua|s que o e|ererlo p|vol.
0 grupo d|re|lo corposlo pe|os e|ererlos ra|ores que o e|ererlo p|vol.
0 e|ererlo p|vol co|ocado erlre os do|s grupos.
o Passo Recurs|vo
0rderar os do|s grupos esquerdo e d|re|lo, usardo o resro rlodo recurs|varerle
Re|al|varerle ao passo da d|v|sao:
3eja a Taoe|a v cor r e|ererlos.
3eja x o e|ererlo p|vol corl|do ro re|o da laoe|a (x = v[r/2|).
Poder ser |rlroduz|do o segu|rle rel|rarerlo:
lr|c|a||zar | = 0 (ird|ce da 1 pos|ao da laoe|a).
lr|c|a||zar j = r-1 (ird|ce da u|l|ra pos|ao da laoe|a).
Erquarlo | j, lazer:
Erquarlo v[|| < x ( serpre | r-1), |rcrererlar |
Erquarlo v[j| > x ( serpre j 0), decrererlar j
3e | j, lrocar v[|| cor v[j|, |rcrererlar | e decrererlar j
0 grupo esquerdo (cor va|ores x) v[0|, ..., v[j|
(vaz|o se j<0)
0 grupo d|re|lo (cor va|ores x) v[||, ..., v[r-1|
(vaz|o se |>r-1)
0 lerpo de execuao proporc|ora| a
r |og r
orde n o rurero de e|ererlos a serer orderados.
A |de|a 'de ace|eraao por lrs do a|gor|lro Du|ck$orr que ra|s rp|do orderar duas sequrc|as de n/2
e|ererlos do que ura sequrc|a de n e|ererlos.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 139
vereros er segu|da ur exerp|o do passo da d|v|sao.
F|gura 19. Passo da d|v|sao
0 cd|go da |rp|ererlaao do a|gor|lro apreserlado er segu|da:
public static void main(String[] args) {
int tabela[] = new int[100];
Tabela.preenche(tabela); //preenche tabela
Tabela.imprime(tabela); //imprime tabela antes da ordenao
quickSort(tabela, 0, tabela.length); //ordena tabela
Tabela.imprime(tabela); //imprime tabela depois de ordenada
}
public static void bubbleSort(int tabela[ ] )
{
int k;;
do
{
k = 1;
for (int j = 0; j < tabela.length-k; j++)
if (tabela[j] > tabela[j+1])
Tabela.troca(tabela, j, j+1);
}
k++;
3 1 2 5 4 6 9 8 7
8 9 2 5 4 6 1 3 7
v:
8 9 2 5 4 6 1 3 7
| j
x=4
3 9 2 5 4 6 1 8 7
|
j
3 1 2 5 4 6 9 8 7
|
j
3 1 2 4 5 6 9 8 7
| j
<
x x
(3.3)
(3.3)
(3.13.2)
| j
(3.3)
| j
(3.13.2)
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 110
}
while (k < tabela.length);
}
11.6 - Exerccios prticos
Exerc.1 - lrp|ererle ur rlodo que receoa coro parrelro ura laoe|a de |rle|ros e relorre a laoe|a orderada
usardo o a|gor|lro 8uoo|e 3orl
Exerc.2 - lrp|ererle ur rlodo que receoa coro parrelro ura laoe|a de |rle|ros e relorre ura oulra laoe|a
orderada. use o a|gor|lro 3e|ecl|or 3orl.
Exerc.3 - Faa ur rlodo que receoa coro parrelro ura laoe|a de oojeclos do l|po lurc|orr|o (rore e rurero
l|sca|) e relorre ura laoe|a orderada. use o a|gor|lro 3re|| 3orl
Exerc.1 - lrp|ererle ur prograra que dado ura laoe|a de caracleres a ordere o a|gor|lro 3e|ecl|or 3orl.
Exerc.5 - lrp|ererle ur prograra que:
1. receoa o reg|slo de aulorve|s (Varca e r. reg|slo)
2. guarde esles reg|slos rura laoe|a
3. 0rdere a laoe|a por rarca, segurdo o rlodo qu|c| 3orl.
1. Apreserle er segu|da o resu|lado ro ecrar.
Exerc. - ura |oja prelerde d|spor os seus arl|gos de veslur|o segurdo cores. Para |sso prec|sa de lazer ura
pequera a|leraao a ap||caao de suporle a geslao da |oja, de rodo a acrescerlar a lurc|ora||dade de ||slager de
arl|gos por order de cor, serdo a order de cores desejada (arare|o, |ararja, caslarro, oeje, verde, azu|, verre|ro,
c|rzerlo e prelo).
lrp|ererle o rlodo que perr|le reorderar a laoe|a de oojeclos Arl|govesluar|o segurdo a order de cores desejada
public class ArtigoVestuario {
public int cod;
public String artigo, cor;
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 111
12 - Anexo I Classe Le.java
import java.io.*;
import java.awt.*;
import java.awt.event.*;
/**
* Classe simples para ler dados de entrada (pela entrada padro ou
atravs de uma janela grfica.
* @verso 2 - 20 Jan 2002
* @autor: Paulo Marques (pmarques@dei.uc.pt)
*/
public class Le
{
private static final int BUF_SIZE = 1024;
// Inibe o constructor por defeito
private Le()
{
}
/**
* Le um inteiro da entrada padro.
* A entrada terminada com um return. Se a entrada no for vlida
mostrada a mensagem
* "!!! No um inteiro !!!" e o utilizador pode tentar de novo.
*
* @devolve o nmero lido
*/
public static int umInt()
{
while(true)
{
try
{
return Integer.valueOf(umaString().trim()).intValue();
}
catch(Exception e)
{
System.out.println("!!! No um inteiro !!!");
}
}
}
/**
* Le um double da entrada padro.
* A entrada terminada com um return. Se a entrada no for vlida
mostrada a mensagem
* "!!! No um double !!!" e o utilizador pode tentar de novo.
*
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 112
* @devolve o nmero lido
*/
public static double umDouble()
{
while(true)
{
try
{
return
Double.valueOf(umaString().trim()).doubleValue();
}
catch(Exception e)
{
System.out.println("!!! No um double !!!");
}
}
}
/**
* Le um float da entrada padro.
* A entrada terminada com um return. Se a entrada no for vlida
mostrada a mensagem
* "!!! No um float !!!" e o utilizador pode tentar de novo.
*
* @devolve o nmero lido
*/
public static float umFloat()
{
while(true)
{
try
{
return Float.valueOf(umaString().trim()).floatValue();
}
catch(Exception e)
{
System.out.println("!!! No um float !!!");
}
}
}
/**
* Le uma String da entrada padro.
* A entrada terminada com um return.
*
* @devolve a String lida
*/
public static String umaString()
{
String s = "";
try
{
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in), 1);
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 113
s = in.readLine();
}
catch (IOException e)
{
System.out.println("Error reading from the input stream.");
}
return s;
}
/**
* Le um caracter da entrada padro.
* A entrada terminada com um return.
*
* @devolve o caracter lido
*/
public static char umChar()
{
char c=' ';
try
{
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in), 1);
c = (char)in.read();
}
catch (IOException e)
{
System.out.println("Error reading from the input stream.");
}
return c;
}
/**
* Le um inteiro usando uma janela grfica.
* A entrada terminada quando o boto Ok seleccionado
*
* @devolve o nmero lido
*/
public static int grafUmInt(String msg)
{
ReadIntFrame intFrame = new ReadIntFrame(msg);
return intFrame.getValue();
}
/**
* Le um inteiro usando uma janela grfica.
* A entrada terminada quando o boto Ok seleccionado
*
* @devolve o nmero lido
*/
public static double grafUmDouble(String msg)
{
ReadDoubleFrame doubleFrame = new ReadDoubleFrame(msg);
return doubleFrame.getValue();
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 111
}
}
/**
* Classe auxiliar que l inteiros numa janela
* @verso 1.0 - 13 Jan 1999
* @autor Paulo Marques (pmarques@dei.uc.pt)
*/
class ReadIntFrame
implements ActionListener
{
/**
* Construtor.
* @parmetro msg - a mensagem a aparecer como ttulo.
*/
public ReadIntFrame(String msg)
{
this.msg = new String(msg);
valid = false;
window = new Frame();
window.setTitle(msg);
window.setLayout(new FlowLayout());
valueArea = new TextField("", 15);
Button done = new Button(" Ok ");
done.addActionListener(this);
window.add(valueArea);
window.add(done);
window.setSize(320, 100);
window.setBackground(Color.gray);
window.setLocation(100, 100);
window.setResizable(false);
window.show();
}
/**
* Metodo chamado quando o Ok seleccionado.
*/
public synchronized void actionPerformed(ActionEvent e)
{
try
{
value =
Integer.valueOf(valueArea.getText().trim()).intValue();
valid = true;
window.dispose();
notify();
}
catch (Exception exc)
{
window.setTitle("!!! No um inteiro !!! --- " +
msg);
}
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 115
}
/**
* Devolve o valor fornecido pelo utilizador.
*/
public synchronized int getValue()
{
try
{
if (!valid)
wait();
}
catch (Exception e)
{
}
return value;
}
private boolean valid;
private int value;
private String msg;
private Frame window;
private TextField valueArea;
}
/**
* Classe auxiliar que l doubles numa janela.
* @version 1.0 - 13 Jan 1999
* @author Paulo Marques (pmarques@dei.uc.pt)
*/
class ReadDoubleFrame
implements ActionListener
{
/**
* Constructor.
* @parmetro msg - a mensagem a aparecer como ttulo.
*/
public ReadDoubleFrame(String msg)
{
this.msg = new String(msg);
valid = false;
window = new Frame();
window.setTitle(msg);
window.setLayout(new FlowLayout());
valueArea = new TextField("", 15);
Button done = new Button(" Ok ");
done.addActionListener(this);
window.add(valueArea);
window.add(done);
window.setSize(320, 100);
window.setBackground(Color.gray);
window.setLocation(100, 100);
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 11
window.setResizable(false);
window.show();
}
/**
* Metodo chamado quando o Ok seleccionado.
*/
public synchronized void actionPerformed(ActionEvent e)
{
try
{
value =
Double.valueOf(valueArea.getText().trim()).doubleValue();
valid = true;
window.dispose();
notify();
}
catch (Exception exc)
{
window.setTitle("!!! No um double !!! --- " + msg);
}
}
/**
* Devolve o valor fornecido pelo utilizador.
*/
public synchronized double getValue()
{
try
{
if (!valid)
wait();
}
catch (Exception e)
{
}
return value;
}
private boolean valid;
private double value;
private String msg;
private Frame window;
private TextField valueArea;
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 11Z
13 - Anexo II Glossrio
Nota:
0s s|gr|l|cados apreserlados para as pa|avras co|ocadas resle g|ossr|o sao aperas os que se cors|derarar
recessr|os ro ro|lo da cade|ra de lrlroduao a Prograraao.
As pa|avras ercorlrar-se descr|las por order a|laol|ca.
Abordagem: corjurlo de acoes loradas para del|r|r a lorra de al|rg|r a so|uao de ur delerr|rado proo|era.
A|gor|tmo: Corjurlo de |rslruoes que reso|ver ur proo|era.
Amb|gu|dade: Expressao cujo s|gr|l|cado rao pode ser delerr|rado a parl|r do corlexlo er que esl |rser|da (ou
seja, que a parl|r de delerr|rado porlo olerece ra|s do que ur car|rro a segu|r, poderdo |evar a resu|lados
d|lererles).
ottom-Up: Corslruao de ura so|uao parl|rdo dos e|ererlos ra|s pequeros.
6d|go fonte: Cd|go escr|lo pe|o prograrador.
6d|go executve|: Resu|lado da corp||aao do cd|go lorle.
6onceber: Cr|ar.
6omp||ador: Prograra que saoe |rlerprelar o cd|go escr|lo rura delerr|rada ||rguager de prograraao. Receoe
cd|go lorle coro e|ererlo de erlrada e produz cd|go execulve|.
6omp||ao: Processo de gerar cd|go execulve| a parl|r de cd|go lorle recorrerdo a ur corp||ador.
0|v|de-And-6onquer: Velodo|og|a ou lorra de reso|uao de proo|eras que ervo|ve parl|r ur proo|era er
suoproo|eras ra|s pequeros, cujas so|uoes coro|radas represerlar a so|uao do proo|era or|g|ra|.
Estado: 3|luaao er que se ercorlra ura var|ve| er lerros de va|or aclua|. 0 eslado de ur oojeclo o corjurlo
de va|ores dos seus alr|oulos. No que d|z respe|lo a ur proo|era, ler ur eslado |r|c|a| que corresporde ao va|or do
resu|lado que a|rda rao ex|sle, e ur eslado l|ra| que o va|or de resu|lado aps passar pe|a lase de lrarslorraao.
hardware: Corporerles lis|cos de ur corpulador (d|scos, ror|lores, co|uras, elc.)
|mp|ementao: Cd|go produz|do por ur prograrador e que represerla ura so|uao possive| para ur delerr|rado
proo|era.
L|nguagem de Programao: L|rguager arl|l|c|a| ul|||zada para |evar a caoo a |rp|ererlaao de prograras de
corpulador.
Hqu|na V|rtua|: Na prl|ca ur corpulador s|ru|ado derlro do prpr|o corpulador alravs de sollWare prpr|o
cr|ado para esse ele|lo. Corporla-se coro se losse ur corpulador |rdeperderle. A rqu|ra v|rlua| Java aclua
coro ur aro|erle de execuao de prograras Java aulo-corl|do.
Notao: Vecar|sro que serve para del|r|r o lorralo de delerr|rado l|po de |rlorraao. Por exerp|o: a 8NF serve
para del|r|r grarl|cas para var|ados l|pos de ||rguagers, la| coro o XVL serve para del|r|r lorralo de dados, os
siroo|os rus|ca|s server para del|r|r rus|cas ras parl|luras, elc, elc.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 118
0perandos: e|ererlos ervo|v|dos rura delerr|rada operaao.
0uot|d|ano: a|go re|al|vo ao d|a-a-d|a.
Pseudocd|go: lorra s|rp||l|cada de descrever ur a|gor|lro recorrerdo a pa|avras crave sere|rarles as da
||rguager ralura|, ras que sao eslruluradas a sere|rara de ur prograra de corpulador.
8|stema de Numerao: Esquera de represerlaao de ragr|ludes ou quarl|dades alravs de ur grupo de dig|los.
8as|carerle, ura rolaao de represerlaao de rureros.
8|stema 0perat|vo: Prograra de corpulador de grardes d|rersoes e corp|ex|dade que resporsve| rao s por
escorder os dela|res do rardWare aos ul|||zadores e prograradores, coro laror ler de ger|r a rerr|a
d|sporive| para cada ap||caao(prograra er execuao, laror crarado de processo) e ger|r a execuao dessas
resras ap||caoes, ger|r o s|slera de corur|caao cor oulras rqu|ras, elc.
8oftware: Prograra de corpulador. Represerla a parle |g|ca, ao corlrr|o do rardWare que represerla a parle
lis|ca de ur corpulador.
8ubprograma: Taror crarados de rol|ras (ou rlodos ro caso de ||rguagers or|erladas a oojeclos coro o
caso do Java), sao pequeros prograras que poder ser crarados e crarar oulros prograras para que er corjurlo
co|aoorer ra oolerao de ura so|uao para delerr|rado proo|era.
Top-0own: Cosrlruao de ura so|uao er que a parl|r do proo|era ra|or se lerla |r descerdo de rive| e
espec|l|cardo a cada passo os rive|s |rlerrd|os, ou seja, os proo|eras ra|s pequeros.
3eoerla da 0|sc|p||ra de lrlroduao a Prograraao
@ Esco|a 3uper|or de Tecro|og|a de 3eluoa| 2001-2005 Pg|ra 119
14 - Anexo III - Bibliografia
Furdarerlos de Prograraao er Java2 - Arlr|o Verdes, Var|a Jos Varce||ro, FCA
Java 3ollWare 3o|ul|ors, Jorr LeW|s, Add|sor wes|ey
Prograraao er Java2 - Pedro Coe|ro, FCA
lrlroduao a Prograraao ul|||zardo Pasca|, Pavao Varl|rs, Vc0raW-l|||
Tre Java Prograrr|rg Larguage - Ker Arro|d, Jares 0os||rg . Add|sor wes|ey
Acelalos de lP dos aros |ecl|vos 2000/2001 al 2003/2001