Me podrían ayudar a pasar código java a c++ por favor

Iniciado por vertigo123, 2 Diciembre 2013, 04:06 AM

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

vertigo123

Hola...Soy nuevo y espero estar aca en el foro compartiendo y aprendiendo que es la idea....Tengo un enorme problema....Estoy haciendo un programa usando hilos....Pero a última hora el ingeniero que me da la clase cambio mi proyecto original de java a c++ y la verdad estoy hecho un mar de dudas pues mi nivel de c++ es el basico y no algo tan experto como para implementar hilos!.

Alquien podría ayudarme por favor a convertir este codigo java a c++ para visual studio 2012.

//Clase Main

enum TEstadoPista{Aterrizar, Despegar, Vacia};
enum TEstadoAvion{QuiereAterrizar, QuiereDespegar, OtraCosa}


public class Main
{
   final static int MAXAVIONES = 10;
   public static void main(String args[]){
               Avion avion;
        TorreControl torreControl=new TorreControl();
        List lAviones = new ArrayList(); // Lista donde metemos las aviones

        System.out.println("---- COMIENZAN A SALIR AVIONES");System.out.println();
        for(int i=0; i < MAXAVIONES; i++){
            avion = new Avion(i,torreControl);
            avion.start();
            lAviones.add(avion);
        }
    }
}


//Clase Pista

class Pista{
    private int id;
    private TEstadoPista estado;
    private int naviones;

    public Pista(int id){
        this.id=id;
        this.estado=TEstadoPista.Vacia;
        naviones=0;
    }

    public TEstadoPista getEstado() {
        return estado;
    }

    public void setEstado(TEstadoPista estado) {
        this.estado = estado;
    }

    public int getNaviones() {
        return naviones;
    }

    public void setNaviones(int naviones) {
        this.naviones = naviones;
    }
}

import java.util.logging.Level;
import java.util.logging.Logger;

class TorreControl{
    final int MAXAVIONES = 50;
    Pista pistas[]=new Pista[2];
    int pistasAviones[]=new int[MAXAVIONES];
    TEstadoAvion estAviones[]=new TEstadoAvion[MAXAVIONES];
    int esperandoAterrizar = 0;

    public TorreControl(){
        pistas[0]=new Pista(1);
        pistas[1]=new Pista(2);
    }

    public synchronized int PedirPistaAterrizar(int idAvion){
        pistasAviones[idAvion]=0;
        estAviones[idAvion]=TEstadoAvion.QuiereAterrizar;
        //Miramos las pistas para ver si hay alguna en la que se pueda aterrizar
        for(int i=0; i<2; i++){
            if ((pistas.getEstado() == TEstadoPista.Vacia) && (estAviones[idAvion] == TEstadoAvion.QuiereAterrizar)){
                pistas.setEstado(TEstadoPista.Aterrizar);
                pistas.setNaviones(pistas.getNaviones()+1);
                estAviones[idAvion] = TEstadoAvion.OtraCosa;
                pistasAviones[idAvion]=i+1;
            }
        }
        if (estAviones[idAvion] == TEstadoAvion.QuiereAterrizar) {
            esperandoAterrizar = esperandoAterrizar + 1;
        }
        return pistasAviones[idAvion];
    }

    public synchronized int PuedeAterrizar(int idAvion){
        while(estAviones[idAvion]==TEstadoAvion.QuiereAterrizar){
            try {
                this.wait();
            } catch (InterruptedException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return pistasAviones[idAvion];
    }

    public synchronized int PedirPistaDespegar(int idAvion){
        pistasAviones[idAvion]=0;
        estAviones[idAvion]=TEstadoAvion.QuiereDespegar;
        // Solo se puede despegar cuando no haya ninguna avion esperando Aterrizar
        if (esperandoAterrizar==0){
            // Miramos las pistas para ver si hay alguna en la que se pueda despegar
            for(int i=0; i<2; i++){
                if (((pistas.getEstado() == TEstadoPista.Vacia) || (pistas.getEstado() == TEstadoPista.Despegar && pistas.getNaviones()<3)) && (estAviones[idAvion] == TEstadoAvion.QuiereDespegar)){
                    pistas.setEstado(TEstadoPista.Despegar);
                    pistas.setNaviones(pistas.getNaviones()+1);
                    estAviones[idAvion] = TEstadoAvion.OtraCosa;
                    pistasAviones[idAvion]=i+1;
                }
            }
        }
        return pistasAviones[idAvion];
    }

    public synchronized int PuedeDespegar(int idAvion){
        while(estAviones[idAvion]==TEstadoAvion.QuiereDespegar){
            try {
                this.wait();
            } catch (InterruptedException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return pistasAviones[idAvion];
    }

    public synchronized void DejarPista(int idPista){
        // Liberamos de una avión la pista indicada
        pistas[idPista].setNaviones(pistas[idPista].getNaviones() - 1);
        if (pistas[idPista].getNaviones() == 0)
            pistas[idPista].setEstado(TEstadoPista.Vacia);
        GestionarEsperas();
    }

    // Definimos el procedimiento para poder gestionar las aviones que esten esperando
    private void GestionarEsperas(){
        for(int av=0; av<MAXAVIONES; av++){
            if(estAviones[av]==TEstadoAvion.QuiereAterrizar){
                for(int i=0; i<2; i++){
                    if ((pistas.getEstado() == TEstadoPista.Vacia) && (estAviones[av] == TEstadoAvion.QuiereAterrizar)){
                        pistas.setEstado(TEstadoPista.Aterrizar);
                        pistas.setNaviones(pistas.getNaviones()+1);
                        estAviones[av] = TEstadoAvion.OtraCosa;
                        pistasAviones[av]=i+1;
                        esperandoAterrizar = esperandoAterrizar - 1;
                        // Avisamos a los que estan esperando
                        this.notifyAll();
                    }
                }
            }else if(estAviones[av]==TEstadoAvion.QuiereDespegar && esperandoAterrizar == 0){
                for(int i=0; i<2; i++){
                    if (((pistas.getEstado() == TEstadoPista.Vacia) || (pistas.getEstado() == TEstadoPista.Despegar && pistas.getNaviones()<3)) && (estAviones[av] == TEstadoAvion.QuiereDespegar)){
                        pistas.setEstado(TEstadoPista.Despegar);
                        pistas.setNaviones(pistas.getNaviones()+1);
                        estAviones[av] = TEstadoAvion.OtraCosa;
                        pistasAviones[av]=i+1;
                        // Avisamos a los que estan esperando
                        this.notifyAll();
                    }
                }
            }
        }
    }
}


import java.util.logging.Level;
import java.util.logging.Logger;

class Avion extends Thread{
    private int id;
    private int pista;
    private TorreControl control;

    public Avion(int idAvion, TorreControl tc){
        id=idAvion;
        control=tc;
    }

    @Override
    public void run(){

        try {
            // Despegar
            System.out.println("-- El avion " + id + " quiere despegar.");
            pista = control.PedirPistaDespegar(id);
            while (pista == 0) {
                pista = control.PuedeDespegar(id);
            }
            System.out.println("++> El avion " + id + " esta despegando en la pista " + pista);
            sleep(1000); // Tiempo que tarda en despegar
            System.out.println("--> El avion " + id + " ha despegado en la pista " + pista);
            control.DejarPista(pista-1);

            sleep(3000); // Tiempo que esta volando
            // Aterrizar
            System.out.println("-- El avion " + id + " quiere aterrizar.");
            pista = control.PedirPistaAterrizar(id);
            while (pista == 0) {
                pista = control.PuedeAterrizar(id);
            }
            System.out.println("<++ El avion " + id + " esta aterrizando en la pista ");
            sleep(1000); // Tiempo que tarda en aterrizar
            System.out.println("<-- El avion " + id + " ha aterrizado en la pista " + pista);
            control.DejarPista(pista-1);
        } catch (InterruptedException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}


Les agradecería mucho a cualquiera mi principal problema es en los metodos de sincrinizacion la verdad no se como hacer eso en c++ no me sale!.



engel lex

no te van a traducir el código aquí... ve haciéndolo y cuando tengas una duda de "como hago esta función en c++?" la posteas aquí y preguntas sobre cosas puntuales
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

vertigo123

Gracias engelx y si voy a trabajar un rato en el y regreso mas tarde aunque mi duda mas grande creo que seria en la clase torre de control que la manejo como un monitor y no se sincronizar como sale en java....mas tarde regreso y de nueva cuenta gracias ;).