Diferència entre revisions de la pàgina «M3 - Programació estructurada / Exercicis UF1: Classes»

De wikiserver
Dreceres ràpides: navegació, cerca
(Exercici 3)
Línia 21: Línia 21:
  
 
==Exercici 2==
 
==Exercici 2==
 +
 +
Fes un programa que llegeixi una frase sencera i ens indiqui quantes vegades surt cada lletra i en quantes paraules surt. El resultat s'ha de mostrar en el mateix ordre que apareixen les lletres en la frase.
 +
 +
Utilitza la classe recompte amb les següents propietats:
 +
<pre>
 +
- lletra de tipus caràcter.
 +
- numParaules de tipus enter.
 +
- numVegades de tipus enter.
 +
</pre>
 +
 +
 +
==Exercici 3==
 +
Una companyia d’assegurances té les següents dades dels seus 100 clients:
 +
 +
:*Nom i cognoms
 +
:*Número de pòlissa
 +
:*Tipus de pòlissa
 +
:*Quantitat assegurada
 +
 +
Existeixen tres tipus de pòlisses: Vehicle, Vida i Vivenda. En el primer cas es coneix la marca i l’any de matriculació, en el segon l’any de naixement i en el tercer si la vivenda posseeix o no sistema de seguretat.
 +
 +
Volem un programa que obtingui el següent llistat :
 +
 +
<pre>
 +
  Client: ...............................................................................................
 +
  Pòlissa Nº:.....................................Tipus:.................................................
 +
  Quantitat assegurada ............................... Total a pagar ....................................
 +
</pre>
 +
 +
Per a obtenir el total a pagar s’ha de tenir en compte:
 +
 +
:*El cost de l’assegurança en general és del 1% de la quantitat assegurada
 +
:*Les assegurances de vida i les de vivenda tenen un descompte del 20%
 +
:*En l’assegurança de vehicles s’aplicarà la següent taula d’increments del cost d’acord amb l’antiguitat del vehicle referida a l’any actual:
 +
:::-per a més de 5 anys el 5%
 +
:::-per a més de 8 anys el 10%
 +
:::-per a més de 10 anys el 20%
 +
:*En  les  assegurances  de  vivenda,  el  cost  s’incrementarà  un  20%  si  no  es posseeixen sistemes de seguretat.
 +
 +
Cada client té només un tipus d’assegurança.
 +
 +
'''Nota:''' Fes servir el mateix mètode de l’exercici anterior per a guardar-ho en un fitxer.
 +
 +
==Exercici 4==
 +
 
Estem creant una base de dades amb els alumnes de primer. Ens interessa el nom i els cognoms. També ens interessa saber les notes que tenen a cada una de les tres primeres UF de programació. En total volem guardar informació de 20 alumnes. Primer de tot cal definir la classe '''Alumne'''.
 
Estem creant una base de dades amb els alumnes de primer. Ens interessa el nom i els cognoms. També ens interessa saber les notes que tenen a cada una de les tres primeres UF de programació. En total volem guardar informació de 20 alumnes. Primer de tot cal definir la classe '''Alumne'''.
  
Línia 62: Línia 107:
  
 
import java.io.Serializable;
 
import java.io.Serializable;
 
/**
 
*
 
* @author albert
 
*/
 
  
 
public class Alumne implements Serializable{
 
public class Alumne implements Serializable{
Línia 155: Línia 195:
 
}
 
}
 
</source>
 
</source>
 
==Exercici 3==
 
Una companyia d’assegurances té les següents dades dels seus 100 clients:
 
 
:*Nom i cognoms
 
:*Número de pòlissa
 
:*Tipus de pòlissa
 
:*Quantitat assegurada
 
 
Existeixen tres tipus de pòlisses: Vehicle, Vida i Vivenda. En el primer cas es coneix la marca i l’any de matriculació, en el segon l’any de naixement i en el tercer si la vivenda posseeix o no sistema de seguretat.
 
 
Volem un programa que obtingui el següent llistat :
 
 
<pre>
 
  Client: ...............................................................................................
 
  Pòlissa Nº:.....................................Tipus:.................................................
 
  Quantitat assegurada ............................... Total a pagar ....................................
 
</pre>
 
 
Per a obtenir el total a pagar s’ha de tenir en compte:
 
 
:*El cost de l’assegurança en general és del 1% de la quantitat assegurada
 
:*Les assegurances de vida i les de vivenda tenen un descompte del 20%
 
:*En l’assegurança de vehicles s’aplicarà la següent taula d’increments del cost d’acord amb l’antiguitat del vehicle referida a l’any actual:
 
:::-per a més de 5 anys el 5%
 
:::-per a més de 8 anys el 10%
 
:::-per a més de 10 anys el 20%
 
:*En  les  assegurances  de  vivenda,  el  cost  s’incrementarà  un  20%  si  no  es posseeixen sistemes de seguretat.
 
 
Cada client té només un tipus d’assegurança.
 
 
'''Nota:''' Fes servir el mateix mètode de l’exercici anterior per a guardar-ho en un fitxer.
 
 
==Exercici 2==
 
 
Fes un programa que llegeixi una frase sencera i ens indiqui quantes vegades surt cada lletra i en quantes paraules surt. El resultat s'ha de mostrar en el mateix ordre que apareixen les lletres en la frase.
 
 
Utilitza la classe recompte amb les següents propietats:
 
<pre>
 
- lletra de tipus caràcter.
 
- numParaules de tipus enter.
 
- numVegades de tipus enter.
 
</pre>
 

Revisió del 11:58, 21 gen 2019

Exercici 1

Volem fer un estudi estadístic en relació al llançament d'un dau de sis cares. En concret volem obtenir 100 seqüències i a continuació determinar quina ha estat la seqüencia més llarga, la més curta, el número que s'ha repetit més vegades i el número que més vegades ha tancat una seqüencia.

Una seqüencia acaba quan han sortit totes les cares del dau.

Definiu la classe seqüencia per recullir totes les dades d'una seqüencia.


Exercici 2

Fes un programa que llegeixi una frase sencera i ens indiqui quantes vegades surt cada lletra i en quantes paraules surt. El resultat s'ha de mostrar en el mateix ordre que apareixen les lletres en la frase.

Utilitza la classe recompte amb les següents propietats:

- lletra de tipus caràcter.
- numParaules de tipus enter.
- numVegades de tipus enter.


Exercici 3

Una companyia d’assegurances té les següents dades dels seus 100 clients:

  • Nom i cognoms
  • Número de pòlissa
  • Tipus de pòlissa
  • Quantitat assegurada

Existeixen tres tipus de pòlisses: Vehicle, Vida i Vivenda. En el primer cas es coneix la marca i l’any de matriculació, en el segon l’any de naixement i en el tercer si la vivenda posseeix o no sistema de seguretat.

Volem un programa que obtingui el següent llistat :

   Client: ...............................................................................................
   Pòlissa Nº:.....................................Tipus:.................................................
   Quantitat assegurada ............................... Total a pagar ....................................

Per a obtenir el total a pagar s’ha de tenir en compte:

  • El cost de l’assegurança en general és del 1% de la quantitat assegurada
  • Les assegurances de vida i les de vivenda tenen un descompte del 20%
  • En l’assegurança de vehicles s’aplicarà la següent taula d’increments del cost d’acord amb l’antiguitat del vehicle referida a l’any actual:
-per a més de 5 anys el 5%
-per a més de 8 anys el 10%
-per a més de 10 anys el 20%
  • En les assegurances de vivenda, el cost s’incrementarà un 20% si no es posseeixen sistemes de seguretat.

Cada client té només un tipus d’assegurança.

Nota: Fes servir el mateix mètode de l’exercici anterior per a guardar-ho en un fitxer.

Exercici 4

Estem creant una base de dades amb els alumnes de primer. Ens interessa el nom i els cognoms. També ens interessa saber les notes que tenen a cada una de les tres primeres UF de programació. En total volem guardar informació de 20 alumnes. Primer de tot cal definir la classe Alumne.

El programa ha de permetre mitjançant un menú: afegir un nou alumne, posar notes a un alumne, llistar (el que sigui) , etc...

Per no perdre la informació cada vegada que executeu el programa i no haver d’estar inserint contínuament alumnes podeu ajudar-vos del codi de fitxers que ja teniu implementat.

El vostre programa tindrà aquest aspecte:

public class ProgramaAlumnes {

  public static void main(String[] args) {

    GestioFitxer g= new GestioFitxer();
    Alumne alumnes[] = new Alumne[20];
    int quants=g.llegeix(alumnes);
    // Aquí va el vostre codi
    g.escriu(alumnes, quants);
  }
}

Amb el codi anterior el que heu fet inicialment passar tota la informació del fitxer a la taula d’alumnes. La variable quants indica quantes posicions de la taula teniu ocupades (és a dir, quants alumnes teniu). Lògicament la primera vegada que executeu, el fitxer no existirà (ja que encara no hi ha alumnes), la taula d’alumnes estarà buida i la variable quants valdrà 0.

El codi del final del programa el que fa és traspassar tota la informació de la taula al fitxer. Per a que això funcioni bé, heu d’actualitzar la variable quants cada vegada que inseriu o elimineu un alumne.

Nota: Per a que funcioni aquest codi de fitxer cal que afegiu a la capçalera de la classe Alumne-->implements Serializable


Classes Base:

  • Alumne.java
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package exAlumnesBase;

import java.io.Serializable;

public class Alumne implements Serializable{
              
}
  • GestioFitxer.java
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package exAlumnesBase;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 *
 * @author albert
 */

public class GestioFitxer {

  public int llegeix(Alumne alumnes[]) {

    int quants = 0;
    ObjectInputStream entrada = null;
    try {
         entrada = new ObjectInputStream(new FileInputStream("Alumnes.dat"));
         Alumne a = (Alumne) entrada.readObject();
         while (a != null) {
           alumnes[quants] = a;
            quants++;
            a = (Alumne) entrada.readObject();
         }
         entrada.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    return quants;
  }

  public void escriu(Alumne alumnes[], int quants) {
    try {
         ObjectOutputStream sortida = new ObjectOutputStream(new FileOutputStream("Alumnes.dat"));
         for (int i = 0; i <= quants; i++) {
           sortida.writeObject(alumnes[i]);
         }
         sortida.close();
        } catch (IOException Exception) {
        }

    }
  }
  • ProgramaAlumnes.java
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package exAlumnesBase;

/**
 *
 * @author albert
 */

public class ProgramaAlumnes {
    
  public static void main(String[] args) {

    GestioFitxer g= new GestioFitxer();
    Alumne alumnes[] = new  Alumne[20];
    int quants=g.llegeix(alumnes);
      
    // Aquí va el vostre codi                             
        
    g.escriu(alumnes, quants);        
        
   }
}