Guia 05 (introduccion A La Programacion

  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Guia 05 (introduccion A La Programacion as PDF for free.

More details

  • Words: 4,371
  • Pages: 15
Universidad Nacional del Litoral Facultad de Ingeniería y Ciencias Hídricas Departamento de Informática

FUNDAMENTOS DE PROGRAMACIÓN Asignatura correspondiente al plan de estudios de la carrera de Ingeniería Informática

UNIDAD 5 INTRODUCCIÓN A LA PROGRAMACION Ing. Horacio Loyarte ® 2008

Unidad 5

2

UNIDAD 6

Introducción a la la Programación

Resumen de Conceptos Introducción En las unidades anteriores se han resuelto numerosos problemas escribiendo algoritmos mediante un pseudolenguaje o mediante diagramas de flujo. Para probar estos algoritmos se efectuaron pruebas de escritorio, ejecutando acciones y simulando lo que haría una computadora. A partir de aquí, se codificarán estas soluciones algorítmicas empleando un lenguaje de programación interpretable por una computadora, creando un programa. De esta forma, será la propia computadora la que ejecute el algoritmo y realice las acciones que conforman la solución. En esta unidad temática se abordarán los conceptos básicos relativos a la creación de programas. En primer lugar se hará una revisión de las etapas más importantes de la resolución de problemas. Luego, se explicará la forma en que se ejecutan (prueban) los programas. Como en general los programas no funcionan correctamente -la primera vez que se ejecutan- será necesario eliminar los errores, proceso que se denomina depuración de los programas. Existe una gran cantidad de lenguajes de programación. En esta materia se abordará uno en particular: el ANIS/ISO C++. Sin embargo, en esta unidad se verán las características generales que distinguen a unos lenguajes de otros y las ventajes relativas. Finalmente se propondrán algunos consejos acerca de un proceso que nunca debe faltar en la programación: la documentación. La documentación incluye toda la información que se puede suministrar acerca del programa y que no constituye el código del programa en si mismo. Se utilizará para los ejercicios un compilador C++, que permitirá afirmar los conceptos teóricos desarrollados y editar, compilar y ejecutar los primeros programas.

Revisión de Conceptos Se estudió en la Unidad 1 el proceso de resolución de problemas computacionales, donde se distinguen las etapas siguientes.       

Definición del problema. Análisis del problema. Elección del método Codificación. Prueba. Depuración. Documentación.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

3

Las etapas correspondientes a la Codificación, Prueba y Depuración constituyen el proceso de Programación, que se desarrollará a partir de aquí en la asignatura.

Diagrama de las Etapas de Resolución de Problemas Inicio

Definición del problema

Análisis del problema

Programación

SI

Prueba

Error? NO

Fin

Nota: En este diagrama no se incluye el proceso de documentación ya que, como se verá luego, debe realizarse durante todas las etapas de resolución del problema.

Método Top Down Diseñar una estrategia, consiste en dividir o descomponer el problema original en una sucesión de problemas más simples, de tamaño suficientemente pequeño como para que cada uno de ello pueda ser comprendido en su totalidad. Esta técnica es conocida como Top-Down o de refinamientos sucesivos y como se verá más adelante se adapta perfectamente a la codificación de programas mediante un lenguaje modular y estructurado.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

4

P

P1

P2

P3

P3.1

P3.2

.................

Pn

P3.3

La estrategia nos define QUE hacer

Algoritmo En esta etapa se plantea en base a la estrategia, el conjunto de acciones que permitirán resolver el problema, mediante pseudocódigo, diagrama de flujo, etc.

El algoritmo define COMO hacerlo

Programa Un algoritmo codificado empleando un lenguaje de programación interpretable por una computadora constituye un programa.

Ejecución y prueba del programa Para poder probar un programa escrito en un lenguaje de programación de Alto Nivel es necesario generar un código ejecutable. Este proceso puede efectuarse mediante la COMPILACION o mediante la INTERPRETACIÓN del código fuente que editó el programador.

Código Ejecutable El Proceso de Compilación El proceso de compilación es una traducción del código fuente a un código ejecutable por la computadora. El resultado de compilar un archivo o programa fuente es un nuevo archivo llamado imagen ejecutable. Los archivos ejecutables pueden ser directamente utilizados por el usuario mediante una simple llamada desde el sistema operativo (por ejemplo un doble clic en un entorno gráfico tipo Windows). El archivo ejecutable ya no requiere del compilador ni del entorno que permitió su creación y puede ser utilizado en cualquier computadora (de plataforma compatible a la admitida por el compilador).

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

5

Programa fuente

COMPILACION

Programa objeto Bibliotecas de código objeto

ENLACE (linking) Imagen ejecutable

El Proceso de Interpretación En este caso el intérprete procesa instrucción por instrucción, sin generar un código ejecutable completo. Cada vez que el usuarios necesita el ejecutar el programa deberá llamar al intérprete para que lo ejecute línea por línea.

Ventajas y Desventajas de Compiladores e Intérpretes Compilación Errores de sintaxis antes de la ejecución Velocidad de ejecución Protección del código.

Ventajas Interpretación Ejecución en una sola etapa Proceso interactivo de depuración

Desventajas Compilación Interpretación Proceso en varias etapas y a menudo Errores de sintaxis detectados engorroso. (*) durante la ejecución. Depuración laboriosa Baja velocidad de ejecución. Código abierto. (*) NOTA: existen compiladores con entornos de desarrollo integrados (IDE) que simplifican esta tarea.

Depuración de Programas Depuración o “debugging“ significa eliminar los errores de un programa. En ciertos casos esa depuración es sencilla, pero a menudo constituye un proceso penoso. Esto depende de los tipos de errores de un programa.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

6

Errores de un Programa i) Errores en Tiempo de Compilación: son aquellos en los que se infringen las reglas que definen la estructura de las declaraciones y sentencias. Estos errores son denominados también errores de sintaxis. Los errores de sintaxis más comunes son: errores tipográficos, falta del punto y coma final y utilización de variables que no han sido declaradas previamente. ii) Errores en Tiempo de Ejecución: los programas contiene estos errores cuando, a pesar de contar con sentencias sintácticamente válidas, se producen errores al ejecutar estas sentencias. Por ejemplo, un programa podría intentar utilizar un archivo que no existe en el disco o dividir un número por cero. iii) Errores de Lógica: en muchos casos el programa arroja resultados incorrectos a pesar de que no posea errores de sintaxis y tampoco de errores al ejecutarse. En general se trata de los casos en que el programa no realiza las tareas que originalmente se solicitaron en la definición del problema. Por ejemplo, puede que un problema requiera multiplicar dos números; por error, se diseña un algoritmo que los suma. Al probar el programa, se observaría que no hay errores de sintaxis, tampoco errores de ejecución y, sin embargo, al darle dos números al programa devolvería un valor inesperado.

Lenguajes de Programación Los algoritmos se convierten en programas al ser codificados empleando lenguajes, cuyas instrucciones pueden ser procesadas por una computadora. Pero las computadoras procesan los programas de acuerdo al tipo de lenguaje utilizado. Existen varias decenas de de lenguajes de programación y a su vez muchas versiones de cada uno de ellos. En base a la similitud de estos lenguajes de programación respecto de nuestro lenguaje natural se los puede clasificar en 3 tipos: Lenguajes de Máquina, Lenguajes Ensambladores y Lenguajes de alto Nivel.

Lenguajes de Máquina Los lenguajes de Máquina generan programas usando instrucciones que pueden ser resuletas directamente por el procesador de la computadora sin mediar trraducciones. Recuérdese que una computadora es un dispositivo electrónico que solo puede procesar dos estados de señales eléctricas: encendido y apagado; si se representan estas señales mediante un modelo matemático binario usando ceros y unos, es posible representar instrucciones que conformen un programa. Por ejemplo para sumar dos números se puede escribir: 0110

1001

1010

1011

Este tipo de lenguaje tiene la ventaja de que sus programas pueden ser ejecutado directamente sin un proceso de traducción previo, lo cual implica una velocidad del proceso óptima. Como contrapartida, puede observarse que aún en problemas sencillos, el código es complejo de crear, carece de legibilidad, es muy complejo de depurar ante la presencia de errores, y tiene total dependencia del procesador del la computadora. En respuesta a estos problemas se crearon lenguajes intermedios más cercanos al nivel del lenguaje natural que usan las personas para comunicarse.

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

7

Lenguajes de Bajo Nivel Estos lenguajes pueden ser interpretados con más facilidad por una persona, pero la codificación continúa siendo una tarea compleja que requiere de una gran especialización por parte del programador. El lenguaje típico de bajo nivel es el ensamblador (Assembler Language), el cual está formado por sentencias nemotécnicas basadas en abreviaturas del inglés para representar acciones: ADD, MOV, SUB, DIV, etc. Para sumar dos valores numéricos usando ensamblador: ADD X, Y, SUMA Lo cual se lee: sumar el número almacenado en la posición de memoria X con el número de la posición Y. El resultado, ubicarlo en la posición de memoria representada por SUMA. La elaboración de soluciones a problemas grandes o complejos se hace muy engorrosa con este lenguaje. Además, está muy ligado al juego de instrucciones de la marca y modelo de cada microprocesador, lo cual hace que los programas sean poco portables. Su uso se limita al control de dispositivos electrónicos que requieren programas pequeños y sencillos, o partes de otros programas de computadoras. SI bien su eficiencia es muy alta, un programa en ensamblador requiere de una traducción a código máquina para que la computadora ejecute sus instrucciones. El programa escrito en ensamblador es el programa fuente y el generado por la traducción programa objeto.

Lenguajes de Alto Nivel Los lenguajes de alto nivel son los más populares entre los programadores, y su aparición permitió que la ingeniería del software abordar nuevos paradigmas y modelos, para resolver problemas de mayor complejidad. La formación de programadores es más rápida y su gran ventaja es la portabilidad: los programas son independientes del hardware. Su denominación de alto nivel se debe a que su sintaxis es similar a la forma en que las personas se comunican y dan órdenes, usualmente en forma imperativa. Estos lenguajes están conformados por un conjunto de palabras y símbolos que tienen una relación directa con su significado: while, if, write, else, class, file, float, string, etc. Los actuales lenguajes de alto nivel poseen sofisticados entornos de desarrollo que incluyen un amplio espectro de herramientas para la edición, compilación y depuración de los programas. La difusión de estos lenguajes, sumado a la accesibilidad de los productos de hardware a revolucionado la industria del software en los últimos 15 años. Como desventajas se debe mencionar el alto requerimiento de recursos de la computadora (memoria, espacio en disco, etc.) y el mayor tiempo de ejecución. Existen numerosos lenguajes de alto nivel. Algunos de ellos: Fortran, Cobol, Basic, Pascal, Modula, C, C++, Java, SmallTalk, Vusal Basic, Visual C++, Delphi (Object Pascal), C++ Builder, Python, etc. Se describen sus características salientes y su origen en la lista siguiente

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

8

Algunos Lenguajes de Programación _ 1949: Primer Assembler (ShortCode). _ 1951: Grace Hooper escribe el primer compilador. _ 1957: FORTRAN: FORmula TRANslator. El lenguaje dominante en el ámbito científico. Velocidad de ejecución y tipos de datos de gran precisión. FORTAN IV, FORTRAN 77, FORTRAN 90, FORTRAN 95, FORTRAN 2000. _ 1958: LISP (John McCarthy, MIT): Nuevo paradigma de programación. Diseñado para inteligencia artificial. _ 1958: ALGOL: ALGOritmic Language. Propuesta de un comité científico internacional. para uso científico y académico. Primer lenguaje con gramática formal BNF (Bakcus-Naur Format). Recursividad. ALGOL68. _ 1959: COBOL: COmmon Business Oriented Language. Lenguaje orientado a problemas administrativos y contables, donde los formatos tienen suma importancia y no se requiere gran precisión numérica. _ 1964: BASIC (John Kemeny, Thomas Kurtz). Lenguaje intérprete de aplicación general. Muy sencillo de aprender. _ 1968: PASCAL (Niklaus Wirth, ETH). Paradigma de programación estructurada. Gran popularidad en ambientes académicos en los ´80 y parte de los ´90. Propone buenos hábitos de programación, fuertemente tipificado. Alocación dinámica de memoria. Las versiones de los 90 aceptan el modelo de objetos. Sucesores de Pascal: MODULA, MODULA-2. _ 1972: C (Dennis Ritchie, Bell Labs): Sucesor del lenguaje “B” . Estructuras de control similares a Pascal. Programas simples, rápidos y eficientes. Acepta aritmética de punteros, alocación dinámica de memoria. No es tan amigable como otros lenguajes. _ 1983: C++ (Bjarne Stroustroup ): C con Clases. Extensión de C al modelo de objetos. _ 1987: Perl (Larry Wall): Lenguaje de scripts. Poderoso para el tratamiento de texto y programación en Internet. _ 1990: Python (G. van Rossum). Lenguaje de script creado para un sistema distribuido (Univ. Amsterdam). Descendiente de ABC. Posee influencias de C/ C++ y otros lenguajes. _ 1994: Java (Sun Labs). Lenguaje multiplataforma, compilación intermedia para bytecode, programación de aplicaciones para Internet.

Clasificación de los Lenguajes de Programación según la metodología empleada para abordar el diseño del programa: 



Procedimentales: estos se basan en un conjunto de subprogramas o subrutinas que resuelven diferentes partes del problema. Por ejemplo, para resolver el problema del cálculo del volumen de un cilindro, se podría tener un programa principal que pide los datos al usuario y muestra los resultados y un subprograma que realiza el cálculo. Imperativos y Declarativos: en los lenguajes imperativos las líneas del programa le dicen a la computadora que debe hacer. A lo largo de la

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

9

evolución de los lenguajes de alto nivel se ha pasado desde los lenguajes imperativos hacia los lenguajes declarativos. Lenguajes declarativos son aquellos en que en las líneas del programa se encuentran las mismas abstracciones del problema en cuestión. Un buen ejemplo de lenguajes declarativos son los lenguajes orientados a objetos. 

Orientados a objetos: en este caso, las representaciones que se plasman en el programa tiene una relación directa con la realidad del problema que resuelven. Siguiendo el ejemplo anterior (cáclulo el volumen de un cilindro), nuestro programa contaría con un objeto denominado interfaz de usuario y otro cilindro. Estos objetos se encargaría de realizar las operaciones de carga de datos y muestra de resultados (el objeto interfaz de usuario) y de cálculo del volumen (el objeto cilindro).



Orientados a eventos: los lenguajes manejados por eventos son aquellos en los que todas las acciones del programa son invocadas por algún suceso o evento que actúa de disparador. Este evento puede provenir del usuario (como apretar un botón del mouse) o del sistema (como el aviso de que hay espacio insuficiente en el disco). En cualquier caso, el evento es enviados al programa y este llamará a ejecutar las acciones específicas propuestas para tal evento.

Esta clasificación no es excluyente. Se pueden encontrar, por ejemplo, lenguajes orientados a objetos y manejados por eventos. De forma similar, algunos lenguajes son procedimentales y manejados por eventos. Algunos lenguajes, en particular, las versiones más recientes del lenguaje Pascal o C++ permiten programar en base a cualquiera de las clasificaciones anteriores e incluso combinarlas a todas en un solo programa. Sin embargo es conveniente utilizar de forma consistente un determinado modelo o metodología para abordar el problema.

Paradigmas de Programación Tema elaborado por la cátedra Paradigmas de Programación” de la Fec. Reg. Bs.As. de UTN. Disponible en http://www.tadp.com.ar/paradigmas/3

Surgimiento de los paradigmas La historia del desarrollo de los lenguajes de programación muestra una creciente evolución en la que se van incorporando elementos que permiten ir creando programas cada vez más sólidos y eficientes y a la vez facilitar la tarea del programador para su desarrollo, mantenimiento y adaptación. Sin embargo este proceso está lejos de ser lineal. Ciertas características básicas incorporadas por algunos lenguajes fueron puestas en duda y fuertemente criticadas por otros , de manera que se fueron perfilando diferentes teorías y grupos de lenguajes que postulaban formas disímiles de construir las soluciones. Así, a medida que fueron avanzando las ciencias de la computación surgen lo que actualmente definimos como “paradigmas” Un paradigma de programación es un modelo básico de diseño e implementación de programas. Un modelo que permite desarrollar programas conforme a ciertos principios o fundamentos específicos que se aceptan como válidos. En otras palabras, es una colección de modelos conceptuales que juntos

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

10

modelan el proceso de diseño, orientan la forma de pensar y solucionar los problemas y, por lo tanto, determinan la estructura final de un programa.

Clasificación de los paradigmas A los paradigmas se los podría clasificar de diversas maneras según los criterios que se prioricen. Pero partiendo de los principios fundamentales de cada paradigma en cuanto a las orientaciones sobre la forma para construir las soluciones, podemos distinguir entre los procedimentales y los declarativos. • Paradigmas procedimentales u operacionales. Indican el modo de construir la solución, es decir detallan paso a paso el mecanismo para obtenerla. • Paradigmas declarativos. Describen las características que debe tener la solución. Es decir especifican “qué” se desea obtener pero no requieren indicar “cómo” obtenerla. Existen también otros paradigmas, que no se pueden encuadrar en esta clasificación como el heurístico y el concurrente. Por otra parte, hay autores que hacen otro tipo de enumeraciones o clasificaciones de paradigmas en base a criterios diferentes, por ejemplo como de “alto nivel” o “bajo nivel”, o que subclasifican estas categorías en otras más específicas o acotadas, como por ejemplo “Paradigma orientado a eventos”.

Paradigmas procedimentales También llamados operacionales, la característica fundamental de estos paradigmas es la secuencia computacional realizada etapa a etapa para resolver el problema. Los programas realizados con lenguajes procedimentales deben incluir en su codificación las instrucciones de control para determinar el flujo de la ejecución, como decisiones, iteraciones y otras, conformando, de esta manera, diferentes “algoritmos”. Actúan modificando repetidamente la representación de sus datos, basándose en asignaciones destructivas con efecto de lado. Utilizan un modelo en el que las variables están estrechamente relacionadas con direcciones de la memoria del ordenador. Cuando se ejecuta el programa, el contenido de estas direcciones se actualiza repetidamente, pues las variables reciben múltiples asignaciones, y al finalizar el trabajo, los valores finales de las variables representan el resultado. Su mayor dificultad reside en determinar si el valor computado es una solución correcta del problema, por lo que se han desarrollado multitud de técnicas de depuración y verificación para probar la corrección de los problemas desarrollados basándose en este tipo de paradigmas. En otras palabras, se basan en “cómo” lograr la solución.

Paradigmas declarativos Los paradigmas declarativos se basan en desarrollar programas especificando o “declarando” un conjunto de proposiciones, condiciones, restricciones, afirmaciones, ecuaciones o transformaciones que caracterizan al problema y describen su solución. A partir de esta información el sistema utiliza mecanismos internos de control que evalúan y relacionan adecuadamente dichas especificaciones, de manera de obtener la solución. No se necesita de la puntualización de los pasos a seguir para alcanzar una solución, ni instrucciones de control que conformen algoritmos. Estos paradigmas permiten utilizar variables para almacenar valores intermedios, pero no para actualizar estados de información. Si bien sus variables se

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

11

relacionan con posiciones de memoria, no existe el concepto asignaciones destructivas. Las variables son usadas en expresiones, funciones o procedimientos, se unifican con diferentes valores, pero siempre con transparencia referencial, es decir, sin efecto de lado. Como estos paradigmas especifican la solución sin indicar cómo construirla, en principio, eliminan la necesidad de probar que el valor calculado es el valor solución. En otras palabras, se basan en “qué” es necesario especificar.

Principales paradigmas Paradigmas procedimentales:  

Paradigma Orientado a Objetos Paradigma Imperativo

Paradigmas declarativos:  

Paradigma Funcional Paradigma Lógico

Otros paradigmas:  

Paradigma Heurístico Paradigma Concurrente

Investigue más sobre este tema en el siguiente enlace: http://www.tadp.com.ar/paradigmas/3

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

12

Síntesis 1. Para poder utilizar un programa la computadora debe interpretarlo o compilarlo previamente. 2. Un compilador convierte el código fuente en una imagen ejecutable (por ejemplo, un archivo .exe). 3. Los programas compilados son más rápidos de ejecutar que los interpretados y permiten ser utilizados sin necesidad de distribuir el código fuente entre los usuarios. 4. Para que un programa funcione correctamente generalmente hay que corregir sus errores mediante el ”debugging” o depuración. 5. Existen tres tipos de errores: los de tiempo de compilación, los de tiempo de ejecución y los de lógica. 6. Los lenguajes de programación pueden clasificarse en lenguaje máquina, de bajo nivel y de alto nivel, dependiendo de la cercanía de su sintaxis con el lenguaje natural d las personas. Más cerac de la máquina implica menor nivel, más cerca de los lenguajes humanos, mayor nivel. 7. Un paradigma de programación es un modelo básico de diseño e implementación de programas, que determina la estructura final de los mismos. 8. Los paradigmas de programación de spueden clasificar en Paradigmas procedimentales: indican el modo de construir la solución detallando paso a paso el mecanismo para obtenerla; .Paradigmas declarativos: describen las características que debe tener la solución. Es decir especifican “qué” se desea obtener pero no requieren indicar “cómo” obtenerla; Paradigmas que heurístico y Paradigma concurrente. 9. Los lenguajes de alto nivel se pueden clasificar según los paradigmas de programación de soportan: procedimentales, imperativos/declarativos, orientados a objetos y manejados por eventos. Es posible que algunos lenguajes combinen estos paradigmas. 10. La documentación es muy importante y debe realizarse durante todo el proceso de resolución de un problema mediante computadoras. La documentación debe realizarse tanto en el programa (documentación interna) como en archivos o impresiones adicionales (documentación externa).

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

13

Actividades Ejercicios Ejercicio 5.1 Encienda su computadora e inicie el sistema operativo instalado en su PC. Ejecute la aplicación Borland C++ Builder (Windows) o Borland Kylix (Linux) y desde el menú FILE|NEW seleccione la opción Console Wizard para crear una aplicación independiente de los componentes visuales del entorno gráfico.

Debe aparecer una ventana de edición como la de la figura. Ejercicio 5.2 i) Escriba en la ventana de edición del programa anterior el código fuente C++ del recuadro siguiente. No escriba los números de línea (solo se indican para hacer referencias a las sentencias) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

//G5Ejr2.cpp (Guia 5-Ejercicio 2) pragma hdrstop #include #include #include //----------------------------------------------#pragma argsused int main(int argc, char* argv[]) { int i=0,n; float suma=0; float x; cout<<"Cálculo del promedio:"<<endl; cout<<"Cantidad de datos:"; cin>>n;

Ingeniería Informática – Fundamentos de Programación 2008

Unidad 5

14

while (i
Introduccion A La A
April 2020 46