Aprendiendo a programar: conceptos iniciales
Comenzando con la recopilación de apuntes o tutorial de introducción a la programación….
Introducción
¿Qué es un programa? Podríamos definirlo como una secuencia lógica de instrucciones que manipulan unos datos para obtener unos resultados. En esa secuencia podemos distinguir dos partes: una declarativa, donde se definen / especifican los datos a tratar y otra operacional, donde van las instrucciones que procesarán la información.
Cuando se comienza a aprender a programar, antes de comenzar en algún lenguaje concreto, suele verse la llamada metodología, que no es más que desarrollar los programas en papel, de forma genérica, en pseudocódigo. Resolviendo problemas de esta manera y posteriormente pasándolos a un lenguaje concreto es una buena manera de aprender a programar.
Aquí haré un poco mezcla de todo… pseudocódigo, pascal y c… éste ultimo para que veais que una vez sepais resolver problemas (programar), pasar de un lenguaje a otro no es difícil. En el aspecto léxico no me meteré mucho, pues se puede mirar en cualquier tutorial especializado en el lenguaje concreto.
Comenzando
Cuando nos enfrentemos al desarrollo de un programa, debemos tener presente de principio dos cosas: los datos que van a entrar y los que van a salir. Haciendo valoración de ambas, pensaremos en el algoritmo que solucionará nuestro problema. (Los pasos a efectuar para conseguir nuestro objetivo).
Para ello haremos uso de todo lo que veremos a continuación…
Tipos de datos
Hemos hablado de datos, pero no del tipo que son esos datos. Y, esto es importante, pues no trataremos de igual modo un número entero que un número decimal o que una cadena de caracteres. Por lo general, hablaremos de integer (entero), float (decimales de simple precisión), double (decimales de doble precisión), bool (true/false) y char (caracter). Actualmente los lenguajes soportan el tipo string o cadena de caracteres, pero no lo usaremos. (Creando las susodichas cadenas a partir de arrays de char).
También podremos crearnos nuestro propio tipo de dato, a través del type y registros de pascal o las estructuras de C.
Variables
Las variables son contenedores de información. Como su nombre indica, cambian de valor a lo largo de la ejecución del programa. (O mejor dicho, las asignamos nosotros valores diferentes según convenga). Lo explicado sobre los tipos de datos, quedará patente en este apartado. Si queremos meter un 5 en una variable, por ejemplo, esa variable deberá ser de tipo integer, haciendo
var num: integer; num:=5; (* en pascal *)
int num=5; // en C
Con ello, en la variable num tendremos un 5 almacenado para su posterior uso. Hay que poner atención al rango del tipo de datos, pues por ejemplo, si en un entero intentamos meter un número que no está en su rango, dará un error de overflow.
Constantes
En muchos programas, usaremos datos que se mantendrán invariables en todo el programa. Hablamos entonces de constantes. Realmente, también lo podríamos meter en una variable, pero no estaría bien visto, por así decirlo. Poniendo un ejemplo, imaginemos que por algún motivo necesitamos el número pi, 3.14, en muchos puntos del programa. Una solución sería poner en cada uno de sus puntos el número tal cual… pero… imagina que en un momento dado, quieres poner dos decimales más: tendrías que cambiarlo en todos los sitios.
Lo suyo sería definirnos una constante, antes de todo procedimiento, incluso de la función principal.
(* Pascal *)
Const
PI = 3.14
// C
# define PI 3.14
En cualquier punto del programa, podremos hacer referencia a la constante escribiendo su nombre. Las constantes no tienen un tipo específico y se suelen nombrar con todos sus caracteres en mayúscula.
Operadores
Con los datos podemos hacer una serie de operaciones, concretamente, en pascal:
Aritméticas: +, -, *, /, div (división entera), mod (resto)
Relacionales: =,<,>,<=,>=, <>
Lógicas: and, or, not
Asignación: :=
Sentencias de control
If. Sentencia condicional. El código que esté dentro se ejecutará sólo si la condición se cumple. De lo contrario, pasará de largo, ejecutando el resto de código que esté después.
Un if puede contener otros if dentro de él, llamados anidados. Además, puede seguirle una instrucción else, con la que indicaremos el código a ejecutar si la condición no se cumple.
if a>5 then writeln(”a es mayor que 5″)
else writeln(”a es menor o igual a 5″);
En pascal, si dentro de un if y, en general de cualquier bloque, va más de una instrucción, debe llevar un begin al principio y un end al final del bloque. En C, el contenido iría entre llaves. { }
Bucles. Un bucle hace posible que determinado código se ejecute una y otra vez, un número finito de veces. Ese número finito queda definido por una condición.
En pascal, tenemos los bucles for, while y repeat. Algo a tener en cuenta es la diferencia de concepto entre los tres. En el for, se ejecutarán las instrucciones tantas veces como se cumpla la condición, sin poder salir antes del bucle. En el while, se ejecutarán mientras se cumpla la condición (si desde el principio no se cumple, no se ejecutarán) y en el repeat, como el while, pero se ejecutarán al menos una vez, pues la condición va al final.
Y cuando se usa uno u otro? Sabiendo lo anterior y valorando. En una búsqueda, usaremos un while, pues saldremos del bucle en cuanto encontremos lo que buscamos, para recorrer una matriz de principio a fin, usaremos un for… a base de hacer ejercicios y de ir pensando, se va cogiendo soltura…
Manejando bucles de forma correcta, ireis por el buen camino, pues son el pan diario del programador.
Más sobre variables
Para terminar la primera parte, un pequeño matiz sobre variables. Según el uso que las demos, podemos hablar de contadores, interruptores, auxiliares… en esencia no dejaremos de hablar de variables, pero por cumplir una misión específica, se las llama de un modo especial.
Contador: es la variable que usamos, como su nombre indica, para llevar alguna cuenta. Por ejemplo, en los bucles. Se suelen llamar i, j, k… y su incremento o decremento suele ser de uno. Si es de más, también se le llama acumulador. (Por ejemplo, suma=suma+lo leido por teclado).
Interruptores: también llamadas switch. Nos indican el estado de algo concreto en un punto del programa. Se llaman así porque funcionan como el botón de encendido, tomando sólo dos valores, true o false. Por ejemplo, la variable booleana en el típico algoritmo de búsqueda con while.
Auxiliares: las anteriores son clasificadas como auxiliares, pero nos referiremos con este nombre a aquellas que nos sirven para almacenar un valor mientras hacemos otras operaciones. Por ejemplo, en el intercambio de valores en los algoritmos de ordenación, en los que para no perder un dato, debemos guardarlo en un sitio auxiliar, para reubicarlo en su sitio adecuado después.