LP2
Laboratório de Programação 2
Ciência da Computação
Modularização
Sub-programas
Métodos auxiliares
propósitos gerais
•particionar a resolução de um problema
•distribuir o serviço de programação
•reutilizar módulos já construídos
•facilitar o trabalho de manutenção
1
LP2
Laboratório de Programação 2
Ciência da Computação
Abstração
a construção de subprogramas é o recurso disponível
para elaborar-se a abstração de processos.
em Java: métodos auxiliares
2
LP2
Laboratório de Programação 2
Ciência da Computação
Considere o seguinte problema:
“Conhecendo-se numerador e denominador de duas frações,
como obter o numerador e o denominador da fração irredutível
resultado da adição dessas frações?”
A resolução pode ser representada pelo seguinte esboço
de algoritmo:
entrar a primeira fração (n1 e d1);
entrar a segunda fração (n2 e d2);
somar as duas frações (calcular numerador da soma
(n=n1*d2+n2*d1) e calcular denominador da soma
(d=d1*d2));
simplificar a fração soma
exibir o resultado (n e d)
Nesse exemplo de esboço são apresentadas algumas
abstrações de processos:
entrar a fração, simplificar a fração
3
LP2
Laboratório de Programação 2
Ciência da Computação
Observações
No tratamento de problemas mais complexos, onde seja exigido
um método de resolução mais longo, torna-se interessante
estabelecer etapas menores e mais simples no método de
resolução para depois, com a composição dessas etapas menores,
alcançar a resolução do problema.
Nos algoritmos essas etapas menores são traduzidas por subalgoritmos ou módulos auxiliares, nos programas em Java são os
métodos auxiliares.
A articulação adequada entre módulo principal e módulos
auxiliares define o método de resolução do problema.
Cada módulo auxiliar tem a sua finalidade específica e será
acionado a partir do módulo principal ou de outro módulo auxiliar,
quando for necessária a sua ação.
4
LP2
Laboratório de Programação 2
Ciência da Computação
Observações
Cada subprograma é uma unidade de programação que contêm
uma seqüência de instruções que, se for executada, cumpre algum
objetivo bem específico e determinado.
Essa unidade de programação pode ser utilizada (ou reutilizada) ao
ser acionada por um programa ou por outro subprograma.
O emprego de subprogramas produz vantagens em termos de
tempo de codificação, organização do programa e facilidade de
manutenção.
5
LP2
Laboratório de Programação 2
Ciência da Computação
Observações
Uma definição de subprograma é composta pelo identificador
desse subprograma, pela indicação de seus parâmetros, que
constituem a forma de comunicação entre essa unidade de
programação e o restante do programa (interface), e pela descrição
das ações (corpo do subprograma) que devem ser executadas para
que esse subprograma cumpra o seu objetivo.
Uma chamada ao subprograma ativa (aciona) essas ações;
é a solicitação explícita para executar o subprograma.
Em geral, os subprogramas podem definir suas próprias
variáveis locais, cujo acesso é restrito ao próprio subprograma
onde são definidas (ambiente de referência local).
6
LP2
Laboratório de Programação 2
Ciência da Computação
Observações
De forma geral, os subprogramas são classificados em duas
categorias: função ou procedimento.
Na linguagem Java, um método auxiliar pode fazer o papel de uma
função ou de um procedimento.
Um procedimento representa um conjunto de instruções que define
uma computação parametrizada, ou seja: um procedimento contêm
a descrição parametrizada de um mecanismo de ação.
Ao acionar um procedimento, o sistema elabora uma associação
entre os parâmetros formais (utilizados na descrição do
procedimento) com os parâmetros reais, especificados na
instrução de chamada. Dessa associação resultam os efeitos das
ações descritas no procedimento sobre os parâmetros reais.
7
LP2
Laboratório de Programação 2
Ciência da Computação
Observações
Uma função segue o modelo de funções matemáticas.
Assim, um subprograma do tipo função não deve, ao ser acionado,
alterar qualquer um dos parâmetros reais incluídos na respectiva
instrução de chamada.
O efeito da execução de uma função deve ser exclusivamente o
retorno de um dado, ou seja: cada vez que uma função for
acionada, ao final de sua execução, ocorre o retorno de um dado
que efetivamente substitui a respectiva ordem de chamada.
8
LP2
Laboratório de Programação 2
Ciência da Computação
Observações
A construção/implementação de uma função equivale a um
acréscimo no repertório dos operadores já disponíveis na
linguagem (operadores pré-definidos) - uma função é a abstração
de uma operação.
A construção/implementação de um procedimento equivale a um
acréscimo no repertório de comandos oferecidos pela linguagem um procedimento é a abstração de um controle ou uma série de
comandos.
9
LP2
Laboratório de Programação 2
Ciência da Computação
mecanismo de funcionamento
• o módulo “chamador” aciona o módulo auxiliar
- nesse momento a execução do módulo
“chamador” é suspensa;
• o módulo auxiliar passa a ser executado;
• ao final da execução do módulo auxiliar, a
execução do módulo “chamador” é retomada, a
partir do ponto onde foi acionado o módulo
auxiliar.
10
LP2
Laboratório de Programação 2
Ciência da Computação
mecanismo de funcionamento
• no momento em que o módulo “chamador”
aciona o módulo auxiliar , pode ocorrer o
“trânsito” de dados do módulo “chamador”
para o módulo auxiliar;
• ao final da execução do módulo auxiliar,
quando a execução do módulo “chamador” é
retomada, pode ocorrer o “trânsito” de dados
do módulo auxiliar para o módulo “chamador”;
• esse “trânsito” de dados é estabelecido por
meio de parâmetros.
11
LP2
Laboratório de Programação 2
Ciência da Computação
mecanismo de funcionamento
auxiliar A
auxiliar C
principal
início
chamada ao
auxiliar A
chamada ao
auxiliar B
fim
chamada ao
auxiliar C
auxiliar B
Observação:
O processo dado por
um programa Java se
inicia sempre com a
execução do método
main( ).
12
LP2
Laboratório de Programação 2
Ciência da Computação
Passagem de parâmetros
Há três modelos semânticos fundamentais de passagem de
parâmetros:
modo entrada (in mode)
modo saída (out mode)
modo entrada-saída (in-out mode)
unidade chamadora
modo entrada
módulo auxiliar
modo saída
entrada-saída
13
LP2
Laboratório de Programação 2
Ciência da Computação
Passagem de parâmetros
unidade chamadora
módulo auxiliar
na ordem de chamada,
são especificados os
no módulo auxiliar, são
especificados os
parâmetros reais
parâmetros formais
14
LP2
Laboratório de Programação 2
Ciência da Computação
Passagem de parâmetros
modo entrada (in mode)
o parâmetro formal pode receber o dado do parâmetro real.
unidade chamadora
módulo auxiliar
modo entrada
modo saída (out mode)
o parâmetro formal pode transmitir o dado ao parâmetro real.
unidade chamadora
módulo auxiliar
modo saída
modo entrada-saída (in-out mode)
o parâmetro formal pode receber ou transmitir o dado.
unidade chamadora
módulo auxiliar
entrada-saída
15
LP2
Laboratório de Programação 2
Passagem por valor
Ciência da Computação
modo entrada
O valor do parâmetro real é enviado ao módulo auxiliar para
inicializar o parâmetro formal que se configura como uma variável
local ao subprograma.
Nessa situação, o parâmetro real pode ser uma expressão cujo valor
ou resultado será transmitido ao subprograma, inicializando o
parâmetro formal correspondente.
16
LP2
Laboratório de Programação 2
Ciência da Computação
Passagem por resultado modo saída
O parâmetro formal, que se configura como uma variável local ao
subprograma, tem o seu conteúdo transmitido ao parâmetro real
imediatamente antes da execução (do subprograma) ser encerrada.
Nessa situação, o parâmetro real deve ser uma variável cujo
conteúdo será redefinido como efeito da execução do subprograma.
17
LP2
Laboratório de Programação 2
Ciência da Computação
Passagem por referência modo entrada-saída
Neste modelo não ocorre transmissão de valores entre parâmetro
real e parâmetro formal. A unidade chamadora transmite ao
subprograma um caminho de acesso – uma variável de referência ao parâmetro real que passa a ser partilhado pelo subprograma, ou
seja: as referências, no corpo do subprograma, feitas ao parâmetro
formal, efetivamente são referências ao parâmetro real. Assim,
qualquer operação de redefinição de conteúdo do parâmetro formal
resulta, efetivamente, em redefinição do conteúdo do parâmetro real.
Nessa situação, o parâmetro real deve ser uma variável (em Java
uma variável de tipo referenciado) cujo conteúdo será redefinido
como efeito da execução do subprograma.
18
LP2
Laboratório de Programação 2
Ciência da Computação
Passagem por referência modo entrada-saída
os nomes dos parâmetros (real e formal)
são aliases, identificam a mesma variável.
nome do parâmetro real
nome do parâmetro formal
endereço
conteúdo
toda alteração feita no parâmetro formal reflete-se no parâmetro real
porque a posição de memória, referida pelo endereço, é a mesma.
19
LP2
Laboratório de Programação 2
Ciência da Computação
Em Java, a passagem de parâmetros de tipos primitivos (int, char,
float, double, ... ) é sempre por valor.
Quando há a necessidade de se ter como efeito da execução de um
método em Java, uma redefinição do conteúdo de uma variável da
unidade chamadora, essa unidade chamadora deve fornecer (como
valor) o conteúdo de uma variável de referência (um vetor ou um
objeto definido por uma classe) e o método acionado deve possuir,
em correspondência, um parâmetro formal com o mesmo tipo da
variável do método chamador colocada como parâmetro real, e
assim fazer referência ao objeto que deve sofrer a modificação.
Quando um vetor é colocado como parâmetro real na chamada a
uma função (método), o valor passado à função (método) é o endereço
(valor da referência) desse vetor. A partir desse endereço e aplicando
aritmética da indexação, a função (método) poderá manipular os
componentes daquele vetor.
20
LP2
Laboratório de Programação 2
Ciência da Computação
primeiro exemplo:
novamente vamos considerar o problema:
“Conhecendo-se numerador e denominador de duas frações,
como obter o numerador e o denominador da fração irredutível
resultado da adição dessas frações?”
esboço de método de resolução:






entrar a primeira fração (n1 e d1);
entrar a segunda fração (n2 e d2);
calcular numerador da soma (n=n1*d2+n2*d1);
calcular denominador da soma (d=d1*d2);
simplificar a fração soma
exibir o resultado (n e d)
vamos desenvolver o método de resolução elaborando
o módulo principal e três módulos auxiliares:
 primeiro: realizar a entrada de uma fração
 segundo: realizar a simplificação de uma fração
 terceiro: realizar o cálculo do mdc(x,y)
obs: na operação de simplificação é necessário obter o máximo
divisor comum do numerador e denominador.
21
LP2
Laboratório de Programação 2
Ciência da Computação
métodos auxiliares
void indica que o método não
retorna valor diretamente
class Fracao{
int num, den;
}
void entraFracao(Fracao f){
f.num=Integer.parseInt(JOptionPane.showInputDialog("digite o numerador : "));
f.den=Integer.parseInt(JOptionPane.showInputDialog("digite o denominador: "));
}
int indica que o método
int mdc(int a, int b){
int resto;
resto=a%b;
while(resto>0){
a=b; b=resto;
resto=a%b;
}
return(b);
}
retorna um valor int
void indica que o método não
retorna valor diretamente
void simplificaFracao(Fracao f){
int md;
md=mdc(f.num, f.den);
f.num=f.num/md;
f.den=f.den/md;
}
22
LP2
Laboratório de Programação 2
Ciência da Computação
método executar( )
void executar( ){
Fracao fr1, fr2, frsoma;
fr1=new Fracao();
fr2=new Fracao();
frsoma=new Fracao();
entraFracao(fr1);
entraFracao(fr2);
frsoma.num=fr1.num*fr2.den+fr1.den*fr2.num;
frsoma.den=fr1.den*fr2.den;
JOptionPane.showMessageDialog(null,"fracao soma: "+frsoma.num+" / "+frsoma.den);
simplificaFracao(frsoma);
JOptionPane.showMessageDialog(null,"soma simplificada: "+frsoma.num+" / "+frsoma.den);
}
23
LP2
Laboratório de Programação 2
código da classe
Aplicacao
Ciência da Computação
import javax.swing.JOptionPane;
class Aplicacao{
class Fracao{
int num, den;
}
void entraFracao(Fracao f){
f.num=Integer.parseInt(JOptionPane.showInputDialog("digite o numerador : "));
f.den=Integer.parseInt(JOptionPane.showInputDialog("digite o denominador: "));
}
int mdc(int a, int b){
int resto;
resto=a%b;
while(resto>0){
a=b; b=resto;
resto=a%b;
}
return(b);
}
void simplificaFracao(Fracao f){
int md;
md=mdc(f.num, f.den);
f.num=f.num/md;
f.den=f.den/md;
}
void executar( ){
Fracao fr1, fr2, frsoma;
fr1=new Fracao();
fr2=new Fracao();
frsoma=new Fracao();
entraFracao(fr1);
entraFracao(fr2);
frsoma.num=fr1.num*fr2.den+fr1.den*fr2.num;
frsoma.den=fr1.den*fr2.den;
JOptionPane.showMessageDialog(null,"fracao soma: "+frsoma.num+" / "+frsoma.den);
simplificaFracao(frsoma);
JOptionPane.showMessageDialog(null,"soma simplificada: "+frsoma.num+" / "+frsoma.den);
}
}
24
LP2
Laboratório de Programação 2
Ciência da Computação
Outra abordagem:
É possível uma abordagem alternativa para a construção desse programa:
na classe Fracao, além de especificar os campos correspondentes a
numerador e denominador de uma fração (int num, den; que são os
atributos de uma fração), pode-se definir na própria classe, as operações
relativas a uma fração, neste caso as operações de entrada, saída,
simplificação e adição. Dessa forma o programa ficará composto por três
classes: Principal, Aplicacao e Fracao, veja a construção na próxima
tela.
Observe que na classe Fracao, as “operações” atuam diretamente sobre
os campos num e den.
25
LP2
Laboratório de Programação 2
Ciência da Computação
public class Principal {
public static void main(String[] args ){
Aplicacao ap=new Aplicacao( );
ap.executar( );
}
}
class Aplicacao{
void executar( ){
Fracao fr1, fr2, frs;
fr1=new Fracao();
fr2=new Fracao();
frs=new Fracao();
fr1.entraFracao();
fr2.entraFracao();
frs.somaFracao(fr1,fr2);
frs.mostraFracao("fracao soma: ");
frs.simplificaFracao();
frs.mostraFracao("soma simplificada: ");
}
}
import javax.swing.JOptionPane;
class Fracao{
int num, den;
void entraFracao( ){
num=Integer.parseInt(JOptionPane.showInputDialog("digite o numerador : "));
den=Integer.parseInt(JOptionPane.showInputDialog("digite o denominador: "));
}
int mdc(int a, int b){
int resto;
resto=a%b;
while(resto>0){
a=b; b=resto;
resto=a%b;
}
return(b);
}
void simplificaFracao(){
int md;
md=mdc(num, den);
num=num/md;
den=den/md;
}
void somaFracao(Fracao f1, Fracao f2){
num=f1.num*f2.den+f1.den*f2.num;
den=f1.den*f2.den;
}
void mostraFracao(String mensagem){
JOptionPane.showMessageDialog(null,mensagem+"
}
"+num+" / "+den);
}
26
LP2
Laboratório de Programação 2
Ciência da Computação
Considere o seguinte problema:
“Durante um curso, o aluno realiza três atividades de avaliação e sua nota
final é obtida como média ponderada entre a menor e a maior das três notas
obtidas, com pesos 3 e 7 respectivamente. Conhecendo-se as três notas
parciais (valores reais) obtidas por um aluno, como determinar sua nota
final?”
Veja na próxima tela a constituição de um método auxiliar que tem como
parâmetros de entrada três valores reais e como parâmetro de saída, o maior
desses três valores.
(linha de declaração do método:
float maior(float a, float b, float c)
)
Construa outro método auxiliar, semelhante ao primeiro, para obter o menor
dos três valores. float menor(float a, float b, float c)
Construa o método executar( ) onde deve-se ter:
a entrada das três notas;
a ordem de chamada ao primeiro módulo auxiliar (obter a maior);
a ordem de chamada ao segundo módulo auxiliar (obter a menor);
o cálculo da média;
a saída da média.
27
LP2
Laboratório de Programação 2
Ciência da Computação
nome do método auxiliar
tipo do valor retornado
parâmetros de entrada
float maior(float a, float b, float c){
float maior;
maior=a;
if(b>maior) maior=b;
if(c>maior) maior=c;
return(maior);
variável local
}
28
LP2
Laboratório de Programação 2
Ciência da Computação
Considere novamente o problema:
“Durante um curso, o aluno realiza três atividades de avaliação e sua nota final é obtida
como média ponderada entre a menor e a maior das três notas obtidas, com pesos 3 e 7
respectivamente. Conhecendo-se as três notas parciais (valores reais) obtidas por um
aluno, como determinar sua nota final?”
Considere a seguinte declaração para a classe Notas:
class Notas{
float n1, n2, n3;
}
Construa um método auxiliar que tenha como único parâmetro um registro do
tipo Notas (três valores reais), de tal forma que esse método “receba” as três notas e
“devolva-as” em ordem crescente (passagem por referência).
void classifica(Notas x)
Construa o método executar( ) onde deve-se ter:
a entrada das três notas (os três campos de um registro Notas) ;

a ordem de chamada ao método classifica( )

(dispor em ordem crescente as três notas);
o cálculo da média;

a saída da média.

29
LP2
Laboratório de Programação 2
Ciência da Computação
Considere novamente o problema:
“Durante um curso, o aluno realiza três atividades de avaliação e sua nota final é obtida como
média ponderada entre a menor e a maior das três notas obtidas, com pesos 3 e 7
respectivamente. Conhecendo-se as três notas parciais (valores reais) obtidas por um aluno,
como determinar sua nota final?”
Modifique a construção do programa anterior de forma a dispor na classe Notas, além
dos atributos n1, n2 e n3, os métodos para tratamento dos mesmos:
um método para realizar a entrada das três notas
void entraNotas( ) e
um método para realizar a classificação (ordem crescente) das três notas
void classificaNotas( ).
A classe Notas, com essa modificação, deve ser separada da classe Aplicacao onde
deve ser construído apenas o método executar( ).
(veja a constituição do programa da tela 26) .
30
LP2
Laboratório de Programação 2
Ciência da Computação
Problema proposto
Um número é perfeito se a soma de todos os seus divisores, exceto ele
mesmo, é igual ao próprio número.
Por exemplo, o número 6 é perfeito porque 1 + 2 + 3 = 6.
Um número é abundante se a soma de todos os seus divisores, exceto ele
mesmo, é maior do que o próprio número.
Por exemplo, o número 12 é abundante porque 1 + 2 + 3 + 4 + 6 = 16.
Um número é deficiente se a soma de todos os seus divisores, exceto ele
mesmo, é menor do que o próprio número.
Por exemplo, o número 10 é deficiente porque 1 + 2 + 5 = 8.
Construa um programa que faça a classificação (perfeito, abundante,
deficiente) de cada um dos valores: 2, 3, 4, ... , 30 .
Utilize o método auxiliar para obter a soma dos divisores próprios de um
inteiro:
int somaDivisores(int x){
int soma, d;
soma=1;
for(d=2; d<=x/2; d=d+1)
if(x%d==0) soma=soma+d;
return(soma);
}
31
LP2
Laboratório de Programação 2
Ciência da Computação
Problema proposto
Dois números inteiros são amigos se a soma dos divisores próprios
do primeiro for igual ao segundo e a soma dos divisores próprios do
segundo for igual ao primeiro.
Conhecendo-se um valor inteiro positivo como verificar se tal valor é
perfeito e, se não for perfeito,
perfeito se possui ou não um número amigo?
Exibir como resultado uma mensagem indicativa e, se for o caso,
exibir o valor amigo.
amigo
Reutilize o método auxiliar (tela anterior) para obter a soma dos
divisores próprios de um inteiro.
32
LP2
Laboratório de Programação 2
Ciência da Computação
Problema proposto
Implemente um programa em Java que leia dia, mês e ano (uma data)
e calcule e imprima a quantidade de dias que faltam até o fim do ano.
Considerar dia, mês e ano como valores inteiros correspondentes a
uma data válida.
O método executar( ) deve utilizar dois métodos auxiliares para
resolver o problema:
método diasNoMes( int m, int a ) que calcula e retorna a
quantidade de dias no mês m.
método diasFimAno( int d, int m, int a ) que calcula e retorna a
quantidade de dias transcorridos desde a data (parâmetro de
entrada) até o fim do ano dessa data.
continua>>>
33
LP2
Laboratório de Programação 2
Ciência da Computação
O primeiro desses módulo auxiliares está pronto:
int diasNoMes(int m, int a){
int qdias;
switch(m){
case 2:
if( (a%4==0 && a%100!=0) || (a%400==0) )
qdias=29;
else
qdias=28;
break;
case 4: case 6: case 9: case 11: qdias=30;
break;
default: qdias=31;
}
return(qdias);
}
continua>>>
34
LP2
Laboratório de Programação 2
Ciência da Computação
Complete o segundo método (abaixo) e construa o método executar( ).
int diasFimAno(int d, int m, int a){
int qdias, mesvar;
qdias = diasNoMes(m,a)- d + 1;
for( mesvar = m+1; mesvar <13; mesvar=mesvar+1){
qdias = qdias+
???????? ;
}
return(????????);
}
35
LP2
Laboratório de Programação 2
Ciência da Computação
Considere os seguintes métodos auxiliares:
void lerVetor( float v[ ], int tv[ ] ) {
float temp; tv[0] = -1;
int conta = 1;
temp=Float.parseFloat(JOptionPane.showInputDialog(
"digite o componente "+conta+" ou -999 para encerrar"));
while( temp != -999 && conta <= 20 ) {
tv[0]=tv[0]+1;
conta=conta+1;
v[ tv[0] ] = temp;
temp=Float.parseFloat(JOptionPane.showInputDialog(
"digite o componente "+conta+" ou -999 para encerrar"));
}
tv[0]=tv[0]+1; // Define a quantidade de componentes do vetor
}
void exibirVetor( float v[ ], int tv ) {
int k; String saida=””;
for( k = 0; k < tv; k++ ) {
saida=saida+"\n "+ (k+1) + "o. componente:
}
JOptionPane.showMessageDialog(null,saida);
}
" + v[ k ] ;
36
LP2
Laboratório de Programação 2
Ciência da Computação
// Ordenação pelo método da Bolha
void ordenarVetor( float v[ ], int tv ) {
int conta, j, t = tv-1;
float temp;
for( conta = 1; conta < tv; conta++ ) {
for( j = 0; j < t; j++ ) {
if( v[j] > v[j+1] ) {
temp = v[j]; v[j] = v[j+1];
v[j+1] = temp;
}
}
t = t-1;
}
}
Implemente um programa Java (com a utilização desses três
métodos auxiliares) para fazer
a “entrada” de um vetor de valores float e
a “saída” de tal vetor antes e depois de ter colocado os
componentes em ordem crescente.
Veja as observações na próxima página.
37
LP2
Laboratório de Programação 2
Ciência da Computação
O método lerVetor( ) realiza a leitura dos elementos de um vetor com componentes
de tipo float com um número qualquer de componentes não superior a 20. Utiliza o
valor -999 como sentinela.
O primeiro parâmetro formal do método lerVetor( ) - float v[] - corresponde ao
vetor cujo conteúdo será definido a partir da execução desse método. Esse parâmetro
receberá o endereço da primeira posição do vetor colocado como parâmetro real na
ordem de chamada a esse método.
O conteúdo do vetor v[] não é efetivamente transmitido de ou para o método
lerVetor( ), pois a passagem é por referência.
O segundo parâmetro int tv[] representa o número de elementos do vetor.
A passagem, neste caso, também é por referência.
No método executar( ) o vetor é um dos parâmetros reais e deve ser dimensionado
com tamanho 20. O segundo parâmetro é um vetor de tamanho 1 porque este é um
artifício utilizado, no sistema de linguagem Java, para simular a passagem por
referência de um parâmetro de tipo primitivo (int).
O método ordenarVetor( ) implementa o algoritmo da bolha (bubble sort) para
colocar em ordem não decrescente uma seqüência de números reais.
O método executar( ) deverá acionar os métodos
lerVetor( ),
ordenarVetor( ) e
exibirVetor( ).
No método executar( ) serão utilizadas essas três abstrações de processos.
38
LP2
Laboratório de Programação 2
Ciência da Computação
problema proposto
Dado um vetor de números reais, determinar e exibir o valor de seu maior
componente e a posição de sua primeira ocorrência.
Construa e utilize um método auxiliar com a seguinte declaração:
void maiorComponente( float v[ ], Maior m )
onde o “tipo” Maior será definido pela classe
class Maior{
float valor;
int posic;
}
o campo valor deverá corresponder ao valor do maior componente e
o campo posic à posição de sua primeira ocorrência.
Utilize o método lerVetor( ) apresentado no problema anterior.
39
Download

Funções/Métodos - PUC-SP