Escolar Documentos
Profissional Documentos
Cultura Documentos
Modularização
Emanuel Cunha Silva
ecs@isep.ipp.pt
Modularização
Mecanismo fornecido pelas Linguagens de Programação que permite decomposição dum
programa em módulos
Módulo 2
modularização (SENO)
Módulo 3
Módulo
Principal
Módulo
▪ Sequência de instruções que executa uma tarefa específica
▪ Exemplos
▪ RAIZQUADRADA() e SENO()
APROG - Modularização 2
Modularização
O programa é composto por um Módulo Principal e outros módulos
▪ Módulo Principal
▪ É sempre o primeiro módulo a ser executado
▪ Controla execução do programa
APROG - Modularização 3
Modularização
▪ Na chamada de um módulo, o controlo passa temporariamente para o módulo chamado
▪ Após a execução de um módulo, o controlo retorna para módulo que o chamou
Módulo 1
Sequência de execução: Instrução 1.1
…
Módulo 2
Instrução 2.1
Módulo 1
…
Início Módulo Principal
…
Módulo 1
…
Módulo 2
…
Módulo 1
…
Fim
APROG - Modularização 4
Modularização - Interesse
▪ Decomposição de programa em subprogramas mais pequenos
▪ Reduzir a complexidade do desenvolvimento
▪ Aplicação direta da estratégia dividir-para-conquistar
▪ Tornar mais rápido o desenvolvimento
▪ Módulos independentes podem ser desenvolvidos em paralelo
▪ Reutilização de módulos
▪ Tornar mais rápido desenvolvimento (evitar redundância)
▪ Tornar o programa mais pequeno e simples de ler/compreender
APROG - Modularização 5
Modularização
Exemplo: Calcular combinações
INICIO
ED: n, r, resultado, fn, fr, fnr, i INTEIRO redundância
LER (n, r)
//n!
resultado 1
REPETIR PARA i 2 ATE n PASSO 1
resultado resultado * i
FIMREPETIR
fn resultado
//r!
resultado 1
REPETIR PARA i 2 ATE r PASSO 1
resultado resultado * i
FIMREPETIR
fr resultado
//(n-r)!
resultado 1
REPETIR PARA i 2 ATE (n-r) PASSO 1
resultado resultado * i
FIMREPETIR
fnr resultado
APROG - Modularização 6
Modularização
Exemplo: Calcular combinações
reutilização
Módulo principal
INICIO
ED: n,r INTEIRO
LER (n, r)
ESCREVER (fatorial( n ) / (fatorial( r ) * fatorial( n - r ) ) )
FIM
Módulo fatorial
DEFINIR INTEIRO fatorial( numero ) independência
ED: resultado, i INTEIRO
resultado 1
REPETIR PARA i 2 ATE numero PASSO 1
resultado resultado * i
FIMREPETIR
RETORNAR resultado abstração
FIM
APROG - Modularização 7
Modularização – tipos
Procedimento
▪ Módulo que executa uma sequência de instruções
RAIZQUADRADA
▪ Exemplo: (função)
▪ ESCREVER (“Olá, bom dia”)
ESCREVER
(procedimento)
Função
▪ Módulo que executa uma sequência de instruções SENO
e, no final, retorna um valor ao ponto da sua (função)
chamada
APROG - Modularização 8
Modularização – âmbito das variáveis
Variáveis Globais
▪ Acessíveis em todo o programa, dentro de qualquer módulo
▪ Declaradas fora dos módulos
▪ Desvantagens
▪ Dificultam a compreensão do algoritmo porque é necessário analisar
em todo o programa a forma como são utilizadas
▪ Maior dificuldade em detetar eventuais erros
▪ Dificultam a reutilização dos módulos noutros algoritmos que usem as
mesmas variáveis globais
▪ Recomendação
▪ Evitar o uso de variáveis globais
▪ Usar variáveis locais
▪ Comunicar entre módulos com passagem de parâmetros
APROG - Modularização 9
Modularização – âmbito das variáveis
Variáveis Locais
▪ Declaradas dentro dos módulos
▪ Acessíveis apenas no módulo onde são declaradas
▪ Só existem durante a execução do respetivo módulo
▪ Vantagens
▪ Independência dos módulos
▪ Facilitam o desenvolvimento dos programas
APROG - Modularização 10
Modularização – âmbito das variáveis
ED: numero REAL
APROG - Modularização 11
Modularização – passagem de parâmetros
Passagem de parâmetros
▪ Meio de Comunicação entre Módulos Independentes
▪ Suportam a transferência de informação entre módulos
▪ Entrada de Dados
▪ Saída de Resultados
▪ Os parâmetros funcionam como variáveis locais, só são visíveis dentro do
módulo e são inicializadas com os valores dos argumentos de chamada
▪ Tipos de Parâmetros
▪ Atuais
▪ valores passados para o módulo chamado para inicializar os seus
parâmetros formais (normalmente, designados por argumentos)
▪ Formais
▪ identificadores que recebem os valores passados para esse módulo
(normalmente, designados apenas por parâmetros)
APROG - Modularização 12
Modularização – passagem de parâmetros
Correspondência entre parâmetros atuais e parâmetros formais
▪ Exemplo:
maior ( 5, 12)
APROG - Modularização 13
Modularização – passagem de parâmetros
Exemplo:
Parâmetros atuais
…
(argumentos)
ESCREVER ( maior( 5, 3) )
ESCREVER ( maior( 235, 1523) )
x maior( 5, maior( 90, 61 ) )
…
APROG - Modularização 14
Modularização
▪ Função
▪ Sintaxe
DEFINIR tipo_retorno nome (tipo pf1, ..., tipo pfn) // cabeçalho
ED: // variáveis e constantes locais
INÍCIO
// corpo da função
RETORNAR valor_do_tipo_retorno
FIMDEFINIR
▪ Exemplo
DEFINIR INTEIRO maior(INTEIRO x, INTEIRO y)
ED: INTEIRO resultado
INÍCIO
SE (x > y) ENTÃO
resultado x
SENÃO
resultado y
FIMSE
RETORNAR resultado // resultado tem de ser INTEIRO (tipo_retorno)
FIMDEFINIR
APROG - Modularização 15
Modularização
▪ Procedimento
▪ Sintaxe
DEFINIR nome (tipo pf1, ..., tipo pfn) // cabeçalho
ED: // variáveis e constantes locais
INÍCIO
// corpo do procedimento
FIMDEFINIR //não tem retorno
▪ Exemplo
DEFINIR mostrarNumerosDoIntervalo(INTEIRO limiteInf, INTEIRO limiteSup)
ED: INTEIRO x;
INÍCIO
REPETIR PARA x limiteInf ATE limiteSup PASSO 1
ESCREVER ( x )
FIMREPETIR
FIMDEFINIR
APROG - Modularização 16
Modularização ED: INTEIRO numero
INÍCIO
Problema: LER ( numero )
mostrarAlgarismos ( numero )
Leia um número inteiro e mostre os seus ESCREVER ( contarAlgarismos ( numero) )
algarismos linha a linha. Mostre também FIM
quantos algarismos possui esse número. DEFINIR mostrarAlgarismos(INTEIRO numero)
ED: INTEIRO algarismo
Desenvolva um programa adotando uma INÍCIO
estrutura modular. Para tal crie um REPETIR ENQUANTO ( numero > 9 )
procedimento para mostrar os algarismo numero % 10
ESCREVER ( algarismo )
algarismos e uma função para calcular e numero numero / 10
retornar a quantidade de algarismos de FIMREPETIR
ESCREVER ( numero )
um número inteiro. FIMDEFINIR
APROG - Modularização 17
<Java métodos>
APROG - Modularização 18
Java - métodos
Um método é uma sequência de instruções que realiza uma tarefa específica e no final pode
retornar:
▪ Um valor de um determinado tipo (int, double, String, …)
▪ Nada (void)
▪ Tipos de Métodos
▪ Métodos de instância
▪ Métodos de classe
▪ Métodos de Instância
▪ Aplicam-se aos objetos da classe ( Ex: Scanner ler = new Scanner(System.in);
String s = ler.next(); )
▪ Métodos de Classe
▪ Aplicam-se à classe ( Ex: double a = Math.sqrt(25.0) )
▪ Declarados como métodos estáticos (static) ( Ex: public static double sqrt(double x) )
APROG - Modularização 19
Java - métodos de classe
▪ Declaração Parâmetros formais
▪ Tipo Procedimento
modificador_acesso static void nome(tipo pf1, tipo pf2, ...., tipo pfn){
…
}
▪ Tipo Função
modificador_acesso static tipo_retorno nome(tipo pf1, tipo pf2, ...., tipo pfn){
...
return expressão;
}
APROG - Modularização 20
Java - métodos de instância
▪ Declaração Parâmetros formais
▪ Tipo Procedimento
modificador_acesso void nome(tipo pf1, tipo pf2, ...., tipo pfn){
…
}
▪ Tipo Função
modificador_acesso tipo_retorno nome(tipo pf1, tipo pf2, ...., tipo pfn){
...
return expressão;
}
APROG - Modularização 21
Java - métodos
▪ Declaração
▪ Tipo Procedimento
modificador_acesso void nome(tipo pf1, tipo pf2, ...., tipo pfn){
…
}
▪ Tipo Função
modificador_acesso tipo_retorno nome(tipo pf1, tipo pf2, ...., tipo pfn){
...
return expressão;
}
▪ Modificadores de Acesso
▪ private // método só pode ser chamado por métodos da própria classe
▪ Sem modificador // método pode ser chamado por métodos de classes do mesmo package
APROG - Modularização 22
Java - métodos
▪ Parâmetro Formal de Tipo Primitivo
▪ Tipos primitivos: byte, short, int, long, float, double, boolean, char
▪ Exemplo:
public class Exemplo{
public static void main(String[] args){
int c=0;
metodo(c);
System.out.println("C=" + c);
}
APROG - Modularização 23
Java - métodos
▪ Parâmetro Formal de Tipo Não Primitivo
▪ Tipos não primitivos
▪ Tipos criados pelo programador
▪ Estruturas indexadas (arrays)
▪ O identificador é seguido de []
▪ Exemplo: int[], float[], double[], String[], …
APROG - Modularização 24
Java - métodos public class Algarismos {
}
APROG - Modularização 25
SRP – Single Responsibility Principle
The Single Responsibility Principle (SRP) is a design pattern in computer
programming that states that every module, class, or function should have only
one reason to change. This means that each module should have a well-
defined responsibility, and solve only one small problem, not many.
The SRP helps to create modular and scalable systems, by ensuring that each
module has a clear, well-defined responsibility. This makes the code easier to
understand, maintain, and modify, and improves the overall quality of the code.
https://www.cleancode.studio/design-patterns/single-responsibility-design-pattern
APROG - Modularização 26
DRY – Do not Repeat Yourself
The DRY principle is stated as, “Every piece of knowledge or logic must have a
single, unambiguous representation within a system.”
Divide your code and logic into smaller reusable units (methods) and use that code by
calling it where you want.
Don’t write lengthy methods, but divide logic and try to use the existing piece in your
method.
Do not use copy and paste obsessively. Every time you see duplication in the code, it
represents a missed opportunity for abstraction (i.e. extracting that code to a separate
function).
https://www.cleancode.studio/design-patterns/single-responsibility-design-pattern
APROG - Modularização 27
Methods should have verb or verb phrase names like
postPayment(), deletePage(), getName() or save().
APROG - Modularização 28
</Java métodos>
APROG - Modularização 29
<Java Strings>
APROG - Modularização 30
Java - Strings
String
▪ Cadeia de carateres = texto
▪ Exemplos
▪ "ISEP"
▪ "Algoritmia e Programação"
▪ “JUPITER"
▪ Declaração
String v = ""; // String vazia
String s = "ISEP";
String nome = “Ana Berta Carla Dionísio”;
APROG - Modularização 31
Java - Strings
Carateres especiais
• Strings podem conter carateres especiais com funções específicas (sequência de escape)
• Cada sequência de escape é um único carácter embora seja escrito com dois símbolos.
▪ Exemplos
APROG - Modularização 32
Java - Strings
String
B o m d i a , R u i
0 1 2 3 4 5 6 7 8 9 10 11
posições
System.out.println( s.charAt(0) );
System.out.println( s.charAt(7) );
System.out.println( s.charAt(9) );
APROG - Modularização 33
Java - Strings
Métodos
▪ int length()
▪ String toLowerCase()
▪ String toUpperCase()
▪ int compareTo(String outraString)
▪ boolean equals(String outraString)
▪ boolean equalsIgnoreCase(String outraString)
▪ String trim()
▪ char charAt( int índice )
▪ …
APROG - Modularização 34
Java - Strings
▪ Exemplos // considerando: String s = "Aprog";
▪ int length()
▪ Retorna comprimento da string (quantidade de carateres)
int comprimento = s.length(); // comprimento = 5
▪ String toLowerCase()
▪ Retorna a string com todas as letras minúsculas
String s2 = s.toLowerCase(); // s2 = “aprog”
▪ String toUpperCase()
▪ Retorna a string com todas as letras maiúsculas
String s2 = s.toUpperCase(); // s2 = “APROG”
APROG - Modularização 35
Java - Strings
▪ Comparação de Strings
APROG - Modularização 37
Java - Strings
▪ Exemplos // considerando: String s = "Aprog";
▪ String trim()
▪ Retorna cópia da string sem espaços brancos iniciais e finais
String s1 = " APROG ";
String s2 = s1.trim(); // s2 = "APROG"
APROG - Modularização 38
Java - Strings
▪ Concatenar Strings - Usa-se o operador +
Permite criar uma nova string a partir da junção dos valores de várias strings ou números.
O primeiro elemento da junção tem de ser uma string.
▪ Exemplos
String s = “Hoje é” + “ domingo, dia ” + 15;
s = “Dia15”
APROG - Modularização 39
</Java Strings>
APROG - Modularização 40
<modularização
casos de uso>
APROG - Modularização 41
Java - métodos
Problema1(v1): Ler uma frase e mostrar quantas vogais existem nessa frase.
String frase;
int qtdVogais=0;
frase=ler.nextLine();
APROG - Modularização 42
Java - métodos
Problema2(v1): Ler duas frases e mostrar quantas vogais tem cada uma.
public class VogaisMetodoUnico {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
String frase1;
int qtdVogais1=0;
frase1=ler.nextLine();
frase1 = frase1.toLowerCase(); //passar tudo para minúsculas para não repetir
for(int i=0; i<frase1.length(); i++){
switch(frase1.charAt(i)){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': qtdVogais1++; break;
}
} [Copy + Paste] (duplicar o código)
System.out.println("Vogais1="+qtdVogais1);
//------------------------------------------------------ + alterar o nome das variáveis
String frase2;
int qtdVogais2=0;
frase2=ler.nextLine();
frase2 = frase2.toLowerCase();
for(int i=0; i<frase1.length(); i++){
switch(frase2.charAt(i)){
case 'a':
case 'e': possível ocorrência de erros:
case 'i': Depois da cópia, escapou à alteração
case 'o':
case 'u': qtdVogais2++; break;
}
}
System.out.println("Vogais2="+qtdVogais2);
}
}
APROG - Modularização 43
Java - métodos
Problema2(v1): Ler duas frases e mostrar quantas vogais tem cada uma.
public class VogaisMetodoUnico {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
String frase1;
int qtdVogais1=0;
frase1=ler.nextLine();
frase1 = frase1.toLowerCase(); //passar tudo para minúsculas para não repetir
for(int i=0; i<frase1.length(); i++){
switch(frase1.charAt(i)){
case 'a':
case 'e':
case 'i':
case 'o': Desvantagens:
case 'u': qtdVogais1++; break;
} - Código duplicado
}
System.out.println("Vogais1="+qtdVogais1);
- Código extenso e difícil de ler
//------------------------------------------------------ - Maior possibilidade de erros
String frase2;
int qtdVogais2=0; - Mais difícil manter o código
frase2=ler.nextLine();
frase2 = frase2.toLowerCase();
for(int i=0; i<frase1.length(); i++){
switch(frase2.charAt(i)){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': qtdVogais2++; break;
}
}
System.out.println("Vogais2="+qtdVogais2);
}
}
APROG - Modularização 44
Java - métodos
Problema2.1: Ler quatro frases e mostrar quantas vogais tem cada uma.
public class VogaisMetodoUnico {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
String frase1;
int qtdVogais1=0;
frase1=ler.nextLine();
frase1 = frase1.toLowerCase(); //passar tudo para minúsculas para não repetir
for(int i=0; i<frase1.length(); i++){
switch(frase1.charAt(i)){
}
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': qtdVogais1++; break;
Parece razoável ???
}
System.out.println("Vogais1="+qtdVogais1);
//------------------------------------------------------
String frase2;
int qtdVogais2=0;
frase2=ler.nextLine();
frase2 = frase2.toLowerCase();
for(int i=0; i<frase1.length(); i++){
switch(frase2.charAt(i)){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': qtdVogais2++; break;
}
}
System.out.println("Vogais2="+qtdVogais2);
}
//------------------------------------------------------
String frase2;
int qtdVogais2=0;
frase2=ler.nextLine();
frase2 = frase2.toLowerCase();
for(int i=0; i<frase1.length(); i++){
switch(frase2.charAt(i)){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': qtdVogais2++; break;
}
}
System.out.println("Vogais2="+qtdVogais2);
}
//------------------------------------------------------
String frase2;
int qtdVogais2=0;
frase2=ler.nextLine();
frase2 = frase2.toLowerCase();
for(int i=0; i<frase1.length(); i++){
switch(frase2.charAt(i)){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': qtdVogais2++; break;
}
}
System.out.println("Vogais2="+qtdVogais2);
}
}
APROG - Modularização 45
Java - métodos
Problema1(v2): Ler uma frase e mostrar quantas vogais existem nessa frase.
public class VogaisMetodoSeparado {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in); Abstração da implementação
String frase;
frase=ler.nextLine();
System.out.println("Vogais=“ + contarVogaisNaFrase(frase));
}
APROG - Modularização 46
Java - métodos
Problema2(v2): Ler duas frases e mostrar quantas vogais tem cada uma.
public class VogaisMetodoSeparado {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in); Não há [Copy + Paste] do código
Há reutilização do código
String frase1 = ler.nextLine();
String frase2 = ler.nextLine();
System.out.println("Vogais1=“ + contarVogaisNaFrase(frase1));
System.out.println("Vogais2=“ + contarVogaisNaFrase(frase2));
}
APROG - Modularização 47
Java - métodos
Problema1(v3): Ler uma frase e mostrar quantas vogais existem nessa frase.
public class VogaisMetodoSeparadoAbstrato {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
String frase;
frase=ler.nextLine();
System.out.println("Vogais=“ + contarVogaisNaFrase(frase));
}
APROG - Modularização 48
Java - métodos
Problema3: Ler uma frase e mostrar quantas vogais, vírgulas e pontos de
interrogação existem nessa frase.
public class VogaisMetodoSeparadoAbstrato {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.println("Numero:["+lim1+","+lim2+"]:");
numero=ler.nextInt();
while(numero < lim1 || numero > lim2){
System.out.println("Numero:["+lim1+","+lim2+"]:");
numero=ler.nextInt();
}
return numero;
}
}
APROG - Modularização 50
Java - métodos
Problema 5: Ler a idade, o peso e a altura de uma pessoa. Considerar apenas válidos
valores dentro dos intervalos: idade=[0,120]; peso=[100g,300000g]; altura=[30cm,250cm];
if( ePasswordValida(password))
System.out.println("password válida");
else
System.out.println("password NAO É válida");
}
APROG - Modularização 52
Java - métodos
Problema 6: Ler uma string e verificar se é elegível para password. Uma password
tem de conter no mínimo 8 símbolos e pelo menos um elemento de cada um dos
seguintes conjuntos: letras maiúsculas, minúsculas e algarismos.
…
public static boolean ePasswordValida(String pwd){
final int MIN_TAMANHO = 8;
final int MIN_SIMBOLOS = 1; Usar CONSTANTES em vez de literais
int maiusculas, minúsculas, numeros;
char simbolo;
APROG - Modularização 55
Java - métodos
Problema 7 (v2): Quantas vezes surge o algarismo 3 entre os números 100 e 1000?
public class OcorrenciasDoAlgarismo3NoIntervalo {
APROG - Modularização 57
Java - métodos
Problema 8: Quantas vezes surge o algarismo 3, 1 e 5 entre os números 100 e 1000 e o 2
e 4 entre os números 11 e 64?
public class OcorrenciasDeAlgarismoNoIntervalo {
public static void main(String[] args) {
System.out.println(contarAlgarismoNoIntervalo(3, 100, 1000));
System.out.println(contarAlgarismoNoIntervalo(1, 100, 1000));
System.out.println(contarAlgarismoNoIntervalo(5, 100, 1000));
System.out.println(contarAlgarismoNoIntervalo(2, 11, 64));
System.out.println(contarAlgarismoNoIntervalo(4, 11, 64));
}
System.out.println(“Disciplina : ” + disciplina);
System.out.print(“Positivas : “);
for (int i = 0; i < positivas; i++) {
System.out.print(“*”);
} Redundância
System.out.println();
System.out.print(“Negativas : “);
for (int i = 0; i < negativas; i++) {
System.out.print(“*”);
}
}
APROG - Modularização 59
Java - métodos
Problema 9: Ler o nome de uma disciplina, a quantidade de positivas e negativas
e mostrar no seguinte formato (exemplo: “Algorimia” 4 2):
Disciplina : Algoritmia
Positivas : ****
Negativas : **
verInfoDaDisciplina(“Positivas : “, positivas);
verInfoDaDisciplina(“Negativas : “, negativas);
}
System.out.println(“Disciplina : “ + disciplina);
verInfoDaDisciplina(“Positivas : “, positivas);
verInfoDaDisciplina(“Negativas : “, negativas);
}
public static void verInfoDaDisciplina(String mensagem, int valor) {
System.out.print(mensagem);
for (int i = 0; i < valor; i++) {
System.out.print(“*”);
}
System.out.println();
}
APROG - Modularização 61
código
APROG - Modularização 62
DRY
Java - métodos “Don’t Repeat Yourself”
APROG - Modularização 63
KISS
Java - métodos “Keep It Simple Stupid”
APROG - Modularização 64
Single
Java - métodos Responsibility
Excertos de resoluções: Exemplo 3:
public static int combinations( int factorial, int factorial2, int factorial3){
int combination = factorial / (factorial2 * factorial3);
return combination;
}
public static int permutations( int factorial, int factorial3){
int permutation = factorial / (factorial3);
return permutation;
}
public static void main(String[] args) { Não garantem o que o nome do método representa!
Scanner input = new Scanner(System.in);
int num = input.nextInt();
int num2 = input.nextInt();
int factorial = factorial(num);
int factorial2 = factorial(num2); Cálculos fundamentais fora dos métodos
int factorial3 = factorial(num-num2);
if(factorial3>0){
int combination = combinations(factorial, factorial2, factorial3);
int permutation = permutations(factorial, factorial3);
APROG - Modularização 65
KISS DRY
Java - métodos “Keep It Simple Stupid” “Don’t Repeat Yourself”
switch(type){
case "cylinder": calcula 3 coisas diferentes
res = Math.PI * Math.pow(value1,2) * value2;
break;
case "sphere":
res = (4.0/3) * Math.PI * Math.pow(value1,3);
break;
case "cone":
res = (1.0/3) * Math.PI * Math.pow(value1,2) * value2; Mas, só usa value1 !!!
}
E value2 para que serve neste caso?
return res;
}
APROG - Modularização 67
Single KISS
Java - métodos Responsibility “Keep It Simple Stupid”
...
}
Múltiplas responsabilidades
Responsabilidade única
. . .
APROG - Modularização 68
</modularização – casos de uso>
APROG - Modularização 69
Java - métodos
Excertos de resoluções: Exemplo 1:
public static void main(String[] args) {
int numero1, numero2, N,res=0,n1=0,n2=0;
Scanner ler = new Scanner(System.in);
N = ler.nextInt();
for (int i = 0; i <= N; i++) {
do {
numero1 = ler.nextInt();
} while (numero1 < 0);
do { Redundância
numero2 = ler.nextInt();
} while (numero2 < 0);
if (ContDig (numero1, numero2) >= res){
res=ContDig (numero1, numero2); Repetição na invocação do método!
n1=numero1;
n2=numero2;
}
}
if (res > 0){
System.out.println(n1 + "/" + n2);
}else {
System.out.println("sem resultados");
}
}
APROG - Modularização 70
Java - métodos
Excertos de resoluções: Exemplo 1:
public static void main(String[] args) { static Scanner ler = new Scanner(System.in);
int numero1, numero2, N,res=0,n1=0,n2=0; public static void main(String[] args) {
Scanner ler = new Scanner(System.in); int numero1, numero2, N, n1 = 0, n2 = 0;
N = ler.nextInt(); int res = 0;
for (int i = 0; i <= N; i++) { N = ler.nextInt();
do { for (int i = 0; i <= N; i++) {
numero1 = ler.nextInt(); numero1 = lerNumeroMaiorQueZero();
} while (numero1 < 0); numero2 = lerNumeroMaiorQueZero();
do { int contaDig = ContDig(numero1, numero2);
numero2 = ler.nextInt(); if ( contaDig >= res) {
} while (numero2 < 0); res = contaDig;
if (ContDig (numero1, numero2) >= res){ n1 = numero1; Evitar repetição
res=ContDig (numero1, numero2); n2 = numero2;
n1=numero1; }
n2=numero2; }
} . . .
} }
if (res > 0){
System.out.println(n1 + "/" + n2); private static int lerNumeroMaiorQueZero() {
}else { int numero1;
System.out.println("sem resultados"); do {
} numero1 = ler.nextInt();
} } while (numero1 < 0);
return numero1; Abstração
}
Independência
APROG - Modularização 71
Java - métodos
Excertos de resoluções: Exemplo 2:
public static void main(String[] args) {
Scanner ler= new Scanner((System.in));
int N,num;
N=ler.nextInt();
num=0;
while (num<=N){
if (numArmtrong(num)==num) Verificação da condição fora do método!
System.out.println(num);
num++;
}
}
public static double numArmtrong(int num){ O método deve verificar se é nº de Armstrong
double res,dig,ndig;
int val;
val=num;
ndig=0;
res=0;
while (val>0){
val=val/10;
ndig++;
}
while (num>0){ Cálculos diferentes no mesmo método!
dig=num%10;
res=res+Math.pow(dig,ndig);
num=num/10;
}
return (res);
}
APROG - Modularização 72
Java - métodos
Excertos de resoluções: Exemplo 2:
public static void main(String[] args) {
int N = ler.nextInt();
for (int numero = 0; numero <= N; numero++) {
if (eNumeroDeArmstrong(numero))
System.out.println(numero);
}
}