Introducción a la programación (clave 115106, créditos 9) mediante lenguaje C con elementos de C++ Profesor Dr. Georgii Khachaturov 1. Introducción Nota importante: esa introducción representa un complemento al Capitulo 1 del curso en SAI. http://sai.azc.uam.mx/apoyodidactico/c1/i ndex.html ¡Es indispensable leer este capitulo! 1.1. ¿Porque lo saben que 2+2 es 4? ¿ Cómo entienden los '2' y '4' arriba? ¿Es necesario saber que los significan para encontrar 2+2? ¿Cuál es la diferencia entre las siguientes interpretaciones de '2' ?: - un digito escrito en pizarrón, - un símbolo en el texto computarizado (es decir, la representación interna de '2' en el programa Word, por ejemplo) - una representación interna en la computadora para los cálculos numéricos Tarea: Intenta desarrollar mediante diagrama de bloques una arquitectura - hipotética humana que transforma las preguntas tipo 2+2=? escritas en el pizarrón a las respuestas correctas. - de medios computarizados (calculadora programática) los cuales permiten a un operador hacer operaciones aritméticas. 1.2. Los medios de computación pueden tratarse como una caja negra... ...Y con su progreso de velocidad exponencial deben tratarse como una caja negra para usuarios ordinarios. Con este progreso en marcha, es cada vez más y más difícil saber todos detalles de los medios. Pero este hecho no pone obstáculos para que los usuarios ordinarios puedan usar computadoras eficientemente, al revez... 1.3. Historia de computación es una evolución de: los medios bajo la presión de las tareas a implementar... (calculo numérico, finanzas, bases de datos, comunicación, control, reconocimiento, inteligencia artificial, ...); los medios de la interfaz de usuario; capacidad de hardware. Máquinas de von Neumann...(memoria operativa, sirve tanto para las instrucciones de CPU, como para los datos) Lenguaje de máquina... Sistema operativo... A continuación se encuentran las preguntas de autocontrol respecto unas temas relevantes no cubiertos en clases. Es importante encontrar las respuestas a esas preguntas mediante un trabajo individual fuera del salón: ¿Que es un grafo? ¿Que es un árbol? ¿Que son nodos hojas de árbol? ¿Cual es la propiedad característica de árbol? ¿Como se llama la unidad atómica de los datos desde punto de vista del sistema operativo? ¿Que organización tiene el sistema de almacenamiento de datos con los cuales manipula el sistema operativo? ¿Donde se almacena el programa ejecutable de, por ejemplo, aplicación Excel? ¿Que hace sistema operativo cuando usted hace doble clic en un archivo de imagen digital? ¿Que hace sistema operativo cuando usted pide ejecutar un programa desde menú de programas? ¿Cuales tipos de archivos sabe y que significa cada de esos tipos? ¿Describe su idea sobre un texto que usted esta editando mediante un procesador de textos, p.e. Word: En que forma existe este texto mientras usted esta editándolo? ¿Que papel tiene sistema operativo durante edición de un texto mediante Word? En que forma aparecerá el texto al terminar la edición? Donde? ¿Que papel tienen los controladores de dispositivos de una computadora y cómo ellos interactúan con un sistema operativo? ¿Que es interrupcción? Temas: Lenguajes de programación y los medios de desarrollo de programas... Programas especializadas... Representación de datos numéricos en memoria de computadora. Importante!!!! Preguntas de control: ¿Que es: bit, byte, palabra de la máquina? ¿Cuantas valores diferentes puede representar (codificar) un byte? dos bytes? ¿Que diapasón de enteros no negativos se representa mediante palabra de la máquina de longitud 32 bits? ¿Cómo representar en el sistema binario los valores decimales: 5, 7, -25, etc.? ¿Que valor decimal representa el binario 101110? ¿Cómo sumar (restar) valores binarios? ¿Cómo multiplicar/dividir un valor binario por 2, 4, 8, etc.? 1.4. "Resolver un problema = desarrollar un lenguaje adecuado al problema" entrada física a los valores de las celdas correspondientes de la memoria. 1.6.4. El mencionado esquema de ínter-actuación permite utilizar una sola disciplina de intercambio de datos entre un programa y el mundo exterior para toda gran variedad de los tipos de dispositivos usados en las computadoras modernas. En diferencia con muchas otros áreas, los lenguajes usados en computación son formalizados. 1.6.5. En este proceso de intercomunicación entre el mundo y un programa, el sistema operativo es un agente activo, en contraste con la memoria, que es un agente pasivo. Cumpliendo con las tareas ordenados desde un programa, el sistema operativo recibe, interpreta, y responde a todas interrupciones de todos dispositivos disponibles. Cada de los lenguajes usados en la computación hace énfasis o, bíen, está especializado en su propia parte de las operaciones típicas para un área. Por ejemplo, hay lenguajes especiales para: desarrollo de programas para finanzas, cálculo numérico, creación de sistemas operativos. 1.6.6. Por otro lado, desde el punto de vista del sistema operativo, todos los datos almacenados en la computadora, independientemente del dispositivo físico que los almacena, están organizados en un sistema especifico. Este sistema manipula con las unidades especificas llamados archivos (files) Mientras tanto un sistema operativo, como cada programa funcional (procesador de textos, o editor de imagenes, etc.) tienen propios lenguajes para su uso. 1.6.6. Sistema operativo se encarga de mantenimiento de los archivos y su interpretación. La interpretación incluye dos opciones: ejecutar un archivo ejecutable, o llamar un programa especial dedicada interpretar este tipo de los archivos. Mantenimiento incluye abrir nuevos archivos, copiar, eliminarlos, etc., y garantizar su integridad. Todos conocimientos especiales en cualquier área son unos lenguajes orientados al área. Tarea: Analiza cuál es el leguaje que distingue los conocimientos profesionales de tu carrera. 1.5. "Programa = estructura de datos + algoritmo" La mayor parte restante del curso se dedica a lo que los alumnos puedan implementar este moto para desarrollo de sus programas 1.6. Resumen de arquitectura de computadoras desde punto de vista de un programador 1.6.1. Cada programa de usuario debe tener unos datos de entrada, hacer procesamiento de esos datos, y mandar resultados a una salida. 1.6.2. Físicamente, el programa de usuario siempre interactúa con el mundo exterior, es decir manda hacía fuera y recibe desde fuera los datos, únicamente a través de la memoria de computadora. 1.6.3. El sistema operativo manipulando con unos programas específicos (llamados controladores o drivers) se encarga de interpretar algunos partes de la memoria para generar salida física, o al revés, transformar la 1.7. ¿Cómo lo mencionado en p.1.6 funciona en práctica? 1.8. Ciclo tecnológico de desarrollo de un programa real y uso de los medios de desarrollo. Editores de texto Compiladors Enlace de modulos Ejecución Detección de errores. IDE- Integrated Development Environment =Entorno Integrado de Desarrollo; DJGPP, WindowsStudio.Net, etc. 2. Programas simples 2.1. Hola mundo y sus modificaciones simples 2.1.1 "Hello World" – Hola Mundo Temas a aprender: uso de IDE, estructura de un programa simple, comentarios, archivos-cabeceras, operadores de pre-compilador, función "printf" El ejemplo estándar del programa primitivo es el programa que no adquiere ningunos datos desde fuera, solo mandando a imprimir un mensaje. Presentamos un programa de este tipo y en este ejemplo entenderemos unas cosas básicas. /** INTRODUCCION A COMPUTACION**/ // saludo.c # include <stdio.h> main() { printf("Hola mundo !!!\n"); } Primeras líneas son comentarios. stdio.h (los archivos encabezados se indican mediante extención "h" del nombre) de la librería eSTanDar de Itput-Output. En el archivo stdio.h se encuentra la definición de la función printf entre los demás. Sin este archivo encabezado la instrucción "printf" a continuación no puede ser interpretada por compilador. Mientras sin esa librería de ANSI, el programa-objeto no puede transformarse a un archivo ejecutable. Cada programa en C tiene uno y solo uno módulo principal de la estructura main() { .... } con algunos instrucciones adentro de {...}. El único operador del nuestro programa manda al sistema operativo el orden de imprimir la cadena de símbolos adentro del par de comillas. Sin embargo \n no son símbolos a imprimir, sino el símbolo de control de la impresión que ordena después de la impresión posicionar el cursor al inicio de la siguiente línea. El compilador entiende que inicia el primer comentario al leer " /* ". Al recibir " */ " él va a saber que el comentario ya terminó. El símbolo El segundo comentario inicia con "//" y está valido hasta fin del renglón que se indica para compilador mediante símbolo "enter", el cual no aparece en texto, pero se presenta de manera invisible. frente del "n" indica al compilador que "n" no debe ser impreso, sino interpretado como un símbolo de control. La diferencia de las dos maneras es la siguiente: - la primera permite tener tanto los comentarios largos, es decir escritos en varias líneas, como cortas intercalando el texto de las instrucciones de programa en una sola línea - mientras la segunda permite tener comentarios que no saltan de una línea, solo después de las instrucciones del renglón 2.1.2. Extenciones de "Hola Mundo". Luego sigue el orden # include al compilador de incluir en el texto compilado el archivo encabezado "\" Temas a aprender: operación de intercambio, más detalles del operador "printf", constantes enteros, variables, variables del tipo entero, operador de asignación: Tareas para hacer en clase: 1. Modificar programa "Hola mundo!" de tal manera que el nuevo programa a. contenga dos variables A y B de tipo entero cuyos valores iniciales sean 1 y 2 relativamente b. el programa imprima esos valores con el texto: "A= ... B= ..." 2. Modificar programa del punto anterior de tal manera que el nuevo programa a. contenga dos variables A y B de tipo entero cuyos valores iniciales sean 1 y 2 relativamente b. el programa imprima esos valores con el texto: "inicialmente A= ... B= ..." c. luego el programa hace intercambio de los valores de A y B entre si. d. el programa imprima esos valores con el texto: "luego A= ... B= ..." - - Un soporte especial "Project" para mantenimiento de muchos módulos de un solo proyecto; Un soporte especial "Debug" de control de todas variables en proceso de las pruebas de los módulos ejecutables; Control de varias ventanas en la pantalla necesarias para desarrollo; y algunos otros 3.4. Demostración del proceso de transformación de un programa en C al modulo ejecutable a través de los medios integrados de desarrollo: DJGPP +RHIDE (es similar al trabajo en TurboC versión 3 o 2 ) En la ventana de comandos de MS-DOS, hay que ejecutar el programa de los medios integrados de desarrollo RHIDE: 3. Los medios de desarrollo de programas y las formas de su ínter actuación con el sistema operativo 3.1. Las operaciones tecnológicas para transformar un programa en C a un archivo ejecutable representan una cadena de llamadas de los archivos ejecutables de un sistema de desarrollo mandándoles los archivos para transformar. En resultado aparece la ventana de RHIDE: Los pasos básicos de esta cadena son - compilación de los archivos-fuentes con extensiones "c", transformándolos a otros archivos de objetos, con extensiones "o" en esta fase el compilador revisa sintaxis de cada fuente. - Enlazamiento de los archivos de objeto en un archivo ejecutable en esta fase, se revisan todas las referencias de cada módulo-objeto a las variables definidas en otros módulos. 3.2. Los medios integrados de desarrollo sirven para automatización de los pasos básicos. 3.3. La automatización toca a los dos siguientes puntos: - - - Interfaz amigable de usuario para las operaciones generales con archivos (en lugar del uso directo de los comandos de MS-DOS o otro sistema operativo); Editor de textos de los archivos en C enfocado en buena presentación de las construcciones especificas de C; Bién desarrollada utilería para navegación (Help) en las construcciones de lenguaje, librerías de programas estándares, mensajes de errores, etc... Entrando (p.e. mediante "Alt+E") en Editor, se puede teclear el archivo con el programa presentado. Luego entrando en "Save as" de menú "File" (Alt+F y luego con flechas del teclado escoger "Save as") guardar el texto como archivo "saludo.c". Luego, entrando al menú "Run" (Alt+R) escoja en sub-menú la línea "Run" y obtiene la ventana: Oprima "enter" aceptando los resultados de compilador y luego entra al menú "Windows" (Alt+W) y allá escoge la ventana "User Screen" que enseñara los resultados de ejecutación del programa así: Pero, al tener el archivo "saludo.c" guardado en el directorio de C:\djgpp hay otra opción ejecutarlo desde ventana de comandos directamente, es decir, sin usar RHIDE. Eso se demuestra en la ventana siguiente: