Programación 1 Tema I. Conceptos y elementos básicos de Programación Lección 1. Problemas de tratamiento de información, algoritmos y programas 1 Problemas, algoritmos y programas • Problemas de tratamiento de información • Herramienta para resolverlos: computadores que son máquinas programables muy rápidas • Es preciso conocer algún método para resolver cada problema y ser capaz de expresarlo. Sin un método adecuado el computador no sirve de nada • Algoritmo: descripción de un método o procedimiento efectivo para la resolución de un problema de tratamiento de información (por ejemplo, en español o en inglés) • Programa: algoritmo escrito utilizando un lenguaje de programación (en este curso en C++) 2 El código del primer programa C++ #include <iostream> Especificación /* * Pre: ‐‐‐ * Post: Escribe por pantalla el mensaje * "Bienvenidos a la Universidad" */ int main() { std::cout << "Bienvenidos a la Universidad" << std::endl; // 1ª instrucción return 0; // 2ª instrucción } 3 El código del primer programa C++ [2ª versión equivalente] #include <iostream> using namespace std; /* * Pre: ‐‐‐ * Post: Escribe por pantalla el mensaje: * "Bienvenidos a la Universidad" */ int main() { cout << "Bienvenidos a la Universidad" << endl; return 0; } 4 ¿Cómo poner a punto un programa C++? 1. Editar el código fuente del programa en el fichero bienvenida.cc ( o bienvenida.cpp) 2. Compilar el código fuente del programa [bienvenida.cc]. Resultado: el fichero objeto con código binario bienvenida.o 3. Enlace con otros módulos y construcción del programa ejecutable o programa de aplicación saludo 4. Ejecutar el programa de aplicación saludo hendrix01:/ g++ ‐c bienvenida.cc [2] hendrix01:/ g++ ‐o saludo bienvenida.o [3] hendrix01:/ ./saludo [4] Bienvenidos a la Universidad hendrix01:/ ./saludo [4] Bienvenidos a la Universidad 5 Se puede editar, compilar y ejecutar desde la consola del operador de un IDE (entorno integrado de dasarrollo) como, por ejemplo, CodeLite: Bienvenidos a la Universidad Nota: En la primera práctica aprenderemos a hacerlo haciendo uso del IDE Codelite 6 Un programa C++ suele constar de varias funciones #include <iostream> #include <iomanip> Especificación using namespace std; /* * Pre: r >= 0.0 * Post: Escribe por pantalla, en una misma línea, el valor del radio [r] * y de la longitud de una circunferencia de radio [r] */ void circunferencia (double r) { const double PI = 3.1416; cout << fixed << setprecision(2) << setw(7) << r << setprecision(3) << setw(16) << 2.0*PI*r << endl; } . . . 7 Especificación . . . /* * Pre: ‐‐‐ * Post: Escribe por pantalla el radio y la longitud de tres * circunferencias */ int main() { /* * Escribe por pantalla el radio y la longitud de tres circunferencias */ cout << setw(7) << "Radio" << setw(20) << "Circunferencia" << endl; cout << setw(7) << "=====" << setw(20) << "==============" << endl; circunferencia(1.234); circunferencia(5.0112); circunferencia(11.5178); /* El programa termina normalmente devolviendo un valor 0 */ return 0; } 8 Consola del operador al ejecutar el programa circunferencia: hendrix01:/ ./circunferencia Radio Circunferencia ===== ============== 1.23 7.753 5.01 31.486 11.52 72.369 hendrix01:/ … 9 Un programa interactivo (dialoga con el operador) #include <iostream> #include <iomanip> Especificación using namespace std; /* * Pre: r >= 0.0 * Post: Escribe por pantalla en una línea el valor del radio * y del área de un círculo de radio [r] */ void circulo (double r) { const double PI = 3.1416; cout << "El area de un circulo de radio " << fixed << setprecision(2) << r << " es igual a " << PI*r*r << endl; } . . . 10 . . . Especificación /* * Pre: ‐‐‐ * Post: Pregunta al operador por el [Radio del circulo: ] y le informa en * la línea siguiente del valor del radio y del área del círculo */ int main() { /* * Pregunta al operador y almacena su respuesta en r */ double r; cout << "Radio del circulo: " << flush; cin >> r; /* * Presenta por pantalla los datos de un círculo de radio r */ circulo(r); // Concluye normalmente y devuelve un 0 return 0; } 11 Consola del operador al ejecutar el programa circulo: hendrix01:/ ./circulo Radio del circulo: 23.0754 El área de un círculo de radio 23.07 es igual a 1672.70 hendrix01:/ ./circulo Radio del circulo: 2.6 El área de un círculo de radio 2.60 es igual a 21.40 hendrix01:/ … 12 Especificación de algoritmos • En C++ los algoritmos se describen mediante funciones. Elementos de su especificación: – Precondición: Condiciones que han de satisfacer los datos de entrada (parámetros de la función y, en su caso, datos globales) – Postcondición: Condiciones que han de satisfacer los resultados de la función (valor devuelto, valores finales de ciertos parámetros modificables y, en su caso, valores finales de datos globales) /* * Pre: ‐‐‐ * Post: Devuelve el valor del polinomio a*x^2 + b*x + c */ double calcular (double a, double b, double c, double x) { return ((a*x + b)*x) + c; } 13 /* * Pre: ‐‐‐ * Post: Escribe por pantalla una línea con la fecha definida por dia, * mes y anyo con el siguiente formato: dia/mes/anyo. Ej.: * 12/1/2014 */ void escribirFecha (int dia, int mes, int anyo) { cout << dia << "/" << mes << "/" << anyo << endl; } /* * Pre: ‐‐‐ * Post: Presenta por pantalla una línea con el texto * "En esta asignatura se aprende a programar“ */ void anunciar () { cout << "En esta asignatura se aprende a programar" << endl; } 14 /* * Pre: n >= 0 * Post: Devuelve el valor de n! */ int factorial (int n) { /* * Se omite, por el momento, el código de esta función */ . . . } 15 Propiedades de un algoritmo • • Imprescindibles: – Corrección: resuelve satisfactoriamente el problema; es decir, satisface sus especificaciones – Legibilidad: para el propio programador y para otras personas que deban leerlo o mantenerlo Deseables: – Eficiencia: economía de recursos (especialmente tiempo de ejecución y memoria empleada) – Reusabilidad: que pueda ser utilizado en otros proyectos – Generalidad: amplia su reusabilidad y ahorra costos – Independencia de la tecnología: independencia del lenguaje utilizado, de las bibliotecas disponibles, del sistema operativo y del computador en el que se ejecuta 16 17