M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa
1. Un programa demana un número. Si és parell el multiplica per dos i li suma tres. Si és senar el multiplica per tres i li resta 4. Evidentment informa de què ha fet i informa del resultat.
package estructura_alternativa;
import java.util.Scanner;
public class Exercici1 {
public static void main(String[] args) {
int numero, resultat;
Scanner lector = new Scanner(System.in);
System.out.print("Introdueix un numero: ");
numero = lector.nextInt();
if (numero % 2 == 0) {
resultat = numero * 2 + 3;
System.out.println("El numero " + numero + " es parell, l'he multiplicat per dos i li he sumat tres, i dona : " + resultat);
} else {
resultat = numero * 3 - 4;
System.out.println("El numero " + numero + " es senar, l'he multiplicat per tres i li he restat quatre, i dona : " + resultat);
}
}
}
2. Els treballadors d’una fàbrica treballen en dos torns: diürn i nocturn. Es vol calcular el salari d’un dia d’acord amb els següents punts:
- a. La tarifa de les hores diürnes és de 4€
- b. La tarifa de les hores nocturnes és de 6€
- c. En cas de ser diumenge, la tarifa s’incrementa en 2€ el torn diari i en 3€ el torn nocturn.
El programa ha de llegir les hores treballades, el torn i el dia de la setmana i dir quin serà el salari.
package estructura_alternativa;
import java.util.Scanner;
public class Exercici2 {
public static void main(String[] args) {
final int DIA = 4;
final int DIAFESTIU = 6;
final int NIT = 6;
final int NITFESTIU = 9;
Scanner lector = new Scanner(System.in);
int hores, salari;
char torn, dia;
System.out.print("Introdueix el nombre d'hores treballades: ");
hores = lector.nextInt();
System.out.print("Introdueix el torn (diari ->d/nocturn->n): ");
torn = lector.next().charAt(0);
System.out.print("Introdueix el dia (diumenge->d/feiner->f): ");
dia = lector.next().charAt(0);
if (dia == 'f') {
if (torn == 'd') {
salari = hores * DIA;
} else {
salari = hores * NIT;
}
} else if (torn == 'd') {
salari=hores*DIAFESTIU;
}
else{
salari=hores*NITFESTIU;
}
System.out.println("El salari és: "+salari);
}
}
3. Escriure un algorisme que llegeixi tres números enters i ens digui quin és el valor més gran.
package estructura_alternativa;
import java.util.Scanner;
public class Exercici3 {
public static void main(String[] args) {
Scanner lector = new Scanner(System.in);
int x,y,z,max;
System.out.print("Introdueix tres valors separats per espais: ");
x=lector.nextInt();
y=lector.nextInt();
z=lector.nextInt();
max=x;
if(y>max){
max=y;
}
if(z>max){
max=z;
}
System.out.println("El valor màxim és: " +max);
}
}
4. Escriviu un programa que simuli una calculadora simple. El programa llegeix dos enters i un caràcter. Si el caràcter és un + s’imprimeix la suma, si és un – la resta, si és un * el producte, si és un / la divisió entera i si és un %, el mòdul.
Per a poder llegir un caràcter cal fer : lector.next().charAt(0)
package estructura_alternativa;
import java.util.Scanner;
public class Exercici4 {
public static void main(String[] args) {
int resultat = 0;
Scanner teclat = new Scanner(System.in);
System.out.print("Introdueix un valor enter: ");
int numero1 = teclat.nextInt();
System.out.print("Introdueix un altre valor enter: ");
int numero2 = teclat.nextInt();
System.out.print("Introdueix l'operació a fer ( + , - , * , /, %): ");
char operacio = teclat.next().charAt(0);
if (operacio=='+') {
resultat = numero1 + numero2;
} else if (operacio=='-') {
resultat = numero1 - numero2;
} else if (operacio=='*') {
resultat = numero1 * numero2;
} else if (operacio=='/') {
resultat = numero1 / numero2;
} else if (operacio=='%') {
resultat = numero1 % numero2;
}
System.out.println("El resultat és : " + resultat);
}
}
- Utilitzant la sentencia switch:
package estructura_alternativa;
import java.util.Scanner;
public class Exercici4 {
public static void main(String[] args) {
int resultat = 0;
Scanner teclat = new Scanner(System.in);
System.out.print("Introdueix un valor enter: ");
int numero1 = teclat.nextInt();
System.out.print("Introdueix un altre valor enter: ");
int numero2 = teclat.nextInt();
System.out.print("Introdueix l'operació a fer ( + , - , * , /, %): ");
char operacio = teclat.next().charAt(0);
switch (operacio) {
case '+':
resultat = numero1 + numero2;
break;
case '-':
resultat = numero1 - numero2;
break;
case '*':
resultat = numero1 * numero2;
break;
case '/':
resultat = numero1 / numero2;
break;
case '%':
resultat = numero1 % numero2;
break;
}
System.out.println("El resultat és : " + resultat);
}
}
5. Escriviu un programa que llegeixi del teclat un enter comprès entre 0 i 63 (inclosos) i ens digui el nombre de bits que necessitem per escriure’l en binari. No s’ha de fer servir cap funció calcular-ho, sinó simplement a base de if .. else, recordant que a cada potència de 2 necessitem un bit més.
package estructura_alternativa;
import java.util.Scanner;
public class Exercici5 {
public static void main(String[] args) {
int valor, bits;
Scanner lector = new Scanner(System.in);
System.out.print("Introdueix un valor entre 0 i 64: ");
valor = lector.nextInt();
if ((valor < 0) || (valor > 64)) {
System.out.print("El valor no esta entre 0 i 64!!\n\n");
} else {
if (valor < 2) {
bits = 1;
} else if (valor < 4) {
bits = 2;
} else if (valor < 8) {
bits = 3;
} else if (valor < 16) {
bits = 4;
} else if (valor < 32) {
bits = 5;
} else {
bits = 6;
}
System.out.println("Necessitem " + bits + " bits");
}
}
}
6. Tres persones les edats de les quals s’han de llegir per teclat, van a un parc d’atraccions. El cost de l’entrada normal és de 20€. Però tenen els següents descomptes:
- A. Els menors de 5 anys no paguen però han d’anar acompanyats d’algun més gran de 12 anys, sinó no poden entrar
- B. Entre els 5 i els 12 anys paguen el 25 % de l’entrada
- C. Entre els 12 anys i els 16 anys paguen el 50 % de l’entrada
- D. Els més grans de 16 anys paguen l’entrada normal, excepte que els tres estiguin entre els 16 i els 18 anys, que aquest cas com hi ha una oferta, només pagaran dues entrades normals entre els tres.
- E. Els més grans de 65 anys no paguen
Quan costaran les tres entrades?
package estructura_alternativa;
import java.util.Scanner;
public class Exercici6 {
public static void main(String[] args) {
int edat_P1, edat_P2, edat_P3, ent_P1 = 0, ent_P2 = 0, ent_P3 = 0, total;
Scanner lector = new Scanner(System.in);
System.out.print("Introdueix l'edat de la primera persona: ");
edat_P1 = lector.nextInt();
System.out.print("Introdueix l'edat de la segona persona: ");
edat_P2 = lector.nextInt();
System.out.print("Introdueix l'edat de la tercera persona: ");
edat_P3 = lector.nextInt();
if (((edat_P1 < 5) || (edat_P2 < 5) || (edat_P3 < 5)) && (edat_P1 < 12) && (edat_P2 < 12) && (edat_P3 < 12)) {
System.out.print("NO ENTREN!!!\n");
} else {
if ((edat_P1 >= 16) && (edat_P1 < 18) && (edat_P2 >= 16) && (edat_P2 < 18) && (edat_P3 >= 16) && (edat_P3 < 18)) {
total = 40;
} else { //Fem el calcul per la primera persona
if ((edat_P1 >= 5) && (edat_P1 < 12)) {
ent_P1 = 5;
} else if ((edat_P1 >= 12) && (edat_P1 < 16)) {
ent_P1 = 10;
} else if ((edat_P1 >= 16) && (edat_P1 < 65)) {
ent_P1 = 20;
}
//Ho repetim per a la segona persona
if ((edat_P2 >= 5) && (edat_P2 < 12)) {
ent_P2 = 5;
} else if ((edat_P2 >= 12) && (edat_P2 < 16)) {
ent_P2 = 10;
} else if ((edat_P2 >= 16) && (edat_P2 < 65)) {
ent_P2 = 20;
}
//Ho repetim per a la tercera persona
if ((edat_P2 >= 5) && (edat_P2 < 12)) {
ent_P3 = 5;
} else if ((edat_P2 >= 12) && (edat_P2 < 16)) {
ent_P3 = 10;
} else if ((edat_P2 >= 16) && (edat_P2 < 65)) {
ent_P3 = 20;
}
//Calculem el total de les entrades
total = ent_P1 + ent_P2 + ent_P3;
}
System.out.println("El cost de les entrades es de " + total + "€");
}
}
}
7. Escriviu un programa que llegeixi un mes en número i un any i indiqui el nombre de dies d’aquest mes. Cal recordar que un any és de traspàs (bixest) si és divisible per 4, excepte quan és divisible per 100, a no ser que sigui divisible per 400.
package estructura_alternativa;
import java.util.Scanner;
public class Exercici7 {
public static void main(String[] args) {
int dies = 0, mes, any;
Scanner lector = new Scanner(System.in);
System.out.print("Introdueix un mes en numero : ");
mes = lector.nextInt();
System.out.print("Introdueix un any : ");
any = lector.nextInt();
if ((mes > 0) && (mes < 13)) {
switch (mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dies = 31;
break;
case 4:
case 6:
case 9:
case 11:
dies = 30;
break;
case 2:
if ((any % 4 == 0) && ((any % 100 != 0) || (any % 400 == 0))) {
dies = 29;
} else {
dies = 28;
}
break;
}
System.out.println("El numero de dies es: " + dies);
} else {
System.out.println("Numero de mes equivocat");
}
}
}
8. Per a esbrinar la Pasqua d’un any, procedirem de la següent manera:
- Dividim l’any el qual vulguem saber la Pasqua per 19 i al mòdul l’anomenem "a".
- Dividim el mateix número per 4 i anomenem al mòdul "b".
- Tornem a dividir el mateix número per 7 i anomenen al mòdul "c".
- Dividim 19*a + 24 per 30 i anomenem "d" al mòdul.
- Dividim 2*b + 4*c + 6*d + 5 per 7 i anomenem al mòdul "e".
Un cop sabut això, tenim que la Pasqua serà:
- (22 + d + e) de març (si d+e <10) o bé: (d + e - 9) d’abril .
package estructura_alternativa;
import java.util.Scanner;
public class Exercici8 {
public static void main(String[] args) {
Scanner lector = new Scanner(System.in);
int any,a,b,c,d,e;
System.out.print("Introdueix el número de l'any: ");
any=lector.nextInt();
a=any%19;
b=any%4;
c=any%7;
d=(19*a + 24)%30;
e=(2*b + 4*c + 6*d + 5 )%7;
if (d+e<10){
System.out.println("Diumenge de Pasqua serà el dia: "+ (22 + d + e)+ " de març" );
}
else{
System.out.println("Diumenge de Pasqua serà el dia: "+ ( d + e-9)+ " d'abril" );
}
}
}
9. Volem saber si una persona és major d’edat, per això llegirem la data de naixement i la data actual.
package estructura_alternativa;
import java.util.Scanner;
public class Exercici9 {
public static void main(String[] args) {
int diaAct, mesAct, anyAct, diaNeix, mesNeix, anyNeix;
Scanner lector = new Scanner(System.in);
System.out.print("Introdueix el dia actual :");
diaAct = lector.nextInt();
System.out.print("Introdueix el mes actual :");
mesAct = lector.nextInt();
System.out.print("Introdueix l'any actual :");
anyAct = lector.nextInt();
System.out.print("Introdueix el dia del teu neixement :");
diaNeix = lector.nextInt();
System.out.print("Introdueix el mes del teu neixement :");
mesNeix = lector.nextInt();
System.out.print("Introdueix l'any del teu neixement :");
anyNeix = lector.nextInt();
if (anyAct - anyNeix < 18) {
System.out.println("MENOR\n");
} else if (anyAct - anyNeix > 18) {
System.out.println("MAJOR\n");
} else if (mesAct > mesNeix) {
System.out.println("MAJOR\n");
} else if (mesAct < mesNeix) {
System.out.println("MENOR\n");
} else if (diaAct > diaNeix) {
System.out.println("MAJOR\n");
} else {
System.out.println("MENOR\n");
}
}
}
10. Escriure un algorisme en el qual a partir d’una data inicial llegida per teclat amb el format dia, mes, any, ens digui la data del dia següent. ( 5 punts)
Alguns exercicis més:
11. Escriu un programa que llegeixi un número enter positiu i determini si es un número de 1, 2,3 o 4 xifres.
Control d'errors: Escriu els missatges pertinents si han introduït un valor fora del rang o si han introduït una cadena de caràcters.
package estructura_alternativa;
import java.util.Scanner;
public class Exercici11 {
public static void main(String[] args) {
int numero, xifres=0;
Scanner lector = new Scanner(System.in);
System.out.print("Introdueix un numero: ");
if (lector.hasNextInt()){
numero = lector.nextInt();
lector.nextLine();
if ((numero >= 0) && (numero <10000)){
if ((numero >= 0) && (numero <10)) {
xifres = 1;
} else if ((numero >= 10) && (numero <100)){
xifres = 2;
} else if ((numero >= 100) && (numero <1000)){
xifres = 3;
} else if ((numero >= 1000) && (numero <10000)){
xifres = 4;
}
System.out.println("El numero " + numero + " es de: " + xifres +" xifres");
}
else {
System.out.println("El numero " + numero + " no es dins del rang 0-10000");
}
}
else {
System.out.println("Has d'introduir un número!!");
}
}
}
12. En un casino de jocs es desitja mostrar els missatges respectius per els punts obtinguts en el llançament de tres daus d'un client, d'acord als següents resultats:
- a) Si els tres daus són sis, mostrar el missatge "Excel·lent"
- b) Si dos daus són sis, mostrar el missatge "Molt bé"
- c) Si un dau és sis, mostrar el missatge "Regular"
- d) Si cap dau és sis, mostrar el missatge "Pèssim"
Utilitza per la simulació dels llançaments:
import java.util.Random; ... Random rnd = new Random(); dau1 = rnd.nextInt(6)+1;
Exemple de sortida:
Has tret: 6 6 6 Excel·lent!
package estructura_alternativa;
import java.util.Random;
public class Exercici12 {
public static void main(String[] args) {
int dau1, dau2, dau3;
Random rnd = new Random();
dau1 = rnd.nextInt(6)+1;
dau2 = rnd.nextInt(6)+1;
dau3 = rnd.nextInt(6)+1;
System.out.println("Has tret: " + dau1 + " " + dau2 + " " + dau3);
if ((dau1 == 6) && (dau2 ==6) && (dau3 ==6)) {
System.out.println("Excel·lent!");
}
else if (((dau1 == 6) && (dau2 ==6)) || ((dau1 == 6) && (dau3 == 6)) || ((dau2 == 6) && (dau3 == 6))){
System.out.println("Molt bé!");
}
else if ((dau1 == 6) || (dau2 ==6) || (dau3 == 6)){
System.out.println("Regular");
}
else {
System.out.println("Pèssim");
}
}
}
13. Demaneu tres números enters positius i mostreu-los en ordre descendent.
Control d'errors: Escriu els missatges pertinents si han introduït un valor negatiu, si han introduït una cadena de caràcters o si han introduït números iguals.