M3 - Programació estructurada / Exercicis UF1: D'estructura alternativa

De wikiserver
Dreceres ràpides: navegació, cerca

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.

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.


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!

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.


[1]

14. Demaneu un número entre 0 y 9999, i indicar si és o no és capicua.


15. Demanar una hora en format: hora, minuts i segons, i mostreu el segon següent:

16. Demanar un número entre 0 i 99 i mostreu-lo amb text. Per exemple, pel númeo 56 cal mostrar cinquanta-sis.

Valor Mètode Descripció
caràcter charAt(int index) Retorna el valor del caràcter en la posició especificada
int compareTo(String anotherString) Compara dos strings lexicogràficament.
int compareToIgnoreCase(String str) Compara dos strings lexicogràficament ignorant diferències entre majúscules.
String concat(String str) Concatena aquest string al final del’original.
boolean contains(CharSequence s) Retorna cert si l’String conté aquesta seqüència de caràcters.
boolean endsWith(String suffix) Retorna cert si l’String finalitza amb aquest sufix.
boolean equals(Object anObject) Retorna cert si les dues cadenes són iguals.
boolean equalsIgnoreCase(String anotherString) Com l’anterior però ignorant diferències entre majúscules.
void getChars(int srcBegin,int srcEnd,char[] dst, int dstBegin) Copia els caràcters del String a la taula de caràcters.
int indexOf(int ch) Retorna l’índex de la primera aparició del caràcter especificat.
int indexOf(String str) Com l’anterior però amb un String
int indexOf(int ch, int fromIndex) Retorna l’índex de la primera aparició del caràcter especificat a partir de la posició especificada.
int indexOf(String str, int fromIndex) Com l’anterior però amb un String.
int lastIndexOf(int ch) Retorna l’índex de la última aparició del caràcter especificat.
int lastIndexOf(String str) Com l’anterior però amb un String.
int lastIndexOf(int ch, int fromIndex) Retorna l’índex de la última aparició del caràcter especificat a partir de la posició especificada.
int lastIndexOf(String str, int fromIndex) Com l’anterior però amb un String.
int length() Retorna la longitud.
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) Comprova si dos “trossos” dels String són iguals.
boolean regionMatches(int toffset, String other, int ooffset, int len) Comprova si dos “trossos” dels String són iguals.
String replace(char oldChar, char newChar) Retorna un nou String resultat de reemplaçar totes les ocurrències del antic caràcter pel nou.
String replace(CharSequence target, CharSequence replacement) Reemplaça cada substring original pel substring nou.
boolean startsWith(String prefix) Retorna cert si l’String comença amb aquest prefix.
boolean startsWith(String prefix, int toffset) Retorna cert si l’String comença amb aquest prefix a partir de la posició especificada.
String substring(int beginIndex) Retorna el substring que hi ha a partir de la posició especificada.
String substring(int beginIndex, int endIndex) Retorna el substring que hi ha entre les dues posicions.
char[] toCharArray() Converteix l’String en una taula de caràcters.
String toLowerCase() Converteix l’String a minúscules.
String toUpperCase() Converteix l’String a majúscules.
String trim() Retorna un String eliminant els espais en blanc a l’inici i al final.