CC10A03 Clase Auxiliar Viernes 14 de Mayo 2004

Arreglos e Interfaces

P1.- El juego de los 13 fósforos consiste en dejar sobre una mesa 13 fósforos, uno al lado del otro. Dos jugadores van alternadamente sacando 1, 2 o 3 fósforos, hasta que sólo quede 1. Quien tiene que sacar el último fósforo en su turno pierde el juego.

Se le pide que implemente el juego de los 13 fósforos en un frame. Guíese por la siguiente figura:

Notas:

 

P2. La siguiente tabla define los métodos ofrecidos por la clase Vector que permite realizar operaciones con vectores multi-dimensionales:

Ejemplo

Significado

encabezamiento

new Vector(a,n)

crea vector <a0, a1,…,an-1>

Vector(int[] x, int n)

a.valor(i)

Entrega valor de la componente de índice i

int valor(int i)

a.suma(b)

Suma vectorial: <a0+b0, a1+b1,…,an-1+bn-1>

Vector suma(Vector x)

a.producto(b)

Producto vectorial: <a0b0, a1b1,…,an-1bn-1>

Vector producto(Vector x)

a.productoPunto(b)

Producto escalara 0b0 + a1b1 + … + an-1bn-1

Int productoPunto(Vector x)

  1. Escribir los métodos de la clase vector de acuerdo a la siguiente declaración:

Class Vector{

// representación

protected final int N = 100; // dimensión máxima

protected int[] v = new int [N] // valores components

protected int n; // dimensión del vector (Nş componentes)

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Solución:

P1.- import java.awt.*;

import java.awt.event.*;

// Los dos "import" son los que nos permiten manejar Interfaces graficas en Java

public class Juego13 extends Frame implements ActionListener {

Label titulo; //titulo / señala quien ganó

Button[] botones; //arreglo de botones correspondientes apalitos

Button listo; //señala fin del turno del jugador

int palitosQueQuedan = 13; //al principio quedan todos los palitos

public Juego13() {

titulo = new Label("Juego de los 13 fósforos");

botones = new Button[13];

for (int i = 0; i < 13; i++)

botones[i] = new Button("|");

//aquí si inicializan los palitos, Botones con el texto "|"

listo = new Button("Ok!");

Panel p = new Panel();

p.setLayout(new FlowLayout());

//ordena los elementos de p de izquierda a derecha

for (int i = 0; i < 13; i++)

p.add(botones[i]); //agrega los botones

this.setLayout(new BorderLayout()); //layout del Frame completo

add(titulo, BorderLayout.NORTH); //titulo arriba

add(p, BorderLayout.CENTER); //panel al centro

add(listo, BorderLayout.SOUTH); //boton "listo" abajo

this.pack();

this.show();

//instrucciones que sirven para desplegar el Frame en pantalla

//Agrego ActionListeners

for (int i = 0; i < 13; i++)

botones[i].addActionListener(this);

listo.addActionListener(this);

}

public void actionPerformed(ActionEvent ae) {

//CASO 1: Turno del Computador (Apretaron botón "Listo")

if (ae.getSource() == listo) {

/*

* Hay 3 casos :

*-queda un palito --> el computador perdió

*-quedan 4,3,o 2 --> sacando 3,2,o 1 palitos, el computador ganó

*- otro --> saco algunos palitos al azar

*/

if (palitosQueQuedan == 1) {

titulo.setText("GANAS TU!");

}

if (palitosQueQuedan <= 4) {

for (int i=0; palitosQueQuedan>1; i++) {

if (botones[i].getLabel().equals("|")) {

botones[i].setLabel("");

botones[i].setEnabled(false);

//ya no se puede apretar el boton

palitosQueQuedan--;

}

}

titulo.setText("GANA EL PC!");

}

else {

int azar=(int)Math.random()*3+1; //1,2,3

for (int i=0; azar>0; i++) {

if (botones[i].getLabel().equals("|")) {

botones[i].setLabel("");

botones[i].setEnabled(false);

palitosQueQuedan--;

azar--;

}//if

}//for

}//else

}//if (ae.getSource()==listo)

//CASO 2: TURNO DEL JUGADOR

else {

/* Hay 2 casos :

* - queda un palito --> perdió el jugador

* - quedan mas --> el jugador saca palitos

* (confiamos en que saca a lo más 3)

*/

//Jugada persona

if (palitosQueQuedan==1) {

titulo.setText("GANA EL PC");

}

for (int i = 0; i < 13; i++) {

if (ae.getSource() == botones[i]) {

botones[i].setLabel("");

botones[i].setEnabled(false);

palitosQueQuedan--;

}

}

}

}

public static void main(String args[]){

Juego13 j=new Juego13();

}

}

 

P2.-

class Vector{

// variables de instancia

protected final int N = 100;

protected int[] v = new int[N];

protected int n;

// constructor

public Vector(int[]x, int n){

for (int i=0; i<n; ++i)

this.v[i] = x[i];

this.n = n;

}

public int valor(int i){

return this.v[i]; //accesamos al i-esimo elemento

}

public Vector producto(Vector x){

int []aux = new int[n];

for (int i=0; i<n; ++i)

aux[i] = this.v[i] * x.v[i]; //devolvemos un arreglo con cada componente como el

return new Vector(aux,n); //producto de las componentes de ambos vectores

}

public int productoPunto(Vector x){

int suma = 0;

Vector aux = this.producto(x); //el mismo vector multiplicado con si mismo

for (int i=0; i < n; ++i)

suma+= aux.valor(i); //la suma de los valores

return suma;

}

}