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

De wikiserver
Dreceres ràpides: navegació, cerca
(Matrius)
 
(Hi ha 67 revisions intermèdies del mateix usuari que no es mostren)
Línia 7: Línia 7:
 
package taules;
 
package taules;
  
public class Exercici1_2015 {
+
public class Ex1 {
  
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
Línia 15: Línia 15:
 
         for (int i = 0; i < taulaC.length; i++) {
 
         for (int i = 0; i < taulaC.length; i++) {
 
             taulaC[i] = taulaA[i] + taulaB[i];
 
             taulaC[i] = taulaA[i] + taulaB[i];
 
+
        }
 +
        for (int i = 0; i < taulaC.length; i++) {
 +
            System.out.println("taula["+i+"] = " + taulaC[i]);
 
         }
 
         }
 
     }
 
     }
Línia 22: Línia 24:
 
-->
 
-->
  
2. Fes un programa que donada una taula de números ja inicialitzada, la llegeixi amb un for i quan surti del for imprimeixi el valor més petit de la taula.
+
2. Fes un programa que donada una taula de números ja inicialitzada, la recorri amb un for i quan surti del for imprimeixi el valor més petit de la taula.
  
 
<!--
 
<!--
Línia 28: Línia 30:
 
package taules;
 
package taules;
  
public class Exercici2_2015 {
+
public class Ex2 {
  
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
Línia 52: Línia 54:
 
package taules;
 
package taules;
  
public class Exercici3_2015 {
+
public class Ex3 {
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
 
         int taula[] = {3, 6, 1, -12, 4, 33, -23, 9, 10};
 
         int taula[] = {3, 6, 1, -12, 4, 33, -23, 9, 10};
Línia 65: Línia 67:
 
-->
 
-->
  
4. Fes un programa que faci una rotació cap a l’esquerra o cap a la dreta (segons ens indiqui l’usuari) de tots els elements del vector (en rotació
+
4. Fes un programa que faci una rotació cap a l’esquerra o cap a la dreta (segons ens indiqui l’usuari) de tots els elements del vector (en rotació esquerra l’element que està a la primera posició passarà a l’ultima i en rotació dreta l’element que està l’últim passarà a la primera posició).
esquerra l’element que està a la primera posició passarà a l’ultima i en rotació dreta l’element que està l’últim passarà a la primera posició).
 
  
 
<!--
 
<!--
Línia 74: Línia 75:
 
import java.util.Scanner;
 
import java.util.Scanner;
  
public class Exercici4_2015 {
+
public class Ex4 {
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
 
         int taula[]={1,2,3,4,5,6,7,8,9};
 
         int taula[]={1,2,3,4,5,6,7,8,9};
Línia 108: Línia 109:
 
-->
 
-->
  
5. Escriure un programa que, donat una taula de 10 enters (introduïts per codi), li doni la volta. Per exemple, si el vector original és: 0-1-2-3-4-5-6-7-8-9
+
5. Escriure un programa que, donat una taula de 10 enters (introduïts per codi), li doni la volta. Per exemple, si el vector original és: 0-1-2-3-4-5-6-7-8-9 acabi sent : 9-8-7-6-5-4-3-2-1-0. No s'ha de fer servir cap taula auxiliar.
acabi sent : 9-8-7-6-5-4-3-2-1-0. No s'ha de fer servir cap taula auxiliar.
 
  
 
<!--
 
<!--
Línia 115: Línia 115:
 
package taules;
 
package taules;
  
public class Exercici5_2015 {
+
public class Ex5 {
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
 
         int taula[]={0,1,2,3,4,5,6,7,8,9};
 
         int taula[]={0,1,2,3,4,5,6,7,8,9};
 
         for (int i = 0; i < taula.length/2; i++) {
 
         for (int i = 0; i < taula.length/2; i++) {
             int j = taula[i];
+
             int aux = taula[i];
 
             taula[i]=taula[taula.length-i-1];
 
             taula[i]=taula[taula.length-i-1];
             taula[taula.length-i-1]=j;
+
             taula[taula.length-i-1]=aux;
 
              
 
              
 
         }
 
         }
Línia 149: Línia 149:
 
package taules;
 
package taules;
  
public class Exercici6_2015 {
+
public class Ex6 {
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
 
         int taula[]={4,2,3,7,4,8,6};
 
         int taula[]={4,2,3,7,4,8,6};
Línia 165: Línia 165:
 
-->
 
-->
  
7. Fes un programa que llegeixi les temperatures mitjanes dels dotze mesos de l’any, les vagi guardant en una taula i al final calculi la temperatura mitjana
+
7. Fes un programa que llegeixi les temperatures mitjanes dels dotze mesos de l’any, les vagi guardant en una taula i al final calculi la temperatura mitjana de l’any.
de l’any.
+
 
 +
<!--
 +
<source lang="java">
 +
public class Ex7 {
 +
        public static void main(String[] args) {
 +
     
 +
        final int MESOS = 12;   
 +
        double temperatures[] = new double[MESOS];
 +
        Scanner lector = new Scanner(System.in);
 +
        System.out.println("Mitjana de les temperatures dels 12 mesos");
 +
        double suma=0;
 +
        double mitjana;
 +
        for (int i=0; i<temperatures.length; i++){
 +
            System.out.print("Introdueix la temperatura del mes "+(i+1)+": ");
 +
            temperatures[i] = lector.nextDouble();
 +
        }
 +
       
 +
        //Els valors que sobrin a la darrera línia escrita es descarten.
 +
        lector.nextLine();
 +
        //Calculem la suma de les temperatures
 +
            for (double temp: temperatures) {
 +
                suma += temp;
 +
            }
 +
        //Calculem la mitjana       
 +
        mitjana= suma/MESOS;
 +
        System.out.printf("La mitjana és de %.2f graus\n" ,mitjana);
  
 +
    }
 +
}
 +
</source>
 +
-->
 
<!--
 
<!--
 +
'''Si introdueixen un Double amb un "." el programa acabarà de forma abrupta, per evitar-ho utilitzem la funció hasNestDouble() i un bucle while...'''
 +
 
<source lang="java">
 
<source lang="java">
 
package taules;
 
package taules;
Línia 174: Línia 205:
 
import java.util.Scanner;
 
import java.util.Scanner;
  
public class Exercici7_2015 {
+
public class Ex7 {
 
+
        public static void main(String[] args) {
    public static void main(String[] args) {
+
     
         //Suposarem temperatures sense decimals
+
         final int MESOS = 12;   
         int temperatures[] = new int[12];
+
         double temperatures[] = new double[MESOS];
 
         Scanner lector = new Scanner(System.in);
 
         Scanner lector = new Scanner(System.in);
         System.out.println("Introdueix les temperatures dels 12 mesos: ");
+
         System.out.println("Mitjana de les temperatures dels 12 mesos");
 
         int numValorsLlegits = 0;
 
         int numValorsLlegits = 0;
         int suma=0;
+
         double suma = 0;
 
         double mitjana;
 
         double mitjana;
         while (numValorsLlegits < 12) {
+
         while (numValorsLlegits < MESOS) {
 +
            System.out.print("Introdueix la temperatura del mes "+(numValorsLlegits +1)+": ");
 
             //Abans de llegir, comprovem si realment hi ha un enter.
 
             //Abans de llegir, comprovem si realment hi ha un enter.
             if (lector.hasNextInt()) {
+
             if (lector.hasNextDouble()) {
                 int valor = lector.nextInt();
+
                 double valor = lector.nextDouble();
 
                 temperatures[numValorsLlegits] = valor;
 
                 temperatures[numValorsLlegits] = valor;
 
                 numValorsLlegits++;
 
                 numValorsLlegits++;
                suma=suma+valor;
 
 
 
 
             } else {
 
             } else {
 
                 //Si el valor no és enter, es llegeix però s’ignora.
 
                 //Si el valor no és enter, es llegeix però s’ignora.
Línia 201: Línia 230:
 
         //Els valors que sobrin a la darrera línia escrita es descarten.
 
         //Els valors que sobrin a la darrera línia escrita es descarten.
 
         lector.nextLine();
 
         lector.nextLine();
         mitjana=suma/12.0;
+
        //Calculem la suma de les temperatures
 +
            for (double valor: temperatures) {
 +
                suma += valor;
 +
            }
 +
        //Calculem la mitjana       
 +
         mitjana=suma/MESOS;
 
         System.out.printf("La mitjana és de %.2f graus\n" ,mitjana);
 
         System.out.printf("La mitjana és de %.2f graus\n" ,mitjana);
  
Línia 210: Línia 244:
  
 
8. Modifica l’exercici anterior de forma que el programa tregui per pantalla al final, els mesos amb temperatura inferior a la mitjana anual.
 
8. Modifica l’exercici anterior de forma que el programa tregui per pantalla al final, els mesos amb temperatura inferior a la mitjana anual.
 
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
Línia 217: Línia 250:
 
import java.util.Scanner;
 
import java.util.Scanner;
  
public class Exercici8_2015 {
+
public class Ex8 {
  
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
 
         //Suposarem temperatures sense decimals
 
         //Suposarem temperatures sense decimals
         String mesos[]={"Gener", "Febrer","Març","Abril", "Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"};
+
         String mesos[] = {"Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"};
         int temperatures[] = new int[12];
+
         final int MESOS = 12;
 +
        double temperatures[] = new double[MESOS];
 
         Scanner lector = new Scanner(System.in);
 
         Scanner lector = new Scanner(System.in);
         System.out.println("Introdueix les temperatures dels 12 mesos: ");
+
         System.out.println("Mitjana de les temperatures dels 12 mesos");
 
         int numValorsLlegits = 0;
 
         int numValorsLlegits = 0;
         int suma = 0;
+
         double suma = 0;
 
         double mitjana;
 
         double mitjana;
 
         while (numValorsLlegits < 12) {
 
         while (numValorsLlegits < 12) {
 +
            System.out.print("Introdueix la temperatura del mes "+mesos[numValorsLlegits]+": ");
 
             //Abans de llegir, comprovem si realment hi ha un enter.
 
             //Abans de llegir, comprovem si realment hi ha un enter.
             if (lector.hasNextInt()) {
+
             if (lector.hasNextDouble()) {
                 int valor = lector.nextInt();
+
                 double valor = lector.nextDouble();
 
                 temperatures[numValorsLlegits] = valor;
 
                 temperatures[numValorsLlegits] = valor;
 
                 numValorsLlegits++;
 
                 numValorsLlegits++;
                suma = suma + valor;
 
 
 
 
             } else {
 
             } else {
 
                 //Si el valor no és enter, es llegeix però s’ignora.
 
                 //Si el valor no és enter, es llegeix però s’ignora.
Línia 244: Línia 276:
 
         }
 
         }
 
         //Els valors que sobrin a la darrera línia escrita es descarten.
 
         //Els valors que sobrin a la darrera línia escrita es descarten.
     
+
 
 
         lector.nextLine();
 
         lector.nextLine();
         mitjana = suma / 12.0;
+
        //Calculem la suma de les temperatures
 +
        for (double valor : temperatures) {
 +
            suma += valor;
 +
        }
 +
         mitjana = suma / MESOS;
 
         System.out.printf("La mitjana és de %.2f graus\n", mitjana);
 
         System.out.printf("La mitjana és de %.2f graus\n", mitjana);
 
         System.out.print("Els mesos amb temperatura inferior a la mitjana són: ");
 
         System.out.print("Els mesos amb temperatura inferior a la mitjana són: ");
 
         for (int i = 0; i < temperatures.length; i++) {
 
         for (int i = 0; i < temperatures.length; i++) {
             if(temperatures[i]< mitjana)
+
             if (temperatures[i] < mitjana) {
                 System.out.print(mesos[i]+ " ");
+
                 System.out.print(mesos[i] + " ");
 +
            }
 
         }
 
         }
+
 
 
         System.out.println("");
 
         System.out.println("");
 
     }
 
     }
Línia 268: Línia 305:
 
import java.util.Scanner;
 
import java.util.Scanner;
  
public class Exercici9_2015 {
+
public class Ex9 {
  
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
 
         //Suposarem temperatures sense decimals
 
         //Suposarem temperatures sense decimals
 
         String mesos[] = {"Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"};
 
         String mesos[] = {"Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"};
         int temperatures[] = new int[12];
+
         final int MESOS = 12;
 +
        double temperatures[] = new double[MESOS];
 
         Scanner lector = new Scanner(System.in);
 
         Scanner lector = new Scanner(System.in);
         System.out.println("Introdueix les temperatures dels 12 mesos: ");
+
         System.out.println("Mesos amb temperatures màxima i mínima ");
 
         int numValorsLlegits = 0;
 
         int numValorsLlegits = 0;
         int suma = 0;
+
         double suma = 0;
 
         double mitjana;
 
         double mitjana;
         int minima = 100;
+
         double minima = 100.0;
         int maxima = -100;
+
         double maxima = -100.0;
 
         String mesFred="";
 
         String mesFred="";
 
         String mesCaluros="";
 
         String mesCaluros="";
         while (numValorsLlegits < 12) {
+
         while (numValorsLlegits < MESOS) {
 +
            System.out.print("Introdueix la temperatura del mes "+(numValorsLlegits +1)+": ");
 
             //Abans de llegir, comprovem si realment hi ha un enter.
 
             //Abans de llegir, comprovem si realment hi ha un enter.
             if (lector.hasNextInt()) {
+
             if (lector.hasNextDouble()) {
                 int valor = lector.nextInt();
+
                 double valor = lector.nextDouble();
 
                 temperatures[numValorsLlegits] = valor;
 
                 temperatures[numValorsLlegits] = valor;
 
                 numValorsLlegits++;
 
                 numValorsLlegits++;
                suma = suma + valor;
 
 
 
 
             } else {
 
             } else {
 
                 //Si el valor no és enter, es llegeix però s’ignora.
 
                 //Si el valor no és enter, es llegeix però s’ignora.
Línia 301: Línia 337:
  
 
         lector.nextLine();
 
         lector.nextLine();
         mitjana = suma / 12.0;
+
        for (double valor : temperatures) {
 +
            suma += valor;
 +
        }
 +
         mitjana = suma / MESOS;
 
         System.out.printf("La mitjana és de %.2f graus\n", mitjana);
 
         System.out.printf("La mitjana és de %.2f graus\n", mitjana);
 
         System.out.print("Els mesos amb temperatura inferior a la mitjana són: ");
 
         System.out.print("Els mesos amb temperatura inferior a la mitjana són: ");
Línia 320: Línia 359:
  
 
         System.out.println("");
 
         System.out.println("");
         System.out.println("El mes més fres ha estat: "+ mesFred+" i el més calurós: " + mesCaluros);
+
         System.out.println("El mes més fresc ha estat: "+ mesFred+" i el més calurós: " + mesCaluros);
 
     }
 
     }
 
}
 
}
Línia 329: Línia 368:
  
 
Considereu, utilitzant una constant, que el nombre màxim d’alumnes és 100.
 
Considereu, utilitzant una constant, que el nombre màxim d’alumnes és 100.
 
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
Línia 336: Línia 374:
 
import java.util.Scanner;
 
import java.util.Scanner;
  
public class Exercici10_2015 {
+
public class Ex10 {
  
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
Línia 354: Línia 392:
 
                 notes[compta] = nota;
 
                 notes[compta] = nota;
 
                 compta++;
 
                 compta++;
                suma = suma + nota;
 
 
                 if (lector.hasNextInt()) {
 
                 if (lector.hasNextInt()) {
 
                     nota = lector.nextInt();
 
                     nota = lector.nextInt();
Línia 362: Línia 399:
 
                     lector.next();
 
                     lector.next();
 
                 }
 
                 }
 +
            }
 +
            for (int i = 0; i < compta; i++) {
 +
              suma += notes[i];
 
             }
 
             }
 
         }
 
         }
Línia 370: Línia 410:
 
}
 
}
 
</source>
 
</source>
 +
 
-->
 
-->
  
Línia 380: Línia 421:
 
import java.util.Scanner;
 
import java.util.Scanner;
  
public class Exercici11_2015 {
+
public class Ex11 {
  
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
Línia 407: Línia 448:
 
-->
 
-->
  
12. Fes un programa que vagi llegint una seqüència de números naturals (entre 0 i 9) finalitzada amb el valor -1. El programa ha de dir quantes vegades
+
12. Fes un programa que vagi llegint una seqüència de números naturals (entre 0 i 9) finalitzada amb el valor -1. El programa ha de dir quantes vegades apareix cada valor. Lògicament s’ha de fer servir una taula i no 10 variables comptador!!!!!!
apareix cada valor. Lògicament s’ha de fer servir una taula i no 10 variables comptador!!!!!!
 
  
 
<!--
 
<!--
Línia 416: Línia 456:
 
import java.util.Scanner;
 
import java.util.Scanner;
  
public class Exercici12_2015 {
+
public class Ex12 {
  
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
Línia 442: Línia 482:
 
-->
 
-->
  
13. Fes una taula que emmagatzemi els 100 números primers més petits. Per a fer-ho la tàctica és que un nombre serà primer sinó es divisible per cap
+
13. Fes una taula que emmagatzemi els 100 números primers més petits. Per a fer-ho la tàctica és que un nombre serà primer sinó es divisible per cap número primer més petit. Cal posar per codi, a la primera posició de la taula el valor 2. Imprimeix els valors.
número primer més petit. Cal posar per codi, a la primera posició de la taula el valor 2. Imprimeix els valors.
 
  
 
<!--
 
<!--
Línia 449: Línia 488:
 
package taules;
 
package taules;
  
 +
public class Ex13 {
 +
 +
    public static void main(String[] args) {
 +
        int primers[] = new int[100];
 +
        primers[0] = 2;
 +
        int quants = 1;
 +
        int numero = 3;
 +
        while (quants < 100) {
 +
            int i = 0;
 +
            while (i < quants && numero % primers[i] != 0) {
 +
                i++;
 +
            }
 +
            if (i == quants) {
 +
                primers[quants] = numero;
 +
                quants++;
 +
            }
 +
            numero++;
 +
        }
 +
        for (int i = 0; i < primers.length; i++) {
 +
            if (i % 10 == 9) {
 +
                System.out.println(primers[i]);
 +
            } else {
 +
                System.out.print(primers[i] + "-");
 +
            }
 +
 +
        }
 +
    }
  
 +
}
 
</source>
 
</source>
 
-->
 
-->
Línia 455: Línia 522:
 
==Matrius==
 
==Matrius==
  
14. Fes un programa que sumi dos matrius quadrades (mateix nombre de files que de columnes) de mida de les mateixes mides. El resultat es guardarà en
+
14. Fes un programa que sumi dos matrius quadrades (mateix nombre de files que de columnes) de mida de les mateixes mides. El resultat es guardarà en una altra matriu. Cal recordar que la suma de les matrius funciona de la següent forma : a la posició [x][y] de la matriu resultat se li assigna la suma de les posicions [x][y] de les dues matrius originals. És per això que la matriu resultat haurà de ser de les mateixes dimensions que les altres.
una altra matriu. Cal recordar que la suma de les matrius funciona de la següent forma : a la posició [x][y] de la matriu resultat se li assigna la suma
 
de les posicions [x][y] de les dues matrius originals. És per això que la matriu resultat haurà de ser de les mateixes dimensions que les altres.
 
 
 
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
 +
package matrius;
 +
 +
public class Ex14 {
 +
    public static void main(String[] args) {
 +
       
 +
   
 +
    int matA[][] = {{1, 2, 3}, {4, 5, 6}, {4, 5, 6}};
 +
        int matB[][] = {{11, 12, 13}, {14, 15, 16}, {11, 12, 13}};
 +
        int matC[][] = new int[matA.length][matA[0].length];
 +
 +
        for (int i = 0; i < matC.length; i++) {
 +
            for (int j = 0; j < matC.length; j++) {
 +
                matC[i][j]=matA[i][j]+matB[i][j];
 +
               
 +
            }
 +
           
 +
        }
 +
        System.out.println("La matriu resultat és:");
 +
        for (int i = 0; i < matC.length; i++) {
 +
            for (int j = 0; j < matC.length; j++) {
 +
                System.out.print( matC[i][j]+"  ");
 +
               
 +
            }
 +
            System.out.println("");
 +
           
 +
        }
 +
   
 +
    }
 +
}
 
</source>
 
</source>
 
-->
 
-->
  
 
15. Fes un programa que ens digui si dos matrius són exactament iguals, o sigui que per tot i,j, matriu1[i][j] = matriu2[i][j]
 
15. Fes un programa que ens digui si dos matrius són exactament iguals, o sigui que per tot i,j, matriu1[i][j] = matriu2[i][j]
 
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
 +
package matrius;
 +
 +
public class Ex15 {
 +
    public static void main(String[] args) {
 +
    int matA[][]={{1,2,3},{4,5,6}};
 +
    int matB[][]={{1,2,3},{4,5,6}};
 +
    boolean iguals=true;
 +
    int i=0,j;
 +
        while (iguals&&i<matA.length) {
 +
            j=0;
 +
            while (iguals&&j<matA[i].length) {
 +
                iguals=(matA[i][j]==matB[i][j]);
 +
                j++;
 +
               
 +
            }
 +
            i++;
 +
           
 +
        }
 +
        if(iguals){
 +
            System.out.println("Les matrius són iguals");
 +
           
 +
        }
 +
        else{
 +
            System.out.println("Les matrius no són iguals");
 +
        }
 +
    }
 +
   
 +
}
 
</source>
 
</source>
 +
 +
 
-->
 
-->
  
Línia 475: Línia 597:
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
 +
package matrius;
 +
 +
public class Ex16 {
 +
    public static void main(String[] args) {
 +
        int matriu[][]={{1,2,13},{44,5,6}};
 +
        for (int i = 0; i < matriu.length; i++) {
 +
            int max=Integer.MIN_VALUE;
 +
            for (int j = 0; j < matriu[i].length; j++) {
 +
                if(max< matriu[i][j]){
 +
                    max=matriu[i][j];
 +
                }
 +
               
 +
            }
 +
            System.out.println("El valor máxim de la fila " + i + " és: "+ max);
 +
           
 +
        }
 +
    }
 +
   
 +
}
 
</source>
 
</source>
 
-->
 
-->
Línia 482: Línia 623:
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
 +
package matrius;
 +
 +
public class Ex17 {
 +
 +
    public static void main(String[] args) {
 +
        int matriu[][] = {{1, 2, 1, 0, 2}, {2, 5, 6, 8 , 9}, {2, 4, 7, 0, 3}, {4, 8, 2, 1, 2}, {7, 3, 7, 1, 5}};
 +
        int numsMatriu[] = new int[10];
 +
        for (int i = 0; i < matriu.length; i++) {
 +
            for (int j = 0; j < matriu[i].length; j++) {
 +
                numsMatriu[matriu[i][j]]++;
 +
            }
 +
 +
        }
 +
        for (int i = 0; i < numsMatriu.length; i++) {
 +
            System.out.println("Hi ha de "+i+": "+numsMatriu[i]);
 +
           
 +
        }
 +
 +
    }
 +
}
 
</source>
 
</source>
 
-->
 
-->
  
 
18. Fes un programa que calculi el producte de dos matrius de 3 files i 3 columnes (amb els valors entre 0 i 9 introduïts per codi).
 
18. Fes un programa que calculi el producte de dos matrius de 3 files i 3 columnes (amb els valors entre 0 i 9 introduïts per codi).
 
  
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
 +
package matrius;
 +
 +
public class Ex18 {
 +
 +
    public static void main(String[] args) {
 +
        int matriu1[][] = {
 +
        {1, 2, 1},
 +
        {2, 5, 6},
 +
        {2, 4, 7}};
 +
        int matriu2[][] = {
 +
        {2, 3, 1},
 +
        {1, 3, 2},
 +
        {2, 1, 3}};
 +
        int matriu3[][] = new int[matriu1.length][matriu1.length];
 +
 +
        for (int i = 0; i < matriu1.length; i++) {
 +
 +
            for (int j = 0; j < matriu1.length; j++) {
 +
 +
                for (int k = 0; k < matriu3.length; k++) {
 +
                    matriu3[i][j] += matriu1[i][k] * matriu2[k][j];
 +
 +
                }
 +
 +
            }
 +
        }
 +
 +
        for (int i = 0; i < matriu3.length; i++) {
 +
            for (int j = 0; j < matriu3.length; j++) {
 +
                System.out.printf("%2d ", matriu3[i][j]);
 +
            }
 +
            System.out.println("");
 +
 +
        }
 +
 +
    }
 +
}
 
</source>
 
</source>
 
-->
 
-->
Línia 497: Línia 694:
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
 +
package matrius;
 +
 +
public class Ex19 {
 +
 +
    public static void main(String[] args) {
 +
        int matriu1[][] = {
 +
        {1, 2, 1},
 +
        {3, 4, 1}};
 +
        int matriu2[][] = {
 +
        {2, 3},
 +
        {2, 1},
 +
        {3, 1}};
 +
        int matriu3[][] = new int[matriu1.length][matriu2[0].length];
 +
 +
        for (int i = 0; i < matriu1.length; i++) {
 +
            for (int j = 0; j < matriu2[0].length; j++) {
 +
                for (int k = 0; k < matriu1[0].length; k++) {
 +
                    matriu3[i][j] += matriu1[i][k] * matriu2[k][j];
 +
                }
 +
 +
            }
 +
 +
        }
 +
 +
        for (int i = 0; i < matriu3.length; i++) {
 +
            for (int j = 0; j < matriu3[i].length; j++) {
 +
                System.out.printf("%2d ", matriu3[i][j]);
 +
            }
 +
            System.out.println("");
 +
 +
        }
 +
 +
    }
 +
}
 
</source>
 
</source>
 
-->
 
-->
  
 
20. Fes un programa que intercanvii els mínims d'un matriu amb els màxims d'una altra matriu.
 
20. Fes un programa que intercanvii els mínims d'un matriu amb els màxims d'una altra matriu.
 +
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
Línia 627: Línia 859:
  
 
21. Invertiu la diagonal d'una matriu quadrada.
 
21. Invertiu la diagonal d'una matriu quadrada.
 +
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
Línia 690: Línia 923:
  
 
22. Invertiu la diagonal secundaria d'una matriu quadrada.
 
22. Invertiu la diagonal secundaria d'una matriu quadrada.
 +
<!--
 +
<source lang="java">
 +
package matrius;
 +
 +
public class Ex22 {
 +
 +
    public static void main(String[] args) {
 +
        int matriu[][] = {{0, 0, 0, 0, 1},
 +
        {0, 0, 0, 2, 0},
 +
        {0, 0, 3, 0, 0},
 +
        {0, 4, 0, 0, 0},
 +
        {5, 0, 0, 0, 0}};
 +
 +
        for (int i = 0; i < matriu.length / 2; i++) {
 +
            int aux = matriu[i][matriu.length - i - 1];
 +
            matriu[i][matriu.length - i - 1] = matriu[matriu.length - i - 1][i];
 +
            matriu[matriu.length - i - 1][i] = aux;
 +
 +
        }
 +
        for (int i = 0; i < matriu.length; i++) {
 +
            for (int j = 0; j < matriu.length; j++) {
 +
                System.out.print(" " + matriu[i][j]);
 +
            }
 +
            System.out.println("");
 +
        }
 +
    }
 +
}
 +
</source>
 +
-->
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
Línia 752: Línia 1.014:
  
  
23. Fes un programa que ens digui quins son els elements comuns de dues matrius de diferent dimensió. Indica el valor i les posicions de la primera i de la segona matriu.
+
23. Fes un programa que ens digui quins son els elements comuns de dues matrius de diferent dimensió. Indica el valor i les posicions de la primera i de la segona matriu. Només cal tractar el números diferents de la matriu.
  
 
Per exemple:
 
Per exemple:
 
<pre>
 
<pre>
 
- matriu A:      - matriu B
 
- matriu A:      - matriu B
   3  1  2  7      3  5
+
   3  1  2  7      3  7
 
   5  7  9  1      7  9
 
   5  7  9  1      7  9
   8  2  5  4      4  8
+
   8  2  5  4      4  3
 
                   2  7
 
                   2  7
  
 
Sortida:
 
Sortida:
  
A: 3 [0,0]  -  B: [0,0]
+
A: 3 [0,0]  -  B: [0,0] [2,1]
 
A: 2 [0,2]  -  B: [3,0]
 
A: 2 [0,2]  -  B: [3,0]
A: 7 [0,3]  -  B: [1,0] [3,1]  
+
A: 7 [0,3]  -  B: [0,1] [1,0] [3,1]  
 
...
 
...
 
</pre>
 
</pre>
 
+
 +
<!--
 +
<source lang="java">
 +
package ex23;
 +
 
 +
public class Ex23 {
 +
 
 +
    public static void main(String[] args) {
 +
 
 +
        int[][] matA = {{3, 1, 2, 7},
 +
        {5, 7, 9, 1},
 +
        {8, 2, 5, 4}};
 +
 
 +
        int[][] matB = {{3, 7},
 +
        {7, 9},
 +
        {4, 3},
 +
        {2, 7}};
 +
 
 +
        // Per controlar eln nombres tractas
 +
        int[] nombresTractats = new int[matA.length * matA[0].length];
 +
        int numsTractats = 0;
 +
 
 +
        for (int i = 0; i < matA.length; i++) {
 +
            for (int j = 0; j < matA[i].length; j++) {
 +
                //comprovar si el nombre ja s'ha tractat
 +
                boolean trobat = false;
 +
                int idx = 0;
 +
                while ((idx < numsTractats) && (!trobat)) {
 +
                    trobat = matA[i][j] == nombresTractats[idx];
 +
                    idx++;
 +
                }
 +
                if (!trobat) {
 +
                    //Afegim el número a nombres tractats
 +
                    nombresTractats[numsTractats] = matA[i][j];
 +
                    numsTractats++;
 +
                    //Cerquem a la matriu B
 +
                    boolean primeraVegada = true;
 +
 
 +
                    for (int k = 0; k < matB.length; k++) {
 +
                        for (int l = 0; l < matB[k].length; l++) {
 +
                            if (matA[i][j] == matB[k][l]) {
 +
                                if (primeraVegada) {
 +
                                    System.out.print("A: " + matA[i][j] + "[" + i + "," + j + "] - B: [" + k + "," + l + "] ");
 +
                                    primeraVegada = false;
 +
                                } else {
 +
                                    System.out.print("[" + k + "," + l + "] ");
 +
                                }
 +
                            }
 +
                        }
 +
 
 +
                    }
 +
                    if (!primeraVegada) {
 +
                        System.out.println("");
 +
                    }
 +
                }
 +
 
 +
            }
 +
 
 +
        }
 +
    }
 +
 
 +
}
 +
</source>
 +
-->
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">
Línia 1.003: Línia 1.328:
  
 
26. Donada una matriu de m*n i un vector de dimensió m. Fes un programa que ens indiqui quina columna de la matriu és igual al vector.
 
26. Donada una matriu de m*n i un vector de dimensió m. Fes un programa que ens indiqui quina columna de la matriu és igual al vector.
 +
 +
Opció A: Només hi ha com a molt una columna igual i per tant, cal aturar l'execució quan si es troba la columna igual. Quan un element de la columna és diferent cal passar a la columna següent.
 +
<!--
 +
package ex26;
 +
 +
public class Ex26 {
 +
 +
    public static void main(String[] args) {
 +
 +
        int[][] mat = {{2, 3, 5, 7, 5},
 +
        {1, 7, 5, 6, 5},
 +
        {1, 6, 8, 4, 8},
 +
        {3, 4, 7, 7, 7},
 +
        {2, 3, 5, 7, 5}};
 +
        int[] vect = {5, 5, 8, 7, 5};
 +
 +
        int i = 0;
 +
        boolean trobat = false;
 +
 +
        while ((i < mat[0].length) && (!trobat)) {
 +
            int j = 0;
 +
            boolean iguals = true;
 +
            while ((j < mat.length) && (iguals)) {
 +
                iguals = mat[j][i] == vect[j];
 +
                j++;
 +
            }
 +
            if (iguals) {
 +
                System.out.println("La columna " + (i + 1) + " és igual al vector");
 +
                trobat = true;
 +
            }
 +
            i++;
 +
        }
 +
    }
 +
 +
}
 +
-->
 +
 +
Opció B: Poden haver més d'una columna igual i cal indicar-les totes. Quan un element de la columna és diferent cal passar a la columna següent.
 +
<!--
 +
package ex26;
 +
 +
public class Ex26 {
 +
 +
    public static void main(String[] args) {
 +
 +
        int[][] mat = {{2, 3, 5, 7, 5},
 +
        {1, 7, 5, 6, 5},
 +
        {1, 6, 8, 4, 8},
 +
        {3, 4, 7, 7, 7},
 +
        {2, 3, 5, 7, 5}};
 +
        int[] vect = {5, 5, 8, 7, 5};
 +
 +
        int i = 0;
 +
 +
        while ((i < mat[0].length)) {
 +
            int j = 0;
 +
            boolean iguals = true;
 +
            while ((j < mat.length) && (iguals)) {
 +
                iguals = mat[j][i] == vect[j];
 +
                j++;
 +
            }
 +
            if (iguals) {
 +
                System.out.println("La columna " + (i + 1) + " és igual al vector");
 +
            }
 +
            i++;
 +
        }
 +
    }
 +
 +
}
 +
-->
 
<!--
 
<!--
 
<source lang="java">
 
<source lang="java">

Revisió de 19:30, 8 gen 2024

Vectors

1. Fes un programa que donades dues taules inicialitzades amb els valors {-3, 5, 1, -4, 8, 20, -9, 2, 11, -1}, posi a una tercera taula, per a cada posició, la suma dels elements de les altres taules.


2. Fes un programa que donada una taula de números ja inicialitzada, la recorri amb un for i quan surti del for imprimeixi el valor més petit de la taula.


3. Fes un programa que donada una taula de números ja inicialitzada, imprimeixi per pantalla els valors en ordre invers.


4. Fes un programa que faci una rotació cap a l’esquerra o cap a la dreta (segons ens indiqui l’usuari) de tots els elements del vector (en rotació esquerra l’element que està a la primera posició passarà a l’ultima i en rotació dreta l’element que està l’últim passarà a la primera posició).


5. Escriure un programa que, donat una taula de 10 enters (introduïts per codi), li doni la volta. Per exemple, si el vector original és: 0-1-2-3-4-5-6-7-8-9 acabi sent : 9-8-7-6-5-4-3-2-1-0. No s'ha de fer servir cap taula auxiliar.


6. Fes un programa que, donat una taula de 10 enters ( introduïts per codi), generi un diagrama de barres que representi el seus valors. Les barres aniran d’esquerra a dreta i estaran formades per asteriscos. Per exemple, si els tres primers elements de la taula són 2-3-4, la part corresponent del diagrama de barres serà:

       **
       ***
       ****


7. Fes un programa que llegeixi les temperatures mitjanes dels dotze mesos de l’any, les vagi guardant en una taula i al final calculi la temperatura mitjana de l’any.


8. Modifica l’exercici anterior de forma que el programa tregui per pantalla al final, els mesos amb temperatura inferior a la mitjana anual.

9. Modifica l’exercici anterior de forma que el programa indiqui el mes amb la temperatura mínima i el mes amb la temperatura màxima.


10. Fes un programa que llegeixi les notes obtingudes pels alumnes d’una assignatura. La introducció de dades finalitzarà amb la introducció de -1. El programa a continuació ha de treure per pantalla la nota mitjana del grup.

Considereu, utilitzant una constant, que el nombre màxim d’alumnes és 100.

11. Fes un programa que llegint un número per teclat ens indiqui si aquest element està o no a la taula.


12. Fes un programa que vagi llegint una seqüència de números naturals (entre 0 i 9) finalitzada amb el valor -1. El programa ha de dir quantes vegades apareix cada valor. Lògicament s’ha de fer servir una taula i no 10 variables comptador!!!!!!


13. Fes una taula que emmagatzemi els 100 números primers més petits. Per a fer-ho la tàctica és que un nombre serà primer sinó es divisible per cap número primer més petit. Cal posar per codi, a la primera posició de la taula el valor 2. Imprimeix els valors.


Matrius

14. Fes un programa que sumi dos matrius quadrades (mateix nombre de files que de columnes) de mida de les mateixes mides. El resultat es guardarà en una altra matriu. Cal recordar que la suma de les matrius funciona de la següent forma : a la posició [x][y] de la matriu resultat se li assigna la suma de les posicions [x][y] de les dues matrius originals. És per això que la matriu resultat haurà de ser de les mateixes dimensions que les altres.

15. Fes un programa que ens digui si dos matrius són exactament iguals, o sigui que per tot i,j, matriu1[i][j] = matriu2[i][j]

16. Fes un programa que donada una matriu d’enters de 2 files i 3 columnes (amb els valors introduïts per codi), escrigui el valor màxim de cada una de les files.


17. Fes un programa que donada una matriu d'enters de 5 files i 5 columnes (amb els valors entre 0 i 9 introduïts per codi), ens indiqui quants valors hi ha de cada número.


18. Fes un programa que calculi el producte de dos matrius de 3 files i 3 columnes (amb els valors entre 0 i 9 introduïts per codi).


19. Fes un programa que calculi el producte de dos matrius: la primera de 2 files i 3 columnes i la segona de 3 files i 2 columnes (amb els valors entre 0 i 9 introduïts per codi).


20. Fes un programa que intercanvii els mínims d'un matriu amb els màxims d'una altra matriu.


21. Invertiu la diagonal d'una matriu quadrada.


22. Invertiu la diagonal secundaria d'una matriu quadrada.


23. Fes un programa que ens digui quins son els elements comuns de dues matrius de diferent dimensió. Indica el valor i les posicions de la primera i de la segona matriu. Només cal tractar el números diferents de la matriu.

Per exemple:

- matriu A:      - matriu B
  3  1  2  7       3  7
  5  7  9  1       7  9
  8  2  5  4       4  3
                   2  7

Sortida:

A: 3 [0,0]  -  B: [0,0] [2,1]
A: 2 [0,2]  -  B: [3,0]
A: 7 [0,3]  -  B: [0,1] [1,0] [3,1] 
...


24. Fes un programa que intercanvii els elements de la primera columna d'una matriu pels de la d'última.


25. Fes un programa que a partir d'una matriu crei un altre matriu de la mateixa dimensió amb el nombre de dígits de la primera. Per exemple:

- matriu A:                 - matriu B
    323  2503  14254          3  4  5  
     58     7     19          2  1  2
  15148    25      4          5  2  1


Matrius i vectors

26. Donada una matriu de m*n i un vector de dimensió m. Fes un programa que ens indiqui quina columna de la matriu és igual al vector.

Opció A: Només hi ha com a molt una columna igual i per tant, cal aturar l'execució quan si es troba la columna igual. Quan un element de la columna és diferent cal passar a la columna següent.

Opció B: Poden haver més d'una columna igual i cal indicar-les totes. Quan un element de la columna és diferent cal passar a la columna següent.


27. Donada una matriu m*n, emmagatzemeu en un vector de dimensió n la suma per columnes de la matriu i en un vector de dimensió m la suma per files de la matriu.

Vectors i generació de nombres aleatoris

Clase java.util.Random

Random r = new Random();
int valorDau = r.nextInt(6)+1;  // Entre 0 i 5, més 1.

28. Simula el llançament d'un dau 1000 vegades e indica el nombre de vegades que ha sortit cada un del números.


29. Un jugador llança dos daus. Guanya si obté 11 punts. Fes un programa que simuli el llançament dels daus fins que el jugador obtingui els 11 punts. Indica quants llançaments a necessitat.


30. Un professor de matemàtiques desitja avaluar als seus alumnes de sisè de primaria sobre les operacions de suma, resta, multiplicació i divisió sencera. Fes un programa que generi dos números aleatoris en el rang 1 - 24 i pregunti pel resultat segons l'operació que també serà generada de forma aleatòria. Comprova si ha fet bé l'operació i envia un missatge adient. El procès finalitzarà quan l'estudiant vulgui. Finalment ha de mostrar una estadística dels resultats obtinguts amb les quatre operacions.

Pots utilitza una taula per emmagatzemar les operacions.