Blender - Buscando a Nemo

Laberinto en Java3D


Java3D - Laberinto from ces2601 on Vimeo.

Reportes con PHP, MySQL, Apache y Wordpress


Se tiene previamente instalado y configurado:

y vamos a trabajar con 

Vamos a explicar primero lo que queremos hacer, queremos obtener un reporte que nos muestre los records de los jugadores que han ganado nuestro juego, para ellos disponemos de un laberinto hecho en Java3D, en el cual cuando se llega a la meta, se anota el tiempo y se inserta en la base de datos, luego queremos consultar los tiempo ordenados del mejor en adelante.

Para poder ejecutar codigo PHP en Wordpress he usado el pluging Exec-PHP. Primero hacemos la coneccion con la base de datos MySQL,

$server="192.168.153.1";
$usuario="root";
$pass="123";
$db="laberinto";

$link=mysql_connect($server,$usuario,$pass)or die (exit(mysql_error()));
mysql_select_db($db);

Y ahora para mostrar el reporte vamos a usar "print" para las salidas en HTML, primero ponemos el titulo y la cabecera de la tabla:
print "Facil";
print "< table border=1><td>Nombre</td><td>Modo</td><td>Tiempo [hh:mm:ss]";

Luego con una consulta a la base de datos obtenemos los datos que queremos mostrar:
$sqlx="Select * from ganadores where modo='facil' order by hora, minuto, segundo ";
$rsx = mysql_query($sqlx) or die(exit("Error"));

Con los datos obtenidos vamos generando el codigo HTML en formato de tabla
while($rowx=mysql_fetch_array($rsx)){
     print "".$rowx["nombre"]."".$rowx["modo"]."".$rowx["hora"].":".$rowx["minuto"].":".$rowx["segundo"]."";
}

Y por ultimo para guardar las buenas practicas, vamos a crear el tag de cierre de la tabla
print "</table>";

Podemos variar los datos, sintaxis, consulta a la base de datos, etc, pero en esencia sera lo mismo, ahora vamos al resultado:


MySQL brindar acceso remoto

Cuando configuramos un servidor de bases de datos con MySQL es importante brindar acceso a los clientes que se desean conectar a la base de datos, por defecto MySQL bloquea todas las conneciones por motivos de seguridad, entonces para brindar acceso tenemos que usar "GRANT"

GRANT [tipo_acceso] ON [base datos/tablas] TO usuario@[host] IDENTIFIED BY [password]

Ejemplo:
Vamos a darle acceso al usuario "root" que accesa desde '192.168.153.128' a la base de datos 'laberinto':

GRANT ALL ON laberinto.* TO root@'192.168.153.128' IDENTIFIED BY '123';

Cronometro en QT usando hilos

Vamos a ver como crear hilos en C\C++ usando QT, y como practica vamos a hacer un cronometro, este ejemplo se ha realizado usando:

Ubuntu 10.04
QDevelop
QTDesigner 4

Lo primero que vamos a hacer es crearnos un nuevo proyecto usando QDevelop, el cual llamaremos hilosQT, luego vamos a fuentes -> clic derecho -> agregar, y vamos a crear una clase para el hilo, la llamaremos hilo.cpp y vemos que también nos crea la cabecera hilo.h


Ahora para editar nuestra interfaz gráfica nos vamos a apoyar en QTDesginer, hacemos doble clic en el archivo: ui/mainwindow.ui y se nos va a abrir QTDesigner, he añadido un botón de inicio, y un widget tipo "lcd display", al final me quedo así:


Ahora regresamos a QDevelop para programar el hilo y los eventos. Editamos el archivo hilo.cpp de manera que se nos cree un ciclo infinito con una pausa de 1 segundo para simular el reloj,

void hilo::run(){

 while(1){

     if(s==59)
     {
      s=0;
      m++;
     }

     if(m==59)
     {
      m=0;
      h++;
     }

s++;  
ventana->lcdNumber->setProperty("intValue", s);
     msleep(1000);
 }

Editamos la cabecera, como vemos en el constructor le pasamos nuestra "gui" para poder actualizar el display.


class hilo : public QThread
{
public:
void run();
hilo(MainWindowImpl *gui);
MainWindowImpl *ventana;
int h, m ,s;
};



Para agregar el evento del boton, vamos a crear un metodo que se llame "iniciarCronometro()" y lo definimos en la cabecera de nuestra ventana principal, en el archivo fuente le ponemos el evento al boton y definimos las acciones del metodo:


hilo *crono;

MainWindowImpl::MainWindowImpl( QWidget * parent, Qt::WFlags f) 
: QMainWindow(parent, f)
{
setupUi(this);
connect(pushButtonIniciar, SIGNAL(clicked()), this, SLOT(iniciarCronometro()));
}

void MainWindowImpl::iniciarCronometro()
{
crono = new hilo(this);
crono->start();
}

Ahora lo interesante, vamos a probarlo!!.. si todo va bien nos debería quedar así, si queréis el código fuente puedo compartirlo!..



Citas informáticas

Código

”El buen código es su mejor documentación”
— Steve McConnell

”Cualquier código tuyo que no hayas mirado en los últimos seis meses o más es como si lo hubiese escrito otro”
— Eagleson’s Law

”El primer 90% del código corresponde al primer 90% del tiempo de desarrollo. El 10% restante corresponde al otro 90% del desarrollo”
— Tom Cargill



Desarrollo de software

“Los buenos programadores usan sus cerebros, pero unas buenas directrices nos ahorran de tener que hacerlo en cada caso”
— Francis Glassborow

”En software, muy raramente partimos de requisitos con sentido. Incluso teniéndolos, la única medida del éxito que importa es si nuestra solución resuelve la cambiante idea que el cliente tiene de lo que es su problema”
— Jeff Atwood

”Considerando el lamentable estado de nuestras aplicaciones informáticas actuales, el desarrollo de software es todavía un arte oscuro, y no puede ser aún considerado una ingeniería”
— Bill Clinton

”No puedes crear un gran software sin un gran equipo, y la mayoría de los equipos de desarrollo se comportan como familias disfuncionales”
— Jim McCarthy



Depuración

”Tan pronto como comenzamos a programar encontramos, para nuestra sorpresa, que crear programas correctos no era tan fácil como habíamos pensado. Tuvo que descubrirse la depuración. Puedo recordar el instante exacto en el que me dí cuenta que una gran parte de mi vida desde entonces iba a pasarla encontrando errores en mis propios programas”
— Maurice Wilkes descubre la depuración, 1949

”Depurar es al menos dos veces más duro que escribir el código por primera vez. Por tanto, si tu escribes el código de la forma más inteligente posible no serás, por definición, lo suficientemente inteligente para depurarlo”
– Brian Kernighan

”Si la depuración es el proceso de eliminar errores, entonces la programación debe ser el proceso de introducirlos”
— Edsger W. Dijkstra



Calidad

”¡No me importa si funciona en tu máquina! ¡No estamos vendiendo tu máquina!”
— Vidiu Platon

”Programar es como el sexo: un único error y tienes que estar soportándolo toda la vida”
— Michael Sinz

“Hay dos formas de escribir programas sin errores; sólo la tercera funciona”
— Alan J. Perlis

”Puedes tener un software de calidad o puedes tener aritmética de punteros, pero no puedes tener ambas cosas al mismo tiempo”
— Bertrand Meyer

”Si McDonnalds funcionara como una compañía de software, uno de cada cien Big Macs te envenenarían, y la respuesta sería ‘lo sentimos, aquí tiene un cupón para dos más’”
— Mark Minasi

“Codifica siempre como si la persona que finalmente mantendrá tu código fuera un psicópata violento que sabe dónde vives”
— Martin Golding

”Cometer errores es humano, pero para estropear realmente las cosas necesitas un ordenador”
— Paul Ehrlich

”Un ordenador te permite cometer más errores y más rápido que cualquier otra invención en la historia de la humanidad, con las posibles excepciones de las pistolas y el tequila”
— Mitch Radcliffe



Predicciones

”Todo lo que puede ser inventado ha sido ya inventado”
— Charles H. Duell, Comisario de oficina de Patentes en EEUU, en 1899

”Pienso que hay mercado en el mundo como para unos cinco ordenadores”
— Thomas J. Watson, Presidente de la Junta Directiva de IBM, sobre 1948

“Podría parecer que hemos llegado a los límites alcanzables por la tecnología informática, aunque uno debe ser prudente con estas afirmaciones, pues tienden a sonar bastante tontas en cinco años”
— John Von Neumann, sobre 1949

“Pero, ¿para qué puede valer eso?”
— Ingeniero en la división de sistemas informáticos avanzados de IBM, hablando sobre los microchips, en 1968

”No hay ninguna razón para que un individuo tenga un ordenador en su casa”
— Ken Olson, Presidente de Digital Equipment Corporation, en 1977

”640K deberían ser suficientes para todo el mundo”
— Bill Gates, 1981

”Windows NT podrá direccionar 2GB de RAM, que es más de lo que cualquier aplicación va a necesitar jamás”
— Microsoft, durante el desarrollo de Windows NT, en 1992

”Nunca seremos realmente una sociedad sin papeles hasta que la gente de la Palm Pilot creen ‘WipeMe 1.0′”
— Andy Pierson
(Nota: Wipe es la traducción de toallita de papel)

“Si las cosas siguen así, al hombre se le atrofiarán todas sus extremidades excepto los dedos de pulsar los botones”
— Frank Lloyd Wright

Cronometro en Java usando NetBeans

Cuando usamos NetBeans, no podemos hacer lo que había mostrado en la entrada anterior a este tema (Cronometro en Java):

public class cronometro implements Runnable{

puesto que la clase ya hereda de JFrame cuando se trabaja en NetBeans, la solucion para implementar un cronometro en NetBeans es bien sencilla, a continuacion vamos a ver como:

El hilo
Lo primero es crearnos un objeto de tipo Thread, en el cual vamos a definir nuestro método"run" el cual contendrá las acciones que queremos que nuestro cronometro haga, en este caso mostrar los minutos, segundos y horas que lleva.

Thread hilo = new Thread()
{
public void run()
{
try
{
while(true)
{
if(seg==59) { seg=0; min++; }
if(min==59) { min=0; hora++; }
seg++;

lblTime.setText(hora+":"+min+":"+seg);

hilo.sleep(1000);
}
} catch (java.lang.InterruptedException ie) { System.out.println(ie.getMessage()); }
}
};

Dentro del metodo "run" hacemos un ciclo infinito, while(true) y con la funcion sleep() definimos cuanto se va a tardar en hacer la siguiente corrida, el tiempo siempre se pasa en milisegundos, asi que si definimos sleep(1000) se va a tardar un segundo en hacer la siguiente corrida, que es lo que queremos, que valla aumentando de segundo en segundo,

Los eventos
Los eventos de nuestro cronometro son 3, iniciar, pausar y parar. El evento de iniciar es de dos tipos, ya sea cuando vamos a iniciar el cronometro o si esta pausado y queremos resumirlo.

public boolean issuspended = false;
private void btnStartMouseClicked(java.awt.event.MouseEvent evt) {

if(!issuspended)
{
hilo.start();
lblStatus.setText("Estado: Iniciado");
}
else
{
hilo.resume();
issuspended = false;
lblStatus.setText("Estado: Resumido");
}

}

Primero preguntamos si esta pausado, si no lo esta lo iniciamos (start), si esta pausado lo resumimos (resume). Para pausar el cronometro usamos el metodo "suspend" que pausa indefinidamente el cronometro:

hilo.suspend();
issuspended = true;
lblStatus.setText("Estado: Suspendido");

Y para paralo usamos "stop":

hilo.stop();
lblStatus.setText("Estado: Parado");

Y listo, nuestro cronometro se vera así:





Descarga el ejemplo completo acá:

SQL - Get day of the week

To know what day of the week is on a datetime value you can find it in two easy ways:

Method # 1

SELECT DATEPART(weekday,[date_var])

it will return:

1 for Sunday
2 for Monday
3 for Tueday
4 for Wednesday
5 for Thursday
6 for Friday
7 for Saturday

For example:

SELECT DATEPART(weekday,'2010-8-2')

Result:

2


Method # 2

SELECT DATENAME(dw, GETDATE())

It will return the name of the current day


Result:

Monday



Reproducir MP4 Ubuntu


De nuevo en ubuntu tratando de ver un poco de anime :P, tenia el problema de no poder reproducir mp4 con totem, la solucion mas facil fue ponerle VLC (ir al synaptic, buscar vlc > instalar y listo), este reproductor ya trae los codecs, pero tuve el problema que al tratar de reproducirlo la aplicacion se cerraba, lo mismo me pasaba con el totem y ya tenia todos los codecs instalados, entonces me recomendaron ejecutarlo desde consola para ver cual era el error, que aparentemente era producido porque el video era de una resolucion muy grande (1280x720), entonces la solucion fue muy facil (googleando)... cambiar el modo de salida de video a "X11"

Error:
X Error of failed request: BadAlloc (insufficient resources for operation)
Major opcode of failed request: 140 (XVideo)
Minor opcode of failed request: 19 ()
Serial number of failed request: 83
Current serial number in output stream: 84

Herramientas > Preferencias > Video > Salida > Salida de video X11 y listo.



el resultado?... poder ver anime en HD :)


Que es eso del universe y multiverse?

Organización de paquetes
Ubuntu divide todo el software en cuatro secciones, llamadas componentes, para mostrar diferencias en licencias y la prioridad con la que se atienden los problemas que informen los usuarios. Estos componentes son: main, restricted, universe y multiverse.

Por omisión, se instala una selección de paquetes que cubre las necesidades básicas de la mayoría de los usuarios. Los paquetes del componente universe de Ubuntu generalmente se basan en los paquetes de la rama inestable (Sid) y en el repositorio experimental de Debian.

  • Main: contiene solamente los paquetes que cumplen los requisitos de la licencia de Ubuntu, y para los que hay soporte disponible por parte de su equipo. Éste está pensado para que incluya todo lo necesario para la mayoría de los sistemas Linux de uso general. Los paquetes de este componente poseen ayuda técnica garantizada y mejoras de seguridad oportunas.
  • Restricted: contiene el programa soportado por los desarrolladores de Ubuntu debido a su importancia, pero que no está disponible bajo ningún tipo de licencia libre para incluir en main. En este lugar se incluyen los paquetes tales como los controladores propietarios de algunas tarjetas gráficas, como por ejemplo, los de ATI y NVIDIA. El nivel de la ayuda es más limitado que para main, puesto que los desarrolladores puede que no tengan acceso al código fuente.
  • Universe: contiene una amplia gama de programas, que pueden o no tener una licencia restringida, pero que no recibe apoyo por parte del equipo de Ubuntu sino por parte de la comunidad. Esto permite que los usuarios instalen toda clase de programas en el sistema guardándolos en un lugar aparte de los paquetes soportados: main y restricted.
  • Multiverse: contiene los paquetes sin soporte debido a que no cumplen los requisitos de software libre.

Fuente: wikipedia.org

Twitux: Twitter en gnome

Buscando un cliente de twitter para ubuntu me he topado con esta aplicacion, muy fiel al estilo de gnome sencillo y al grano, twitux es una aplicacion con el que podras ver y postear actualizaciones de tu twitter, vale la pena probarlo, muy parecido al pidgin.



Formatear dispositivos USB en Ubuntu


El comando mkfs nos sirve para construir un sistema de archivos Linux en un dispositivo, normalmente una partición del disco duro, filesys es el nombre del dispositivo (por ejemplo, / dev/hda1, / dev/sdb2) o el punto de montaje (por ejemplo, /, / usr, / home) para el sistema de archivos. bloques es el número de bloques que se utilizarán para el sistema de archivos.

Sintaxis:
mkfs [ -V ] [ -t fstype ] [ fs-opciones ] sistema de ficheros [ bloques ]

Donde,

-V: Producir una salida detallada
-T fstype: Especifica el tipo de sistema de archivos que se construirá.
-C: Compruebe el dispositivo de bloques malos antes de construir el sistema de archivos
-L: nombre de archivo
-V: Produce una salida prolija.

Entonces para formatear una usb con un sistema de archivos compatible con windows:

mkfs.vfat [ubicacion]

Tambien podriamos usar: mkfs.ext2, mkfs.ext3, etc. Para saber la ubicacion de tu usb puedes ejecutar "mount"


mkfs.vfat /dev/sdb1

y listo, tienes la memoria formateada.

Instalar Samsung ML2240 en ubuntu


Primero debemos descargar el driver de samsung, luego seguimos las instrucciones en la pagina:

Descargar y extraer el driver


Abrir una consola en modo root y ejecutar el programa de instalacion:
  • $sudo cdroot/autorun

Seguimos los programas de instalacion:



Despues de instalar, el directorio PPD se debe setear de nuevo (ni idea que es esto)
$sudo ln -s /usr/share/cups/model/samsung /usr/share/ppd/custom/samsung

Ejecutar "Configurator", y anadir el modelo de impresora mediante "Add printer"


Que tan seguro es mi password?

Gestion de riesgos con RUP

este es un ejemplo de gestion de riesgos con RUP, se presenta una lista de riegos y un plan de gestion de riesgos,

Risk List - Lista de riesgos

Risk Management Plan - Plan de gestion de riesgos

ver presentaciones de power point en tu celular!

Si tu celular es un poco modesto ( :D ) y no puedes ver las presentaciones de power point, este es un muy buen truco, probado con mi celular sony ericsson w580i.

  • Abrir la presentacion
  • Ir al menu "Guardar Como"
  • Escoger la opcion "Formato de intercambio de archivos JPEG" y le das clic en "guardar"
  • Ahora nos aparecera otra ventana donde escogemos si deseamos convertir solo la diapositiva actual o todas.
  • Esperamos que termine la conversion y obtendremos un mensaje de finalizado
  • Se nos ha creado una carpeta con imagenes de todas las diaspositivas, ahora solo debes pasar esos archivos a tu celular!

SCRUM

Metodologia SCRUM
SCRUM es un proceso en el que se aplican un conjunto de mejores practicas para trabajar en equipo y obtener el mejor resultado posible...[+]

  • Qué es y cómo trabaja
  • Cuando debemos usarlo?
  • Características
  • Beneficios
Quieres conocer mas? descarga la presentacion aca!

Desbloquear/Desproteger PDF online

La manera mas rapida y sencilla de desproteger o desbloquear un PDF que ha sido "protegido" es usar una solucion online, no requiere registro ni nada, solo vamos a esta pagina:

Desbloquear/Desproteger PDF online

y llenamos el formulario asi:



al darle "submit" se abrirá una nueva hoja con el PDF desprotegido!

Insertar PDF en un post

Hay una manera muy sencilla de insertar archivos PDF dentro de un post, de esta manera se podra visualizar cuando alguien lea el post, para ello vamos a ayudarnos de google docs:

Entramos esta direccion:
https://docs.google.com/viewer

y en 4 pasos podemos insertar nuestros archivos dentro de un post:

  1. Pega el link del archivo .PDF (no debe de estar en un servidor que requiera autenticacion y debe de tener permisos de lectura a cualquier persona)
  2. Insertarmos el titulo del PDF
  3. Hacemos clic en "Generate link" (generar link)
  4. Luego nos mostrará el codigo generado, ahora solo es de copiar y pegar dentro del post.

Funciona tanto para blogger como para wordpress








Insertar un Spoiler en tu blog

ya sea que uses wordpress o blogger, los spoilers son de utilidad, nos ayudan a ocular/mostrar informacion, que se visualizara solo si el usuario lo desea, a continuacion veremos como insertarlos en un post:

Blogger
Para insertar un boton de Spoiler puedes usar la edicion de HTML e insertar el siguiente codigo y en la ultima linea insertas el texto a mostrar:

<div>

<input value="Mostrar" onclick="if(this.parentNode.getElementsByTagName('div')[0].style.display != ''){this.parentNode.getElementsByTagName('div')[0].style.display = '';this.value = 'Ocultar';}else{this.parentNode.getElementsByTagName('div')[0].style.display = 'none'; this.value = 'Mostrar';}" type="button" />

<div style="display: none;">TEXTO A MOSTRAR/OCULTAR</div>

</div>

Ejemplo:
Un texto oculto bajo un spoiler

Tambien podemos hacerlo con imagenes:


Wordpress
En wordpress es mucho mas facil que en blogger, ya que podemos agregar un plugin que haga esto, para ello vamos a la pagina de descarga de plugins de wordpress y lo buscamos:

http://wordpress.org/extend/plugins/

yo recomiendo usar: Advanced-Spoiler
http://wordpress.org/extend/plugins/advanced-spoiler/ en esta direccion podremos descargar el plugin y encontraremos las instrucciones de uso y de instalacion.

Relaciones en los diagramas entidad-relacion ER

El presente artículo habla sobre las relaciones, de uno a muchos, muchos a uno, muchos a muchos
y de uno a uno. Presenta mucho más que simples conceptos, en este artículo encontrara claridad y exactitud, necesarias cuando hablamos de informática en general.

descargar

Apuntes de bases de datos

Estos son los apuntes del curso: Bases de datos 1, con el Ing. Luis Espino.

descargar

Nivel de abstraccion en los diagramas entidad relacion

Resumen
Algunas personas opinan que los diagramas Entidad-Relación deben contener un alto nivel de abstracción, otros opinan que se debe manejar un nivel bajo de abstracción. A continuación veremos cuál de estas es la mejor opción.

Palabras clave: diagrama, entidad, relación, nivel, abstracción.

Abstract
Some people believe that the Entity-Relationship diagram must contain a high level of abstraction, others think that should be handled low abstraction. We will now see which of these is the best option.

Keywords: diagram, entity, relationship, level, abstraction.

Para saber si es mejor un alto o bajo nivel de abstracción en los diagramas, primero debemos definir que es abstracción. Abstracción se define como: “Proceso mental, que permite al individuo comprender un concepto de un objeto. Sin tener al objeto de manera tangible” (ARACELI S.)

La abstracción es la capacidad mental que nos ayuda a deducir la esencia de un concepto, entonces podemos decir que a mayor grado de abstracción menor será el grado de complejidad del diagrama. Haciendo uso de la definición de abstracción podemos decir que la abstracción (comprensión del concepto de un objeto intangible) en un diagrama hace el grado de complejidad menor al usuario, y éste puede comprender ampliamente el diagrama, pero si el grado de abstracción es menor, el diagrama le resultara sumamente difícil de entender al usuario.

Conclusión
Podemos concluir que la mejor opción a la hora de diagramar modelos Entidad-Relación es buscar siempre un alto nivel de abstracción, para que sea entendible por todos los usuarios.
Recomendaciones

  • Usar herramientas de alto nivel de modelado UML
  • Uso de estándares

Descarga el pdf aca

SQA - Software Quality Assurance

SQA fue un tema muy interesante que recientemente me ha tocado investigar en la Universidad, empecemos definiendo que SQA es Software Quality Assurance, que traducido seria aseguramiento de la calidad del software, su funcion es asegurar que los estandares, procesos y procedimientos son los apropiados para el proyecto y son correctamente implementados. En este articulo se incluye:

SQA

  • Modelos teoricos
    • CMMI
    • Norma ISO/IEC 12207
    • Metrica 3
  • Control de cambios
  • Measurement
Descargar: SQA (Software Quality Assurance)

Subir archivos a blogger

Una de las cosas que mas se busca en la web es como subir archivos a blogger, seria muy interesante que se pudiera pero no, blogger nos provee de un blog mas no de un alojamiento en el servidor, en blogger no se pueden subir archivos, no es un servidor de archivos, entonces que hacer cuando se deseas publicar algun material?

Buenos lo mas sencillo es usar servidores gratuitos para alojar archivos, y hacer un link hacia ellos, puedes usar por ejemplo:

  • rapidshare
  • megaupload
  • gigazise
  • zshare
  • BaDonGo

una vez subes tu archivos ya puedes publicar tu entrada en el blog y pegas el link que te dio el servidor donde subiste tu archivo y listo!

Anadir Twitter a tu blog

Para anadir una lista de tweets a tu blog (de blogger) basta con ir a la pagina de twitter:

http://twitter.com/badges/blogger

Seleccionan el número de tweets e ingresas el titulo del widget y luego das clic en el boton "Add to blogger" (añadir a blogger) y listo!

coming soon...

this is one of many ideas im trying to start, hopefully it will be a really nice business :)

Codigo tres direcciones

El código de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres operandos.Esta representación intermedia tiene varias propiedades. Primera, cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación. Por tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones; la multiplicación precede a la adición, etc. Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instrucción. Tercera, algunas instrucciones de "tres direcciones" tienen menos de tres operadores, por ejemplo X = 1, etc.

Ejemplos de sentencias de control en codigo tres direcciones:


If-then-else

Ej:

if ( x > y ) then
a;
else
b;

c3d:
t0 = x;
t1 = y;

if ( t0 > t1 ) goto La:
goto Lb;

La: a; goto Lc;

Lb: b; goto Lc;

Lc: ...


Switch
Ej:
Switch ( X )
0: A; break;
1: B; break;
2: C; break;
default: D; break;

c3d:
goto La;

La:
if ( X == 0 ) goto Lb;
if ( X == 1 ) goto Lc;
if ( X == 2 ) goto Ld;
goto Le;

Lb: A; goto Lf;

Lc: B; goto Lf;

Ld: C; goto Lf;

Le: D; goto Lf;

Lf: ...

For
Ej:
for ( i = 0; i < 5; i++)
{ A; }


c3d:
t0 = 0;

La:
if ( t0 < 5 ) goto Lb;
goto Lc;

Lb:
A;
t0 = t0 + 1;
goto La;

Lc: ...

While
Ej:
while ( x > y)
{ A; }

c3d:
t0 = x;
t1 = y;

La:
if ( t0 > t1 ) goto Lb;
goto Lc;

Lb:
A;
goto La;

Lc: ...

Definicion tomada de: monografias.com