01 - Introducción a la programación

  • Algoritmo: Conjunto de instrucciones ordenadas y finitas empleadas para resolver un problema.
  • Programa: Codificación de uno o más algoritmos en un lenguaje de programación concreto.
  • Lenguaje de programación: Conjunto de símbolos y reglas que definen las estructuras válidas del lenguaje y su significado.

Partes de un algoritmo:

  • Entrada: Información que recibe el algoritmo con la que trabajará para encontrar la solución.
  • Proceso: Serie de pasos que, a partir de los datos de entrada, llegue a la solución del problema.
  • Salida: Información que devolverá el algoritmo.

Características de los algoritmos:

  • Precisos: Las instrucciones tienen que ser concretas.
  • Finitos: El algoritmo tiene que tener un principio y un fin.
  • Definidos: Ante una misma entrada, siempre tiene que dar el mismo resultado.
  • Ordenados: Las instrucciones tienen que ser claras y precisas.

Características deseadas de los programas:

  • Estabilidad: Debe ejecutar su tarea sin fallar.
  • Rapidez: Debe ejecutarse en un tiempo razonable.
  • Usabilidad: Tiene que ser fácil de comprender y de utilizar por los usuarios.

Diferencias entre algoritmo y los programa:

  • Un algoritmo puede estar escrito en lenguaje natural, mientras que un programa está escrito en un lenguaje de programación.
  • Un algoritmo puede ser ejecutado por un ser humano, mientras que un programa está diseñado para ser ejecutado por una máquina.
Aunque se suele asociar algoritmo con informática o matemáticas, los algoritmos pueden resolver problemas de distinta índole sin estar relacionados con ambos campos.

Ejemplo de algoritmo:

Cambiar rueda coche:

  - Aflojar tornillos
  - Elevar coche
  - Retirar tornillos
  - Retirar rueda dañada
  - Acoplar rueda nueva
  - Poner tornillos
  - Bajar coche
  - Apretar tornillos

Ejemplo programa:

class Hola
{
    public static void main(String[] args)
    {
        System.out.println("Hola mundo");
    }
}

Podemos clasificar los lenguajes de programación atendiendo a diferentes criterios. Por ejemplo, según su nivel de abstracción tenemos los lenguajes de bajo nivel y los lenguajes de alto nivel.

Los lenguajes de bajo nivel son aquellos que están más cerca de la arquitectura hardware. Al depender de la máquina, no son portables, es decir, no se pueden ejecutar en otra máquina distinta a la que se programaron. Por contra, aprovechan al máximo las características del hardware. Dentro de este grupo están:

  • Lenguaje máquina: Único lenguaje que entiende la máquina. Está compuesto por bits (0's y 1's) que forman las instrucciones entendibles por el hardware de la máquina. Son mucho más rápidos que los lenguajes de alto nivel.
  • Lenguaje ensamblador: Representación simbólica de las instrucciones en código máquina. Cada arquitectura de procesador tiene su propio lenguaje ensamblador que usualmente es definida por el fabricante de hardware.

Ejemplo código máquina:

 0010, 0000, 1001, 1001, 10001, 1110

Ejemplo código ensamblador:

 ORG	8030H
 include
 T05SEG:
	SETB TR0
	JNB uSEG,T05SEG
	CLR TR0
	CPL uSEG
	MOV R1,DPL
        INVOKE
	MOV R2,DPH
	CJNE R2,#07H,T05SEG
	CJNE R1,#78H,T05SEG
	MOV DPTR,#0
 RET

Los lenguajes de alto nivel se acercan más al lenguaje natural. Son independientes de la arquitectura del ordenador, por lo que se pueden migrar de una máquina a otra. Existen multitud de lenguajes de este tipo: Java, PHP, Python, Javascript…

Otra forma de clasificar los lenguajes es según como se ejecuten:

  • Lenguajes compilados: Antes de ejecutarse, necesita una fase intermedia de compilación, la cual traduce el código en lenguaje máquina.
  • Lenguajes interpretados: El lenguaje máquina se va generando a medida que se va ejecutando el código.

Hay una serie de elementos que están presentes en casi todo lenguaje de programación:

  • Tipos de datos: enteros, reales, cadena de caracteres…
  • Palabras reservadas: conjunto de palabras propias del lenguaje de programación. No pueden utilizarse, por ejemplo, para nombrar variables o constantes.
  • Operadores: Crean instrucciones utilizando cálculos matemáticos (operadores aritméticos), comparaciones (operadores relacionales) u operaciones lógicas (operadores lógicos).
  • Constantes y variables: Posiciones de memoria que almacenan los datos con los que trabaja nuestro programa. Las constantes no pueden variar a lo largo de la ejecución del programa, mientras que las variables sí.
  • Estructuras de control: Secuenciales, condicionales o bucles.
  • Funciones: Bloques de código empaquetados con una cabecera que realizan una tarea específica, lo que permite, entre otras cosas, la reutilización del código.
  • Comentarios: Bloques dentro del código que no se ejecutan. Su función es la de aclarar partes del programa.

Ejercicio 1

Diseña un algoritmo para el lavado y aclarado de una máquina de lavado de coches automático. El funcionamiento de la máquina es el siguiente:

Cuando entra un coche, se encienden los rodillos de arrastre del coche y lo llevan hasta la zona de enjabonado. Allí, se ponen en marcha los rodillos de enjabonado y enjabonan el coche hasta que la máquina detecta que ya está enjabonado (la forma de detectarlo es irrelevante para el problema). A continuación, apaga los rodillos de enjabonado y lleva el coche hasta la zona de aclarado, donde repite la misma operación con el aclarado del coche. Si el cliente ha seleccionado la opción encerado (dato de entrada del algoritmo), realiza la operación de encerado de igual forma que las anteriores. Por último, el coche llega a la zona de secado, donde, una vez termine el proceso, se saca el coche y se apagan los rodillos de arrastre.

Ejercicio 2.a

Diseña un algoritmo para controlar la entrada en una discoteca. El algoritmo recibirá un DNI válido y deberá devolver como respuesta True en caso de poder entrar (la persona es mayor de 18 años) o False en caso contrario. Para saber la edad de una persona según su DNI, utiliza la función ficticia calcula_edad(DNI), la cual devolverá la edad en función del DNI pasado.

Ejercicio 2.b

Modifica el algoritmo anterior para comprobar que el DNI proporcionado es válido. Para validar el DNI seguiremos los siguientes pasos:

  • Sacar el resto de la división del número del DNI entre 23.
  • Calcular la letra con el resultado de la división anterior según la tabla de equivalencias.
  • Comprobar que la letra calculada coincide con la del DNI.
Resto 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Letra T R W A G M Y F P D X B N J Z S Q V H L C K E

Para saber la letra real del DNI pasado, usa la función ficticia lee_letra(DNI).

Ejercicio 2.c

Haz que la comprobación anterior sea una función aparte. Nuestro algoritmo original deberá llamar a esa función para hacer la comprobación del dni.

  • clase/daw/prog/1eval/introduccion.txt
  • Última modificación: 2022/09/13 10:20
  • por cesguiro