Capítulo 1
Metodología de la programación
6. Ejemplo de códigos en diferentes lenguajes
Entendemos por programación el proceso de diseño, codificación, depuración y mantenimiento del código fuente. Dicho código fuente o algoritmo está relacionado con un determinado problema a resolver y es escrito (codificado o implementado) bajo un lenguaje de programación.
Para desarrollar programas y que puedan ser reconocidos por un ordenador usamos los lenguajes de programación (el ordenador se limitará a ejecutar las instrucciones de las que se compone el programa). Normalmente los lenguajes de programación trabajan a alto nivel, mientras que el ordenador lo hace a bajo nivel (en lenguaje ensamblador, el cual es mucho más complicado de entender para nosotros que uno de alto nivel).
Definimos algoritmo como una secuencia finita y ordenada de instrucciones que se ejecutan para dar solución a un problema de partida. Un algoritmo puede ser representado mediante forma gráfica, diagramas de flujo, pseudocódigo, código fuente, etc. Este algoritmo será codificado bajo un determinado lenguaje de programación mediante el cual obtendremos el programa ejecutable.
El proceso que nosotros vamos a seguir será el de enfrentarnos a un problema y resolverlo siguiendo este orden:
Es decir, nos darán unos datos de partida (enunciado del problema a resolver) y crearemos un diagrama de flujo. Con este pasaremos a implementar su correspondiente pseudocódigo para, a continuación, con ayuda de este último, crear el código fuente asociado a un lenguaje de programación determinado.

Siempre que queramos crear un programa para resolver un determinado problema debemos cuestionarnos:
La lógica de programación va a permitir dar solución a problemas mediante el uso de ordenadores.

Importante
La programación es, pues, las técnicas e instrucciones de un lenguaje de programación para poder obtener unos resultados mediante el uso del ordenador.
La lógica es el razonamiento para poder distinguir lo verdadero y lo falso. Una operación lógica asigna un valor (verdadero o falso) para cada una de las variables que intervienen en dicha operación. Además, dicha operación lógica tiene como resultado o verdadero o falso. Se asocia a verdadero 1 y a falso 0.
Las operaciones lógicas básicas son:
Para ver cómo funcionan las operaciones lógicas, implementaremos una tabla de verdad con dos variables (las cuales tomarán el valor cierto, 1, o falso, 0) e iremos viendo su resultado (que también tomará únicamente el valor de cierto o falso).
Suma lógica (OR)
Su salida será verdadera (1) cuando cualquiera de sus variables de entrada sea verdadera (1); y falsa (0), cuando todas sus variables sean falsas. Veamos su tabla de verdad:
| A | B | Salida (A + B) |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Producto lógico (AND)
Su salida será verdadera (1) cuando todas sus variables de entrada sean verdaderas (1) y falso (0) cuando cualquiera de sus variables de entrada sea falsa. Veamos la tabla de verdad asociada a esta lógica:
| A | B | Salida (A • B) |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Negación (NOT)
También es conocida como inversión lógica. Su salida será justamente la contraria de la entrada, es decir, si en la entrada tenemos verdadero (1) la salida será falso (0). Veamos su tabla de verdad asociada:
| A | ![]() |
| 0 | 1 |
| 1 | 0 |
XOR o OR Exclusiva
Esta operación lógica consiste en un negador de la variable principal cuando la variable secundaria es verdadera; en otro caso, el valor de la variable principal es el mismo. Veamos su tabla de verdad:
| A | B | Salida (A ⊕ B) |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
NAND
Esta operación lógica consiste en aplicar una AND entre las variables y de entrada y a continuación una NOT sobre el resultado de la AND. Veamos su tabla de verdad:
| A | B | ![]() |
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
NOR
Esta operación lógica consiste en aplicar una OR entre las variables y de entrada y a continuación una NOT sobre el resultado de la OR. Veamos su tabla de verdad:
| A | B | ![]() |
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
XNOR
Esta operación lógica consiste en aplicar una XOR entre las variables y de entrada y a continuación una NOT sobre el resultado de la XOR. Veamos su tabla de verdad:
| A | B | ![]() |
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Todas estas operaciones lógicas pueden combinarse entre sí para obtener expresiones más complejas. Nosotros las usaremos en la parte dedicada a la programación.
Otra operación lógica bastante frecuente en la programación es la comparación de dos valores, que podemos realizar mediante el operador “==”. Por ejemplo, si queremos saber si el contenido de a es igual al de b usaríamos la sintaxis: “a = = b”; la cual nos dará o verdadero o falso (dependiendo de sí son iguales o no son iguales).
En la siguiente tabla, se pueden ver los operadores relacionales:
| Operador | Descripción |
| = | Igual |
| < >/ ! = | Distinto |
| < | Menor que |
| > | Mayor que |
| < = | Menor o igual que |
| > = | Mayor o igual que |

Aplicación práctica
Realice la tabla de verdad de la siguiente expresión: (A •B) + A
SOLUCIÓN


Sabía que...
En el mundo de la electrónica se usan puertas digitales (que simulan el funcionamiento de las operaciones lógicas vistas) en los dispositivos electrónicos más comunes.

Actividades
1. Realice la tabla de verdad de la siguiente expresión: 
2. Realice la tabla de verdad de la siguiente expresión: 
Consideramos a un programa como un conjunto de secuencias de instrucciones que actúan sobre unos datos de entrada, procesándolos para obtener unos datos de salida. Con esto podemos decir que un programa se divide en dos partes fundamentales:
Los tipos de instrucciones (operaciones) se pueden clasificar como vemos a continuación:
En el proceso de creación de un programa, partiremos de un posible diseño del mismo mediante ordinogramas (la forma más fácil de representar los problemas). Una vez obtenido el ordinograma, pasaremos a construir el pseudocódigo asociado a dicho ordinograma. A este pseudocódigo es al que vamos a llevar a un determinado lenguaje de programación para obtener el ejecutable que resuelve nuestro problema.
Por ordinograma entendemos la representación gráfica de la secuencia de instrucciones que componen un programa (algoritmo). Es muy importante una buena codificación mediante ordinogramas del problema a resolver, dado que, si en esta parte planificamos algo mal, lo arrastraremos en sucesivos pasos. Los ordinogramas también son conocidos como diagramas de flujo.
Al ser un ordinograma una representación gráfica, vamos a usar elementos gráficos para poder representarlos. En la siguiente figura vemos un ejemplo de ordinograma:

Una vez conocido el concepto de ordinograma, tenemos que tener una serie de reglas para poder operar con ellos:
Conocidas las reglas de creación de un ordinograma, veamos los elementos que pueden componerlo:
| Símbolo | Descripción |
![]() |
INICIO / FIN del programa |
![]() |
Operación en general |
![]() |
Operación de entrada/salida |
![]() |
Subprograma |
![]() |
Toma de decisiones (1, 2 o 3 salidas) |
![]() |
Conector |
Las operaciones son las instrucciones que podemos hacer en nuestro ordinograma. Por ejemplo, imagine que nos piden realizar un programa que compruebe si un número leído desde teclado es 0, positivo o bien negativo. Vamos a desarrollar paso a paso las operaciones que van apareciendo:
Luego podemos observar cómo las operaciones que componen nuestro ordinograma al fin y al cabo son las instrucciones que van a componer nuestro programa (algoritmo).
Una vez que tenemos claro lo que tiene que resolver nuestro ordinograma, procederemos a irlo creando gráficamente mediante las reglas que anteriormente establecimos y con los elementos que vayamos necesitando para ello. Basándonos en el ejemplo del punto anterior (programa que lee un número por teclado e imprime si es cero, positivo o negativo), su correspondiente ordinograma sería:

Nota
Recuerde que para el diseño y codificación de ordinogramas hay que ser muy pulcro y seguir un correcto procedimiento en su elaboración para no diseñarlo incorrectamente.

Podemos observar que los pasos que hemos dado han sido:
Imagine que nos piden que realicemos un programa que pida dos números al usuario y que calcule su suma, resta, multiplicación y división. Su correspondiente ordinograma quedaría de la siguiente manera:


Aplicación práctica
Realice un ordinograma que nos diga si un carácter introducido por teclado por el usuario es vocal o carácter.
SOLUCIÓN

Partimos colocando el símbolo de inicio de nuestro ordinograma. A continuación, pedimos al usuario que introduzca un carácter (símbolo entre a-z) y lo almacenamos en la variable car. Una vez almacenado, procedemos a comprobar mediante comparaciones si lo que hay en la variable car es ‘a’ o ‘e’ o ‘i’ o ‘o’ o ‘u’ y, si es así, sacamos por pantalla “Es vocal” y, en caso contrario, sacamos “No es vocal”.
Datos de entrada: carácter introducido por usuario.
Proceso de datos: mirar si es “a,e,i,o,u”.
Datos de salida: decir si es vocal o no el carácter introducido por el usuario.

Actividades
3. Realice el ordinograma correspondiente a un programa que pide dos números por pantalla y los saque por la misma ordenadamente, primero el mayor de ellos y después el menor.
4. Realice el ordinograma correspondiente a un programa que pida al usuario que introduzca un número. Si dicho número está entre 1 y 12, sacaremos por pantalla el mes correspondiente; si no está entre ese rango, sacaremos por pantalla: Error. Ejemplo: 7 → Julio 16 → Error.
El pseudocódigo, también conocido como falso código, es la forma de representar mediante texto un algoritmo. El pseudocódigo utiliza elementos del lenguaje natural y elementos que corresponden con los lenguajes de programación, con lo cual está muy próximo a estos últimos. Todo pseudocódigo se va a componer de:
Luego la estructura general de un pseudocódigo sería:


Ejemplo
Veamos un ejemplo de un pseudocódigo que pide dos números al usuario y calcula su suma:

Observe cómo hemos declarado dos variables para almacenar los valores que el usuario da (dos números) y, a continuación, una variable para almacenar la suma de esos números. En el cuerpo lo que hacemos es pedir al usuario por pantalla que nos introduzca dos números y calcular su suma almacenando el resultado en la variable suma. A continuación, imprimimos por pantalla el contenido de la variable suma.
El ordenador trabaja con datos almacenados en su memoria sobre los cuales realiza operaciones para obtener unos resultados. Veamos a continuación cuáles son esos tipos de datos:
Debemos destacar que cualquier lenguaje de programación ofrecerá más tipos de datos de los que aquí se han explicado.
Una vez que conocemos los tipos de datos con los que trabaja el ordenador, vamos a ver una serie de conceptos necesarios para programar:
Para poder formar identificadores válidos para constantes y variables tenemos que seguir una serie de reglas, que son las siguientes:
Para comenzar el proceso de creación de un pseudocódigo debemos tener claros tres conceptos más:
Por ejemplo, imagine que queremos calcular el área de un triángulo. Para ello:
¿Cómo leemos e imprimimos variables con pseudocódigo? Para ello utilizaremos las palabras reservadas ESCRIBIR y LEER con la siguiente sintaxis:

¿Cómo realizamos la asignación de valores a una variable? Para ello utilizamos la sintaxis: variable = <valor_expresion>.
Para ver cómo vamos creando el pseudocódigo vamos a ir viendo una serie de ejemplos y explicando cómo resolverlos.
Ejemplo 1
Imagine que nos piden calcular el promedio de 3 calificaciones de alumnos.
Solución
Para poder realizar este ejercicio vamos a necesitar tres variables de tipo real (dado que la calificación puede ser 5.4) y otra variable también real para sumar la cal1 + cal2 + cal3 y dividirlas entre el total de calificaciones. Datos de entrada: tres variables de tipo real. Proceso de datos: calcular el promedio de estas tres variables reales. Datos de salida: el promedio de las 3 calificaciones introducidas. Observe:

Ejemplo 2
Nos piden calcular el cuadrado de un número.
Solución
Para realizar este ejercicio vamos a necesitar leer un número. Como no nos especifican nada, vamos a suponer un número entero, con lo cual vamos a necesitar una variable para almacenar este entero y otra para mostrar el resultado de su cuadrado. Datos de entrada: un número. Proceso de datos: calcular el cuadrado del número. Datos de salida: el cuadrado del número introducido. Observe:

Ejemplo 3
Tenemos que evaluar la expresión Y=-25x^3-3x^2+14.
Solución
En este caso, se trata de pedir al usuario el valor de X, entero, y calcular su correspondiente valor Y. Para ello, necesitamos 2 variables de tipo entero. Datos de entrada: un valor numérico ‘x’ introducido por el usuario. Proceso de datos: sustituir el valor de ‘x’ en la expresión para obtener el de ‘y’. Datos de salida: el valor de ‘y’ en función del valor de ‘x’ introducido. Observe:

Ejemplo 4
Realizar un pseudocódigo capaz de resolver ecuaciones de segundo grado.
Solución
Para poder resolver ecuaciones de segundo grado tenemos que usar la fórmula:

Con lo cual, necesitamos pedir al usuario los valores de a, b y c, que vamos a suponer de tipo entero. Vamos a usar dos variables (x1 y x2) dado que tendríamos dos posibles soluciones a la ecuación. Aparte, puede observar que usamos la función sqrt, su sintaxis es sqrt (numero) y nos devuelve la raíz cuadrada del número que le pasamos entre paréntesis. Este número tiene que ser de tipo entero obligatoriamente. Observe el código:


Actividades
5. Realice el pseudocódigo correspondiente a un programa que pida al usuario tres números enteros y los muestre por pantalla ordenados.
6. Realice el pseudocódigo correspondiente a un programa que pida al usuario una cantidad correspondiente al precio neto de un artículo, le añada un 10 % de beneficio junto con un 21 % de IVA y muestre por pantalla el precio de venta al público del mismo.

Recuerde
Los pasos que vamos a dar a la hora de dar solución a un problema son los de analizar el problema para obtener todos los datos de entrada, codificarlos mediante el uso de ordinogramas, codificar dicho ordinograma a pseudocódigo y pasar este último a un lenguaje de programación concreto para obtener el ejecutable al problema a solucionar.
Los objetos son usados en la Programación Orientada a Objetos y soportada por casi la mayoría de lenguajes de programación actuales. Un objeto es una entidad de nuestro mundo real. Por ejemplo, pensemos en la entidad “Vehículo”, “Producto”, “Alumnos”, “Asignaturas”, etc. La idea fundamental de la P.O.O. (Programación Orientada a Objetos) es la de agrupar en el objeto datos y funciones asociadas al mismo.
En el caso del objeto “Vehículo”, los datos podrían ser: fabricante, modelo, color, número de plazas, bastidor, tara, año de fabricación, etc. Y podemos pensar en las siguientes funciones: arranque, subir ventanas, bajar ventanas, activar aire acondicionado, desactivar aire acondicionado, subir volumen, bajar volumen, etc.

Como hemos dicho anteriormente, los objetos se van a componer de datos y de funciones. Estos datos los vamos a conocer como atributos y nos van a permitir identificar al objeto entre otros objetos del mismo tipo (dado que podemos tener varias instancias del mismo objeto).
Cuando estamos diseñando el objeto, a este tenemos que verlo como una plantilla o molde. Cuando estemos programando es cuando llamaremos a instancias de este objeto (el objeto en sí no se encuentra en memoria del ordenador, mientras que la instancia sí y podemos trabajar con ella). No es raro, en un mismo programa, tener varias instancias, por ejemplo, de la clase “Vehículo” o varias instancias de la clase “Alumno”, que hacen referencia a personas en sí.
Por ejemplo, en la clase “Alumno”, atributos propios serían: DNI, nombre, apellidos, dirección, población, provincia, teléfono, nombre y apellidos de los tutores, etc.
Obviamente, cada instancia tendrá unos atributos distintos, y estos atributos son los que identifican a una instancia de otra cualquiera.

Importante
No debe confundir objeto o clase con instancia. El objeto o la clase es una definición o esbozo de lo que estamos representando, mientras que la instancia es la definición o esbozo cargada en memoria del ordenador.
El objeto está compuesto de datos y funciones. Las funciones son las que van a permitir realizar operaciones con los datos del objeto. Estos datos o atributos solamente son accesibles por las propias funciones del objeto, de tal forma que otro objeto no puede tocar los atributos que no sean suyos.
Las funciones asociadas a un objeto permiten modificar los atributos del objeto. Por ejemplo, en la clase “Vehículo”, la función arrancar tendría que comprobar que no está ya arrancado el coche. En nuestro objeto “Vehículo” tendremos una variable lógica arrancado que, por ejemplo, pondremos a 1 si el vehículo está arrancado, y a 0, si no lo está.
Lo mismo ocurriría con la función subir_volumen, deberíamos comprobar que se puede subir más el volumen de la radio, porque lo mismo ya está al máximo y no podemos subirlo más.
El comportamiento de un objeto se refiere a las operaciones (funciones) que puede realizar este o bien a la respuesta que puede dar ante un mensaje de otro objeto.
Los objetos pueden comunicarse unos con otros a través del diseño de funciones adecuadas para ello.
En un instante concreto de tiempo, un objeto puede comportarse de una forma o de otra en función del entorno en que se encuentre. Por ejemplo, imagine la clase “VideoCamara” y la clase “Alarma”, que están implementadas en un entorno de seguridad. Está claro que cuando la videocámara detecte movimiento de noche, tiene que hacer sonar la alarma, con lo cual una instancia de la clase “VideoCamara” tendrá que comunicarse con la instancia de la clase “Alarma”.
Los atributos de los objetos van a permitir conocer las características del objeto en sí. Normalmente, los atributos solo pueden ser accedidos por las funciones del mismo objeto; con esto garantizamos la seguridad de los mismos. Un atributo que no esté declarado en un objeto o clase no puede ser usado.
Los atributos podemos definirlos de cualquier tipo de datos con los que trabaja el ordenador.
Si recuerdas la clase “VideoCamara” y “Alarma”, esta última deberá tener una función que le permita a la clase “VideoCamara” comunicarse con ella y, dentro de esta función, llamará a una función privada de la clase “Alarma” para poner su correspondiente alarma en el estado sonoro. Pero observe cómo no es la clase “VideoCamara” la que modifica directamente a la clase “Alarma”, sino que lo hace esta última a través de una función propia suya definida para tal fin.
En la siguiente imagen puede observar cómo se define la clase coche y se crean dos instancias de este objeto “coche” (una correspondiente a la marca Peugeot y otra para Renault).

Partimos de la creación de un objeto mediante una clase, que viene a ser una plantilla o molde. Una vez que tenemos creado el molde, vamos creando instancias de este molde. Las instancias podemos verlas como variables que están asignadas en memoria del ordenador y con las cuales podemos trabajar.
Por ejemplo, de la clase “VideoCamara” podemos tener las instancias “VC1”, “VC2”,”VC3”, etc., así tantas como cámaras de seguridad tengamos implementadas en nuestro entorno de seguridad. Con estas instancias es con las que trabajamos en nuestro programa principal, pero con el objeto o con la clase nunca.
La clase o plantilla no ocupa espacio en memoria, mientras que la instancia sí (dado que almacena datos).
Siempre que trabajemos con POO esta se sustenta en cuatro pilares fundamentales, que son:
En la siguiente imagen, puede ver de forma más clara y concisa cómo quedaría una herencia entre clases:

Ahora vamos a ponernos en un ejemplo real. Nosotros implementamos la clase u objeto “Vehículo” y, por necesidades, nos creamos dos nuevos objetos que heredan de esta clase: “Taxi” y “Autobús”.


Actividades
7. Intentar encontrar una serie de atributos y funciones o métodos para trabajar con el objeto Números Complejos.
8. Hacer lo mismo, localizar atributos y funciones, para el objeto Vagón de Tren.
A continuación, vamos a ver códigos correspondientes a lenguajes de programación estructurado, a lenguaje de script y orientado a objetos. No se trata de que los comprendamos de primera hora, dado que sería imposible; pero sí de que nos vayamos familiarizando con códigos y programación.
En la siguiente imagen puede observar un código implementado en Visual Basic.
En este ejemplo, podemos ver cómo se declaran las variables ‘d,e,g,h,i,j,k’, de tipo real, y la variable offm, de tipo entero. A continuación, se pasa a mirar el valor de una determinada celda y, en función a su valor, se hace un pivote de filas sobre la matriz que se está tratando.
Además, podemos ver cómo se usan estructuras típicas del mundo de la programación, como son:

Ejemplo de código estructurado
En la siguiente imagen podemos observar un código correspondiente a una página web.
Podemos observar cómo la primera parte es un lenguaje de marcas hasta encontrar las etiquetas <scritp> y </script>, que nos indican precisamente que hay un script y que está codificado en JavaScript. Dicho script implementa dos funciones llamadas “OpenComments” y “OpenTrackBack”. Estas dos funciones lo que hacen es abrir una nueva ventana del navegador.
Normalmente, todo este código es proporcionado cuando estamos navegando con el navegador de Internet (código que es una mezcla del lenguaje de marcas o HTML y del lenguaje de guion o script), por ejemplo con el navegador de Internet Explorer escribimos una dirección web y esperamos a que se cargue por completo. Pasamos por el Menú Ver y, dentro de este menú, seleccionamos la opción Ver Origen (la abreviación de teclas [Ctr] + [U] nos lleva de una forma más rápida). Esta opción está disponible en todos los navegadores.

Ejemplo de código en script
En la imagen de la página siguiente podemos observar un código implementado en Java.
En él, podemos observar cómo se crea el objeto o la clase Persona. Esta clase consta de los atributos: nombre, apellidos, año de nacimiento, que son de tipo privado para que precisamente sea solo la clase Persona la que pueda acceder y operar con ellos.
A continuación, se define una función (también denominadas métodos) llamada imprime, que lo que hace es sacar por pantalla el nombre, apellidos y año de nacimiento de la persona. Además, la función imprime está definida como pública para poder llamarla, por ejemplo, desde otra clase distinta.

Ejemplo de código orientado a objetos
Entendemos por programación el proceso de diseño, codificación, depuración y mantenimiento del código fuente. Dicho código lo pasaremos a un lenguaje de programación para obtener el fichero ejecutable. Entre ambos procesos utilizamos dos herramientas fundamentales para el diseño de nuestro código fuente, que son:
Junto con los ordinogramas y pseudocódigos, usamos la lógica de programación (que nos va a permitir dar solución a problemas mediante el uso de ordenadores). Dentro de esta lógica de programación, contamos con las siguientes operaciones:
Además de operaciones lógicas, disponemos también de los objetos (entidades de nuestro mundo real que codificamos en nuestros ordenadores para poder trabajar mejor con los datos). Los objetos implican un uso de P.O.O. (Programación Orientada a Objetos) y esta a su vez lleva asociados 4 pilares básicos, que son:

Ejercicios de repaso y autoevaluación
1. De las siguientes frases, indique cuál es verdadera o falsa.
2. Busque en la siguiente sopa de letras las operaciones lógicas.

3. La lógica de programación...
4. ¿Cuál es el proceso que seguimos a la hora de resolver un problema?
5. Entendemos por ordinograma...
6. Un programa se divide en...
7. El pseudocódigo se compone de...
8. ¿Cuáles son las reglas para operar con ordinogramas? Cítelas.
9. Los tipos de datos numéricos se subdividen en...
10. Por variable entendemos...
11. Un objeto es:
12. ¿Cuáles son los cuatro pilares fundamentales de la Programación Orientada a Objetos?
13. Los objetos se componen de...
14. Imagine el objeto Libro e intente citar cuatro atributos que considere importantes en él.
15. Realice la tabla de verdad para 