Академический Документы
Профессиональный Документы
Культура Документы
__________________________________________________________________________________________________________
FUNDAMENTOS DE PROGRAMACIÓN
Tema 1
Conceptos previos
__________________________________________________________________________________________________________
Conceptos previos 1
Fundamentos de Programación
__________________________________________________________________________________________________________
1. INTRODUCCIÓN.
• Definición de Informática.
• La computadora.
• El proceso de la información.
__________________________________________________________________________________________________________
Conceptos previos 2
Fundamentos de Programación
__________________________________________________________________________________________________________
Programa
Retroalimentación (Feedback)
- Datos: Son las informaciones sobre las que actúan las instrucciones o las que
genera el programa.
Por otra parte, a veces ocurre que los datos de salida sirven como datos de
entrada a otro o al mismo programa (feedback).
__________________________________________________________________________________________________________
Conceptos previos 3
Fundamentos de Programación
__________________________________________________________________________________________________________
y2 (x2,y2)
Py
(x1,y1)
y1
x1 Px x2
__________________________________________________________________________________________________________
Conceptos previos 4
Fundamentos de Programación
__________________________________________________________________________________________________________
- Datos de Entrada: Coordenadas del origen (x1, y1) y del extremo (x2, y2)
- Algoritmo de Resolución:
Leer x1, y1, x2, y2
Calcular Px = x2-x1 (la proyección sobre el eje X)
Calcular Py = y2-y1 (la proyección sobre el eje Y)
Calcular R = raíz cuadrada (Px · Px + Py · Py)
Imprimir R
- Datos de Salida: R
Bus deDirecciones
Bus de Datos
Memoria secundaria
Entrada Salida
Memoria Principal
Memoria Principal
(Instrucciones y datos)
(Instrucciones y datos)
Unidad Aritmético-Lógica
Unidad de Control Unidad Aritmético-Lógica
Unidad de Control (A.L.U.)
(U.C.) (A.L.U.)
(U.C.)
__________________________________________________________________________________________________________
Conceptos previos 5
Fundamentos de Programación
__________________________________________________________________________________________________________
3. HARDWARE.
• Unidad de Entrada.
• Unidad de Salida.
• Memoria Principal.
rápida, con un tiempo de acceso del orden de nanosegundos, siendo el modo de acceso
directo (se puede llegar a cualquiera de sus posiciones sin pasar por las anteriores); su
mayor inconveniente es su alto coste lo que provoca que no se use en abundancia
aunque, por otra parte, el tamaño máximo de la memoria central instalable en un
sistema lo marca su arquitectura.
Antes de que un programa -conjunto de instrucciones- pueda ser ejecutado debe
estar almacenado (cargado) en la memoria principal. Posteriormente se introducirán en
ella los datos con los que se va a operar. Por último, los resultados obtenidos se
depositarán ahí mismo.
Las instrucciones que forman un programa se ejecutan en el mismo orden en
que están escritas, una tras otra, a menos que de alguna forma se imponga una ruptura
de esta secuencia natural.
Físicamente, podemos considerar que la memoria interna está constituida por
unidades elementales llamados biestables, que son circuitos capaces de mantener dos
estados de tensión -alto y bajo- de forma fiable y diferenciándolos claramente; es decir,
un biestable podrá mantener a su salida un nivel alto de tensión, o bien, un nivel bajo.
Se dice por tanto que cada biestable almacena un bit (mínima cantidad de información
representable), o sea, un 1, o bien, un 0.
Sin embargo, desde un punto de vista funcional, contemplaremos la memoria
central como una gran caja dividida en compartimentos, todos ellos del mismo tamaño y
cada uno de los cuales formado por un número determinado de biestables, siendo capaz
por tanto de albergar un determinado número de bits. Cada compartimento se conoce
como posición de memoria y será identificado por un número llamado dirección de
memoria.
En resumen, la memoria está dividida en posiciones, cada una de las cuales tiene
una dirección de memoria distinta y, para un determinado equipo, todas están formadas
por el mismo número de bits el cual depende de la arquitectura del ordenador. Los
tamaños más habituales -expresados en bits- son 8, 16, 32 y 64.
Para leer o escribir una información es necesario dar previamente la dirección de
la posición a la que se quiere acceder.
__________________________________________________________________________________________________________
Conceptos previos 7
Fundamentos de Programación
__________________________________________________________________________________________________________
Normalmente hay una zona de la memoria en la que sólo se puede leer (memoria
ROM) y que es permanente o no volátil (al desconectar la computadora su información
no se pierde), y otra en la que se puede leer y escribir (memoria RAM) y que es volátil.
La memoria ROM se utiliza generalmente para guardar programas y datos
básicos y específicos del ordenador en el que se la ubica. La memoria RAM se utiliza
generalmente para almacenar los programas y datos del usuario y el sistema operativo.
• Microprocesador o CPU.
• Coprocesador Matemático.
Esta unidad está especializada en realizar operaciones con números reales (en
formato de punto o coma flotante), liberando de este trabajo a la ALU y, en
consecuencia, mejorando el rendimiento de la CPU.
4. SOFTWARE.
Lo forman todos los programas que dirigen al microprocesador en las tareas que
son necesarias realizar. Se pueden clasificar en:
• Sistema Operativo.
• Software de aplicación.
Son todos aquellos programas que permiten al usuario resolver sus problemas de
computación por lo que implementan los algoritmos propios de una aplicación
específica (programas de gestión, de gráficos, procesadores de texto, gestores de bases
de datos, traductores de lenguajes de alto nivel,....).
Usuario
Software de Aplicación
Sistema Operativo
BIOS
Hardware
__________________________________________________________________________________________________________
Conceptos previos 9
Fundamentos de Programación
__________________________________________________________________________________________________________
Esta regla, como todas, tiene sus excepciones pues con técnicas de programación
avanzada es posible romper esta barrera aunque a expensas de una menor
compatibilidad del software sobre ordenadores diferentes.
5. LOS ALGORITMOS.
- Entrada de información.
- Proceso.
- Salida de información.
Una vez que hemos obtenido la información deseada, ésta debe ser
mostrada al usuario o almacenada en memoria auxiliar. A esta operación
se le llama salida o escritura y, dependiendo del periférico que la realice
se denominará de alguno de los siguientes modos: impresión,
visualización, grabación, etc.
- Debe ser preciso: Debe estar formado por una secuencia finita de
operaciones y debe quedar perfectamente definido el orden en que se van a realizar las
instrucciones.
Si se sigue un algoritmo dos veces con los mismos datos debe dar el mismo resultado.
El algoritmo debe contemplar todas las posibilidades que se puedan presentar.
Ejemplo 2:
Supóngase que se quiere explicar a alguien lo que debe hacer para
determinar si un número, entero positivo, es par. Se le puede decir: Si el número
se puede obtener sumando doses, es par. Si sumando doses se sobrepasa el valor
del número en 1, es impar.
Se entiende perfectamente lo que se quiere decir. No obstante, este
enunciado no es un algoritmo, pues no constituye una secuencia de operaciones.
Además, presenta ambigüedad. Este mismo enunciado se podría expresar en una
forma más precisa del siguiente modo:
Leer N
Repetir
Si N > 2 entonces N = N - 2
Si N = 2 escribe “PAR”
Si N = 1 escribe “IMPAR”
hasta N = 1 ó N = 2
Fin.
usan fundamentalmente los siguientes recursos: memoria principal -para almacenar los
datos y las instrucciones- y memoria masiva -para almacenar datos auxiliares-.
Ejemplo 3:
El algoritmo definido en el ejemplo anterior necesita (N + 1)/2
iteraciones para determinar si el número N es par. El tiempo que tarda el
algoritmo en resolver el problema aumentará linealmente con la magnitud del
número. Este comportamiento lineal puede ser aceptable (y deseable) en
problemas muy complejos. El problema planteado se puede resolver de forma
más simple usando el siguiente algoritmo:
Leer N
M = parte entera (N/2)
M= M*2
si M = N entonces escribe "PAR" sino escribe "IMPAR"
Por tanto, es necesario, una vez diseñado un primer algoritmo, realizar una
evaluación del mismo. Si se decide que éste no es eficiente, será necesario o bien
diseñar uno nuevo o bien optimizar el original. Optimizar un algoritmo consiste en
introducir modificaciones en él, tendentes a disminuir el tiempo que necesita para
resolver el problema o a reducir los recursos que utiliza. Así, en el ejemplo 2 se puede
disminuir el tiempo de ejecución si las dos instrucciones condicionales (Si....entonces...)
se sitúan después del bucle Repetir..hasta.
En muchos casos, una disminución del tiempo implica utilizar más variables, o
sea, ambos objetivos se contraponen. La importancia de cada uno de estos factores
dependerá de la naturaleza del problema y de los medios de que se disponga.
Una vez ideado el algoritmo será necesario crear un programa que sea
transcripción del algoritmo en algún lenguaje de programación. Las etapas a seguir en
este proceso se analizarán más adelante.
Hay diferentes métodos para representar los algoritmos. Hoy día es muy
frecuente utilizar un lenguaje específico de descripción de algoritmos o
«pseudocódigo». Existen otros procedimientos de representación que utilizan gráficos o
diagramas. Entre estos últimos caben destacar los ordinogramas y los diagramas de
Chapin o diagramas de Nassi-Schneiderman (diagramas N-S).
6. LENGUAJES DE PROGRAMACIÓN.
conjunto de símbolos y unas reglas distintas. Vamos a ver las características generales
de estos lenguajes, comenzando por los de bajo nivel hasta llegar a los de alto nivel.
• Lenguaje máquina.
Hay que tener en cuenta que un ordenador sólo es capaz de reconocer las
instrucciones que se suministran al procesador en lenguaje binario o lenguaje máquina.
Sus inconvenientes son
- Las instrucciones de este tipo de lenguaje están formadas por cadenas de ceros
y unos, aunque se pueden escribir en un código intermedio (octal o hexadecimal).
__________________________________________________________________________________________________________
Conceptos previos 13
Fundamentos de Programación
__________________________________________________________________________________________________________
diferencias entre el específico de cada procesador para poder realizar programas que
funcionen sobre ordenadores distintos.
• Lenguaje ensamblador.
Otra de sus ventajas es que permite incluir líneas de comentarios entre las líneas
de instrucciones. El traductor las elimina automáticamente, no incluyéndolas en el
código máquina que genera.
Estos lenguajes son mucho más fáciles de aprender y sus instrucciones tienen
una cercanía evidente con el lenguaje humano aunque en su versión anglosajona
(Write : escribe, lf : Si -condicional, Repeat : repite , etc.) y son multiplataforma
(funcionan en distintos ordenadores).
__________________________________________________________________________________________________________
Conceptos previos 15
Fundamentos de Programación
__________________________________________________________________________________________________________
• Fase de ANÁLISIS
• Fase de PROGRAMACIÓN.
A) EDICIÓN:
B) COMPILACIÓN:
C) MONTAJE:
D) PRUEBAS DE EJECUCIÓN:
8. ERRORES.
• Errores de Compilación.
__________________________________________________________________________________________________________
Conceptos previos 17
Fundamentos de Programación
__________________________________________________________________________________________________________
• Errores de Ejecución.
Se deben generalmente a operaciones no permitidas, como dividir por cero, leer
un dato no numérico en una variable numérica, exceder un rango de valores permitidos,
etc.
Se detectan porque se produce una parada anormal del programa durante su
ejecución, y se dice entonces que el programa se ha «caído» o que ha sido «abortado»
por el sistema.
Son más difíciles de detectar y corregir que los errores sintácticos, ya que
ocurren o no, dependiendo de los datos de entrada que se utilicen.
• Errores de Lógica.
Corresponden a la obtención por el programa de resultados que no son correctos,
y la única manera de detectarlos es realizando un número suficiente de ejecuciones de
prueba con una gama lo más amplia posible de juegos de datos de ensayo, comparando
los resultados producidos por el programa con los obtenidos «a mano» para esos
mismos datos.
Son los más difíciles de corregir, no sólo por la dificultad para detectarlos, sino
porque se deben a la propia concepción y diseño del programa.
• Errores de Especificación.
Es posiblemente el peor tipo de error, y el más costoso de corregir. Se deben a la
realización de unas especificaciones incorrectas motivadas por una mala comunicación
entre el programador y quien plantea el problema (cliente, profesor, etc.).
Se detectan normalmente cuando ya ha concluido el diseño e instalación del
programa por lo que su corrección puede suponer la repetición de gran parte del trabajo
realizado.
__________________________________________________________________________________________________________
Conceptos previos 18
Fundamentos de Programación
__________________________________________________________________________________________________________
• Programación Modular.
El diseño modular, descendente o mediante refinamientos sucesivos (top-down)
se basa en la realización de una serie de descomposiciones sucesivas del algoritmo
inicial, que describen el refinamiento progresivo del repertorio de instrucciones que van
a constituir el programa.
Un programa quedará formado por una serie de módulos, cada uno de los cuales
realiza una parte concreta de la tarea total.
• Programación Estructurada.
Se basa en el uso exclusivo de las estructuras secuencial, alternativa y repetitiva
para el control del flujo de ejecución de las instrucciones. Los programas así diseñados
serán fáciles de verificar, depurar y mantener.
Lo más significativo de este estilo de programación es que cualquier estructura
de control de flujo que se utiliza en ella tiene tan sólo una Entrada y una Salida.
• Programación Visual.
En la actualidad existen herramientas que nos permiten crear aplicaciones
Windows con un esfuerzo mínimo, sin apenas conocimiento del funcionamiento interno
de Windows e invirtiendo poco tiempo: los entornos de desarrollo visual.
__________________________________________________________________________________________________________
Conceptos previos 19
Fundamentos de Programación
__________________________________________________________________________________________________________
• Documentación Interna.
Constituida básicamente por el listado del programa fuente, su principal objetivo
es facilitar la lectura y comprensión del mismo. Se consideran parte de la
documentación interna los siguientes aspectos:
- Comentarios.
Son frases explicativas que se insertan en cualquier lugar del
programa fuente y que son ignoradas por el compilador (no son
traducidas a lenguaje objeto y, por tanto, no ocupan memoria adicional).
Se deben incluir tantos comentarios como sean necesarios para aclarar el
significado de las líneas de código que no sean obvias, especialmente
respecto a:
- Las variables y estructuras de datos declaradas.
- Las estructuras de control (bucles, alternativas).
- Los subprogramas y sus parámetros.
- Las secciones confusas.
- Código autodocumentado.
Las palabras reservadas que emplean los lenguajes de alto nivel
constituyen en sí mismas parte de la documentación, ya que
corresponden a términos (en inglés) que expresan su cometido. No
obstante se mejora la documentación interna de un programa si se siguen
los criterios enumerados a continuación:
- Uso de identificadores adecuados para nombrar las
variables, constantes, subprogramas, etc.
- Declaración de constantes para valores fijos. Por
ejemplo, declarar la constante IVA para el valor 0,16 .
- Sangrado, paginación e intercalación de líneas en blanco
para dar un aspecto agradable al programa.
• Documentación Externa.
Es el conjunto de documentos que se acompañan con el programa pero sin
formar parte de él. La documentación externa debe incluir al menos los siguientes
apartados:
- Especificaciones del análisis.
- Descripción del diseño del programa.
__________________________________________________________________________________________________________
Conceptos previos 20
Fundamentos de Programación
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
Conceptos previos 21