• Publicidad

Subrutinas

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Subrutinas

Notapor mparrado8 » 2013-04-20 13:12 @592

¡Hola de nuevo! Tengo que hacer un programa para calcular el factorial de un número pero con subrutinas, y no sé por dónde empezar. El programa sin subrutinas ya está listo, pero...
He encontrado una página bastante buena, o al menos eso parece, que explica las subrutinas, cómo crearlas, que son un programa dentro de otro, pero realmente no sé muy bien cuál es el propósito de elaborar un programa usando subrutinas o para qué sirven realmente.
mparrado8
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-04-10 12:58 @582

Publicidad

Re: Subrutinas

Notapor explorer » 2013-04-20 13:25 @601

Tienes una buena explicación en la Wikipedia: Subrutina.

En Perl, lo tienes descrito en perlsub.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Subrutinas

Notapor mparrado8 » 2013-04-20 13:35 @607

Está leído, es un código aparte dentro del mismo programa en el que metes las órdenes que quieres, pero ¿se puede prescindir de ella? ¿Qué ventajas aporta al programa?

Por ejemplo en mi programa inicial para calcular el factorial de un número he utilizado dos bucles while, sin subrutinas, si ahora quiero hacer el mismo programa con un subrutina, ¿lo único que hay que hacer es declarar la subrutina y poner los bucles dentro y así el programa lo hace todo seguido?

Es que no sé si lo he comprendido muy bien.
mparrado8
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-04-10 12:58 @582

Re: Subrutinas

Notapor explorer » 2013-04-20 14:16 @636

mparrado8 escribiste:Está leído, es un código aparte dentro del mismo programa en el que metes las órdenes que quieres, pero ¿se puede prescindir de ella? ¿Qué ventajas aporta al programa?
Hay varias ventajas, como por ejemplo, la modularidad, que permite hacer programas más comprensibles. O, sencillamente: que puedes llamar a un trozo de código desde varios puntos distintos del programa.

mparrado8 escribiste:¿lo único que hay que hacer es declarar la subrutina y poner los bucles dentro y así el programa lo hace todo seguido?
Tal cual lo has puesto en el primer mensaje de este hilo («Tengo que hacer un programa para calcular el factorial de un número pero con subrutinas»), la respuesta es sí, pero yo sospecho que tu profesor quiere que llegues a pensar en la recursividad.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Subrutinas

Notapor mparrado8 » 2013-04-20 14:30 @645

¡Vaya lío! ¿En Perl es igual que en C? Y con return 1, ¿cómo sabes a dónde vuelve? ¿A quién se le llama 1? En vez de con bucles, según esto de la recursividad ¿lo lógico sería poner varias órdenes y poner las diferentes condiciones con if y darle a return? ¡Qué difícil es esto!
mparrado8
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-04-10 12:58 @582

Re: Subrutinas

Notapor explorer » 2013-04-20 16:24 @725

mparrado8 escribiste:¡Vaya lío! ¿En Perl es igual que en C?
Solo algunas estructuras, funciones y operadores, pero no todas.

mparrado8 escribiste:Y con return 1, ¿cómo sabes a dónde vuelve?
Vuelve a la posición donde fue llamada la subrutina.

mparrado8 escribiste:¿A quién se le llama 1?
A nadie. Es el valor que se devuelve como resultado de la ejecución de la subrutina.

mparrado8 escribiste:En vez de con bucles, según esto de la recursividad ¿lo lógico sería poner varias órdenes y poner las diferentes condiciones con if y darle a return? ¡Qué difícil es esto!
La recursividad es cuando una subrutina se llama a sí misma. Naturalmente, debe existir una condición de parada para evitar que se entre en un bucle sin fin.

Recuerda las clases de matemáticas: ¿cuál es el factorial de n? Pues es igual a n multiplicado por el factorial de n-1.

Como ves, en la respuesta de lo que es un factorial se usa el propio factorial. Y la condición de parada es que sabemos que el factorial de 1 (o de 0) vale 1.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Subrutinas

Notapor mparrado8 » 2013-04-21 16:36 @733

¡Jope!, No sé qué me pasa pero no logro entenderlo bien.
Hay return 0, también: ¿vuelve a donde fue llamada la subrutina?
mparrado8
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-04-10 12:58 @582

Re: Subrutinas

Notapor explorer » 2013-04-21 18:35 @816

No, ese caso está por si el usuario llama a la subrutina con un valor negativo. En ese caso, le devuelve un 0 de forma inmediata.

Como en tu ejemplo eso no se va dar (eso esperamos), entonces no tienes por qué contemplarlo. El ejemplo que sale en la Wikipedia es para contemplar todos los casos posibles (hay usuarios muy puñeteros).

En cambio, cuando el usuario pasa un número positivo, la función se va llamando una vez por cada valor de ese número, pero decrementado de uno en uno.

Por ejemplo, para calcular el factorial(4), tendríamos

return 4 * factorial(3);

que resulta en

return 4 * (return 3 * factorial(2));

que resulta en

return 4 * (return 3 * (return 2 * factorial(1)));

que resulta en

return 4 * (return 3 * (return 2 * 1));

que resulta en

return 4 * (return 3 * 2);

que resulta en

return 4 * 6;

que resulta en

24

que es, efectivamente, 4!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Subrutinas

Notapor mparrado8 » 2013-04-23 17:07 @754

Muchas gracias, ¡creo que ya lo tengo! Me estaba complicando demasiado y por eso no lo veía.
mparrado8
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-04-10 12:58 @582


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 28 invitados