Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - dj13

#1
Me gustaría poder mandar el guión de la práctica tambien, pero no veo que haya ninguna forma de enviar un archivo
#2
Código (java) [Seleccionar]
[/// BancoCSP_skel.java
// Lars feat. Julio -- 2021
// esqueleto de código para JCSP
// (peticiones aplazadas)

package cc.banco;

import org.jcsp.lang.Alternative;
import org.jcsp.lang.AltingChannelInput;
import org.jcsp.lang.Any2OneChannel;
import org.jcsp.lang.CSProcess;
import org.jcsp.lang.Channel;
import org.jcsp.lang.Guard;
import org.jcsp.lang.One2OneChannel;
import org.jcsp.lang.ProcessManager;

// otras librerías: estructuras de datos, etc.
//
//
//
// COMPLETAD
//
//
//
//


public class BancoCSP implements Banco, CSProcess {

    // canales: uno por operación
    // serán peticiones aplazadas
    private Any2OneChannel chIngresar;
    private Any2OneChannel chDisponible;
    private Any2OneChannel chTransferir;
    private Any2OneChannel chAlertar;

    // clases para peticiones
    // regalamos una como ejemplo
    public class TransferirReq {
// atributos (pueden ser públicos)
String from;
String to;
int value;
One2OneChannel resp;

// constructor
public TransferirReq(String from, String to, int value) {
    this.from = from; this.to = to; this.value = value; this.resp = Channel.one2one();
}
    }

    public class AlertarReq {
// atributos (pueden ser públicos)
//
// COMPLETAD
//

// constructor
//
// COMPLETAD
//
    }

    public class IngresarReq {
// atributos (pueden ser públicos)
//
// COMPLETAD
//

// constructor
//
// COMPLETAD
//
    }

    public class DisponibleReq {
// atributos (pueden ser públicos)
//
// COMPLETAD

// constructor
//
// COMPLETAD
//
    }

    // constructor de BancoCSP
    public BancoCSP() {
this.chIngresar = Channel.any2one();
this.chAlertar = Channel.any2one();
this.chDisponible = Channel.any2one();
this.chTransferir = Channel.any2one();
new ProcessManager(this).start();
    }

    // interfaz Banco
    /**
     * Un cajero pide que se ingrese una determinado valor v a una
     * cuenta c. Si la cuenta no existe, se crea.
     * @param c número de cuenta
     * @param v valor a ingresar
     */
    public void ingresar(String c, int v) {
// comprobar PRE
// COMPLETAD
// crear petición
// COMPLETAD
// enviar petición
// COMPLETAD
    }

    /**
     * Un ordenante pide que se transfiera un determinado valor v desde
     * una cuenta o a otra cuenta d.
     * @param o número de cuenta origen
     * @param d número de cuenta destino
     * @param v valor a transferir
     * @throws IllegalArgumentException si o y d son las mismas cuentas
     *
     */
    public void transferir(String o, String d, int v) {
// comprobar PRE
// COMPLETAD
// crear petición
// COMPLETAD
// enviar petición
// COMPLETAD
// esperar confirmación
// COMPLETAD
    }

    /**
     * Un consultor pide el saldo disponible de una cuenta c.
     * @param c número de la cuenta
     * @return saldo disponible en la cuenta id
     * @throws IllegalArgumentException si la cuenta c no existe
     */
    public int disponible(String c) {
// crear petición
// COMPLETAD
// enviar petición
// COMPLETAD
// recibir respuesta del servidor
// COMPLETAD
// tratar resultado
//
// COMPLETAD
//
//
    }

    /**
     * Un avisador establece una alerta para la cuenta c. La operación
     * termina cuando el saldo de la cuenta c baja por debajo de m.
     * @param c número de la cuenta
     * @param m saldo mínimo
     * @throws IllegalArgumentException si la cuenta c no existe
     */
    public void alertar(String c, int v) {
// crear petición
// COMPLETAD
// enviar petición
// COMPLETAD
// tratar respuesta del servidor
//
// COMPLETAD
    }

    // Código del servidor
    public void run() {
// nombres simbólicos para las entradas
final int INGRESAR   = 0;
final int DISPONIBLE = 1;
final int TRANSFERIR = 2;
final int ALERTAR    = 3;

// construimos la estructura para recepción alternativa
final Guard[] guards = new AltingChannelInput[4];
guards[INGRESAR]   = chIngresar.in();
guards[DISPONIBLE] = chDisponible.in();
guards[TRANSFERIR] = chTransferir.in();
guards[ALERTAR]    = chAlertar.in();
Alternative servicios = new Alternative(guards);

// El estado del recurso debe ir en el servidor (aquí)
// Reutilizar de la práctica de monitores
// COMPLETAD

// colecciones para peticiones aplazadas
// reutilizar de monitores si es posible
//
// COMPLETAD
//
//

// Bucle principal del servicio
while(true) {
    int servicio = servicios.fairSelect();

    switch (servicio) {
    case INGRESAR: {
// recibir petición
// COMPLETAR
// realizar ingreso
//
//
//
break;
    }
    case DISPONIBLE: {
// recibir petición
// COMPLETAD
// responder
// COMPLETAD
//
break;
    }
    case TRANSFERIR: {
// recibir petición
// COMPLETAD
// encolar petición
// (alternativamente, se puede comprobar CPRE y
//  solo encolar si estrictamente necesario)
//
//
//  COMPLETAD
//
//
break;
    }
    case ALERTAR: {
// recibir petición
// COMPLETAD
// encolar petición
// (alternativamente, se puede comprobar CPRE y
//  solo encolar si estrictamente necesario)
//
//
// COMPLETAD
//
//
break;
    }
    }// END SWITCH

    // tratamiento de peticiones aplazadas
    // en parte, reutilizar de monitores
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    // COMPLETAD
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
   
    // no debemos volver al inicio del bucle
    // de servicio mientras haya alguna
    // petición pendiente que se pueda atender !!
}// END BUCLE SERVICIO
    }// END run SERVIDOR

    // cualquier otro código auxiliar que necesitéis...
   
}

]
Este es el esqueleto que me ayudo a hacer mi profesor
#3
Realmente solo pedía ayuda porque no me da tiempo a hacerla, pero gracias de todas maneras.Había hecho la primera parte, pero la segunda parte ni idea, es para el dia 11, pero bueno, gracias por la aclaración.
#4
Es una practica que cuenta de 2 subprácticas , la primera ya la he realizado, que se hace mediante monitores, pero la segunda no tengo idea de como hacerla, se realiza mediante el envio de mensajes sincronos en java o jcsp.Al no disponer de mucho tiempo, escribo esto por aquí por si alguien me puede solucionar esto.Si alguien puede que me contacte por discord  xxxxxx

Editado: No poner datos de contacto, leer las normas del foro antes de postear.