Cualquier procedimiento puede ser llamado desde cualquier punto del programa, incluyendo otros procedimientos, o el mismo.
Modularidad y alcance Dentro de la programación procedural, las siguientes características son deseables:
Modularidad: Para cada procedimiento se especifica un conjunto de argumentos de entrada y valores de salida que le permiten comunicarse con otros procedimientos.
Alcance: Cada procedimiento cuenta con su propio espacio de variables, las cuales no pueden ser accedidas desde otros procedimientos, salvo mediante los mecanismos de paso de argumentos y retorno de valores.
Ventajas de la programación procedural Diseño descendente: La modularidad permite al programador plantear primero una solución al problema completo, para luego enfocarse en los detalles.
Cooperación: Múltiples programadores pueden trabajar en un programa complejo, cada uno desarrollando un módulo distinto.
Reusabilidad: Los procedimientos escritos para un programa pueden reutilizarse en otros programas que requieran la misma tarea.
Fácil depuración: Ya que cada procedimiento realiza una tarea especializada, es posible depurar cada procedimiento de manera individual.
Fácil mantenimiento: Un programa procedural que se escribe correctamente es fácil de entender, mantener y actualizar, incluso por otros programadores.
Diseño descendente (top-down) En programación, el diseño descendente consiste en dividir una tarea compleja en sub-tareas, y resolver cada sub-tarea de manera independiente hasta que cada paso pueda implementarse fácilmente.
Ejemplo de diseño descendente Considere el problema de elaborar un sistema de navegación para un robot autónomo.
El sistema puede dividirse en las siguientes etapas:
Capturar información sobre el entorno a través de sensores (cámaras, radares, micrófonos, etc).
Procesar la información del entorno para extraer rasgos relevantes (obstáculos, objetos en movimiento, corredores, etc.)
Tomar decisiones de acuerdo a los rasgos observados y el estado actual (acelerar, detener, girar, etc.)
Actualizar el estado del sistema de acuerdo a las decisiones tomadas (ajustar velocidad, dirección, etc.)
Cada una de estas etapas puede dividirse a su vez en otras sub-etapas.
Alcance de variables y funciones El alcance de una variable o función es el contexto desde el cual puede accederse a la misma.
En caso de ambigüedad (variables con mismo nombre pero distinto alcance), el lenguaje C/C++ elegirá la variable declarada en el contexto mas cercano.
Ejemplo de alcance int x = 1;
int f() { return x; }
int main() { int x = 2; { int x = 3; cout << x << endl; } cout << x << endl; cout << f() << endl; }
¿Qué imprime este programa?
Ejercicios De los dos programas siguientes, desarrolle el que le haya sido asignado, aplicando los conceptos de programación estructurada y diseño descendente.
El programa deberá cumplir con lo siguiente: La función main() solo debe contener declaraciones de variables y llamadas a otras funciones. El programa debe dividirse en funciones, cada una de las cuales debe realizar una tarea específica. No debe haber variables globales. Las funciones compartirán información mediante los mecanismos de paso de argumentos y retorno de valores.
Ejercicios Elabore un programa para medir la velocidad promedio de cálculo aritmético de una persona. El programa deberá presentar al usuario una serie de operaciones (suma, resta, multiplicación y división) elegidas al azar. Para el caso de suma y resta, los operandos serán de máximo tres dígitos, para la multiplicación de máximo dos dígitos, y para la división de tres dígitos para el dividendo y uno para el divisor, y el resultado siempre debe ser entero.
Al iniciar, el programa pedirá al usuario el número de operaciones a realizar. Posteriormente mostrará la operación actual (e.g., “182 + 324 = ”) y esperará a que el usuario ingrese la respuesta. El programa llevará la cuenta del número de respuestas correctas, así como del tiempo de respuesta promedio (calculado solo para las respuestas correctas). Al final, el programa reportará estos resultados.
Subrutinas a considerar: imprimir pantalla o menú inicial, pedir datos iniciales al usuario, elegir operación, ejecutar prueba, reportar resultados.
Ejercicios Elabore un programa que implemente el juego de 3-en-raya (Gato) para dos jugadores humanos. El programa deberá inicialmente mostrar el tablero con las casillas numeradas del 1 al 9, y, de manera iterativa, pedir la casilla donde el siguiente jugador desea colocar su ficha, verificando que el movimiento sea válido. También deberá determinar en qué momento hay un ganador, o si llega a haber un empate.
Sugerencia: utilice nueve variables tipo char para representar cada una de las casillas del tablero. Cada casilla puede contener un espacio vacío, una ‘X’, o una ‘O’.
Subrutinas a considerar: solicitar jugador inicial (ficha X/O), dibujar tablero, solicitar siguiente movimiento, determinar ganador.
Página anterior | Volver al principio del trabajo | Página siguiente |