Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Algoritmia - Técnicas fundamentales de programación
  3. Técnicas fundamentales de programación
Extrait - Algoritmia - Técnicas fundamentales de programación Ejemplos en Python (numerosos ejercicios corregidos)
Extractos del libro
Algoritmia - Técnicas fundamentales de programación Ejemplos en Python (numerosos ejercicios corregidos)
2 opiniones
Volver a la página de compra del libro

Los subprogramas

Presentación

1. Principio

Durante la presentación de la estructura de un algoritmo, se ha abordado brevemente la posibilidad de añadir una parte adicional al inicio del programa, antes de las declaraciones de las variables. Esta parte todavía no se había abordado. A este nivel, si ha asimilado correctamente el contenido de los capítulos anteriores, ya sabe programar muy bien. Puede que haya observado algunas limitaciones frustrantes, principalmente una cierta pesadez cuando el programa es muy largo y tiene que repetir algunos bloques de instrucciones que, sin embargo, ya existen previamente. Por ejemplo, recuerde un sencillo y pequeño programa que calcula el valor absoluto de un número. La complicación aquí era que cada vez que quería calcular este valor, debía repetir la estructura condicional. ¿No hubiera sido más sencillo hacerla una única vez y pasar a este bloque de instrucciones únicamente el valor del que queremos recuperar el valor absoluto?

Para esto, podría imaginar un segundo programa que se lanzaría por el programa principal, pasando como argumento este valor. Es técnicamente factible, pero tener un segundo programa separado (un ejecutable) justo para este tipo de operaciones, es una pérdida de tiempo y espacio. Otra solución consiste en añadir el código necesario a este programa en una estructura especial y separada del programa principal. Es lo que llamamos un subprograma. Los antiguos lenguajes BASIC utilizaban instrucciones en este enfoque (gosub, sub xxx, endsub, etc., sub para subprograma).

Cuando un programa es muy largo, no es realista codificarlo de una única pieza. El programa se descompone en unidades más pequeñas o partes reutilizables, que a continuación se llaman en el momento adecuado por el programa principal. Un subprograma evita repetir código inútilmente y permite clarificar el programa. Una vez que todos los subprogramas se han construido, es posible guardarlos en librerías para reutilizarlos en cualquier otro programa, simplificando de esta manera la escritura del código y permitiendo también ir mucho más rápido.

Un programa completo forma una aplicación. Si se ha desarrollado correctamente, una aplicación se compone de varias partes funcionales:

  1. El programa principal...

Los subprogramas recursivos

1. Principio

Un subprograma puede llamar a otro subprograma, sea cuál sea. Por lo tanto, un subprograma se puede llamar a sí mismo. Un subprograma se llama recursivo si al menos en parte, está definido por sí mismo. Dicho de otra manera, si una función o un procedimiento hacen una llamada a esta propia función o procedimiento, se llaman recursivas. El ejemplo más sencillo es el factorial: n!=n*(n-1)!

Existen dos tipos de recursividad:

  • Simple o rápida: el subprograma se llama así.

  • Cruzada o indirecta: dos subprogramas se llaman el uno al otro: el primero llama al segundo, que llama al primero, etc.

La recursividad se puede aplicar tanto a las funciones como a los procedimientos.

Para una recursividad simple:

Procedimiento recursivo()  
Inicio  
 /* instrucciones */  
 recursiva()  
 /* instrucciones */  
Fin 

Para una recursividad cruzada:

Procedimiento recur1()  
Inicio  
 /* instrucciones */  
 recur2()  
 /* instrucciones */  
Fin  
Procedimiento recur2()  
Inicio  
 /* instrucciones */  
 recur1()  
 /* instrucciones */  
Fin 

En lo sucesivo, solo se va a exponer subprogramas recursivos simples.

2. Un primer ejemplo: el factorial

Un factorial es el ejemplo soñado de aplicación de un algoritmo recursivo. Este ejemplo ya se ha presentado en los capítulos anteriores, pero para que sirva como recordatorio:

  • 10!=10*9*8*7*6*5*4*3*2*1

  • Por lo tanto, 10!=10*(9*8*7*6*5*4*3*2*1)

  • Por lo tanto, 10!=10*9!

  • Por lo tanto, n!=n*(n-1)!

Si crea una función (apropiada en este caso) llamada fact(), encargada de calcular el factorial de n, tendrá un atajo de este tipo:

fact(n)=n*fact(n-1) 

De esta...

Ejercicios

Ejercicio 1

Crear la función “absolu” que toma un valor numérico como argumento y devuelve su valor absoluto.

Ejercicio 2

Retome el algoritmo del ejercicio 4 del capítulo Las tablas y las estructuras y transfórmelo para que ordene la tabla que se pasa como argumento. Un segundo argumento, de tipo buleano, será verdadero para creciente, falso para decreciente. Para simplificar la tarea, se introduce la función predeterminada tamanio(), que devuelve el número de elementos de la tabla.

La ordenación por orden decreciente ¿es interesante?

Ejercicio 3

Busque en la documentación Python si existen funciones predeterminadas para ordenar una tabla de enteros. ¿Cuál es el interés de programarlas?

Ejercicio 4

Busque en Internet el algoritmo del método de ordenación utilizado por el método sort de Python. ¿Qué conclusiones puede extraer?

Ejercicio 5

Escriba una función que calcule los números de Fibonacci hasta n (entero), de manera recursiva. Los números de Fibonacci son los números de una sucesión: Fn+2 = Fn+1 + Fn. Los dos primeros términos son conocidos: F0=0 y F1=1. Dar el resultado en Python.

Ejercicio 6

Escriba las funciones Par e Impar que toma como argumento un entero y devuelve VERDADERO o FALSO según el caso.

Modificar a continuación las funciones para que se llamen...