M3 - Programació estructurada / Exercicis UF1: Recorregut-Solucions

De wikiserver
Dreceres ràpides: navegació, cerca

1. Escriu un programa que llegeixi números enters positius i mostri el més petit i el més gran. El programa finalitzarà quan ens introdueixin un número negatiu.

package exrecorregut;

import java.util.Scanner;

/**
 * Escriu un programa que llegeixi números enters positius i mostri el més petit
 * i el més gran. El programa finalitzarà quan ens introdueixin un número
 * negatiu.
 */
public class Ex1 {

    public static void main(String[] args) {
        Scanner teclat = new Scanner(System.in);
        //Declaració de variables
        int num, max, min;
        // Inicialitzar tractament
        max = Integer.MIN_VALUE;
        min = Integer.MAX_VALUE;
        // Accedir al primer element
        System.out.println("Introdueix un valor positiu + "
                + "(per acabar negatiu)");
        num = teclat.nextInt();
        // Mentre no ultim element 
        while (num >= 0) {
        // Tractar_element
            if (num > max) {
                max = num;
            }
            if (num < min) {
                min = num;
            }
        // Obtenir següent element 
            System.out.println("Introdueix un valor positiu + "
                    + "(per acabar negatiu)");
            num = teclat.nextInt();
        }
        // Tractament_final 
        System.out.println("El valor màxim és: " + max);
        System.out.println("El valor mínim és: " + min);
    }
}


2. Donat un número llegit per teclat, calcula el número de dígits que té.

package exrecorregut;

import java.util.Scanner;

/**
 * Donat un número llegit per teclat, calcula el número de dígits que té.
 */
public class Ex2 {

    public static void main(String[] args) {
        Scanner teclat = new Scanner(System.in);
        //Declaració de variables
        int num, digits = 0;
        // Accedir al primer element
        System.out.print("Introdueix un valor positiu:");
        num = teclat.nextInt();
        // Mentre no ultim element 
        while (num > 0) {
            // Tractar_element
            digits++;
            // Obtenir següent element 
            num = num / 10;

        }
        // Tractament_final 
        System.out.println("El número té " + digits + " dígits");

    }
}


3. Donat un número llegit per teclat, realitzar la suma de tots els dígits del número.

Per exemple si introdueixen el valor 1238, s'imprimirà el valor : 1+2+3+8 -> 14

package exrecorregut;

import java.util.Scanner;

/**
 * Donat un número llegit per teclat, realitzar la suma de tots els dígits del número.
 */
public class Ex3 {

    public static void main(String[] args) {
        Scanner teclat = new Scanner(System.in);
        //Declaració de variables
        int num, suma = 0;
        // Accedir al primer element
        System.out.print("Introdueix un valor positiu:");
        num = teclat.nextInt();
        // Mentre no ultim element 
        while (num > 0) {
           // Tractar_element
           suma=suma+(num%10);
           // Obtenir següent element 
           num=num/10;                                    
        }
        // Tractament_final 
        System.out.println("La suma dels dígits és: "+suma);

    }
}

<

4. Donat un número llegit per teclat, realitzar la suma de tots els dígits parells del número.

package exrecorregut;

import java.util.Scanner;

/**
 * Donat un número llegit per teclat, realitzar la suma de tots els dígits parells del número.
 */
public class Ex4 {

    public static void main(String[] args) {
        Scanner teclat = new Scanner(System.in);
        int num, mod, suma = 0;
        System.out.print("Introdueix un valor positiu:");
        num = teclat.nextInt();
        while (num > 0) {
            mod = (num % 10);
            //Si és parell, sumo
            if (mod % 2 == 0) {
                suma = suma + mod;
            }
            num = num / 10;
        }
        System.out.println("La suma dels dígits parells és: " + suma);

    }

}


5. Donat un número llegit per teclat, determina el número de dígits més grans que 5.

package exrecorregut;

import java.util.Scanner;

/**
 * Donat un número llegit per teclat, determina el número de dígits més grans que 5.
 */
public class Ex5 {

    public static void main(String[] args) {
        Scanner teclat = new Scanner(System.in);
        int num, mod, quants = 0;
        System.out.print("Introdueix un valor positiu:");
        num = teclat.nextInt();
        while (num > 0) {
            if (num%10>5){
                quants++;
            }
            num=num/10;                        
        }
        System.out.println("Hi ha "+quants+" dígits més grans que 5");

    }
}


6. Escriu un programa que llegeixi números enters positius (finalitzarà amb la introducció de -1) i mostri totes les parelles de números consecutius que apareixen a la seqüència.

Per exemple si la seqüència de números és: 7 10 11 23 4 5 8 10 11 12 -1, mostrarà: 10 11, 4 5, 10 11, 11 12

package exrecorregut;

import java.util.Scanner;

/**
 * Escriu un programa que llegeixi números enters positius (finalitzarà amb la introducció de -1) 
 * i mostri totes les parelles de números  consecutius que apareixen a la seqüència.
 */
public class Ex6 {

    public static void main(String[] args) {
        Scanner teclat = new Scanner(System.in);
        int anterior, actual;
        System.out.println("Introdueix un valor positiu + "
                + "(per acabar -1");
        actual = teclat.nextInt();
        anterior = actual;

        while (actual != -1) {
            if (actual == anterior + 1) {
                System.out.println(anterior + "-" + actual);

            }
            anterior = actual;
            System.out.println("Introdueix un valor positiu + "
                    + "(per acabar -1");
            actual = teclat.nextInt();

        }
    }
}


7. Escriu un programa que mostri i sumi n (entrada per teclat) nombres de la següent successió de números: 2, 4, 8, 6, 36, 72, 70, 4900, 9800 ...

  • La lògica de la sèrie és: elevar al quadrat, multiplicar per dos, restar dos, elevar al quadrat, ...
package ex_recorregut;

import java.util.Scanner;

/**
 * Escriu un programa que mostri i sumi n (entrada per teclat) nombres de la següent successió de números: 
 * 2, 4, 8, 6, 36, 72, 70, 4900, 9800 ... 
 * La lògica de la sèrie és: elevar al quadrat, multiplicar per dos, restar dos, elevar al quadrat, ...
 */
public class Ex7 {
    public static void main(String[] args) {
        Scanner teclat = new Scanner(System.in);
       
        int numSeq, valorSeq, suma=0;
        System.out.println("Introdueix el número d'elements de la seqüència: ");
        int num = teclat.nextInt();
        if (num > 0){
            numSeq = 0;
            valorSeq = 2;
            System.out.print("Seqüència: "+valorSeq+" ");
            suma = valorSeq;    
      
            while (numSeq < num) {
              numSeq++;
              switch (numSeq%3){
                  case 0:
                    valorSeq -= 2;
                    break;
                case 1:
                    valorSeq *= valorSeg;
                    break;
                case 2:
                    valorSeq *= 2;
                    break;
        
                }
                System.out.print(valorSeq + " ");
                suma += valorSeq;
            }
        }    
        System.out.println("");     
        System.out.println("El resultat de la suma és: "+ suma);
    }
}


8. Escriu un programa que llegeixi números enters positius (finalitzarà amb la introducció de -1) i mostri quants números parells han sortit, quants números imparells han sortit, la suma del números parells, la suma del números imparells i la resta de la suma dels parells menys la suma dels imparells.

Per exemple si la seqüència de números és: 7 6 11 10 4 5 8 10 3 8 -1, mostrarà:

Parells: 6
Imparells: 4
Suma parells: 46
Suma imparells: 26
Resta de sumes: 20
package exrecorregut;

import java.util.Scanner;

public class Ex8 {
    public static void main(String[] args) {
        Scanner teclat = new java.util.Scanner(System.in);  
        int contPar = 0, contImp = 0, sumaPar = 0, sumaImp = 0;      
        System.out.println("Introdueix un valor positiu (per acabar -1): ");
        int num = teclat.nextInt();
        while (num != -1){
            if (num%2 == 0){
                contPar++;
                sumaPar += num;
            }else{
                contImp++;
                sumaImp += num;
            }
            System.out.println("Introdueix un valor positiu (per acabar -1): ");
            num = teclat.nextInt();
        } 
        System.out.println("Parells: " + contPar);
        System.out.println("Imparells: " + contImp);
        System.out.println("Suma parells: " + sumaPar);
        System.out.println("Suma imparells: " + sumaImp);
        System.out.println("Resta de sumes: " + (sumaPar -sumaImp));
    }
}


9. Escriu un programa que llegeixi dos números enters positius i mostri i sumi tots els nombres parells que van des del primer número fins el segon (ambdós inclosos). Cal controlar que el segon número introduït és més gran que el primer.

Exemple: num1 = 14 i num2 = 5 mostrarà un missatge d'error.

Exemple: num1 = 5 i num2 = 14 mostrarà:

Números parells: 6 8 10 12 14
Suma: 50


package exrecorregut;

import java.util.Scanner;

public class Ex9 {
    public static void main(String[] args) {
        Scanner teclat = new java.util.Scanner(System.in);
        int sumaPar=0;
        System.out.println("Introdueix el límit inferior: ");
        int limitInf = teclat.nextInt();
        System.out.println("Introdueix el límit superior: ");
        int limitSup = teclat.nextInt();
        
        if (limitInf > limitSup){
            System.out.println("Els límits no són correctes!");
        }else{
            System.out.println("Números parells: ");
            for (int num = limitInf; num <= limitSup; num++){
                if (num%2==0){
                    System.out.print(num +" ");
                    sumaPar += num;
                }
            }
            
            System.out.println("\nSuma: "+sumaPar);
        }
        
    }
          
}


10. Escriu un programa que verifiqui la conjectura de Collatz per qualsevol enter positiu, i que mostri la seqüència corresponent.

Conjectura de Collatz

Donat un número enter positiu la següent successió sempre acaba en 1: si el número és 1 el procés acaba. Sinó, si és parell es divideix entre 2 i si és imparell es multiplica per 3 i se li suma 1.

Exemple si comencem amb el número 6 obtindrem la seqüència següent:

6, 3, 10, 5, 16, 8, 4, 2, 1

11. Una central distribueix cal cap a diferents sucursals. Disposen d'un lloc de càrrega a on van arribant sacs amb pesos variables. L'empresa disposa d'una flota de camions amb capacitat de càrrega diferents. Es pretén establir un protocol consistent en carregar 20 camions. Un camió no es pot carregar amb més quilos que la seva capacitat i marxarà si amb el següent sac ja supera aquesta capacitat. L'empresa vol un programa que li demani el treballador la capacitat del camió i el pes dels sacs, indicant si ha de carregar el sac o enviar-lo al seu destí i començar a carregar un altre. El procés continua fins que s'hagin omplert els 20 camions, moment en el que sortirà un missatge amb el text "Finalitzada la càrrega del dia"

Exemple:

 Camió Capacitat Sac Capacitat       Camió Capacitat Sac Capacitat       Camió Capacitat Sac Capacitat
       
    1    22000    1     3000            2    18000    5     3000            3    18000    7    9000
                  2     5000                          6     8000                          8    7000
                  3     9000
                  4     3000

    4    20000    9     7000            5    28000   12     5000            6    20000   16    4000
                 10     9000                         13     9000                         17    3000
                 11     4000                         14     9000                         18    5000
                                                     15     3000                         19    4000
                                                                                         20    3000

    7    22000   21     4000            8    18000   26     9000            9    20000   28    8000
                 22     5000                         27     4000                         29    3000
                 23     6000                                                             30    5000
                 24     3000                              
                 25     3000

   10    20000   31     5000           11    20000   34     5000           12    28000   37    7000
                 32     3000                         35     6000                         38    3000 
                 33     9000                         36     6000                         39    7000
                                                                                         40    5000
   ...                 

Resultat:

 Camió    Sacs que carrega    Càrrega que portarà       Camió    Sacs que carrega    Càrrega que portarà

   1      1,2,3 i 4               20000                   2      5 i 6                   11000

   3      7 i 8                   16000                   4      9, 10 i 11              20000

   5      12, 13, 14 i 15         26000                   6      16, 17, 18, 19 i 20     19000

   7      21, 22, 23, 24 i 25     21000                   8      26 i 27                 13000

   9      28, 29 i 30             16000                  10      31, 32 i 33             17000

  11      34, 35 i 36             17000                  12      37, 38, 39 i 40         22000

...
package centralcamions;
import java.util.Scanner;

public class CentralCamions {

   
    public static void main(String[] args) {
        int numcamio=1, capcamio, carregat,carregatotal=0, numsac=1, pessac=0;
        final int NUM_CAMIONS=20;
        Scanner lector = new Scanner(System.in);
        while (numcamio<NUM_CAMIONS) {
            System.out.println("Introdueix capacitat camió: " + numcamio);
            capcamio = lector.nextInt();
            lector.nextLine();
            carregat = 0;
            System.out.println("Comença la carrega del camió: " + numcamio);        
            while (capcamio>=carregat+pessac){
                if (numsac!=1) {
                   System.out.println("Carregat sac: " + (numsac-1));
                   carregat=carregat+pessac;
                   carregatotal=carregatotal+carregat;
                } 
                System.out.println("Introdueix pes sac: " + numsac);
                pessac=lector.nextInt();
                numsac++;
            }
            System.out.println("Finalitzada la carrega del camió: " + numcamio);        
            System.out.print("Camió "+numcamio+" carregat amb "+carregat+" kilos.");
            System.out.println(" Diferencia respecte a capacitat: "+(capcamio-carregat)+" kilos");
            numcamio++;          
        }
        System.out.println("Carrega total: "+carregatotal+"Kilos. Sacs emprats "+ (numsac-1));
        System.out.println("");        
    }    
}