Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa Última revisión Ambos lados, revisión siguiente | ||
curso-cpp:modularizacion-funciones [2017/03/21 19:29] santo [Algunas funciones predefinidas] |
curso-cpp:modularizacion-funciones [2017/09/22 16:26] santo [Algunos ejemplos de macros muy útiles] |
||
---|---|---|---|
Línea 93: | Línea 93: | ||
==== Facilitar un enfoque top-down ==== | ==== Facilitar un enfoque top-down ==== | ||
- | Esta ventaja está estrechamente relacionada con la anterior. Supongamos que nos dieran la siguiente consiga: | + | Esta ventaja está estrechamente relacionada con la anterior. Supongamos que nos dieran la siguiente consigna: |
"Crear un programa que lea dos números ''a'' y ''b'', que indican un rango de números (inclusive), y calcule y muestre en la pantalla dos valores: La suma de los cuadrados de todos los números primos entre a y b, y además, la suma de todos los números entre a y b que son múltiplos de 3 y de 10, pero no de 30." | "Crear un programa que lea dos números ''a'' y ''b'', que indican un rango de números (inclusive), y calcule y muestre en la pantalla dos valores: La suma de los cuadrados de todos los números primos entre a y b, y además, la suma de todos los números entre a y b que son múltiplos de 3 y de 10, pero no de 30." | ||
Línea 231: | Línea 231: | ||
===== Parámetros ===== | ===== Parámetros ===== | ||
- | No siempre queremos que una función haga exactamente lo mismo cada vez que usa. A veces, queremos que haga **casi** lo mismo, pero cambiando algún **dato** entre usos. Por ejemplo, podríamos querer una función que eleve un número al cuadrado, es decir, que permita calcular ''x*x'' si ya tenemos un entero ''x''. Así, cuando usamos la función con 3, queremos que devuelva ''3*3 == 9'', y cuando la usamos con -4 queremos que devuelva ''(-4)*(-4) == 16''. | + | No siempre queremos que una función haga exactamente lo mismo cada vez que se usa. A veces, queremos que haga **casi** lo mismo, pero cambiando algún **dato** entre usos. Por ejemplo, podríamos querer una función que eleve un número al cuadrado, es decir, que permita calcular ''x*x'' si ya tenemos un entero ''x''. Así, cuando usamos la función con 3, queremos que devuelva ''3*3 == 9'', y cuando la usamos con -4 queremos que devuelva ''(-4)*(-4) == 16''. |
En el ejemplo anterior la función no hace siempre lo mismo, porque a veces hace 3*3 y a veces (-4)*(-4), pero más allá del número que vamos a elevar, las **operaciones** que hace la función son siempre las mismas, y solo cambia este **dato** inicial. A ese **dato que cambia**, lo llamamos en programación un **parámetro** de la función. Una función puede tener 1 o más parámetros, o incluso cero: Las funciones que vimos antes tenían cero parámetros. La función de elevar al cuadrado tendría un único parámetro: El número entero que vamos a querer elevar. | En el ejemplo anterior la función no hace siempre lo mismo, porque a veces hace 3*3 y a veces (-4)*(-4), pero más allá del número que vamos a elevar, las **operaciones** que hace la función son siempre las mismas, y solo cambia este **dato** inicial. A ese **dato que cambia**, lo llamamos en programación un **parámetro** de la función. Una función puede tener 1 o más parámetros, o incluso cero: Las funciones que vimos antes tenían cero parámetros. La función de elevar al cuadrado tendría un único parámetro: El número entero que vamos a querer elevar. | ||
Línea 651: | Línea 651: | ||
Por ejemplo, en los ejercicios en los que se hablaba de números primos, se podría escribir una función que toma un ''int N'', y devuelve un ''bool'' indicando si es primo. O por ejemplo, escribir una función ''sumaDeDivisores'' puede ser útil para escribir de forma más fácil y clara programas que buscan números perfectos. | Por ejemplo, en los ejercicios en los que se hablaba de números primos, se podría escribir una función que toma un ''int N'', y devuelve un ''bool'' indicando si es primo. O por ejemplo, escribir una función ''sumaDeDivisores'' puede ser útil para escribir de forma más fácil y clara programas que buscan números perfectos. | ||
+ | Otros ejercicios: | ||
+ | |||
+ | * Escribir una función ''string escribirEnBase(int numero, int base)'', que tome un número y una base (Entre 2 y 16 inclusive) y devuelva una cadena con la escritura de ese número en la base indicada. | ||
+ | * Escribir una función ''int leerNumeroEnBase(string escritura, int base)'', que tome la escritura de un cierto número en la base indicada (Entre 2 y 16 inclusive) y devuelva el número en cuestión. | ||
+ | |||
+ | Puede ver aquí [[algoritmos-oia:enteros:cambio-de-base|cómo realizar cambios de base]]. | ||
===== Los #define ===== | ===== Los #define ===== | ||
Línea 742: | Línea 748: | ||
Vemos que ahora solamente hace falta especificar **una vez** el nombre de la variable, y todo lo demás es copiado automáticamente en forma mecánica por el ''#define''. | Vemos que ahora solamente hace falta especificar **una vez** el nombre de la variable, y todo lo demás es copiado automáticamente en forma mecánica por el ''#define''. | ||
- | Se puede consultar [[cpp-avanzado:macros |aquí]] otros ejemplos de macros muy útiles para programación competitiva, además del ''forn'' ya mostrado. | + | Se puede consultar [[cpp-avanzado:macros |aquí]] otros ejemplos de macros más avanzadas, muy útiles para programación competitiva, además del ''forn'' ya mostrado. |
==== Por qué es mejor usar funciones ==== | ==== Por qué es mejor usar funciones ==== | ||