Facultad Regional ALGORITMOS Y ESTRUCTURAS DE DATOS NIVEL I San Francisco TUTORÍAS Ing. en Sistemas de Información CONCEPTOS OBTENCIÓN DE NÚMEROS ALEATORIOS EN C FUNCIÓN rand() En C, para obtener números aleatorios, tenemos la función rand(). Esta función, cada vez que la llamamos, nos devuelve un número entero aleatorio entre 0 y el RAND_MAX (un número enorme, como de 2 mil millones). El primer problema que se nos presenta es que no solemos querer un número aleatorio en ese rango; podemos querer, por ejemplo, un número aleatorio entre 0 y 10. O de forma más general, entre 0 y N. El código que debemos emplear en dicho caso es el siguiente: #include <stdlib.h> -> INCLUÍMOS LA LIBRERÍA ... numero_aleatorio = rand() % 11; -> N° ALEATORIO ENTRE 0 Y 10 numero_aleatorio = rand() % (N+1); -> N° ALEATORIO ENTRE 0 Y N ¿Y si queremos un rango que no empiece en 0?. Por ejemplo, queremos un rango entre 20 y 30 (de forma más general, entre M y N con N mayor que M). Pues es fácil, obtenemos un número entre 0 y 10 y le sumamos 20 (un número entre 0 y N-M y le sumamos M). El código que debemos emplear en dicho caso es el siguiente: #include <stdlib.h> -> INCLUÍMOS LA LIBRERÍA ... numero_aleatorio = 20 + rand () % 11; -> NUMERO ENTRE 20 Y 30 numero_aleatorio = M + rand () % (N-M+1); -> NUMERO ENTRE M Y N Existen otras variantes de la función rand() como: FUNCIÓN drand(48) Calcula números aleatorios enteros; luego de una determinada cantidad de cálculos se repiten los números calculados. FUNCIÓN srand() Calcula números aleatorios enteros sin que se repita la serie. FUNCIÓN srand(48) Calcula números aleatorios con decimales sin que se repita la serie. BIANCIOTTI, Andrés Hernán [email protected] Facultad Regional ALGORITMOS Y ESTRUCTURAS DE DATOS NIVEL I San Francisco TUTORÍAS Ing. en Sistemas de Información FUNCIÓN random La función random() es otro de los comandos empleados en C para generar números aleatorios. Esta función, cada vez que la llamamos, nos devuelve un número entero aleatorio entre 0 y el N°_LIMITE (un número elegido como límite superior por el programador). El código para emplear la función es el siguiente: #include <stdlib.h> -> INCLUÍMOS LA LIBRERÍA ... randomize(); numero_aleatorio = random(N°_LIMITE); -> N° ALEATORIO ENTRE 0 Y N°_LÍMITE VALIDACIÓN DE DATOS CONCEPTO La validación de datos se emplea cuando queremos forzar al usuario de nuestro a que ingrese ciertos valores que consideramos necesarios para el funcionamiento del programa; en el caso de que el valor ingresado no sea adecuado, se vuelve a solicitar el ingreso. Situación de ejemplo: Se debe ingresar el código de supermercado, pudiendo ser este 1,2 o 3… Esto nos da la pauta de que cualquier otro número distinto de 1,2 o 3 no está contemplado como código de supermercado dentro de nuestro programa. Por lo tanto si se ingresa un 4 se deberá pedir nuevamente el ingreso de datos. ESTRUCTURA ALGORÍTMICA UTILIZADA Como la cantidad de veces que un usuario puede fallar en la carga de un dato es indefinida, se emplea una estructura de control repetitiva no fija. Si bien se han visto dos estructuras de este tipo (WHILE y DO-WHILE) se opta por la utilización de un DO-WHILE a fines de evitar la duplicación de código. DIAGRAMA A continuación se muestra la forma genérica de la estructura de validación empleando un DOWHILE y un ejemplo relacionado a la situación de ejemplo. BIANCIOTTI, Andrés Hernán [email protected] Facultad Regional ALGORITMOS Y ESTRUCTURAS DE DATOS NIVEL I San Francisco TUTORÍAS Ing. en Sistemas de Información FORMA GENÉRICA EJEMPLO OPCIÓN COD CONDICIÓN COD <1 || COD >3 CÓDIGO A continuación se muestra la forma genérica del código en C++ para la estructura de validación empleando un DO-WHILE y un ejemplo relacionado a la situación de ejemplo. FORMA GENÉRICA ... int opción; do { printf(“INGRESO DE OPCIÓN:”); scanf(“%d”,&opcion); } while(opción!=condicion); ... EJEMPLO ... int cod; do { printf(“INGRESE EL CÓDIGO DEL SUPERMERCADO:”); scanf(“%d”,&cod); } while(cod<1||cod>3); ... BIANCIOTTI, Andrés Hernán [email protected] Facultad Regional ALGORITMOS Y ESTRUCTURAS DE DATOS NIVEL I San Francisco TUTORÍAS Ing. en Sistemas de Información MODULARIDAD (FUNCIONES) VENTAJAS DE LA MODULARIDAD Divide y minimiza la complejidad Aísla operaciones complejas Los módulos se codifican una sola vez y pueden ser reutilizados Programación en paralelo (en el mismo instante) de los diferentes módulos que ahorra tiempo Mayor organización y claridad en el código del programa Creación de puntos de control centralizados que permite detectar las fallas rápidamente y optimizar el mantenimiento Aprovechamiento de tiempos de proceso FUNCIONES O MÓDULOS Son subprogramas que se encargan de una tarea específica del problema general. PROBLEMA MÓDULO 1 MÓDULO 2 MÓDULO 3 MÓDULO 4 MÓDULO n Cada módulo resolverá una parte del problema general y dentro de él se producirá: ENTRADA (DATOS) SALIDA PROCESO (INFORMACIÓN) REPRESENTACIÓN GRÁFICA PROGRAMA PRINCIPAL MÓDULO 1 CONJUNTO DE ACCIONES A EJECUTARSE DENTRO DEL MÓDULO RETORNO AL PROGRAMA BIANCIOTTI, Andrés Hernán BIFURCACIÓN DEL PROGRAMA AL MÓDULO MÓDULO 1 LLAMADA A MÓDULO MÓDULO 2 MÓDULO 2 FIN DEL PROGRAMA CONJUNTO DE ACCIONES A EJECUTARSE DENTRO DEL MÓDULO RETORNO AL PROGRAMA [email protected] Facultad Regional ALGORITMOS Y ESTRUCTURAS DE DATOS NIVEL I San Francisco TUTORÍAS Ing. en Sistemas de Información EJERCICIOS DE APLICACIÓN DE CONCEPTOS Antes de comenzar a resolver un ejercicio: Identificar los datos que brinda el enunciado Identificar la información que se debe obtener con esos datos Si realizamos la identificación de estos componentes será muy fácil darse cuenta que debe hacer nuestro sistema para transformar los datos que ingresan en la información que debe salir. EJERCICIO DE EJEMPLO MODULARIDAD Ingresar 10 importes de ventas. Mostrar la cantidad de ventas cuyos importes sean mayores a $1000; la suma de las 5 primeras ventas y la cantidad de ventas cuyos importes sean inferiores a $50. Realizar el diagrama de lógica utilizando modularidad. EJERCICIO PROPUESTO N° 6 – TRABAJO PRÁCTICO N° 2 Escriba un programa que permita jugar “Doble o Nada”. El jugador apuesta una cantidad de dinero y tira la moneda. Si sale cara (1) obtiene el doble de la cantidad apostada. Si sale cruz (0) pierde lo apostado. Permitir al jugador realizar jugadas hasta que decida abandonar el juego. El programa debe sacar por pantalla el número de jugadas y el total ganado por el jugador (si ha perdido dinero debe mostrarse como número negativo). BIANCIOTTI, Andrés Hernán [email protected]