PG, Aula de 18.10.12 - Revisões sobre if else while for(;;) switch 1. Elabore um programa que leia do standard input dois valores n1,n2 inteiros e calcula a multiplicação pelo processo da ”soma russa”. Este processo está descrito em: http://www.eb23-guifoes.rcts.pt/NetMate/sitio/curiosidades.htm#Multiplicação%20russa Exemplificado através da figura seguinte para a multiplicação entre 71 e 43 2. Elabore um método que recebe em parâmetro dois inteiros e calcula e devolve o máximo divisor comum entre esses dois números. Ver detalhes em: http://pt.wikipedia.org/wiki/M%C3%A1ximo_divisor_comum Dividendo Divisor Resto da divisão inteira 348 156 36 36 ≠ 0 12 ≠ 0 = 0 (pára o ciclo, porque é Zero) O mdc é 12 (último divisor) 156 36 12 2.1 Elabore um programa na linguagem Java que lê do teclado dois valores inteiros que serão passados em argumento ao método a ser chamado em main e que foi definido em 2. 3. Diga qual é o objectivo da seguinte definição do método java e qual os resultados das duas chamadas: public static long f( int n ){ //Duas chamadas do método p em main long r=1; … while( n!=0 ) { long r0 = f(5); r = r * n--; long r1 = f(7); } … return r; } 4. Diga qual é o objectivo da seguinte definição do método java e quais os resultados das suas chamadas: public static boolean p( int n ){ //Oito chamadas de p(.. e seus resultados int r=3; boolean r0 = p(2); //dá true if( n==2 ) return true; boolean r0 = p(5); //dá true if( n<=1 || n%2==0 ) return false; boolean r0 = p(7); //dá true while( (r*r)<=n ){//r<=Math.sqrt(n) boolean r0 = p(9); //dá false if( n%r == 0 ) return false; boolean r1 = p(25); //dá false ++r; boolean r2 = p(13); //dá true } boolean r0 = p(23); //dá true return true; boolean r3 = p(113);//dá true } 5. Estudo a seguinte o seguinte código e diga quais os valores que são escritos no ecrã. Este código chama o método p(… definido em 4. dentro do for(;;) System.out.println("Tabela de números"); int ct=1; System.out.print(" "+2+" "); for( int i=3; ct<100; i +=2 ){ if( p(i) ) { System.out.print( (i<10? " ": (i<100? " ":"") ) + i +" "); ct++; if( ct%5==0 ) System.out.println();// } } System.out.println(); 6. Estudo a seguinte definição e escreva o enunciado que corresponda às instruções descritas no seu bloco. public static long numeroBase10ParaBaseB(int numero, int baseB ){ long novoN=0; int n=numero; long novoNaBaseB=0; int base=1, b10=1; while( numero!=0 ){ int d = numero % baseB; novoNaBaseB= novoNaBaseB +d*b10; b10 *=10; numero /= baseB;//numero /= baseB; <==> numero = numero/baseB; } return novoNaBaseB; } 6.1. Dada a chamada do método em main: public static void main(String[] args ){ long r = numeroBase10ParaBaseB(1238,8); r = numeroBase10ParaBaseB(123,4); …. 7. Elabore a definição do método que calcula quantos dígitos pares tem um dado número inteiro positivo recebido em parâmetro, retornando esse resultado. Teste a definição anterior com a chamada do método para n=1240759 dentro do método main