2ª Lista Exercicios

Propaganda
Instituto Superior de Engenharia de Lisboa
Licenciatura em Engenharia de Electrónica e Telecomunicações e de Computadores
2ª Lista de exercícios de PROGRAMAÇÃO
Semestre de Inverno 2013-2014 (Outubro 2013)
1. Elabore o programa que lê do teclado sequência de números inteiros terminada por um carácter
não digito e calcule:
1.1 Quantos números foram lidos;
1.2 Quantos destes são são negativos e quantos são positivos
1.3 Total de mudanças de sinal de número positivo para número negativo;
1.4 Quantos números têm a maior subsequência crescente;
1.5 Qual é o maior e em que posição se encontra.
import java.util.Scanner;
public class SequenciaNumeros{
public static void main( String[] args ){
Scanner teclado = new Scanner(System.in);
int c = 0;
//conta o total de de numeros lidos do teclado
int cNeg = 0;//contagem dos numeros negativos
int nAnt,n; //nAnt=nº anterior e n=nº corrente
while( teclado.hasNextInt() ){// pára logo ao 1º carácter não digito
n=teclado.nextInt();
//
if( n<0 ){ cNeg++; }
/*Falta completar !!!!!!
*/
c++;
}//fim do while
System.out.println("Foram digitados no total"+c+" numeros");
System.out.println("Foram digitados "+cNeg+" negativos");
System.out.println("Foram digitados "+(c-cNeg)+" positivos");
}
}
2. 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
3. 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
}
4. 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 anteriormente. dentro do for(;;)
System.out.println("Tabela de números");
int ct=1;
System.out.print(" "+2+" ");
for( int i=3; ct<10; i +=2 ){
if( p(i) ) {
System.out.print( (i<10? " ": (i<100? " ":"") ) + i +" ");
ct++;
if( ct%5==0 ) System.out.println();//
}
}
System.out.println();
5. Elabore um programa que leia do standard input dois valores n1, n2 positivos e calcula se esses
dois números lidos são ”amigos”, se o forem então escreva essa mensagem em standard output ou
”não amigos” em caso contrário. Diz-se que dois números são amigos se cada um deles é igual à
soma dos divisores próprios do outro. Os divisores próprios de um número positivo n são todos os
divisores inteiros positivos excepto o próprio n. Um exemplo de números amigos são os números
284 e o 220, uma vez que a soma dos divisores de 220 dá 284 e vice-versa, como se mostra em:
Divisores de 220-> 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
Divisores de 284-> 1 + 2 + 4 + 71 + 142 = 220
6. Elabore um programa que leia do standard input um valor n positivo maior que 2 que faz a
geração em standard output dos n valores da sequência dos números de Tribonnaci. Um número
Tribonnaci de uma dada sequência é dado pela soma dos 3 anteriores, ou seja, o termo t(i) dessa
sequência é dado por t(i) = t(i-1) + t(i-2) + t(i-3), sendo os 3 primeiros termos da sequência prédefinidos com 0, 2, 2. Se n=3 o output será 0, 2, 2, se n=6 o ouput será: 0, 2, 2, 4, 8, 14.
7. Elabore um programa que lê do teclado um valor inteiro longo n e calcule:
a. Quantos algarismos têm.
b. Qual é o maior algarismo e em que posição significativa se encontra (a unidade é posição 0,
a dezenas é posição 1 e assim sucessivamente ….).
c. Somar todos os algarismos entre si.
d. Inverter os algarismos do número, ou seja, a unidade troca com o algarismo mais
significativo e assim sucessivamente; (exemplo: 7523 para 3257).
e. Formar dois novos números com os algarismos do nº lido em que o primeiro só contém os
algarismos pares e o segundo só contém os algarismos ímpares.
import java.util.Scanner;
public class AnalizarNumero{
public static void main( String[] args ){
Scanner teclado = new Scanner(System.in);
System.out.println("digite o valor inteiro longo ");
long n = teclado.nextLong();
/*
Completar com código java tal que concretize o exercício proposto
*/
}
}
8. Elabore o programa onde deve definir os métodos referidos em 9. 10. 11. para que os possa chamar
e testar dentro da função main. Escreva os resultados no ecrã (console output). Use o critério de
definir e testar um método de cada vez até concluir todos.
9. 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
10. Elabore um método que recebe em parâmetro dois inteiros e calcula e devolve o menor múltiplo
comum entre esses dois números.
Ver detalhes em: http://pt.wikipedia.org/wiki/M%C3%ADnimo_m%C3%BAltiplo_comum
11. Elabore um método que recebe em parâmetro um inteiro e verifica se é ou não número capicua,
devolvendo true ou false respectivamente.
Ver detalhes em: http://pt.wikipedia.org/wiki/Capicua
12. Elabore um programa que gera o “Pinheiro de Natal” (fig.abaixo). O mesmo programa deve ser
estruturado em termos de métodos. Vamos dar uma ajuda, escrevendo o código java do main.
public class Lista2Exer12PinheiroNatal{
/**
Definir todos os métodos chamados em main. Poderá
caso considere necessário definir outros métodos
que ajudam à resolução.
*/
public static void main( String[] args ){
int alt = ler("Altura do triangulo entre[3,7] ");
fazTriangulo(alt);//a base=alt*2-1
fazTriangulo(alt);
fazTriangulo(alt);
FazPe(alt);
//a largura=(alt*2-1)-4
}
}
//Exemplo para o Triângulo: altura=5 e base=altura*2-1
//a altura Pé=altura Triangulo e largura Pé=base-4
*
***
*****
*******
*********
*
***
*****
*******
*********
*
***
*****
*******
*********
*****
*****
*****
*****
*****
13. Elabore um programa que gera uma tabela dos primeiros 200 números primos, em que deve
colocar 16 em cada linha e todos alinhados à direita em colunas. O programa deve ser estruturado
em termos de métodos. Use o método definido em 3.
2
59
3
61
5
67
7
71
11
73
13
79
17
83
19
89
23 29 31 37 41 43 47 53
97 101 103 107 109 113 127 131
Download