Public, primer intento...

Started by Futu-block, March 04, 2011, 10:39:06 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Abram


[code language="bennu"]
global
int id_carro; //La ID del proceso la guardamos en un int normal y corriente
end

declare process carro(x, y, direccion, salida, llegada)
   public
       int direccion, salida, llegada;
   end
end

process main()
begin

    carro id_carro; // ESTO QUE YO RECUERDE NO ES CON LAS PUBLICAS, SINO CON LAS VARIABLES PROPIAS HECHAS CON TYPE
    id_carro= carro(blablabla); //creamos una instancia del proceso carro si queremos acceder a sus variables publicas se haria asi:
/*
id_carro.direccion=loquesea;
write(0,10,10,0,"La salida es: "+id_carro.salida);
*/
end

process carro(x, y, direccion, salida, llegada)
begin


begin

   graph = tal y tal;
   loop
       tal y pascual...
[/code]

No te lies, publica es otro tipo de variable, como privada, local, o global xD no puedes llamar a una privada igual que una publica, una publica no es mas que una privada que se puede modificar desde fuera de su mismo proceso :)

Futu-block

#16
gracias, aunque lo he solucionado mientras respondias (creo) te voy a dar un karma, ademas de porque mas o menos es así la solucion

yo he puesto esto:
[code language="bennu"]
declare process carro(x, y, direccion, salida, llegada)
   public
       int direccion_2, salida_2, llegada_2;
   end
end

process carro(x,y, direccion_2, salida_2, llegada_2)
private
int cualquier_otra_var;

begin
   direccion_2 = direccion;
        salida_2 = salida;
        llegada_2 = llegada;
   loop
      switch (direccion)
         case 1: if ( x < llegada) x+=2; else direccion = 2; end
         end
         case 2: if ( x > salida) x-=2; else direccion = 1; end
         end
         case 3: if ( y > salida) y-=2; else direccion = 4; end
         end
         case 4: if ( y < llegada) y+=2; else direccion = 3; end
         end
      end
      frame;
   end
end[/code]

y ha funcionado sin que me haya enterado de nada, cada carro creado ahora (he de decir que he creado una variable global 'id_carro') me crea con sus propias equis, ies griegas, direcciones, salidas y llegadas...

de lo poco que puedo deducir si mientras estoy escribiendo no me habeis puesto algo mas aclaratorio, es que para declarar hay que poner los parametros en el public mismamente declarado, y para asignar las variables publicas a otras variables habria que ponerlo (evidentemente) pero sin declarar...

o por lo menos eso he echo yo...
espero entenderlo con el tiempo y,o que no me digan porque si y se acabo :O

SplinterGU

esto deberia ser al reves

direccion_2 = direccion;
salida_2 = salida;
llegada_2 = llegada;
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

si te refieres a:

direccion = direccion_2;
salida = salida_2;
llegada = llegada_2;

no me funciona asi...

SplinterGU

a ver, para que asignas al parametro de entrada una variable que no se seteo aun? y que ademas luego no usas.

por ejemplo, lo que estas haciendo es lo mismo que poner.

direccion_2 = 0;
salida_2 = 0;
llegada_2 = 0;

ya que

direccion, salida, llegada son publicas y como no tienen valor defecto, se inician a 0, cuando se crea la funcion.

y luego no usas ninguna de las direccion_2, salida_2, llegada_2 en el codigo, sino que le pisas el valor que viene de parametro apenas entra en la funcion.

como no te va a funcionar lo que digo? no deberia funcionarte tu ejemplo, por lo menos no de la forma aparentemente correcta, si lo que quieres es iniciar las variables en 0, y que sean publicas, pasa de los parametros de entrada.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

por otro lado, esto esta mal...

declare process carro(x, y, direccion, salida, llegada)
   public
       int direccion, salida, llegada;
   end
end

y si compila peor aun... por lo menos no recuerdo que declarandolo asi, las variables de parametro las tome como publicas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ya me estaba asustando, asi como esta el codigo que pegaste aca, no compila, la declaracion no puede tener variables de parametro y publicas con el mismo nombre.

lo probe y da error.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

A ver que revise, si no lo puedes resolver estamos en un gran problema...

SplinterGU

cuando digo, "da error", es algo bueno, porque lo que has escrito esta mal.

esta bien que de error.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

#24
efectivamente jefe, copié malamente el codigo, debí haber usado el control+C y control+V
[code language="bennu"]
declare process carro(x, y, direccion, salida, llegada)
   public
       int direccion_2, salida_2, llegada_2;
   end
end

process carro(x,y, direccion_2, salida_2, llegada_2)
private
int cualquier_otra_var;

begin
        direccion_2 = direccion;
        salida_2 = salida;
        llegada_2 = llegada;
   loop
      switch (direccion)
         case 1: if ( x < llegada) x+=2; else direccion = 2; end
         end
         case 2: if ( x > salida) x-=2; else direccion = 1; end
         end
         case 3: if ( y > salida) y-=2; else direccion = 4; end
         end
         case 4: if ( y < llegada) y+=2; else direccion = 3; end
         end
      end
      frame;
   end
end[/code]
así queda, y ahora a modificar mi anterior mensaje y a comprender


aprendo aprendo aprendo...

Rein (K´)ah Al-Ghul

Quote from: Futublock on March 10, 2011, 04:49:38 PM
efectivamente jefe, copié malamente el codigo, debí haber usado el control+C y control+V
[code language="bennu"]
declare process carro(x, y, direccion, salida, llegada)
    public
        int direccion_2, salida_2, llegada_2;
    end
end

process carro(x,y, direccion_2, salida_2, llegada_2)
private
int cualquier_otra_var;

begin
        direccion_2 = direccion;
        salida_2 = salida;
        llegada_2 = llegada;
   loop
      switch (direccion)
         case 1: if ( x < llegada) x+=2; else direccion = 2; end
         end
         case 2: if ( x > salida) x-=2; else direccion = 1; end
         end
         case 3: if ( y > salida) y-=2; else direccion = 4; end
         end
         case 4: if ( y < llegada) y+=2; else direccion = 3; end
         end
      end
      frame;
   end
end[/code]
así queda, y ahora a modificar mi anterior mensaje y a comprender


aprendo aprendo aprendo...
hay algo que no me queda en claro, porque en la declaracion del proceso y en la implementacion los ultimos tres parametros tienen nombres distintos?

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

SplinterGU

si, esto esta mal...


process carro(x,y, direccion_2, salida_2, llegada_2)
private
int cualquier_otra_var;

begin


que loco esto que hizo futu, lo malo es que funcione... pero evidentemente esta mas que mal.

la cosa es que la linea de declaracion de la funcion se ignora, solo se chequean los tipos, la funcion ya se creo previamente cuando se hizo el declare, en el momento de llegar a la funcion, solo se chequean cantidad de parametros y tipos, y no se vuelve a crear la funcion...

pero esta mal.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

creo que funciona de casualidad, no deberia ser asi... futu cambia el prototipo de la funcion a como esta en la declaracion.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

prototipo? funcion? declaracion?
wow wow wow, no tan rapido que me está sonando a chino
ponmelo como si fuera tontino o algo asi, que ya sabes que soy mas bien torpe XD



Pd: sabes que tienes un byte de karmas?

Drumpi

#29
Futu, no te compliques:

[code language="bennu"]declare process carro(x, y, direccion, salida, llegada)
  public
      int direccion_2, salida_2, llegada_2;
  end
end

process carro(x,y, direccion, salida, llegada)
private
int cualquier_otra_var;

begin
      direccion_2 = direccion;
      salida_2 = salida;
      llegada_2 = llegada;
       loop
       switch (direccion_2)
          case 1: if ( x < llegada_2) x+=2; else direccion_2 = 2; end
          end
          case 2: if ( x > salida_2) x-=2; else direccion_2 = 1; end
          end
          case 3: if ( y > salida_2) y-=2; else direccion_2 = 4; end
          end
          case 4: if ( y < llegada_2) y+=2; else direccion_2 = 3; end
          end
       end
       frame;
       end
end[/code]

Y ya está, no puedes poner las públicas en la entrada de parámetros, porque en el declare, al escribir:

declare process carro(x, y, direccion, salida, llegada)

Ya estás creando "dirección", "salida" y "llegada", como variables PRIVADAS de tipo INT.

Aunque, Splinter, (esto, Futu, no lo leas o te vas a liar): tal como lo ha puesto Futu debería funcionar siempre que quitase las líneas:
direccion_2 = direccion;
salida_2 = salida;
llegada_2 = llegada;
Porque a mi manera de entender, en el declare crea las variables de tipo int, pero en la definición del proceso, lo que hace al poner las públicas en los parámetros, es asignar directamente los valores de entrada a las públicas (aunque entiendo que también puede crear un conflicto entre la declaración y la definición al usar privadas en un lado y públicas en otro, pero entiendo que el compilador es "inteligente" para darse cuenta de ello).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)