Programación Estructurada
UNIDAD I
INTRODUCCIÓN
1.1 Introducción a la programación estructurada
La computadora automática debe su derecho a existir, su utilidad, precisamente a su capacidad de
efectuar vastos cálculos que no pueden realizar los seres humanos. Deseamos que la computadora
efectúe lo que nunca podríamos hacer nosotros, y la potencia de las máquinas actuales es tal, que
inclusive los cálculos pequeños, por su tamaño, escapan al poder de nuestra imaginación limitada.
Sin embargo, debemos organizar el cálculo de manera tal que nuestros limitados poderes sean
suficientes para asegurar que se establecerá el efecto deseado. Esta organización incluye la
composición de los programas.
Los avances en la tecnología siempre van parejos con progresos en los lenguajes de programación y
con nuevas ayudas para simplificar el uso del computador, con lo cual un número mayor de usuarios se
beneficia de él. Pero la necesidad de hacer programas para resolver problemas específicos quizás
nunca desaparecerá.
1.1.1 ORDENADOR / COMPUTADORA / SISTEMA DE CÓMPUTO
Cualquier dispositivo electrónico que procesa, transforma o elabora información, es decir, a partir de
unos datos de entrada y siguiendo unas determinadas reglas genera nuevos datos de salida.
Elementos principales de un ordenador
• CPU (Unidad Central de Procesos)
Es la parte más importante de la computadora, la cual controla su funcionamiento. Realiza todo el
proceso de tratamiento de los datos conforme a las instrucciones del programa.
Está conformada por:
a) Unidad de Control (UC) Se ocupa de controlar y coordinar el conjunto de operaciones que se
realizan para dar el tratamiento adecuado de la información, interpretando para ello las
instrucciones que componen el programa en ejecución.
b) Unidad Aritmético-Lógica (ALU) Realiza todas las operaciones aritméticas y lógicas con
instrucciones del tipo suma, resta, and (y), or (o), etc.
1
Programación Estructurada
c) Memoria principal Almacena todos los datos y las instrucciones de entrada que se ejecutan en
ese momento, así como los resultados del proceso.
Almacena los datos para que puedan ser manipulados de forma rápida y directa. Este dispositivo
se denomina Memoria, Memoria Primaria, Memoria de Acceso Aleatorio (RAM)
Existen otros dispositivos complementarios del procesador:
• Dispositivos/periféricos
Se utilizan para la obtención, almacenamiento y comunicación de datos y resultados.
a) De entrada. Son aquellos dispositivos que permiten la introducción de datos, para que
posteriormente la computadora los procese.
Por ejemplo: teclado, Mouse, joystick, lápiz óptico, scanner, micrófono, webcam, etc.
b) De salida. Muestran los resultados de los procesos realizados por la computadora.
Por ejemplo: monitor, impresora, bocinas, graficadores, etc.
c) De almacenamiento de información. Conservan los datos que no son utilizados de forma
activa por la computadora, en tanto no se necesiten otra vez (días, meses, horas, años).
Por ejemplo: disquets, CDs, disco duro, memoria flash, etc.
d) De comunicación. Su función es servir de canal entre una o más computadoras o entre la
computadora y un dispositivo periférico externo.
Por ejemplo: fax-módem, tarjeta de red, controladores de puertos, hub USB.
1.1.2 LENGUAJE MÁQUINA
Aquel cuyas instrucciones son directamente entendibles por la computadora y no necesitan traducción
posterior para que la CPU pueda comprender y ejecutar el programa.
Las instrucciones en lenguaje máquina se expresan en términos de dígitos binarios (0,1) que es la
unidad de memoria más pequeña (bit).
1.1.3 PROGRAMA
Indica al procesador la serie de acciones que éste debe efectuar para llevar a cabo un determinado
procesamiento de información.
Es un conjunto de reglas para manipular la información, escritas como instrucciones de código máquina.
1.1.4 LENGUAJE DE PROGRAMACIÓN
Es una notación formal para describir algoritmos o funciones que serán ejecutados por un ordenador.
Permite comunicar instrucciones al ordenador/sistema.
Los lenguajes de programación pretenden:
• Disponer de instrucciones para programar más cercanas al entendimiento y forma de razonar
humanos, y así facilitar la tarea del programador.
• Conseguir que los programas sean independientes del procesador, de forma que sirvan para
distintos procesadores.
2
Programación Estructurada
El nivel de un lenguaje de programación se mide según la posición que éste ocupe entre el código
máquina y el lenguaje natural humano.
- LENGUAJE DE BAJO NIVEL. Lenguaje máquina, sus instrucciones son codificadas en
secuencias numéricas binarias (0 y 1’s).
- LENGUAJE ENSAMBLADOR. Es una versión simbólica de un lenguaje máquina, donde cada
operación y asignación de memoria se da con nombres simbólicos (ADD, MUL, DIV, PAGO,
NOMBRE).
- LENGUAJE DE ALTO NIVEL. Este utiliza palabras en lugar de símbolos que son fácilmente
entendibles, están diseñados para que las personas entiendan y escriban los programas de un
modo más fácil (Turbo Pascal, C, Basic, Fortran).
Es fundamental que un programa pueda ser traducido a lenguaje máquina de forma automática.
1.1.5 COMPILADOR
Es un traductor que transforma textos fuente de lenguajes de alto nivel a lenguajes de bajo nivel
(lenguaje máquina).
Programa fuente
Programas escritos en lenguajes de alto nivel.
Programa objeto o código objeto
Es el programa traducido (compilado) que está listo para ejecutarse en la computadora.
1.1.6 PROGRAMACIÓN
Es la planificación, proyección o ejecución de una tarea o proceso.
Es el establecimiento de un programa, se utiliza especialmente en el sentido de elaborar los datos
necesarios para que una máquina ejecute operaciones determinadas.
1.2 Programación estructurada
1.2.1 ¿Porqué la programación estructurada?
Durante los años 60’s, el desarrollo de software se encontró con severas dificultades. Por lo regular, los
programas de entrega del software se retrasaban, sus costos excedían en gran medida los
presupuestos, y los productos terminados no eran confiables.
Las personas empezaron a darse cuenta que el desarrollo de software era una actividad mucho más
compleja de lo que se habían imaginado.
La actividad de investigación en los años 60’s dio como resultado la evolución de la programación
estructurada –un método disciplinado de escribir programas que sean claros, que se demuestre que son
correctos y fáciles de modificar.
Uno de los resultados más tangibles de esta investigación, fue el desarrollo en 1971 hecho por el
profesor Nicklaus Wirth del lenguaje de programación Pascal. Pascal, al que se le da ese nombre en
honor a Blaise Pascal, matemático y filósofo del siglo XVII, fue diseñado para la enseñanza de la
programación estructurada en entornos académicos, y se convirtió con rapidez en el lenguaje
introductoria de programación de la mayor parte de las universidades.
3
Programación Estructurada
Por desgracia, el lenguaje carece de muchas características necesarias para hacerlo útil en aplicaciones
comerciales, industriales y de gobierno, por lo que no ha sido muy aceptado en estos últimos ámbitos.
Quizá la historia registre que la verdadera significación del Pascal fue su elección como base del
lenguaje de programación Ada.
Ada fue desarrollado bajo el patrocinio del Departamento de Defensa de los Estados Unidos (DOD)
durante los años 70 y principio de los 80. Se estaban utilizando cientos de lenguajes distintos para
producir los sistemas masivos de software de comando y de control de DOD. DOD deseaba un solo
lenguaje que pudiera llenar sus objetivos. Pascal fue seleccionado como base, pero el lenguaje final
Ada, es muy distinto de Pascal. Este lenguaje se llamó así en honor de Lady Ada Lovelace, hija del
poeta Lord Byron. A Lady Lovelace se le da por lo general el crédito de haber escrito el primer
programa de computación del mundo a principios de 1800. Una capacidad importante de Ada se
conoce como multitareas; esto permite a los programadores especificar qué actividades deben ocurrir en
paralelo. Otros lenguajes muy utilizados de alto nivel que hemos incluyendo C y C++ permiten al
programado escribir programas que sólo ejecuten una actividad a la vez.
La programación estructurada permite la escritura de programas fáciles de leer y modificar. En un
programa estructurado el flujo lógico se gobierna por las estructuras de control básicas: - secuenciales,
repetitivas y selectivas.
1.2.2 Técnicas de Programación.
Las nuevas teorías de la programación se centran en las técnicas de programación modular y
programación estructurada. El diseño de un programa entraña la descomposición del problema en
módulos (partes independientes) –programación modular–, la programación de cada módulo mediante
métodos estructurados –programación estructurada – y su unión posterior.
Programación Modular. El programa se divide en módulos, cada uno de los cuales ejecuta una única
actividad o tarea y se codifican independientemente de otros módulos. Cada uno de estos módulos se
analizan, codifican y ponen a punto por separado. Cada programa contiene un módulo llamado
programa principal que controla todo lo que sucede; se transfiere el control a submódulos de modo que
ellos puedan ejecutar sus funciones. Los módulos son independientes en el sentido en el que ningún
módulo puede tener acceso directo a cualquier otro módulo excepto el módulo al que llama y sus
propios submódulos.
Tamaño de los módulos. No existe una regla fija que permita definir el tamaño estándar del
módulo, una buena aproximación es considerar el tamaño físico de una página (30 ó 40 líneas de
instrucciones).
Implementación. Se implementan utilizando módulos que toman diferentes nombres según el
lenguaje de programación: subrutinas en BASIC y FORTRAN, procedimientos en Pascal,
secciones en COBOL, etc.
Programación estructurada. Se refiere a un conjunto de técnicas que han ido evolucionando. Estas
técnicas aumentan considerablemente la productividad del programa reduciendo el tiempo requerido
para escribir, verificar, depurar y mantener los programas.
La programación estructurada utiliza un número limitado de estructuras de control que minimizan la
complejidad de los problemas y que reducen los errores. Esta incorpora: diseño descendente, recursos
abstractos y estructuras básicas.
Recursos abstractos: Consiste en descomponer una determinada acción compleja en términos de un
número de acciones más simples capaz de ejecutarlas.
4
Programación Estructurada
Diseño descendente: Consiste en efectuar una relación entre las sucesivas etapas de estructuración.
Es decir, se descompone el problema en etapas o estructuras jerárquicas.
Estructuras básicas de control: En un programa estructurado el flujo lógico se gobierna por las
estructuras de control básicas:
• Secuenciales
• Repetitivas
• Selectivas
a) Estructura secuencial. Las instrucciones de un programa son ejecutadas en el mismo orden en que
ellas aparecen en el programa.
Es decir, es aquella en que una acción sigue a otra en secuencia. Las tareas se suceden de tal modo
que la salida de una es la entrada de la siguiente.
b) Estructura selectiva. Se utilizan para tomar decisiones lógicas. En éstas se evalúa una condición y
en función del resultado de la misma se realiza una opción u otra. Las estructuras selectivas pueden
ser:
- Simples. Ejecuta una determinada acción cuando se cumple una determinada condición.
- Doble. Permite elegir entre dos opciones posibles en función del cumplimiento o no de una
determinada condición.
- Múltiple. La estructura de selección múltiple evaluará una expresión que podrá tomar n valores
distintos 1, 2, 3, … , n. Según se elija uno de estos valores en la condición, se realizará una de las n
acciones.
c) Estructura repetitiva. Estructura que repiten una secuencia de instrucciones un número determinado
de veces.
Se llaman bucles o iteración por el hecho de repetir la ejecución de una secuencia de acciones.
1.2.3 Teorema de la programación estructurada
Establece que un programa propio puede ser escrito utilizando solamente las siguientes estructuras
lógicas de control: secuencia, selección e iteración.
Un programa se define como propio si cumple con los dos requerimientos siguientes:
1. Tiene estrictamente una entrada y una salida para el control del programa.
2. Existen caminos seguibles desde la entrada hasta la salida que conducen por cada parte del
programa, es decir, no existen lazos infinitos ni instrucciones que no se ejecutan.
Ventajas de la programación estructurada
Con la programación estructurada elaborar programas de computador es una labor que demanda
esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este estilo de programación podemos
obtener las siguientes ventajas:
- Los programas son más fáciles de entender.
- Un programa puede ser leído en secuencia, de arriba hacia abajo, sin necesidad de estar
saltando de un sitio a otro en la lógica.
5
Programación Estructurada
- La estructura del programa es más clara puesto que las instrucciones están más ligadas o
relacionadas entre sí.
- Reducción en los costos de mantenimiento.
- Programas más sencillos y más rápidos.
- Aumento de la productividad del programador.
- Los programas quedan mejor documentados internamente.
1.3 Características de un lenguaje para hacer programación estructurada. Lenguaje C
1.3.1 La historia de C
- Evolucionó a partir de los lenguaje BCPL y B.
- Lenguaje BCPL (1967) de Martín Richards, era una lenguaje para escribir software y
compiladores de sistemas operativos.
- Lenguaje B (1970) de Ken Thompson, para crear versiones iniciales del sistema operativo UNÍX
- C, derivado del lenguaje B (1972) por Dennis Ritchie, de los Laboratorios Bell, lenguaje de
desarrollo del sistema operativo UNÍX
- C es independiente del hardware.
- Es posible escribir programas en C que sean portátiles hacia la mayor parte de las
computadoras.
- A finales de los 70’s evoluciona lo que es el C tradicional.
- En 1978, Kernighan y Ritchie, desarrollan “The C Programming Language”.
- La expansión rápida de C sobre varios tipos de computadoras trajo consigo muchas variantes,
por lo que los desarrolladores de programas necesitaban escribir códigos que pudieran funcionar
en varias plataformas.
- En 1983, el Comité Técnico X3J11, bajo la American National Standards Comité on Computers
an Information Processing (X3), trabajan para “proporcionar una definición no ambigua e
independiente de máquina del lenguaje”.
- En 1989 se aprueba el estándar ANSI / ISO 9899:1990.
1.3.2 Biblioteca estándar de C
Los programas en C consisten de módulos o piezas que se denominan funciones.
La mayor parte de los programadores de C aprovechan una gran recopilación de funciones existentes,
que se conocen como la Biblioteca Estándar de C.
Debemos aprender el lenguaje C mismo, así como a utilizar sus funciones de la Biblioteca estándar.
Debemos reutilizar el software.
Cuando se está programando en C, por lo regular se utilizan los siguientes bloques constructivos:
a) Funciones de la biblioteca estándar de C
b) Funciones que debe crear usted mismo
c) Funciones a su disposición que creen otras personas
6
Programación Estructurada
Fundamentos del entorno C
Los sistemas C consisten en 3 partes:
- El entorno
- El lenguaje
- La biblioteca estándar
Las funciones de biblioteca no forman parte del lenguaje C mismo, estas funciones ejecutan
operaciones como entrada/salida y cálculos matemáticos.
Notas generales
- C es un lenguaje difícil.
- Las malas prácticas en la programación de hacer programas extraños y complicados, hace que
los programas sean difíciles de leer, se comporten en forma extraña y sean más difíciles de
probar y de depurar.
- C es un lenguaje portátil, por lo que los programas en C pueden ser ejecutados en muy diversas
computadoras.
- Aunque es probable escribir programas portátiles, existen muchos problemas entre diferentes
implantaciones de C y diferentes computadoras, que pueden hacer la portabilidad difícil de
alcanzar.
- C es un lenguaje muy rico en funciones, utilidades y herramientas, que facilitan al programador
su tarea.
1.3.3 Fases para la ejecución de los programas en C
7
Programación Estructurada
Cómo se estructura un programa en C
Archivos Cabecera
Constantes simbólicas
Variables globales
Funciones prototipo
main ( )
{
}
funciones ( )
{
}
1.3.4 El lenguaje de programación C++
C++ es una mejoría sobre muchas de las características de C, y proporciona capacidades de
programación orientada a objetos (OOP, por Object Oriented Programming) que promete mucho para
incrementar la productividad, calidad y reutilización del software.
Los diseñadores de C y los responsables de sus primeras puestas en práctica jamás anticiparon que
este lenguaje resultaría en un fenómeno como éste. Cuando un lenguaje de programación se torna tan
arraigado como C, nuevas necesidades demandan que el lenguaje evolucione, en lugar de que sólo sea
reemplazado por un nuevo lenguale.
El lenguaje C++ fue desarrollado por Stroustrup en los Laboratorios Bell y originalmente fue llamado “C
con clases”. El nombre C++ incluye el operador de incremento (++) de C, para indicar que C++ es una
versión mejorada de C. C++ proporciona un cierto número de características que “engalanan” el
lenguaje C. Pero lo que es aún más importante, permite llevar a cabo programación orientada a objetos.
Los objetos son en esencia componentes de software reutilizables que modelan elementos del mundo
real.
C++ es un superconjunto de C, por lo que, para compilar los programas existentes de C, los
programadores pueden utilizar un compilador C++ y posteriormente modificar de forma gradual estos
programas a C++. En este momento, ya algunos proveedores importantes de software ofrecen
compiladores C++ y no ofrecen productos de C por separado.
Muchas personas sienten que la mejor estrategia educacional hoy día es dominar C, y a continuación
estudiar C++.
1.4 Pasos para la solución de problemas con un lenguaje estructurado.
1.4.1 METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS POR MEDIO DE COMPUTADORAS
1. Definición del problema.
En esta etapa se deben establecer los resultados y objetivo que se desea para poder saber si los datos
que se tienen son suficientes para lograr los fines propuestos.
8
Programación Estructurada
2. Análisis de los datos.
Una vez definido el problema se deberán organizar los datos de tal manera que sean susceptibles de
usar en los cálculos siguientes.
3. Desarrollo del procedimiento.
Esta es la etapa de diseño en la que la mente creadora toma de todas las experiencias lo necesario para
proponer soluciones a los problemas a resolver, aquí se aplicarán los conocimientos adquiridos no sólo
en diseño de algoritmos, sino en la vida misma.
4. Codificación.
Es la traducción del algoritmo a un lenguaje computacional, pudiendo usar un pseudocódigo para
simular un lenguaje.
5. Prueba del algoritmo.
Se considerarán resultados previstos para datos conocidos a fin de que al probar cada una de sus
partes podamos ir comprobando que el algoritmo sirve o requiere modificarse.
6. Adecuaciones.
Esta etapa puede ser simultánea a la anterior, ya que las correcciones se irán dando a medida que
vayamos probando el algoritmo.
7. Documentación.
Esta también debiera irse dando a medida que se va probando el algoritmo, sin embargo, es
conveniente revisarlo a fin de hacer las anotaciones en cada parte de manera minuciosa.
8. Mantenimiento.
Después de que el algoritmo ha servido a su propósito para el que fue creado, queda el hacer las
adecuaciones cuando éstas sean requeridas, a esto se le denomina mantenimiento del algoritmo. El
que éste se pueda dar tiene que ver completamente con su adecuada documentación, ya que no
siempre es la misma persona la que tienen que dar éste mantenimiento.
1.4.2 ALGORITMO
Es un procedimiento paso a paso para resolver un problema en una cantidad finita de tiempo.
Es una lista de instrucciones para efectuar paso a paso un proceso.
LENGUAJES ALGORÍTMICOS
Forma metodológica de resolver un problema de índole administrativo, matemático o científico en forma
general de tal manera que pueda ser escrito en un lenguaje de computación.
1.4.3 TÉCNICAS PARA LA FORMULACIÓN DE ALGORITMOS
➢ Diagramas de flujo.
El arte de la programación de computadoras se basa en la integración lógica de las diversas
etapas del procesamiento. Los diagramas de flujo proponen enseñar a integrar en forma lógica los
procesos de programación.
Si se pueden trazar diagramas de flujo correctos, se podrá programar utilizando cualquier
lenguaje de programación, después de aprender las reglas básicas del lenguaje que se desee emplear.
9
Programación Estructurada
Un diagrama de flujo de un programa es una representación gráfica del flujo lógico de los datos
que se van a procesar. Antes de codificar un programa se debe hacer un diagrama de flujo que muestre
la secuencia de las etapas de programación que se deberán codificar. Dominar el arte de hacer
diagramas de flujo implica comprender la naturaleza de los procesamientos que se pueden realizar con
las computadoras. De manera que la llave para el éxito en los procesamientos con computadora no lo
constituye el dominio de las reglas de programación, sino una comprensión firme del flujo lógico.
Un diagrama de flujo es una herramienta que ayuda al programador en la preparación de sus
programas.
El programador dibuja un diagrama de flujo para asegurarse de que las etapas que se codificarán
en el programa se integrarán adecuadamente. Entonces un diagrama de flujo consiste de las etapas
que se van a programar y la secuencia en la cual se realizarán estas etapas.
Los diagramas de flujo están formados por símbolos que representan las funciones de los
programas, y de líneas de flujo que denotan la secuencia en la que se deberán realizar estas funciones.
Un diagrama de flujo se lee de arriba hacia abajo como lo indican las líneas de flujo, la única
variación que se hace a esta lectura vertical es la efectuada por la computadora cuando se toma una
decisión, la que podría hacer un cambio en la secuencia.
SÍMBOLOS PRINCIPALES DE LOS DIAGRAMAS DE FLUJO
Entrada/Salida
Se usa para representar operaciones de entrada o salida.
Procesamiento
Se usa para representar procesamientos internos de la computadora que por
lo general abarcan movimiento de datos y operaciones aritméticas.
Decisión
Se usa para representa comparaciones lógicas, estas siempre son en forma
de preguntas que tienen como única respuesta sí o no.
Conector
Se usa para representar una alteración del flujo normal de los datos o para
especificar un punto de entrada en donde se debe continuar el flujo.
Terminal
Se usa para representar el principio, el final e interrupción de los programas.
Tarjeta
Es un símbolo clásico de entrada de datos, se usa generalmente para indicar
que los datos representados en ella son exclusivos de entrada.
Impresora (documento)
Símbolo clásico de salida de información o datos. Se usa para representar
datos o resultados finales.
Pantalla
Símbolo de salida de salida de información de datos. Se usa para
representar datos o resultados finales.
10
Programación Estructurada
➢ Pseudocódigo
Es un lenguaje de especificación de algoritmos, el uso de tal lenguaje hace que el paso de la
codificación final sea relativamente fácil. La ventaja del pseudocódigo es que su uso en la planificación
de un programa, el programador se puede concentrar en la lógica y en las estructuras de control y no
preocuparse de las reglas del lenguaje que se trate.
Es también fácil modificar el pseudocódigo si se descubren errores en la lógica del programa. El
pseudocódigo utiliza palabras como:
Mientras Si Hasta
Leer Entonces Desde
Escribir Repetir Para
La escritura del pseudocódigo exige normalmente una identación (sangría en el margen izquierdo) de
diferentes columnas.
Forma general de un pseudocódigo
Variables
CABECERA
Constantes
Inicio
-------
CUERPO -------
DEL -------
ALGORITMO -------
Fin
11