Necesito entregar una práctica urgente

Iniciado por dj13, 9 Junio 2021, 18:38 PM

0 Miembros y 1 Visitante están viendo este tema.

dj13

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.



WHK

Tienes algo hecho? tienes alguna duda sobre que hacer?, para que te podamos orientar sobre como debes construir tu código, pero acá no se hacen tareas ni nadie te va a dar el programa hecho, imagina que despues salgas de tus estudios y te pongas a trabajar y te pidan programar algo, no vas a poder decir "espereme que voy a preguntar en elhacker.net aver si alguien me lo hace", la idea es que aprendas por ti mismo a hacerlo, esta es una comunidad donde el conocimiento es totalmente libre y nos apoyamos entre todos para "aprender", no para hacerle la tarea o el trabajo a otros.

saludos.

dj13

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.

WHK

En que parte has quedado de la segunda?, comentanos cual es el flujo de la aplicación que debes hacer y en base a eso te vamos comentando que funciones y de que manera las puedes ir haciendo, talves incluso lo puedas tener hecho hoy mismo.

Podrías hacer un repositorio en guthub y subir lo que tienes hecho para que te podamos ayudar en decirte que deberias modificar o agregar.

saludos.

dj13

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

dj13

Me gustaría poder mandar el guión de la práctica tambien, pero no veo que haya ninguna forma de enviar un archivo

Danielㅤ

Cita de: dj13 en  9 Junio 2021, 19:41 PM
Me gustaría poder mandar el guión de la práctica tambien, pero no veo que haya ninguna forma de enviar un archivo


Hola, aquí en el foro no disponemos de poder subir archivos adjuntos al mismo, pero podes subir el archivo a algún sitio web que brinde ese servicio y nosotros descargamos tal archivo.


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!