La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Abstracción de Datos Funciones. Funciones La experiencia ha demostrado que la mejor forma de construir software es construirlo a partir de partes o componentes.

Presentaciones similares


Presentación del tema: "Abstracción de Datos Funciones. Funciones La experiencia ha demostrado que la mejor forma de construir software es construirlo a partir de partes o componentes."— Transcripción de la presentación:

1 Abstracción de Datos Funciones

2 Funciones La experiencia ha demostrado que la mejor forma de construir software es construirlo a partir de partes o componentes más pequeños, los cuales son más fáciles de manejar que el programa en forma completa. Esta técnica se le ha llamado: "Divide y Vencerás". Los módulos en C++ se llaman funciones y clases. Los programas en C++ generalmente se escriben combinando funciones nuevas que el programador escribe con las funciones "preempacadas" diponibles en la biblioteca estándar de C++ y combinando clases nuevas que el programador escribe con clases "preempacadas" disponibles en varias bibliotecas de clases.

3 Funciones El programador puede escribir funciones para definir ciertas tareas específicas. Las instrucciones reales que definen la función solo se escriben una vez y se ocultan de las demás funciones. Una función se invoca mediante una llamada de función. Esta especifica el nombre de la función y le proporciona información (en forma de argumentos) que necesita trabajar. Por ejemplo un jefe (la función invocadora o invocador) le pide al trabajador (la función invocada) que efectúe un tarea y devuelva (es decir, un reporte) los resultados una vez concluida. Le función jefe no sabe la manera en que el trabajador hace su tarea. Este ocultamiento es promotor de una buena ingeniería de software.

4 Funciones

5 Función de la biblioteca matemática

6 Las funciones normalmente se invocan escribiendo el nombre de la función seguido de un paréntesis izquierdo, del argumento (o lista de argumentos separados por comas) de la función y de un paréntesis derecho. nombre_funcion ( lista de parámetros actuales) nombre_función Nombre de la función lista de parámetros actuales constantes, variables, expresiones, nombres de funciones o procedimientos separados por comas Ejemplo: cout << sqrt (900.0); //raiz cuadrada de 900.0

7 Función de la biblioteca matemática Todas las funciones de la biblioteca matemática devuelven el tipo de datos double. Para utilizar las funciones de la biblioteca matemática, incluya el archivo de encabezado math.h

8 Funciones Las funciones le permiten al programador modularizar sus programas. Todas las variables declaradas en las definiciones de función son variables locales, solo se conocen en la función en la que se definieron. La mayoría de funciones tienen una lista de parámetros, que proporciona el medio para la comunicación de información entre las funciones. Los parámetros de una función son variables locales. Definición de funciones. Todos los programas que se han presentado han consistido en una función main, que llama a funciones de la biblioteca estándar para realizar sus tareas. Ahora tomaremos en cuenta cómo escriben los programadores sus propias funciones personalizadas. Considere un programa con una función definida por el usuario llamada cuadrado, que calcula los cuadrados de los enteros del 1 al 10

9 Definición de funciones La función "cuadrado" se invoca o llama desde main mediante la llamada: "cuadrado (x)" La función "cuadrado" recibe una copia del valor de x en el parámetro y. Luego, "cuadrado" calcula y * y. El resultado se devuelve al punto de main donde se llamó a "cuadrado" y se despliega por pantalla Observe que la llamada de la función no cambió el valor de x. Este proceso se repite diez veces por medio de la estructura for. La definición "cuadrado" muestra que "cuadrado" espera un parámetro entero y. La palabra int que precede al nombre de la función indica que "cuadrado" devuelve un resultado entero. La instrucción return de "cuadrado" devuelve el resultado del cálculo de la función invocadora.

10 Definición de funciones

11 Prototipos de función Un prototipo de función le dice al compilador el nombre de la función, el tipo de datos que ésta devuelve, el número, tipo y orden de los parámetros que dicha función espera recibir. El compilador utiliza sus prototipos de función para validar las llamadas de funciones. El prototipo de función "maximo" en el anterior ejercicio es: int maximo ( int, int, int); Tiene 3 argumentos tipo int y devuelve un resultado de tipo int. En la definición de la función es igual al prototipo, excepto en los parámetros: int maximo ( x, y, z);

12 Prototipos de función

13 Archivos de encabezado

14

15 Cada biblioteca estándar tiene un archivo de encabezado correspondiente que contiene los prototipos de todas las funciones de dicha biblioteca y las definiciones de varios tipos de datos y constantes necesarios para tales funciones. El programador puede crear archivos de encabezado personalizados. Los archivos de encabezado definidos por el programador deben terminar con.h. Para incluir un archivo de encabezado definido por el programador se utiliza la directiva de procesador #include. Por ejemplo, el archivo de encabezado cuadrado.h puede incluirse en nuestro programa por medio de la directiva #include "cuadrado.h" al inicio del programa.

16 Generación de números aleatorios Simulación y juego, aplicativo popular para los programadores. Desarrollaremos un programa que simule 20 lanzamientos de un dado e imprima el valor de cada lanzamiento. El prototipo de la función rand puede encontrarse en. Utilizaremos el operador del módulo (5) junto con rand: rand() % 6 Para producir enteros del 0 al 5. A esto se le llama escalamiento. El número 6 se llama factor de escalamiento. // Fig 3.7 //Enteros desplazados y escalados generados con 1 + rand() % 6 #include using namespace std; int main() { for (int i = 1; i <= 20; i++) { cout << setw (10) << (1 + rand() %6);"¡Nunca deberá llegar aquí!"; if (i % 5 == 0) cout << endl; } system ("pause"); return 0; }

17 Generación de números aleatorios Observe que se imprimió la misma secuencia de valores. Pero como si está utilizando la función rand?. Esta función de hecho genera números pseudoaleatorios, lo cual hace que se repita la secuencia cada vez que se repite el programa. Una vez que se ha depurado el progrma, se acondiciona para una secuencia aleatoria. La función de aleatorización real es a través de srand. Esta función toma un argumento entero unsigned (conocido como semilla) y siembra la función rand para que genere una secuencia diferente de números aleatorios cada vez que se ejecute el programa. / / Fig 3.7 //Enteros desplazados y escalados generados con 1 + rand() % 6 #include using namespace std; int main() { unsigned lanzamiento; cout << "Teclee Valor: "; cin >> lanzamiento; srand (lanzamiento); for (int i = 1; i <= 10; i++) { cout << setw (10) << (1 + rand() %6); if (i % 5 == 0) cout << endl; } system ("pause"); return 0; }

18 Generación de números aleatorios Si se desea aleatorizar sin tener que digitar ningún número, se utiliza la instrucción: srand (time (0)); El programa quedaría así: // Fig 3.9 //Aleatorización del programa sin tener que sembrar un número #include using namespace std; int main() { srand ( time(0)); for (int i = 1; i <= 10; i++) { cout << setw (10) << (1 + rand() %6); if (i % 5 == 0) cout << endl; } system ("pause"); return 0; }

19 Generación de números aleatorios Si se desea aleatorizar sin tener que digitar ningún número, se utiliza la instrucción: srand (time (0)); El programa quedaría así: // Fig 3.9 //Aleatorización del programa sin tener que sembrar un número #include using namespace std; int main() { srand ( time(0)); for (int i = 1; i <= 10; i++) { cout << setw (10) << (1 + rand() %6); if (i % 5 == 0) cout << endl; } system ("pause"); return 0; }

20 // Fig 3.8 //Lanzamiento de un dado 6000 veces #include using namespace std; int main() { int frequency1 = 0, frequency2 = 0, frequency3 = 0, frequency4 = 0, frequency5 = 0, frequency6 = 0, face; for (int roll = 1; roll <= 6000; roll++) { face = 1 + rand() % 6; switch ( face ) { case 1: ++frequency1; break; // necesario para salir de switch case 2: ++frequency2; break; // necesario para salir de switch case 3: ++frequency3; break; // necesario para salir de switch case 4: ++frequency4; break; // necesario para salir de switch case 5: ++frequency5; break; // necesario para salir de switch case 6: ++frequency6; break; // necesario para salir de switch default: //atrapa los demas caracteres cout << "¡Nunca deberá llegar aquí!"; } cout << "Cara" << setw (17) << "Frecuencia" << "\n 1: " << setw (13) << frequency1 << "\n 2: " << setw (13) << frequency2 << "\n 3: " << setw (13) << frequency3 << "\n 4: " << setw (13) << frequency4 << "\n 5: " << setw (13) << frequency5 << "\n 6: " << setw (13) << frequency6 << endl; system ("pause"); return 0; } Generación de números aleatorios

21 // Fig 3.10 //Juego de dados Casino #include using namespace std; int rollDice (void); //prototipo de función int main() { enum Status { CONTINUE, WON, LOST }; int sum, myPoint; Status gameStatus; srand ( time(NULL)); sum = rollDice(); // primer lanzamiento de dados switch ( sum ) { case 7: case 11: //gana al primer lanzamiento gameStatus = WON; break; case 2: case 3: case 12: //pierde al primer lanzamiento gameStatus = LOST; break; default: //conserva el punto gameStatus = CONTINUE; myPoint = sum; cout << "El puntaje es: " << myPoint << endl; break; //opcional } while (gameStatus == CONTINUE) { //sigue lanzando sum = rollDice(); if (sum == myPoint) gameStatus = WON; else if (sum == 7) gameStatus = LOST; } if ( gameStatus == WON) cout << "El jugador gana" << endl; else cout << "El jugador pierde" << endl; system ("pause"); return 0; } //Definición de funcion int rollDice(void) { int die1, die2, worksum; die1 = 1 + rand() %6; die2 = 1 + rand() %6; worksum = die1 + die2; cout << "Tirada del jugador: " << die1 << " + " << die2 << " = " << worksum << endl; return worksum; } Generación de números aleatorios

22 La serie de Fibonnaci 0, 1, 1, 2, 3, 5, 8, 13, 21, …. Cada número de Fibonnaci subsiguiente es la suma de los dos números previos. // Fig 3.15 //Función fibonacci recursiva #include using namespace std; long fibonacci (long); //prototipo de función int main() { long result, number; cout << "Teclee un numero entero: "; cin >> number; result = fibonacci (number); cout << "Fibonacci ( " << number << " ) = " << result << endl; system ("pause"); return 0; } //Definición de funcion long fibonacci(long n) { if ( n == 0 || n == 1) // caso base return n; else return fibonacci (n - 1) + fibonacci (n - 2); } Ejemplo con recursión: serie de Fibonacci

23 Que hace el siguiente programa? #include using namespace std; int main () { char quit; quit = '\0'; while (quit != 'q') { int num1, num2; cout << "Teclee dos numeros enteros y le dire las relaciones que cumplen:\n"; cin >> num1 >> num2; if (num1 == num2) cout << num1 << " es igual a " << num2 << endl; if (num1 != num2) cout << num1 << " no es igual a " << num2 << endl; if (num1 < num2) cout << num1 << " es menor que " << num2 << endl; if (num1 > num2) cout << num1 << " es mayor que " << num2 << endl; if (num1 >= num2) cout << num1 << " es mayor o igual que " << num2 << endl; if (num1 <= num2) cout << num1 << " es menor o igual que " << num2 << endl; cout << "Presione una q para salir de la aplicación o C para continuar\n" << endl; cin >> quit; } return 0; } Ejercicios

24 Que hace el siguiente programa? // Fig 3.49 #include using namespace std; int mystery (int, int); int main() { int x, y; cout << "Introduzca 2 enteros: "; cin >> x >> y; cout << "El resultado es: " << mystery (x,y) << endl; system ("pause"); return 0; } //El parámetro b debe ser un entero positivo para evitar la recursión infinita int mystery (int a, int b) { if (b == 1) return a; else return a + mystery(a, b-1); } Ejercicios


Descargar ppt "Abstracción de Datos Funciones. Funciones La experiencia ha demostrado que la mejor forma de construir software es construirlo a partir de partes o componentes."

Presentaciones similares


Anuncios Google