Noticias:

Dracon ha sido relegado al vhat. No saldra de ahi en muuucho tiempo

Menú Principal

Curso de Programación Lúdica. Actualmente: Tetris funcionando

Iniciado por Bill, 13 de Mayo de 2009, 15:08

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

El Brujo

Venga va, pues pongo yo también una captura del mio



El Brujo
Oh, tengo Twitter...

Sorry but you are not allowed to view spoiler contents.

Clave

[spoiler=Citas][23:59:06] petyr dice: A mí el olor a porro me marea mucho[0:33:39] rayd dice: que yo tuve novia
Cita de: Ningüino Flarlarlar en 12 de Agosto de 2011, 12:08Felicidades, Logan. Ya no tendré que darme prisa para contestarte los sms.
Cita de: Rayd en 04 de Octubre de 2011, 16:00
Cita de: Clave en 04 de Octubre de 2011, 15:57
Cita de: ayrendor en 04 de Octubre de 2011, 15:51
Cita de: Clave en 04 de Octubre de 2011, 15:37
Cita de: ayrendor en 04 de Octubre de 2011, 15:29
¿Pero cuando se acaba el plazo para mandar? :facepalm:
Hay un mp para ti.
No lo hay.
Ahora si
Me lo has mandado a mi.

Bill

#132
3. La verdad, la mentira, el yogur griego y YoYo jugando a la xbox

En la primera lección aprendíamos lo importante que es saber dividir un problema en subproblemas más pequeñitos, y de esta forma se definía un algoritmo como una lista finita, ordenada y definida de pasos para llegar a la resolución de un problema.

En la segunda lección veíamos la importancia de la unificación del lenguaje, el uso de comandos e introducíamos una estructura preciosa y útil que es el "Repetir". Algunos de los que han solucionado el problema incluso han dibujado un círculo, llegando a utilizar un "Repetir 720 veces". En ese caso si la estructura Repetir no existiese, habría que repetir las instrucciones 720 veces, vamos, un coñazo.

Pues llegados a este punto conocemos dos estructuras: la secuencia (los comandos se ejecutan uno detrás de otro) y el bucle (una secuencia se repite). Pero nos falta algo, está claro que con esto no nos vale. Por ejemplo, en el robot satánico queremos que sepa pintar tanto un pentáculo como una estrella de David, y que nos pregunte al principio qué queremos que pinte, no podríamos porque no hemos visto nada que nos permita decir "si tal cosa se cumple haz esto y si no haz esto otro".

A esa cosa que se tiene que cumplir se le llama condición, y debe cumplir una premisa importantísima, que es que una condición solamente puede tomar dos valores: o es cierto o es falso. Un ordenador no tiene moral ni ética ni nada por el estilo, si un ordenador es padre y su hija de 16 años llega dándo tumbos a las 7 de la mañana de un sábado, el ordenador le preguntará "Amparo, ¿vienes borracha?" y la hija le podría contestar "bueno padre, si es que mis amigas bla bla bla..." y el ordenador (padre amantísimo) le contestará "A mí me la pelan tus amigas ¿vienes borracha sí o no?". Vaya, ahora que lo pienso, tampoco se aleja demasiado del comportamiento de un padre humano.

Así podríamos definir lo que se llama una condicional:
Si (condición) entonces {...} [y si no {...}];

Los corchetes significan que esa parte es opcional, es decir, podemos decir "Si se cumple la condición haz esto, pero si no se cumple sigue normalmente" o podemos decir "Si se cumple la condición haz esto y si no se cumple haz esto otro".

Para verlo con el ejemplo del padre ordenador y la hija dando tumbos, el código sería:
Si (hija dice estar borracha) entonces { castigar 1 semana por borracha }
si no { castigar 2 semanas por borracha y mentirosa};


¿Las condiciones solamente se utilizan en las condicionales? La respuesta es: no. También se usan en los bucles. ¿Recordáis el bucle Repetir n veces? Pues solamente nos vale para repetir algo un número finito de veces predefinido. Pero, ¿y si no sabemos cuántas veces se tiene que repetir?. Imaginad que YoYo está jugando con unos amigos a la Xbox a un juego de lucha. El avanzado método de pelea que utiliza YoYo consiste en una antigua técnica aprendida de un monje shaolin y perfeccionada a base de sangre y sudor: "mueve el mando y pulsa todos los botones al azar". De partida, ¿cuántas veces tendrá que pulsar YoYo los botones? Pues ni puta idea, porque no sabemos cuántos golpes esquivará el contrincante ni cuántos hacen falta para tumbarle, ni cuantos acertará YoYo... así que no nos vale un "Repetir n veces", sino que el bucle sería:
Mientras (estés jugando) haz
  {
    MoverMando();
    PulsarTodoALaVez();
    EmitirGruñidos();
  }


Ahí lo tenéis, un bucle basado en una condición:
Mientras (condición) haz {...};
En este caso el programa entraría, comprobaría la condición del bucle, si se cumple entra en el bucle y lo repite mientras se cumpla y cuando deja de cumplirse sale. Este tipo de bucle tiene una característica: si la condición no se cumple desde el principio, el contenido del bucle jamás se realiza. Pero podemos tener situaciones dónde queramos que el contenido se ejecute al menos una vez, y para eso existe otro tipo de bucle:
haz { ... } Mientras (estés jugando);

Volvamos a lo de YoYo y supongamos que su contrincante es un cheto (un tío que hace trampas) y que conoce una combinación mágica de botones para vencer al contrincante. En este caso, con el bucle de juego que definimos antes, YoYo jamás pulsaría las teclas porque perdería desde el principio. Pero todos sabemos que YoYo mueve el mando, pulsa las teclas y emite quejidos al menos una vez por partida (incluso cuando no está jugando), con lo cual el código quedaría:
haz
  {
    MoverMando();
    PulsarTodoALaVez();
    EmitirGruñidos();
  } Mientras (estés jugando)


Y estas son todas las estructuras de código que existen en programación estructurada:
- Secuencia
- Condicional
- Bucle

Os pongo un gráfico resumen:



Y ahora veamos el título de la lección... hemos aprendido sobre la verdad y la mentira (únicos valores que puede tomar una condición) y sobre YoYo jugando a una xbox. ¿Pero qué cojones es el yogur griego? Pues atentos que ahí vamos.

Hace muchos, muchos años, existía una polis griega llamada Orcómeno dónde desarrollaron una receta para hacer el yogur más rico del mundo conocido. Se pusieron manos a la obra y consiguieron realizar 4000 unidades de yogur pagadas con dinero ciudadano y destinadas al comercio y a ser distribuidas entre ciertos sectores ciudadanos. ¡Se iban a hacer ricos! Pero he aquí que comenzaron los problemas, ¿con quién se comerciaría? ¿a qué precio? ¿a quién le corresponderían unidades gratis? Y se hizo una reunión, a la que invitaron a los más prestigiosos pensadores de la zona, tales como Proctágoras de Culeto. La reunión era presidida por el honorable Erginos moderando el debate, que era emitido en directo por la 2. El acta de reunión fue la siguiente:
- Yo con los pijos de Tebas no pienso comerciar. ¡Que se hagan su propio yogur y así revienten de cagalera! Bueno no... si me lo pagan a 100 dracmas entonces sí que les vendo algo y escupo al suelo.
- Pues si con los de Tebas comerciamos a ese precio, ¿con Megara qué hacemos? Porque fijo que si les vendemos yogures, se los revenderán a los de Tebas
- Pues a los de Megara se lo vendemos a 5 dracmas la unidad, y que se jodan, es un precio caro... pero tampoco nos vamos a tirar de la moto.
- ¿Y aquí en la península? ¿Lo vamos a vender a todos igual?
- A mí los de Heraia me caen bien, yo se lo vendería a 1 dracma.
- Los de Messena son tontos del haba, con esos podemos hacer negocio, se lo vendemos a 4 dracmas y fijo que pican
- Y a los espartanos a 2... ¡AHÚ!
- Ok, anotado, y al resto de polis de la península se lo vendemos a 3, lo cual incluye a Elis, Olimpia, Corinto, Sición, Megalípolis...
- Vale, y a los de fuera de la península a 4 dracmas, menos a Megara que ya dijimos que a 5 y a Tebas que no les vamos a vender nada.
- Vayamos con las unidades que se regalarán a los ciudadanos de Orcómeno... vamos a regalar 1000 unidades, pero claro, hay mucho ciudadano.
- Está claro que hay que repartirlo por igual a hombres, mujeres, niños...
- No, a los menores de 10 años no, ni a los mayores de 50, porque les puede causar malestar estomacal.
- Y a las mujeres... bueno, siempre y cuando estén casadas con un ciudadano de Orcómeno que merezca un yogur.
- ¿Los hombres? Pues aquellos que al menos un padre sea de Orcómeno, si son hijos de extranjeros nada.
- Bueno, y a los ciudadanos de Orcómeno que no se les regale, siempre lo pueden comprar a un dracma.
- Joder, la que hemos liado... ¿y ahora cómo sabemos el precio y a quién se regala?

Porctágoras tomó notas de la reunión en un papiro, y anotó mentalmente que había que utilizar la lógica proposicional. Sabíamos que una condición puede ser cierta o falsa. Y las condiciones es lo que los filósofos llaman proposiciones, y las proposiciones pueden estar compuestas a su vez por otras proposiciones unidas por conectores. Existen varios conectores, el primero de ellos es unario, es decir, que afecta tan solo a una proposición, y se llama la negación (NOT): negar cierto implica falso y negar falso implica cierto. El segundo de ellos es binario, afecta a dos proposición, y es la conjunción (AND): la conjunción de dos predicados es cierta cuando ambos predicados son ciertos. El tercero de ellos es la disyunción (OR): la disyunción de dos predicados es cierta cuando al menos uno de ellos es cierto.



Estas operaciones y unos buenos paréntesis nos permiten componer cualquier condicional necesaria para un bucle o para un if. En ocasiones como la del problema del yogur griego el if es anidado, es decir, tendremos combinaciones como "Si (es ciudadano de tebas) entonces { } si no si (es ciudadano de Megara) entonces {   }  si no si es ....".

Pues he aquí los deberes. En nuestro programa nos entra un ciudadano, del cual sabemos los siguientes datos:
- ciudad
- sexo (hombre o mujer)
- edad
- ciudadPadre
- ciudadMadre
- ciudadCónyuge

Del ciudadano queremos saber lo que le vamos a cobrar por el yogur, que será el dato "precio". El Precio será el único dato asignable, y el operador para asignar es el igual (=), por ejemplo "precio = 10".
Para las comparaciones podemos usar los comparadores matemáticos, es decir: igual (==), distinto (!=), menor que (<), mayor que (>), menor o igual que (<=) y mayor o igual que (>=). Pero con una cosa especial sobre el signo igual: si es un solo igual es asignación de valor y si son dos iguales es una comparación, es decir:
precio = 15 <==== esto significa que el nuevo valor de precio será 15
precio == 15 <==== esta es una comparativa que nos devuelve Cierto o Falso indicando si el precio vale 15.

Además contamos con una función que dada una ciudad nos dice si es de la Península o de fuera: EsPeninsular(ciudad), que devuelve cierto o falso. Y por último el operador NOT es la exclamación (!) de forma que !EsPeninsular(ciudad) nos devuelve cierto cuando la ciudad no es peninsular.

Una nota sobre los paréntesis: hay que tener cuidado con ellos y mucho ojito.

Entonces tendríamos cosas similares a esta:
Si ((ciudad == Tebas) AND (edad >= 10) AND (sexo = mujer)) entonces { precio=7; }
si no Si (!EsPeninsular(ciudad) AND (ciudad != Megara)) entonces { precio = 4; }
si no Si (((edad < 10) OR (sexo = hombre)) AND (ciudad == Orcómeno)) entonces {precio = 0; };


Esto es solo un ejemplo que no tiene sentido con los datos del problema. Y aquí vienen los deberes: construir el programita que a partir de los datos de entrada de un ciudadano cualquiera nos diga el precio que debemos cobrarle, teniendo en cuenta que cobrar 0 es regalar.

Suerte majetes.

El Brujo

#133
Me mola cómo explicas
Cita de: Peluche en 18 de Mayo de 2009, 10:40
precio == 10 <==== esta es una comparativa que nos devuelve Cierto o Falso indicando si el precio vale 15.
Por qué en este caso no sería que nos devuelve Cierto o Falso indicando si el precio vale 10?

EDIT: y por qué en los Si usas () y en los entonces {}? Porque el lenguaje es así, para diferenciarlos o...

El Brujo
Oh, tengo Twitter...

Sorry but you are not allowed to view spoiler contents.

Bill

Cita de: El Brujo en 18 de Mayo de 2009, 13:54
Me mola cómo explicas
Cita de: Peluche en 18 de Mayo de 2009, 10:40
precio == 10 <==== esta es una comparativa que nos devuelve Cierto o Falso indicando si el precio vale 15.
Por qué en este caso no sería que nos devuelve Cierto o Falso indicando si el precio vale 10?

EDIT: y por qué en los Si usas () y en los entonces {}? Porque el lenguaje es así, para diferenciarlos o...

El Brujo

Porque me equivoqué :D
Fixed.

El Brujo

y lo de los corchetes? Y otra duda.Los ciudadanos a los que se les puede regalar pueden ser de cualquier ciudad o sólo de la península? Alguien de Tebas podría llegar a llevárselo gratis?

El Brujo
Oh, tengo Twitter...

Sorry but you are not allowed to view spoiler contents.

Bill

#136
Cita de: El Brujo en 18 de Mayo de 2009, 14:28
y lo de los corchetes? Y otra duda.Los ciudadanos a los que se les puede regalar pueden ser de cualquier ciudad o sólo de la península? Alguien de Tebas podría llegar a llevárselo gratis?

El Brujo

Solamente habitantes de Orcómeno.

Lo de los corchetes significa que la segunda parte de un es opcional. Es decir, tu puedes decir "Si llueve me quedo en casa y si no salgo de juerga" y tiene las dos partes, lo que haces en un caso y en el otro, pero también hay situaciones dónde solamente te interesa lo que sucede si se cumple la condición, un ejemplo: "Si gana españa en la eurovisión me depilo los huevos me la pinto del joker y subo la foto al foro".

YoYo

Me tienes rencor porque os gané a todos con Sakura
Sorry but you are not allowed to view spoiler contents.



El Brujo

Cita de: Peluche en 18 de Mayo de 2009, 16:53
Cita de: El Brujo en 18 de Mayo de 2009, 14:28
y lo de los corchetes? Y otra duda.Los ciudadanos a los que se les puede regalar pueden ser de cualquier ciudad o sólo de la península? Alguien de Tebas podría llegar a llevárselo gratis?

El Brujo

Solamente habitantes de Orcómeno.

Lo de los corchetes significa que la segunda parte de un es opcional. Es decir, tu puedes decir "Si llueve me quedo en casa y si no salgo de juerga" y tiene las dos partes, lo que haces en un caso y en el otro, pero también hay situaciones dónde solamente te interesa lo que sucede si se cumple la condición, un ejemplo: "Si gana españa en la eurovisión me depilo los huevos me la pinto del joker y subo la foto al foro".

La madre que me parió... Había hecho todo pensando que podrían ser de cualquier ciudad -.-'. En fin, ahora te lo envío
Oh, tengo Twitter...

Sorry but you are not allowed to view spoiler contents.

Clave

Bien bien bien, ya me he hecho la picha un lió.

Peluche puedes poner un ejemplo con el NOT que soy bastante cortito?
[spoiler=Citas][23:59:06] petyr dice: A mí el olor a porro me marea mucho[0:33:39] rayd dice: que yo tuve novia
Cita de: Ningüino Flarlarlar en 12 de Agosto de 2011, 12:08Felicidades, Logan. Ya no tendré que darme prisa para contestarte los sms.
Cita de: Rayd en 04 de Octubre de 2011, 16:00
Cita de: Clave en 04 de Octubre de 2011, 15:57
Cita de: ayrendor en 04 de Octubre de 2011, 15:51
Cita de: Clave en 04 de Octubre de 2011, 15:37
Cita de: ayrendor en 04 de Octubre de 2011, 15:29
¿Pero cuando se acaba el plazo para mandar? :facepalm:
Hay un mp para ti.
No lo hay.
Ahora si
Me lo has mandado a mi.

Últimos mensajes

Errores del foro de jug0n
[Hoy a las 01:18]


[Follipandi del 106]Hilo para poner al corriente a Clave de jug0n
[Hoy a las 01:16]


Vuelven los gatos de jug0n
[Hoy a las 01:15]


Por que 106? De donde viene? de YoYo
[Hoy a las 01:14]


¿Qué estás escuchando? de YoYo
[Hoy a las 01:13]