sábado, 15 de diciembre de 2012

Proyecto final Dic 2012

El proyecto del GATO propuesto en clase representa un reto importante lógico para la programación modular en C++ del curso que esta por terminar.




Las estructuras que deberan utilizarse son:
- Variables globales que serán visibles a todo el proyecto
- Variables locales y parámetros dentro de cada función
- Declaración, definición y uso de funciones
- WHILE que controle los eventos de tiro
-  SWITCH que defina la acción a realizar basado en un valor devuelto por una función
- IF para la toma de decisiones
- Salida de datos COUT
- Entrada de datos CIN
- Otros...

Más adelante en los próximos días les ire subiendo tips sobre como ir desarrollando dicho proyecto, pero creo que con el código fuente que les deje tendrán para iniciar este trabajo.

Ahhhh y antes que se me olvide, no se que tienen que ver las "cucas..."  en la materia de C++ pero les dejo el link de la anecdota que comentabamos en clase de una persona con "éstos" bichos (con un lenguaje regularmente anti-sonante jeje):

http://metalgirl.wordpress.com/2007/10/15/invasion-de-cucarachas/


Volveré a publicar el día martes que viene...

martes, 13 de noviembre de 2012

Estructuras de control y examen

Las estructuras de control son básicamente la razón por la cual los programas de computadora puedan resolver las diversas situaciones de la vida del hombre.
Recordando un poco de pasado, encontraremos que el mayor problema con el cual se enfrento el hombre fue: "...existían muchas operaciones y procesos repetitivos que debían hacerse una y otra vez, que aparte de cansados no estaban exentas de errores..."; las estructuras while, for y do while permiten al programador realizar dichas tareas eficazmente.

Hoy corresponde detallar en este blog la estructura while (Mientras) cuya finalidad es permitir la ejecución de ciertas acciones siempre y cuando exista una condición verdadera.

Por ejemplo: El ser humano come, bebe, camina, trabaja, etc. siempre y cuando haya aire que pueda respirar
* Observaciones:
  • ¿Qué es lo que el hombre hace? come, bebe, camina, trabaja, etc.
  • ¿Cuál es la condición que limita el quehacer del hombre? Debe haber aire

Por lo consiguiente el diagrama de flujo es el siguiente:
Es importante recordar que comúnmente las "Acciones" que están dentro de la estructura de control deberán de contener alguna opción por medio de la cual "Respira" se convierta en "Falso", en caso de no ser así es muy probable que el programa se bloquee creando un ciclo eterno (jejeje); para el caso del hombre sería como ser inmortal.

Otra de las estructuras de control vista en clase es el "switch" que nos permite la decisión multiple sobre una sola variable, este es el caso del siguiente programa:

Crear un programa que basado en el número de día de la semana mostrar el nombre del día:

int main() {
    int dia;
    cin>>dia;
   switch(dia) {
       case 1:
           cout<<"Domingo";
           break;
       case 2:
           cout<<"Lunes";
           break;
       case 3:
           cout<<"Martes";
           break;
       case 4:
           cout<<"Miércoles";
           break;
       case 5:
           cout<<"Jueves";
           break;
       case 6:
           cout<<"Viernes";
           break;
       case 7:
           cout<<"Sábado";
           break;
       default:
           cout<<"Error";
           break;
   }
}

Por favor realiza los siguientes ejercicios:
TAREA
* Basado en el número de MES muestra el nombre del mes
* Basado en la numeración del 1 al 4 muestra la estación del año: primavera, verano, otoño e invierno
* Desarrollar un programa que muestre un menú de opciones para el calculo de perímetros de las siguientes figuras: cuadrado, rectángulo y triangulo

GUÍA DE EXAMEN
* Partes de un programa de C++
* Tipos de datos en C++
* Declaración de variables
* Entrada y salida de datos
* Estructuras de control: if, switch, for, while

Recuerden llevar el día del examen todos los programas (en .exe) que hemos desarrollado durante las sesiones para realizar el conteo de evidencias de clase y asentar la primera calificación.

Sin mas, para dudas estoy en el correo.

sábado, 3 de noviembre de 2012

Sin clases :-(

Los saludos a todos desde este medio, desafortunamente no hubo clases el día de hoy, lo cual afecta seriamente el avance del curso; el primer examen de la materia estaba programada para la siguiente semana lo cual recorreremos una semana más, por lo cual aprovecho este medio para detallarles las actividades de esta semana:

1.- Deben enviarme el ejercicio de factorial (o será mas bien sumarial) que les explique en clase y que pedí lo terminaran entre todo el grupo.
2.- Debemos desarrollar otros ejercicios utilizando la instrucción "for", por lo cual les dejo a continuación el listado:
  1. Programa que pida la edad de 10 personas y que muestre el promedio de edades
  2. Programa que imprima los primeros 20 múltiplos del número indicado por el usuario
3.- Les pido por favor investiguen las sintaxis de la estructura de control "while"

Sin mas. les encargo esas actividades
Por favor realícenlas pues contaran como parte de la primera evaluación que haremos.

  PD. Aquí les dejo su calavera: 1 punto para examen a quienes me entreguen el segundo ejercicio con una bonita APARIENCIA ( Me refiero a algo parecido al primer ejercicio que les pase que mostraba una figura, pónganle imaginación)

miércoles, 24 de octubre de 2012

Estructura de control: CONDICIONAL C++

Al igual que en nuestra vida, en la programación de computadoras debemos tomar decisiones/caminos dependiendo de lo que acontezca.

Ej.
  • Si sales de tu casa, y te das cuenta que empieza a llover: por sentido común piensa en un paraguas ¿Hubieras pensado en dicho objeto si no hubiera estado lloviendo? (En forma instantánea has tomado una decisión basada en la situación actual) .

    Este ejemplo puede dibujarse a través de un diagrama de flujo como el que se muestra aquí.

     


     
     
     

     
    Es por ello, que todos los lenguajes de programación tienen tienen soporte en forma nativa de la primera estructura que veremos, llamada CONDICIONAL
     En C++ es definida por la palabra reservada "if" quedando el código fuente de la siguiente forma:
     
    if (Condición) {
         //Acciones en caso de SE CUMPLE la condición
    }
    else{
         // El código en caso de NO SE CUMPLE la condición
    }
     
     Para el ejemplo anterior de la lluvia el código fuente sería:
    #include <iostream>
    using namespace std;
     
    int main() {
         int clima = "2" // 1=Despejado  2=Lloviendo
         if (clima=2) {
                  cout<<"Llevar paraguas";
         } 
         else {
                  cout<<"SIN paraguas";
         }
    }

    TAREA:

  1. Realizar un programa que pida 3 números y muestre cuál es el mayor
  2. Realizar un programa que muestre si una persona es mayor de edad basado en su edad
  3. Realizar un programa que indique si un número X es múltiplo de 7



Espero no tengan inconvenientes para realizar estos pequeños ejercicios que requieren el uso de IF

Estamos en contacto por correo para dudas

sábado, 20 de octubre de 2012

Ejercicio 2. Entrada de datos C++: CIN

Saludos nuevamente
Recordando un poco sobre principios básicos de la computadora, creo que todos recordamos el siguiente diagrama:


La impresión de la hoja de presentación de la semana pasada solo tenía proceso y salida, y ahora la tabla de multiplicar cumple perfectamente con el principio básico de la computadora:

CIN <--- Entrada de datos


for (i=1; i<=10;i++){   <--- Proceso de la información
}


COUT  <--- Salida de la información


Es importante recordar que todo programa deberá cumplir con esa característica (habrá casos especiales que no tengan las 3 características pero probablemente no estarán destinadas a usuarios)

A continuación les dejo el código para la impresión de la tabla por si alguno no logró terminarla en clase, recuerden que todos sin excepción deberán probarlo en su computadora: portatil o de escritorio en su casa.

#include<iostream>
using namespace std;

int main() {
    /* Este programa va a imprimir el número de
    tabla que el usuario indique */

    int tabla;
    cout<<"Escribe el número de tabla:";
    cin>>tabla;

    // Aquí inicia la estructura de control FOR
    int i;
    for (i=1; i<=10; i++) {
        cout<<endl<<tabla<<" x "<<i<<" = "<<i*tabla;
    }

    cin.get();
}



Y para no perder el ritmo, les dejo la tarea para la clase siguiente:

TAREA:
- Desarrollar un pequeño programa, que realice la suma de 3 números e imprima el resultado.
- Desarrollar un programa que imprima "n" veces el texto "Tengo que revisar el blog de Programación II los JUEVES por la tarde. Atte.: YO", recuerden cambiar la palabra YO por su nombre.

miércoles, 10 de octubre de 2012

Tarea 1. Salida por COUT

Saludos!!

Espero todos visiten este blog tal como quedamos (todos los JUEVES), para que se enteren de la primera actividad; después de instalar CODEBLOCKs en sus computadoras de escritorio, laptops, tables, etc.

Ahora es necesario empezar a utilizar dicha herramienta con el fin de identificar sus partes y su uso, por lo cual les dejo la siguiente tarea entregable para clase inmediata. Les dejo algunas observaciones importantes:

  1. Recuerden crear un archivo en blanco (File->New->Empty File)
  2. Inmediatamente al paso 1, guarden su archivo por ejemplo "Tarea1.CPP" no se les olvide escribirlo entre comillas "...." y agregar el nombre seguido de .CPP
  3. Un vez grabado ya estas listo para escribir código e incluso para compilar y ejecutar
  4. En caso de no conocer la diferencia entre "EJECUTAR" y "COMPILAR" por favor buscar su definición y escribirlos en la libreta para futuras sesiones de clase.
  5. El código de la tarea la dejo más abajo.
  6. Una vez escrito el código localiza el menú Construir (Build), y observa las opciones: Run (Correrá el archivo ejecutable creado por la compilación) y Build and Run (Volverá a crear el ejecutable y lo ejecutará), les pido usar la segunda opción.
  7. Agregar al ejercicio una línea que imprima su nombre y grado escolar.
  8. En la carpeta donde grabaron el archivo CPP se debieron haber generado dos archivos con el mismo nombre del CPP uno debe terminar con .O y otro con .EXE (Aplicación); para comprobar que han hecho la tarea copien por favor a una USB la aplicación .EXE, o impriman por favor la pantalla de su computadora con el programa ejecutandose.
  9. POR FAVOR, NO SE LES OLVIDE HACERLO EN SUS CASAS, NO OLVIDEN QUE SERÁ MUY DIFÍCIL APRENDER SI NO LO PRACTICAN.

Este es el código fuente:

#include <iostream>
using namespace std;

int main() {
    cout<<"                       \\|||/";
    cout<<endl<<"                       (o o)";
    cout<<endl<<"              ------ooO-(_)-Ooo------";
    cout<<endl<<"              IMPRESION EN C++ (Cout)";
    cout<<endl<<"                   (MODO TEXTO)";
    cout<<endl<<"            Asignatura: PROGRAMACION II";
    cout<<endl<<"";
    cout<<endl<<"                     \\\\\\|||///";
    cout<<endl<<"                   .  =======";
    cout<<endl<<"                  / \\| O   O |";
    cout<<endl<<"                  \\ / \\` _ '/";
    cout<<endl<<"                   #    | |";
    cout<<endl<<"                  (#) (     )";
    cout<<endl<<"                   #\\//|* *|\\\\";
    cout<<endl<<"                   #\\/(  *  )/";
    cout<<endl<<"                   #   =====";
    cout<<endl<<"                   #   ( U )";
    cout<<endl<<"                   #   || ||";
    cout<<endl<<"                  .#---'| |`----.";
    cout<<endl<<"                  `#----' `-----'";
    cout<<endl<<"";
    cout<<endl<<"             ------ooO-(_)-Ooo------";

    cin.get(); // Detiene el programa hasta presionar ENTER
}

viernes, 5 de octubre de 2012

Bienvenidos alumnos 5o cuatrimestre 2012

Bienvenidos a este blog


A partir de hoy este será el medio por el cual tendremos comunicación entre semana, cada semana antes del jueves publicaré material visto en clases, o ejercicios o tareas relacionadas con la materia y que en muchos casos deberá ser presentado el día de la clase.

Los invito a visitar este blog todos los jueves para enterarse de lo que ha acontecido, en caso de no haber asistido a clase, este será un buen medio para ponerse al corriente.

Sin mas... nos leeremos pronto por aquí, no olviden dejar su comentario ( en caso de Anónimo, por favor coloquen su nombre)

Atte:
Martín C.

miércoles, 8 de agosto de 2012

Proyecto y evaluación final

Saludos!!!
Les informo que ya esta funcionando el proyecto con las ALTAS, BAJAs, CONSULTAS y MODIFICACIONES comentadas; para evitar problemas de inserción  y creación de archivos, preferí crearles un proyecto nuevo Java en NetBeans llamado "Examen2012" que podrán descargar y ejecutar, a continuación el link:

DESCARGUE AQUI

Existen dos formas de aprender a usar un programa: dando muchos clicks o leyendo su manual, en este caso, no es un manual, pero es la explicación de como fue creado y cual es la función de los principales botones, les sugiero leerlo para poder realizar las modificaciones a este proyecto para que funcione con la tabla ciudades, este es el link:


DESCARGUE MANUAL

La evaluación de este segundo parcial será de la siguiente forma:
40% Proyecto funcionando utilizando la base de datos de CIUDADES
60% Contestar examen oral sobre el funcionamiento del proyecto

Sin mas por el momento, les informo que ese mismo día sábado promediaremos y obtendremos calificaciones finales.

martes, 31 de julio de 2012

Recuperación de datos SQLite desde JAVA

Bueno señores del 5 semestre, les dejo a continuación el conjunto de herramientas y código fuente necesarios para ensamblar el formulario que mostrará las ciudades capturadas en una base de datos de tipo SQLite.



A continuación les redacto los pasos para la realización de su tarea, y dentro de ella los links necesarios para desarrollarlos:

    1. Hacer una tabla en SQLAdmin (Descargar aquí) llamada Ciudades que contenga
      una tabla llamada "Ciudades" con los siguientes campos:
      - Id    INTEGER
      - Nombre  NVARCHAR   80
      - Estado NVARCHAR 30
      - NoHabitantes  NUMERIC

    2. Grabar la base de datos SQLite en una carpeta de la computadora, por ejemplo el escritorio

    3. Descargar el controlador para el acceso a datos SQLite de la siguiente página http://www.zentus.com/sqlitejdbc/
    o bien desde: www.fraternum.com/puntosCiber/UPAV/sqlitejdbc-v056.jar

    4. Agregar el controlador SQLiteJDBC al proyecto de NetBeans dando clic derecho sobre la sección de bibliotecas y seleccionar  "Agregar Archivo JAR/Carpeta" y de ahi buscarlo en la carpeta donde lo hayan descargado.



    5. Desarrollar formulario "Nuevo->Formulario jFrame" que muestra mediante un control "jTable" el contenido de la  tabla "Ciudades" y un botón llamado "Ver ciudades" como la siguiente imagen:

    6. Agregar al proyecto la clase "AccesoDatos.java" (Descargar desde aquí deben descomprimirlo) dentro del paquete de fuentes "upav.orizaba.com". NOTA: Haciendo caso al buen Arturo Rey he modificado la clase para que no ustedes no modifiquen nada de ella.

    7. Agregar el siguiente código dentro del botón "Ver ciudades" (recuerden que debemos dar doble click sobre el botón para que se generé el código que rellenaremos), podrán observar que ahora la ruta del archivo ya se escribe desde aquí y se pasa como parámetro de la clase:

    try {
        // Creamos un objeto del tipo AccesoDatos
        AccesoDatos oDatos = new AccesoDatos();

        // Indicamos la ruta   
        String rutaArchivo = "C:\\Users\\Winsistem-C2\\Desktop\\sqlite\\Ciudades.s3db";
        // Creamos la conexión indicando la ruta
        oDatos.ConectarBD(rutaArchivo);

        // Ejecutamos una consulta SQL sobre la Base de Datos
        ResultSet resultado = oDatos.EjecutarConsulta("SELECT * FROM Ciudades");
        // Convertimos el resultado a un modelo tipo jTable
        DefaultTableModel modelo = oDatos.getMetaData(resultado);

        // Asignamos el modelo a la tabla          
        tblCiudades.setModel(modelo);
    } catch (Exception ex) {
        Logger.getLogger(Ciudades.class.getName()).log(Level.SEVERE, null, ex);
    }


    Sin mas, si siguen y leen muy bien los pasos, espero no tengan problemas en hacer funcionar su programita, les recuerdo que esta tarea tiene un valor importante para su evaluación final.

    Estamos en contacto por el correo

    viernes, 29 de junio de 2012

    Cuestionario Examen

    Saludos
    Despues de una semana muy agetreada les publico acontinuación el cuestionario para el examen del día de mañana sábado, por favor respondanlo y no tendran problemas para obtener 100 de calificación jejeje

    Yo se que es tarde, pero el cuestionario solo es un medio por el cual quiero ayudarles, el examen estará basado exactamente en dichas preguntas, por lo tanto no me agradaría escuchar quejas como: "Es que usted dijo que lo subiría el domingo" "es que eso no lo vimos". Todos los conceptos fueron vistos en clase e incluso expuestos por ustedes, si fueron observadores y tomaron notas con eso tuvieron para estudiar.

    Sin mas aqui esta el cuestionario:



    PROGRAMACIÓN AVANZADA
    1.       Describe las siguientes características de Java
    a.       Orientado a objetos
    b.      Seguro
    c.       Portable
    d.      Interpretado y compilado
    e.      Multihilo
    2.       ¿Qué es la maquina virtual de Java?
    3.       ¿Qué es el SDK?
    4.       Menciona 3 versiones de JAVA y su características
    5.       ¿Qué es NetBeans?
    6.       ¿Qué es objeto?
    7.       ¿Qué es una clase?
    8.       ¿Qué es un mensaje entre objetos?
    9.       ¿Qué es la herencia?
    10.   ¿Cuáles son las ventajas de la herencia?
    11.   Describe la relación “Es un”
    12.   Ejemplifica la herencia en JAVA
    13.   ¿Qué es un método?
    14.   ¿Qué es un atributo?
    15.   ¿Qué son las clases abstractas?
    16.   Menciona cual es la finalidad de las siguientes palabras reservadas: public y private en una clase
    17.   ¿Qué es el polimorfismo?
    18.   Pasos en NetBeans para crear un nuevo proyecto JAVA
    19.   Pasos en NetBeans para agregar una nueva clase
    20.   Pasos en NetBeans para agregar un formulario
    21.   Pasos en NetBeans para ejecutar un formulario

    sábado, 9 de junio de 2012

    Primer aplicación Swing JAVA

    Saludos,
    después de haber peleado en clase con los paquetes y la clase "Áreas" que no todos tenían, les publico a continuación el proyecto integro que utilizo para la explicación.





    DESCARGAR


    Por favor descargar el archivo, descomprimir y abrir mediante la opción "Abrir proyecto" en NetBeans heee!!!.

    Les recuerdo que las tareas para esta semana son:
    - Terminar el formulario que calcule el área de cuadrados, triángulos y círculos.
    - Investigar, probar o usar las diferentes formas de JOptionPane

    jueves, 7 de junio de 2012

    Creación de formularios Windows en JAVA

    Saludos!!





    Finalmente si algunos logran ver esta entrada de blog publicada hoy jueves, y no miércoles como esperaba la mayoría, les recuerdo que deben entregar funcionando su el programa de áreas, y también deben llevar un ejemplo de programa utilizando formularios de Windows.


    Para que empiecen a adentrarse en los conceptos visuales (tipo Windows) de Java vamos a utilizar Swing ¿Qué es?, aquí les dejo un link con algo de documentación que utilizaremos.

    http://www.polinux.upv.es/drupal/files/charlaSwing.pdf

    Echenle un vistazo...

    jueves, 31 de mayo de 2012

    Clase JAVA: Áreas

    Después de alguno días de ausencia por este blog, hoy le comparto el código fuente de la clase Java que les mostré en la sesión anterior, por favor creen una nueva clase llamada "Áreas" y copien dentro el código:

    package upav.orizaba.com;

    public class Areas {
        public float pi=  3.1416f;
       
        public float Cuadrado(int lado) {
            return lado*lado;
        }
       
        public float Triangulo(int base, int altura) {
            return (base*altura)/2;
        }
       
        public float Circulo(float radio) {
            return pi*(radio*radio);
        }
       
        public float Circulo(int diametro) {
            return Circulo((float)diametro/2);
        }
    }



    Recuerden que una clase, es mientras no se use, solo la definición de atributos y métodos de un objeto. Por lo tanto podemos deducir que por si sola es como LÁPIZ o una GOMA no serán útiles hasta que sean utilizados o llamados (por mensajes)  desde proceso.

    Por lo tanto para dar uso a nuestra clase, la debemos de mandar a llamar desde la clase INICIAL que tiene el mismo nombre del proyecto y que tiene un método "main(String[] args)"; en mi caso el proyecto se llama UPAV2 por lo tanto busco la clase llamada UPAV2.java y ahí dentro pego el siguiente código:


        public static void main(String[] args) {
            // Mensaje de saludo

            System.out.println("Saludos a TODOS!!!");
            

            // Es en esta línea de código donde la CLASE Áreas se convierte en un OBJETO llamado oAreas
            // de aquí en adelante este objeto tendrá todas los atributos y métodos definidos en la clase
            Areas oAreas = new Areas();

             
            // Al presionar punto después de escribir el nombre del objeto, aparecen los métodos, que para 
            // nuestro ejemplo seleccionamos "Cuadrado" y enviamos como valor 8 para obtener un resultado.
            float resultado = oAreas.Cuadrado(8);
      
            // Imprimimos el resultado
            System.out.println("El área de un cuadrado de lado 8 es: " +  resultado);
        }



    Solo les recuerdo que en la misma clase inicial deberán de agregar al principio, antes de la declaración de la clase la siguiente línea para que puedan utilizar la clase Área:

    import upav.orizaba.com.*;

    Ejecuten y prueben su programa, deberá de funcionar sin problemas, pueden imprimir el resultado o bien pueden llevar el proyecto funcionando la siguiente clase.



    martes, 15 de mayo de 2012

    Iniciando el nuevo curso: Programación avanzada JAVA

    Saludos!!!
    Como lo dice el titulo, el material que publicaré a partir de este post estará orientado al desarrollo de aplicaciones de escritorio JAVA J2SE
    Por ahora les encargo instalar el siguiente software para realizar nuestras primeras prácticas en el lenguaje de programación:



    1. JDK. Descargable desde aquí:  http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html; descarguen por la favor la que dice: 
       

      Java SE Development Kit 7u4

      Windows x86 (32-bit)
    2. y el IDE NETBeans, del cual la liga es la siguiente:  http://netbeans.org/downloads/7.0/index.html y eligan el idioma ESPAÑOL (Si alguno maneja muy bien el ingles descargue la correspondiente jejeje); escojan el paquete JAVA SE.

    Instalen dichas herramientas en el mismo orden, cualquier duda por favor avisenme.

    Les recuerdo la tarea:
    - Cual es el futuro de JAVA (¿Qué ha pasado con él? ¿Cual es su vigencia?, etc.)


    lunes, 19 de marzo de 2012

    Código fuente "EL GATO"

    Después de pelear, pelear y pelear con los símbolos ASCII extendidos y con el gotoXY me he decidido finalmente en el código para el GATO (triste y azul que no se olvida....).

    Antes de publicar el código quiero comentarles algunas cuestiones:

    - ASCII Extendido: Así se le denomina a los símbolos del código ASCII que van del 127 a 255 que no son soportados por el tipo de dato "char" de C++; pero si por el "unsigned char"; para no entrar en aspectos de código que no utilizamos en las sesiones preferí no utilizar dichos símbolos y reemplazarlos por los símbolos ASCII del 1 al 126. Revisen la imagen del código ASCII que publique en un blog anterior para observar los símbolos.

    - gotoxy (conio.h): Gotoxy significa go to (x, y), es decir ir a (x, y), donde (x, y) es una coordenada de nuestra pantalla. Dicha función no viene incluida con la librería "conio.h" que provee el code:blocks y para agregarla había que realizar ciertas acciones, para ejemplo práctico de nuestro proyecto fue mejor no realizar ninguna acción extraña o fuera de contexto.
    Finalmente tome la decisión de hacer una CLASE (Programación Orientada a Objetos) llamada "conio" que incluye dos funciones principales: mensajeXY() e Imprimir(); donde:
    • mensajeXY: Permite la impresión de un texto en una posición especifica de la pantalla basado en las coordenadas X (Columna) y Y (Renglón). Un ejemplo de su eso es:  mensajeXY("Hola mundo", 10, 3) dicha linea imprimirá el texto "Hola mundo" a partir de la columna 10 y renglón 3.
    • Imprimir(): Se debe colocar solamente una vez al final de todas las instrucciones "mensajeXY()" con el fin de mostrar en pantalla impreso todo el texto.
    - conio.cpp: Este es el nombre del archivo que contiene las funciones de impresión en una posición especifica de la pantalla MS-DOS de 80 x 24 simulando el tan añorado gotoxy. Por favor pon atención en tener este archivo siempre junto al programa principal "Gato.cpp", en el código la referencia esta indicada como #include "conio.cpp"

    Olvidando un poco la teoría les dejo unas imagenes del funcionamiento del programita:


     

     Y ahora sí el tan esperado código fuente del programa:

    Gato.cpp

    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include "conio.cpp"
    using namespace std;

    // Variables globales
    string jugador1, jugador2;
    int jugador;
    string aGato[10]={"",};
    string mensaje;

    // Declaración de funciones
    void ImprimirGato();
    bool Tirar(int posic);
    int buscarGanador();
    bool buscarEmpate();

    int main() {
        bool salir = false;
        int tiro=0;
        int resultado;

        system("cls");
        cout << "REGISTRO DE COMPETIDORES.  --El Gato--" << endl;
        cout << "--------------------------------------" << endl << endl;
        cout << "Escribe el nombre del JUGADOR 1:";
        cin >> jugador1;
        cout << "Escribe el nombre del JUGADOR 2:";
        cin >> jugador2;
        mensaje = "BIENVENIDOS";

        while (!salir) {
            if (jugador ==1) {
                jugador =2;
            }
            else {
                jugador =1;
            }

            ImprimirGato();
            cin>>tiro;
            if (Tirar(tiro)) {
                // Si el tiro fue válido volver a imprimir el gato
                resultado = buscarGanador();
                switch(resultado) {
                    case 0: // Todavia no hay ganador
                        if (buscarEmpate()) {
                            mensaje = "EMPATE. Lo sentimos";
                            salir = true;
                        }
                        else {
                            mensaje = "Es TURNO de: " + (jugador==1?jugador2:jugador1);
                        }
                        break;
                    case 1: // Ganador jugador 1
                        mensaje = "GANASTE!!! " + jugador1;
                        salir = true;
                        break;
                    case 2: // Ganador jugador 2
                        mensaje = "GANASTE!!! " + jugador2;
                        salir = true;
                        break;
                }
            }
            else
            {
                // Mostrar mensaje de error en tiro
                mensaje = "Posicion ocupada!";
                if (jugador ==1) {
                    jugador =2;
                }
                else {
                    jugador =1;
                }
            }

        }
        ImprimirGato();
        cin.get();
        cin.get();

        return 0;
    }


    void ImprimirGato() {
        system("cls");

        conio a;
        a.mensajeXY("JUEGO DEL",26,3);
        a.mensajeXY("####  ####  ####  ####",26,4);
        a.mensajeXY("#     #  #   ##   #  #",26,5);
        a.mensajeXY("# ##  ####   ##   #  #",26,6);
        a.mensajeXY("#  #  #  #   ##   #  #",26,7);
        a.mensajeXY("####  #  #   ##   ####",26,8);

        a.mensajeXY("|   |",37,10);
        a.mensajeXY("|   |",37,11);
        a.mensajeXY("----+---+----",33,12);
        a.mensajeXY("|   |",37,13);
        a.mensajeXY("|   |",37,14);
        a.mensajeXY("|   |",37,15);
        a.mensajeXY("----+---+----",33,16);
        a.mensajeXY("|   |",37,17);
        a.mensajeXY("|   |",37,18);

        a.mensajeXY((aGato[1]==""?"1":aGato[1]),35,11);
        a.mensajeXY((aGato[2]==""?"2":aGato[2]),39,11);
        a.mensajeXY((aGato[3]==""?"3":aGato[3]),43,11);
        a.mensajeXY((aGato[4]==""?"4":aGato[4]),35,14);
        a.mensajeXY((aGato[5]==""?"5":aGato[5]),39,14);
        a.mensajeXY((aGato[6]==""?"6":aGato[6]),43,14);
        a.mensajeXY((aGato[7]==""?"7":aGato[7]),35,17);
        a.mensajeXY((aGato[8]==""?"8":aGato[8]),39,17);
        a.mensajeXY((aGato[9]==""?"9":aGato[9]),43,17);

        a.mensajeXY("JUGADORES",3,19);
        a.mensajeXY("X -" + jugador1,7,20);
        a.mensajeXY("O -" + jugador2,7,21);
        if (jugador==1) {
            a.mensajeXY("==>",3,20);
        }
        else {
            a.mensajeXY("==>",3,21);
        }

        a.mensajeXY(" ------------------------  ",52,21);
        a.mensajeXY("|                        | ",52,22);
        a.mensajeXY(" ------------------------ |",52,23);
        a.mensajeXY("   -----------------------",52,24);

        a.mensajeXY(mensaje,54,22);
        a.imprimir();
    }


    bool Tirar(int posic) {
        bool retorno = false;
        if (aGato[posic]=="") {
            // Tirar
            if (jugador == 1) {
                aGato[posic] = "X";
            }
            else {
                aGato[posic] = "O";
            }
            retorno = true;
        }

        return retorno;
    }

    int buscarGanador() {
        int retorno =0;
        bool HayGanador = false;
        string cadenaGanadora;
        if (jugador == 1) {
            cadenaGanadora = "XXX";
        }
        else {
            cadenaGanadora = "OOO";
        }

        if (aGato[1] + aGato[2] + aGato[3] == cadenaGanadora) HayGanador = true;
        if (aGato[4] + aGato[5] + aGato[6] == cadenaGanadora) HayGanador = true;
        if (aGato[7] + aGato[8] + aGato[9] == cadenaGanadora) HayGanador = true;
        if (aGato[1] + aGato[4] + aGato[7] == cadenaGanadora) HayGanador = true;
        if (aGato[2] + aGato[5] + aGato[8] == cadenaGanadora) HayGanador = true;
        if (aGato[3] + aGato[6] + aGato[9] == cadenaGanadora) HayGanador = true;
        if (aGato[1] + aGato[5] + aGato[9] == cadenaGanadora) HayGanador = true;
        if (aGato[3] + aGato[5] + aGato[7] == cadenaGanadora) HayGanador = true;

        if (HayGanador) {
            retorno = jugador;
        }

        return retorno;
    }

    bool buscarEmpate () {
        bool retorno = false;
        string cadena ="";
        for (int i=1; i<=9; i++) {
            cadena = cadena + aGato[i];
        }
        if (cadena.length()==9){
            retorno = true;
        }

        return retorno;
    }

     conio.cpp

    #include <iostream>
    #include <sstream>
    using namespace std;

    class conio {
        unsigned char tablero[80][24];
        void InicializarTablero();

        public:
            conio();
            void mensajeXY(string cadena, int x, int y);
            void mensajeXY(unsigned char simbolo, int x, int y);
            void imprimir();
    };

    void conio::mensajeXY(string cadena, int x, int y){
        for (int i=0; i<cadena.length(); i++){
            tablero[x+i-1][y-1] = cadena[i];
        }
    }

    void conio::mensajeXY(unsigned char simbolo, int x, int y){
        tablero[x-1][y-1] = (unsigned char)simbolo;
    }

    void conio::imprimir() {
        int x, y;
        for (y=0; y <24; y++){
            for (x=0; x <80; x++){
                cout << (unsigned char)tablero[x][y];
            }
            cout << endl;
        }
    }

    void conio::InicializarTablero(){
        int x, y;
        for (x=0; x <80; x++){
            for (y=0; y <24; y++){
                tablero[x][y]=' ';
            }
        }
    }

    conio::conio() {
        // Inicializar tablero
        InicializarTablero();
    }