Título: Me podrían ayudar a pasar código java a c++ por favor Publicado por: vertigo123 en 2 Diciembre 2013, 04:06 am 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!. Título: Re: Me podrían ayudar a pasar código java a c++ por favor Publicado por: engel lex en 2 Diciembre 2013, 07:38 am 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
Título: Re: Me podrían ayudar a pasar código java a c++ por favor Publicado por: vertigo123 en 2 Diciembre 2013, 13:47 pm 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 ;).
|