Download Ventajas de la programación estructurada

Document related concepts

Little man computer wikipedia , lookup

Scheme wikipedia , lookup

Maple (software) wikipedia , lookup

Common Lisp wikipedia , lookup

Programación funcional wikipedia , lookup

Transcript
Diagrama de flujo
Es una representación gráfica de un algoritmo. Se utiliza en disciplinas como la
programación, la economía, los procesos industriales y la psicología cognitiva. Estos
diagramas utilizan símbolos con significados bien definidos que representan los pasos
del algoritmo, y representan el flujo de ejecución mediante flechas que conectan los
puntos de inicio y de término.
Características
Un diagrama de flujo siempre tiene un único punto de inicio y un único punto de
término. Además, todo camino de ejecución debe permitir llegar desde el inicio hasta el
término.
Las siguientes son acciones previas a la realización del diagrama de flujo:
 Identificar las ideas principales a ser incluidas en el diagrama de flujo. Deben
estar presentes el dueño o responsable del proceso, los dueños o responsables del
proceso anterior y posterior y de otros procesos interrelacionados, otras partes
interesadas.
 Definir qué se espera obtener del diagrama de flujo.
 Identificar quién lo empleará y cómo.
 Establecer el nivel de detalle requerido.
 Determinar los límites del proceso a describir.
Los pasos a seguir para construir el diagrama de flujo son :
 Establecer el alcance del proceso a describir. De esta manera quedará fijado el
comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del
proceso previo y el final la entrada al proceso siguiente.
 Identificar y listar las principales actividades/subprocesos que están incluidos en
el proceso a describir y su orden cronológico.
 Si el nivel de detalle definido incluye actividades menores, listarlas también.
 Identificar y listar los puntos de decisión.
 Construir el diagrama respetando la secuencia cronológica y asignando los
correspondientes símbolos.
 Asignar un título al diagrama y verificar que esté completo y describa con
exactitud el proceso elegido.
Ventajas de los diagrama de flujo
 Favorecen la comprensión del proceso a través de mostrarlo como un dibujo. El
cerebro humano reconoce fácilmente los dibujos. Un buen diagrama de flujo
reemplaza varias páginas de texto.
 Permiten identificar los problemas y las oportunidades de mejora del proceso. Se
identifican los pasos redundantes, los flujos de los re-procesos , los conflictos de
autoridad, las responsabilidades, los cuellos de botella, y los puntos de decisión.
 Muestran las interfaces cliente-proveedor y las transacciones que en ellas se
realizan, facilitando a los empleados el análisis de las mismas.
 Son una excelente herramienta para capacitar a los nuevos empleados y también
a los que desarrollan la tarea, cuando se realizan mejoras en el proceso.
Tipos de diagramas de flujos
 Formato vertical: En él el flujo o la secuencia de las operaciones, va de arriba
hacia abajo. Es una lista ordenada de las operaciones de un proceso con toda la
información que se considere necesaria, según su propósito.
 Formato horizontal: En él, el flujo o la secuencia de las operaciones, va de
izquierda a derecha.
 Formato panorámico: El proceso entero está representado en una sola carta y
puede apreciarse de una sola mirada mucho más rápido que leyendo el texto, lo
que facilita su comprensión, aun para personas no familiarizadas. Registra no
solo en línea vertical, sino también horizontal, distintas acciones simultáneas y
la participación de más de un puesto o departamento que el formato vertical no
registra.
 Formato Arquitectónico: Describe el itinerario de ruta de una forma o persona
sobre el plano arquitectónico del área de trabajo. El primero de los flujogramas
es eminentemente descriptivo, mientras que los utilizados son fundamentalmente
representativos.
Algoritmo
Los diagramas de flujo sirven para representar algoritmos de manera gráfica.
En matemáticas, ciencias de la computación y disciplinas relacionadas, un
algoritmo (del latín, dixit algorithmus y éste a su vez del matemático persa Al
Juarismi1 ) es un conjunto preescrito de intrucciones o reglas bien definidas,
ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que
no generen dudas a quien lo ejecute.2 Dados un estado inicial y una entrada,
siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución.
Los algoritmos son objeto de estudio de la algoritmia.1
En la vida cotidiana se emplean algoritmos en multitud de ocasiones para resolver
problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos
para usar un aparato, o las instrucciones que recibe un trabajador por parte de su
patrón. Algunos ejemplos en matemáticas son el algoritmo de la división para
calcular el cociente de dos números, el algoritmo de Euclides para obtener el
máximo común divisor de dos enteros positivos, o el método de Gauss para resolver
un sistema lineal de
Lenguaje de programación
Un lenguaje de programación es un idioma artificial diseñado para expresar
computaciones que pueden ser llevadas a cabo por máquinas como las computadoras.
Pueden usarse para crear programas que controlen el comportamiento físico y lógico de
una máquina, para expresar algoritmos con precisión, o como modo de comunicación
humana.1 Está formado de un conjunto de símbolos y reglas sintácticas y semánticas
que definen su estructura y el significado de sus elementos y expresiones. Al proceso
por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de
un programa informático se le llama programación.
También la palabra programación se define como el proceso de creación de un
programa de computadora, mediante la aplicación de procedimientos lógicos, a través
de los siguientes pasos:
 El desarrollo lógico del programa para resolver un problema en particular.
 Escritura de la lógica del programa empleando un lenguaje de programación
específico (codificación del programa)

Ensamblaje o compilación del programa hasta convertirlo en lenguaje de
máquina.
 Prueba y depuración del programa.
 Desarrollo de la documentación.
Existe un error común que trata por sinónimos los términos 'lenguaje de programación'
y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de
programación y a otros más, como por ejemplo el HTML. (lenguaje para el marcado de
páginas web que no es propiamente un lenguaje de programación sino un conjunto de
instrucciones que permiten diseñar el contenido y el texto de los documentos)
Permite especificar de manera precisa sobre qué datos debe operar una computadora,
cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada
gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar
relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje
Léxico. Una característica relevante de los lenguajes de programación es precisamente
que más de un programador pueda usar un conjunto común de instrucciones que sean
comprendidas entre ellos para realizar la construcción del programa de forma
colaborativa.
Historia
Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje
específico conocido como código máquina, el cual la máquina comprende fácilmente,
pero que lo hace excesivamente complicado para las personas. De hecho sólo consiste
en cadenas interminables de números 1 y 0. (Binario)
Para facilitar el trabajo, los primeros operadores de computadoras decidieron
reemplazar los 1 y 0 por palabras o letras provenientes del inglés; éste se conoce como
lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa
add (sumar). En realidad escribir en lenguaje ensamblador es básicamente igual que
hacerlo en lenguaje máquina, pero las letras y palabras son más fáciles de recordar y
entender que los números.
La necesidad de recordar secuencias de programación para las acciones usuales llevó a
denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar),
MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le
denominó "instrucciones", y a este conjunto de instrucciones se le llamó lenguaje
ensamblador. Posteriormente aparecieron diferentes lenguajes de programación, los
cuales reciben su denominación porque tienen una estructura sintáctica similar a los
lenguajes escritos por los humanos, denominados también lenguajes de alto nivel.
La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella
Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien,
después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina
analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus
máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera
programadora de computadoras del mundo. El nombre del lenguaje de programación
Ada fue escogido como homenaje a esta programadora.
A finales de 1953, John W. Backus sometió una propuesta a sus superiores en IBM para
desarrollar una alternativa más práctica al lenguaje ensamblador para programar el
computador central IBM 704. El histórico equipo Fortran de Backus consistió en los
programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy
Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.2
El primer manual para el lenguaje Fortran apareció en octubre de 1956, con el primer
compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado,
porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su
compilador pudiera generar código cuyo desempeño fuera comparable al de un código
hecho a mano en lenguaje ensamblador.
En 1960, se creó COBOL, uno de los lenguajes usados aun en 2010 en informática de
gestión.
A medida que la complejidad de las tareas que realizaban las computadoras aumentaba,
se hizo necesario disponer de un método más eficiente para programarlas. Entonces, se
crearon los lenguajes de alto nivel, como lo fue el BASIC en las versiones introducidas
en los microordenadores de la década de 1980. Mientras que una tarea tan sencilla como
sumar dos números puede necesitar varias instrucciones en lenguaje ensamblador, en un
lenguaje de alto nivel bastará con solo una.
Implementación
La implementación de un lenguaje es la que provee una manera de que se ejecute un
programa para una determinada combinación de software y hardware. Existen
básicamente dos maneras de implementar un lenguaje: Compilación e interpretación.
Compilación es la traducción a un código que pueda utilizar la máquina. Los programas
traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los
programas ensambladores avanzados, pueden generar muchas líneas de código de
máquina por cada proposición del programa fuente.
Se puede también utilizar una alternativa para traducir lenguajes de alto nivel. En lugar
de traducir el programa fuente y grabar en forma permanente el código objeto que se
produce durante la compilación para utilizarlo en una ejecución futura, el programador
sólo carga el programa fuente en la computadora junto con los datos que se van a
procesar. A continuación, un programa intérprete, almacenado en el sistema operativo
del disco, o incluido de manera permanente dentro de la máquina, convierte cada
proposición del programa fuente en lenguaje de máquina conforme vaya siendo
necesario durante el procesamiento de los datos. El código objeto no se graba para
utilizarlo posteriormente.
La siguiente vez que se utilice una instrucción, se la deberá interpretar otra vez y
traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los
pasos de un ciclo o bucle, cada instrucción del bucle tendrá que volver a ser interpretada
en cada ejecución repetida del ciclo, lo cual hace que el programa sea más lento en
tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero
más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada
momento el código completo). El intérprete elimina la necesidad de realizar una
compilación después de cada modificación del programa cuando se quiere agregar
funciones o corregir errores; pero es obvio que un programa objeto compilado con
antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a
cada paso durante una ejecución del código.
La mayoría de lenguajes de altonivel, permiten la programación multipropósito, sin
embargo, muchos de ellos fueron diseñados para permitir programación dedicada, como
lo fue PASCAL con las matemáticas en su comienzo. También, se han implementado
lenguajes educativos infantiles como LOGO que mediante una serie de simples
instrucciones, permitía mover una tortuga entre otras cosas. En el ámbito de
infraestructura de internet, cabe destacar a Perl con un poderoso sistema de
procesamiento de texto y una enorme colección de módulos.
Técnica
Para escribir programas que proporcionen los mejores resultados, cabe tener en cuenta
una serie de detalles.
 Corrección. Un programa es correcto si hace lo que debe hacer tal y como se
estableció en las fases previas a su desarrollo. Para determinar si un programa
hace lo que debe, es muy importante especificar claramente qué debe hacer el
programa antes de desarrollarlo y, una vez acabado, compararlo con lo que
realmente hace.
 Claridad. Es muy importante que el programa sea lo más claro y legible posible,
para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un
programa se debe intentar que su estructura sea sencilla y coherente, así como
cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del
programador, tanto en la fase de creación como en las fases posteriores de
corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser
realizadas incluso por otro programador, con lo cual la claridad es aún más
necesaria para que otros programadores puedan continuar el trabajo fácilmente.
Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar
secciones de código. Otros, por diversión o para impedir un análisis cómodo a
otros programadores, recurren al uso de código ofuscado.
 Eficiencia. Se trata de que el programa, además de realizar aquello para lo que
fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma
posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un
programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para
la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros
recursos que también pueden ser de consideración al obtener la eficiencia de un
programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de
red que genera, etc.).
 Portabilidad. Un programa es portable cuando tiene la capacidad de poder
ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en
la que se elaboró. La portabilidad es una característica muy deseable para un
programa, ya que permite, por ejemplo, a un programa que se ha desarrollado
para sistemas GNU/Linux ejecutarse también en la familia de sistemas
operativos Windows. Esto permite que el programa pueda llegar a más usuarios
más fácilmente.
Paradigmas
Los programas se pueden clasificar por el paradigma del lenguaje que se use para
producirlos. Los principales paradigmas son imperativos y declarativos.
Los programas que usan un lenguaje imperativo especifican un algoritmo, usan
declaraciones, expresiones y sentencias.3 Una declaración asocia un nombre de variable
con un tipo de dato, por ejemplo: var x: integer; . Una expresión contiene un valor, por
ejemplo: 2 + 2 contiene el valor 4. Finalmente, una sentencia debe asignar una
expresión a una variable o usar el valor de una variable para alterar el flujo de un
programa. Por ejemplo: x := 2 + 2; if x == 4 then haz_algo();. Una crítica común en los
lenguajes imperativos es el efecto de las sentencias de asignación sobre una clase de
variables llamadas "no locales".4
Los programas que usan un lenguaje declarativo especifican las propiedades que la
salida debe conocer y no especifica cualquier detalle de implementación. Dos amplias
categorías de lenguajes declarativos son los lenguajes funcionales y los lenguajes
lógicos. Los lenguajes funcionales (como Haskell) no permiten asignaciones de
variables no locales, así, se hacen más fácil, por ejemplo, programas como funciones
matemáticas.4 El principio detrás de los lenguajes lógicos (como Prolog) es definir el
problema que se quiere resolver (el objetivo) y dejar los detalles de la solución a el
sistema de Prolog.5 El objetivo es definido dando una lista de sub-objetivos. Cada subobjetivo también se define dando una lista de sus sub-objetivos, etcétera. Si al tratar de
buscar una solución, una ruta de sub-objetivos falla, entonces tal sub-objetivo se
descarta y sistemáticamente se prueba otra ruta.
La forma en la cual es programa se crea puede ser por medio de texto o de forma visual.
En un lenguaje de programación visual, los elementos son manipulados gráficamente en
vez de especificarse por medio de texto.
Referencias
1. ↑ [Mark] (2010). O'Reilly Media, Inc. (ed.): «Learning Python, Fourth Edition»
(libro). O'Reilly. Consultado el 11 de febrero de 2010.
2. ↑http://www.softwarepreservation.org/projects/FORTRAN/index.html#By_FOR
TRAN_project_members
3. ↑ Wilson, Leslie B. (1993). Comparative Programming Languages, Second
Edition. Addison-Wesley, pp. 75. ISBN 0-201-56885-3. (en inglés).
4. ↑ a b Wilson, Leslie B. (1993). Comparative Programming Languages, Second
Edition. Addison-Wesley, pp. 213. ISBN 0-201-56885-3. (en inglés).
5. ↑ Wilson, Leslie B. (1993). Comparative Programming Languages, Second
Edition. Addison-Wesley, pp. 244. ISBN 0-201-56885-3. (en inglés).
Resolución de problemas de programación
La resolución de un problema mediante un ordenador consiste en el proceso que a
partir de la descripción de un problema, expresado habitualmente en lenguaje natural y
en términos propios del dominio del problema, permite desarrollar un programa que
resuelva dicho problema.
Este proceso exige los siguientes pasos:
 Análisis del problema.
 Diseño o desarrollo de un algoritmo.
 Transformación del algoritmo en un programa (codificación).
 Ejecución y validación del programa.
Los dos primeros pasos son los más difíciles del proceso. Una vez analizado el
problema y obtenido un algoritmo que lo resuelva, su transformación a un programa de
ordenador es una tarea de mera traducción al lenguaje de programación deseado.
Análisis del problema
Cuando un usuario plantea a un programador un problema a resolver mediante su
ordenador, por lo general ese usuario tendrá conocimientos más o menos amplios sobre
el dominio del problema, pero no es habitual que tenga conocimientos de informática.
Por ejemplo, un contable que necesita un programa para llevar la contabilidad de una
empresa será un experto en contabilidad (dominio del problema), pero no tiene por qué
ser experto en programación.
Del mismo modo, el informático que va a resolver un determinado problema puede ser
un experto programador, pero en principio no tiene por qué conocer el dominio del
problema; siguiendo el ejemplo anterior, el informático que hace un programa no tiene
por qué ser un experto en contabilidad.
Por ello, al abordar un problema que se quiere resolver mediante un ordenador, el
programador necesita de la experiencia del experto del dominio para entender el
problema. Al final, si se quiere llegar a una solución satisfactoria es necesario que:
 El problema esté bien definido con el máximo detalle
 Las especificaciones de las entradas y salidas del problema, deben ser
descritas también en detalle:
o ¿Qué datos son necesarios para resolver el problema?
o ¿Qué información debe proporcionar la resolución del problema?
Diseño del algoritmo
Un algoritmo consiste en una especificación clara y concisa de los pasos necesarios para
resolver un determinado problema, pero para poder diseñar algoritmos es necesario
disponer de una notación, que llamaremos ‘notación algorítmica’, que permita:
 Describir las operaciones puestas en juego (acciones, instrucciones,
comandos,...)
 Describir los objetos manipulados por el algoritmo (datos/informaciones)
 Controlar la realización de las acciones descritas, indicando la forma en que
estas se organizan en el tiempo
Para poder describir cualquier tipo de acción de las que intervienen en un algoritmo,
diversos autores proponen el uso de un conjunto de construcciones lógicas (secuencia,
decisión e iteración) con las que es posible escribir cualquier programa. Lo que sigue a
continuación es la descripción de las diferentes construcciones disponibles para el
diseño de algoritmos.
Acciones elementales
Se entiende por acciones elementales aquellas que el ordenador es capaz de realizar y
que serán de dos tipos:
 Aritmético – lógicas: Operaciones que, a partir de unos determinados datos,
realizan un cálculo aritmético (suma, resta, multiplicación,...) o un cálculo lógico
(mayor que, menor que, igual que,...).Las primeras devuelven un valor numérico
(4, -5.67,...) y las segundas un valor lógico (verdadero o falso).
 De entrada – salida: Acciones que permiten capturar datos para su posterior
tratamiento (las de entrada) y guardar los resultados de dicho tratamiento (las de
salida).
Secuencia de acciones elementales
Cuando en un algoritmo se deben ejecutar varias acciones sucesivamente, éstas se
describen una detrás de otra según el orden en que deban ejecutarse. Si se desea se
puede emplear algún tipo de símbolo para separar dos acciones consecutivas. En el
siguiente ejemplo se nuestra la descripción de n acciones separadas por punto y coma
(símbolo que habitualmente se emplea como separador).
Acción 1;
Acción 2;
...
Acción n;
Composición condicional
Cuando en un algoritmo se quiere indicar que cierta acción sólo se debe ejecutar bajo
cierta condición se indica del siguiente modo:
Si Condición Entonces
Acción;
FinSi
Sólo si la Condición (operación lógica) es verdadera se ejecutará la Acción. En este
caso, la Acción puede referirse tanto a una acción elemental como a un conjunto de
ellas.
Composición condicional doble (alternativa) [editar]
En ocasiones, se deben ejecutar unas acciones u otras dependiendo de la ocurrencia de
una determinada condición. Esta especificación se realiza del siguiente modo:
Si Condición Entonces
Acción A;
SiNo
Acción B;
FinSi
Dependiendo de si la Condición es verdadera o falsa se ejecutará la Acción A o la
Acción B respectivamente. De forma análoga a como ocurría en el caso anterior, tanto la
Acción A como la Acción B pueden referirse a una acción elemental o a un conjunto de
ellas.
Composición condicional múltiple
También es posible que a la hora de especificar la ejecución de una acción haya que
escoger ésta entre varias dependiendo del valor de una determinada variable (o
indicador). Este caso se expresa del siguiente modo:
Seleccionar Indicador
Caso Valor 1:
Acción 1;
Caso Valor 2:
Acción 2;
...
Caso Valor n:
Acción n;
[EnOtroCaso:
Acción X;]
FinCaso
En esta construcción Indicador debe tener un determinado valor que en caso de
coincidir con alguno de los n valores provocará la ejecución de la acción asociada a
dicho valor. Si el valor del Indicador no coincidiera con ninguno de los especificados se
ejecutará la Acción X. No tiene por qué haber una Acción X para cuando el Indicador'
no coincida con ninguno de los n valores; en ese caso, si el Indicador' no coincide con
ningún valor no se ejecutaría ninguna acción.
Al igual que en los casos anteriores, todas las acciones que aparecen en esta estructura
(Acción 1, Acción 2,..., Acción n y Acción X) pueden referirse a una única acción o a un
conjunto de ellas.
Composición iterativa o bucle
Cuando una acción o conjunto de acciones debe ejecutarse varias veces se recurre a una
estructura iterativa o bucle. En este tipo de estructuras se necesita una condición que
determine cuando terminan las iteraciones. Dependiendo de si esa condición se evalúa
al principio o al final de la estructura y de si la condición para que las iteraciones
continúen debe ser verdadera o falsa, se pueden definir cuatro construcciones iterativas
distintas:
La condición de
La condición de
terminación ha de
terminación ha de ser
ser FALSA
VERDADERA
(Estructura 1)
Condición al Mientras Condición
principio de la Hacer
estructura
Acción;
FinMientras
Condición al
final de la
estructura
(Estructura 3)
Hacer
Acción;
Mientras
Condición;
(Estructura 2)
Hasta Condición
Hacer
Acción;
FinHasta
(Estructura 4)
Hacer
Acción;
Hasta Condición;
Sobre las cuatro construcciones que se acaban de presentar cabe hacer las siguientes
observaciones:
 Si en las estructuras 1 y 2, cuando se evalúa la ‘Condición’, ésta toma por
primera vez un valor tal que no permita ejecutar la ‘Acción’ (FALSO en la 1 y
VERDADERO en la 2), ésta no se ejecutará ninguna vez. Es decir, puede ocurrir
que la ‘Acción’, en las estructuras 1 y 2, no se ejecute nunca.
 En las estructuras 3 y 4, al estar la ‘Condición’ de terminación al final, la
‘Acción’ se ejecutará antes de que la condición se evalúe por primera vez, por lo
que aunque la ‘Condición’ tome un valor tal que no se permita realizar más
iteraciones, la ‘Acción’ se ejecutará al menos una vez.
 Si las ‘Condiciones’ de las estructuras 1 y 2 son complementarias, es decir, que
siempre que una es verdadera la otra es falsa y viceversa (ejemplo: [a > b] y [a ≤
b] son condiciones complementarias), entonces ambas estructuras son
equivalentes ya que en ambas la ‘Acción’ se ejecutará el mismo número de
veces.
 De forma análoga, si las ‘Condiciones’ de las estructuras 3 y 4 son
complementarias también ambas estructuras serán equivalentes.
Existe una construcción especial para indicar una repetición de acciones que se suele
emplear cuando se quiere que dicha repetición se realice un número determinado de
veces:
Para i = 1 Hasta n Hacer
Acción;
FinPara
En este caso la ‘Acción’ se repetirá n veces e ‘i’ será una variable que tomará todos los
valores entre 1 y n (ambos inclusive) en cada una de las sucesivas repeticiones. Esta
construcción, aunque de apariencia diferente a las anteriores, se podría expresar como
un caso particular de la estructura 1 del siguiente modo:
i = 1;
Mientras i <= n Hacer
Acción;
i = i + 1;
FinMientras
En este caso la condición de finalización del bucle es que la variable ‘i’ sea mayor que
‘n’ y siempre, al finalizar la ejecución de la ‘Acción’, ‘i’ se incrementa en una unidad
antes de volver a evaluar la ‘Condición’ para el nuevo valor de ‘i’.
Estructuras de control
En lenguajes de programación, las estructuras de control permiten modificar el flujo
de ejecución de las instrucciones de un programa.
Con las estructuras de control se puede:
 De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-ThenElse y Select-Case)
 Ejecutar un grupo de sentencias mientras exista una condición (Do-While)
 Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until)
 Ejecutar un grupo de sentencias un número determinado de veces (For-Next)
 Etc
Todas las estructuras de control tienen un único punto de entrada y un único punto de
salida. Las estructuras de control se puede clasificar en : secuenciales, iterativas y de
control avanzadas. Esto es una de las cosas que permite que la programación se rija por
los principios de la programación estructurada.
Los lenguajes de programación modernos tienen estructuras de control similares.
Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es
su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura.
Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos
guardados.
Tipos de estructura de control
Algunas estructuras de control en el lenguaje Java
Antecendentes
El término "estructuras de control", viene del campo de la ciencia computacional.
Cuando se presentan implementaciones de Java para las estructuras de control, nos
referimos a ellas con la terminología de la Especificación del lenguaje Java, que se
refiera a ella como instrucciones.
Ejecución secuencial
Pero por lo general las instrucciones se ejecutan una después de la otra, en el orden en
que están escritas, es decir, en secuencia. Este proceso se conoce como ejecución
secuencial.
Transferencia de control
En Java, como en otros lenguajes de programación por excelencia como C y/o C++, el
programador puede especificar que las siguientes instrucciones a ejecutarse tal vez no
sea la siguiente en secuencia. Esto se conoce como transferencia de control. Hay que
tener en cuenta que la instrucción goto es una palabra reservada pero no se utiliza ni se
recomienda. Un programa bien estructurado no necesita de esta instrucción. Si sabes
programar no utilizaras goto.
Estructura de control: selección if simple
Se trata de una estructura de control que permite redirigir un curso de acción según la
evaluación de una condición simple, sea falsa o verdadera. Por ejemplo: Escribir un
programa en Java que compare dos números e indique si cuál es mayor, menor, mayor
y/o igual, menor y/o igual, o si son iguales:
String strComparacion = "";
...
if( numero1 == numero2 )
strComparacion += numero1 + " == " + numero2;
if( numero1 > numero2 )
strComparacion += numero1 + " > " + numero2;
if( numero1 < numero2 )
strComparacion += numero1 + " < " + numero2;
if( numero1 >= numero2 )
strComparacion += numero1 + " >= " + numero2;
if( numero1 <= numero2 )
strComparacion += numero1 + " <= " + numero2;
System.out.println(strComparacion);
...
If-Then-Else
Si la condición es verdadera, se ejecuta el bloque de sentencias 1, de lo contrario, se
ejecuta el bloque de sentencias 2.
IF (Condición) THEN
(Bloque de sentencias 1)
ELSE
(Bloque de sentencias 2)
END IF
Select-Case
 Se evalúa la expresión, dando como resultado un número.
 Luego, se recorren los "Case" dentro de la estructura buscando que el número
coincida con uno de los valores.
 Es necesario que coincidan todos sus valores.
 Cuando se encuentra la primera coincidencia, se ejecuta el bloque de sentencias
correspondiente y se sale de la estructura Select-Case.
 Si no se encuentra ninguna coincidencia con ningún valor, se ejecuta el bloque
de sentencias de la sección "Case Else".
SELECT (Expresión)
CASE Valor1
(Bloque de sentencias 1)
CASE Valor2
(Bloque de sentencias 2)
CASE Valor n
(Bloque de sentencias n)
CASE ELSE
(Bloque de sentencias "Else")
END SELECT
Do-While
Mientras la condición sea verdadera, se ejecutarán las sentencias del bloque.
DO WHILE (Condición)
(Bloque de sentencias)
LOOP
que también puede expresarse:
WHILE (Condición)
(Bloque de sentencias)
WEND
Do-Until
Se ejecuta el bloque de sentencias, hasta que la condición sea verdadera
DO
(Bloque de sentencias)
LOOP UNTIL (Condición)
For-Next
 Primero, se evalúan las expresiones 1 y 2, dando como resultado dos números.
 La variable del bucle recorrerá los valores desde el número dado por la
expresión 1 hasta el número dado por la expresión 2.
 El bloque de sentencias se ejecutará en cada uno de los valores que tome la
variable del bucle.
FOR (Variable) = (Expresión1) TO (Expresión2) STEP (Salto)
(Bloque de sentencias)
NEXT
Estructuras anidadas
Las estructuras de control básicas pueden anidarse, es decir pueden ponerse una dentro
de otra.
Estructura For-Next dentro de una estructura If-Then-Else
IF A > B THEN
FOR X = 1 TO 5
(Bloque de sentencias 1)
NEXT
ELSE
(Bloque de instrucciones 2)
END IF
Estructura If-Then-Else dentro de estructura For-Next
FOR x = 10 TO 20 STEP 2
IF A = C THEN
(Bloque de instrucciones)
ELSE
(Bloque de instrucciones)
END IF
NEXT
Estructura For-Next que está dentro de estructura Do-While
DO WHILE A > 0
FOR X = 1 TO 10
(Bloque de instrucciones)
NEXT
A=A-1
LOOP
Estructura Do-While que está dentro de estructura For-Next
for(i=1;i<=10;i++)
{
do
{
/* Bloque de instrucciones */
a--;
}
while(a>0);
}
Estructura If-Then dentro de estructura For-Next dentro de estructura Do-While
Do While A > 0
For X = 1 to 10
If A = C Then
(Bloque de instrucciones1)
Else
(Bloque de instrucciones2)
End If
Else
Nextif
A=A-1
Loop
Bucle (programación)
Un bucle o ciclo, en programación, es una sentencia que se realiza repetidas veces a un
trozo aislado de código, hasta que la condición asignada a dicho bucle deje de
cumplirse.
Generalmente, un bucle es utilizado para hacer una acción repetida sin tener que escribir
varias veces el mismo código, lo que ahorra tiempo, deja el código más claro y facilita
su modificación en el futuro.
El bucle y los condicionales representan la base de la programación estructurada. Es una
evolución del código ensamblador, donde la única posibilidad de iterar un código era
establecer una sentencia jump (que en los lenguajes de programación fue sustituida por
el "ir a" o GOTO).
Los tres bucles más utilizados en programación son el bucle while, el bucle for y el
bucle repetir.
Ejemplo en código C de sentencias repetidas:
int var=0;
//código que puede ser sustituido por un bucle
var = var + 2; //var igual a 2 (puede ser sustituído por var+=2)
var = var + 2; //var igual a 4
var = var + 2; //var igual a 6
var = var + 2; //var igual a 8
var = var + 2; //var igual a 11
// fin de código que puede ser sustituido por un bucle
printf("el resultado es %i", var );
Ejemplo con un bucle:
int var=0;
//Código para el bucle
int i;
// este es el Bucle for
for(i=0;i<10;i+=2)
{
var += 2;
}
printf("el resultado es %i", var);
Algunos lenguajes de programación tienen sentencias que permiten "escapar" de los
bucles sin llegar a la condición de fin, como el romper o el devolver.
Ejemplo escapando de un bucle en Visual Basic 1:
Dim h&, var&
var = 0
'Codigo del Bucle
do
var = var + 2
if var = 10 then
goto escape
end if
loop
'Codigo para salir del bucle
escape:
print "El resultado es " & var
Ejemplo escapando de un bucle en Visual Basic 2:
Dim h&, var&
var = 0
'Codigo del Bucle
do
var = var + 2
if var = 10 then
exit do
end if
loop
'Codigo para salir del bucle
print "El resultado es " & var
Bucle for
El bucle for o ciclo for es una estructura de control en la que se puede indicar el
número máximo de iteraciones. Está disponible en casi todos los lenguajes de
programación imperativos.
Elementos del bucle




'Variable de control': prácticamente un mandato impuesto por el uso habitual es
utilizar la letra i como variable de control, o bien sus sucesoras en caso de bucles
anidados. El uso de esta letra críptica quizás a primera vista es sin embargo una
excelente forma de aportar agilidad de lectura al código por su uso tan extensivo.
Como raras veces los bucles anidados superan las tres dimensiones (por una
sencilla cuestión de explosión exponencial), las letras i, j y k suelen ser las
únicas relacionadas con este uso. En C se define en el primer parámetro de la
instrucción junto con la inicialización (opcional).
Inicialización de la variable de control: en pseudolenguaje se pide explicitarlo
(es la sección := ValorInicial), sin embargo, otros lenguajes más permisivos
como C no lo requieren de forma obligatoria. De todos modos, la práctica de
utilizar variables de control que no se inicializan en el bucle no es recomendada
para la legibilidad del código. En C se define en el primer parámetro del bucle
junto con la variable de control.
Condición de control: en pseudolenguaje se ve representado por el valor final
que puede tomar la variable de control (la sección A ValorFinal). En C es el
segundo parámetro y puede ser cualquier condición (ni siquiera es obligación
que esté la variable de control, aunque una vez más, esto no se considera una
buena práctica).
Incremento: en pseudolenguaje se toma por defecto el valor 1, aunque puede
explicitarse por medio de la sentencia PASO = ValorPaso cualquier número
entero (léase bien entero, o sea que técnicamente podemos decrementar). En C
es el último parámetro.

Cuerpo: es lo que se hará en cada iteración, pueden ser una o más instrucciones.
En pseudolenguaje pesa la restricción de no poder alterar el valor de la variable
de control; esto no es requerido en C, pero no se considera una buena práctica.
Usos
Su uso principal se orienta a los vectores, pudiendo modificar, agregar, eliminar o
consultar datos que se encuentren según el índice. Por esto último, una condición
mínima del vector es que debe ser ordenado, por que si se intenta leer un dato
inexistente, esto genera un error de programación.
For en pseudolenguaje
La principal diferencia de un bucle PARA con respecto a los bucles MIENTRAS Y
REPETIR, es que puede determinarse al comienzo del bucle cuántas veces se iterará el
mismo, lo cual muchas veces puede redundar en una optimización del código por parte
de los compiladores. Los condicionales constituyen junto con los bucles los pilares de la
programación estructurada, y su uso es una evolución de una sentencia de lenguaje
ensamblador que ejecutaba la siguiente línea o no en función del valor de una
condición.
El bucle PARA se ha convertido en el bucle más ampliamente utilizado en la
programación, ya que con la evolución de los lenguajes la mayoría de las condiciones
de fin
MIENTRAS NoFinDeTabla(tabla) HACER
PróximoRegistro(tabla)
HacerAlgo(ElementoActual(tabla))
FIN MIENTRAS
Es lo mismo decir:
PARA i := 0 a CantidadRegistros(tabla) - 1, PASO = 1
PróximoRegistro(tabla)
HacerAlgo(ElementoActual(tabla))
FIN PARA
Otro uso común es utilizar los bucles PARA para recorrer vectores de dos o más
dimensiones, en cuyo caso se anidan estas iteraciones.
SEUDOLENGUAJE
Vector a[3][4][2]. // Estamos indicando un vector de 3 dimensiones y 24 elementos en
total.
PARA i:= 0 A 2 HACER
PARA j:= 0 A 3 HACER
PARA k:= 0 A 1 HACER
HacerAlgo(a[i][j][k])
FIN PARA
FIN PARA
FIN PARA
Ejemplo de PARA en pseudolenguaje
PARA VariableControl := ValorInicial A ValorFinal, PASO = Incremento
Cuerpo
FIN PARA
donde VariableControl, ValorInicial, ValorFinal y Paso son enteros. La(s)
instrucción(es) del cuerpo se ejecutará(n) (ValorFinal - ValorInicial + 1) veces, o sea
que va desde ValorInicial a ValorFinal inclusive.
Ejemplo en C
# include <stdio.h>
int main()
{
int vector[10], i;
for(i = 0; i < 10; i++)
{
vector[i] = i;
}
}
En la definición del for, tenemos que la variable de control i se inicializa en un valor 0,
luego se entrega la condición de control que debe ser falsa durante su ejecución, para
completar el ciclo; y por último, tenemos el incrementador en una unidad.
Si por ejemplo en la condición colocamos i < 11, entonces el ciclo for se ejecutará desde
[0...10], lo cual, al intentar acceder al elemento vector[10], esto generará error, ya que el
vector (por definición) va desde [0..(n-1)].
Ejemplo anterior escrito en Lexico
tarea
{
los objetos vector[10], i son cantidades
variando i desde 0 hasta 9 haga
copie i en vector[i]
}
Bucle Por Cada (For Each)
Este bucle es una evolución del concepto del bucle Para en algunos lenguajes. Se utiliza
para recorrer estructuras repetitivas de datos de forma más simple y ágil. El bucle For
Each puede describirse genéricamente (en pseudolenguaje) de la siguiente manera:
P
OR CADA elemento DE tipo EN conjunto HACER
Cuerpo
FIN FOR EACH




Elemento: es el nombre de la variable u objeto que toma el elemento iterado en
el cuerpo del bucle.
Tipo de Dato: es el tipo de variable o la clase a la que pertenece el objeto que se
quiere iterar.
Conjunto: es la estructura de datos que se quiere iterar. El uso más típico es con
vectores o -en programación orientada a objetos- clases del tipo Colección.
Cuerpo: es lo que se hará en cada iteración, pueden ser una o más instrucciones.
Si bien no se impone una obligación al respecto, lo más común es que en este
Cuerpo exista alguna operación sobre el elemento iterado.
Necesidad de una nueva estructura de control
Esta estructura surge como una innovación en los lenguajes para permitir un código más
ágil y legible en una situación que es una de las principales causas del uso del bucle
PARA: aplicar la misma operación sobre todos los elementos de un vector, y no
necesitar conocer la posición del elemento en el vector. Esta estructura con el bucle
PARA se resuelve de la siguiente manera:
Con el bucle POR CADA esto se reduce a:
POR CADA x DE tipo EN Vector HACER
x = AlgunaOperación(x)
FIN PARA
Las ventajas de utilizar la estructura POR CADA son las siguientes:
1. No es necesario llamar a una función que obtenga el tamaño del vector
2. No es necesario utilizar la incómoda notación de subíndices para referirnos al
valor en cuestión, sobre todo teniendo en cuenta que si utilizamos esta estructura
es porque no necesitamos el valor del índice.
3. Nos permite hacer un chequeo en tiempo de compilación sobre el tipo de dato
que representa el elemento.
El bucle POR CADA no es un sustituto del PARA, es una mejora para el muy frecuente
caso anteriormente mencionado. La diferencia esencial entre el bucle PARA y el POR
CADA es que en el primero guía su iteración por una variable que se incrementa hasta
cierto punto de corte; en cambio en el segundo lo que guía la iteración es el recorrido de
todos los elementos de un vector. Ciertamente podemos transformar cualquier POR
CADA en un PARA, pero transformar un bucle PARA en un bucle POR CADA
requeriría inicializar y controlar manualmente las variables de control, con lo cual se
perdería nuevamente legibilidad en el código. Por tanto, cuando en un lenguaje se nos
da la posibilidad de utilizar ambas estructuras, la elección del POR CADA debe hacerse
en aquellos casos para los que fue pensado: aplicar la misma operación a todos los
elementos de un vector sin importar el orden en que se hagan; si bien no es necesario
que la variable elemento sea utilizada en el cuerpo del bucle, su ausencia denota con
seguridad una mala elección de estructura de control.
Bucle while
El Bucle while o bucle mientras es una estructura de la mayoría de los lenguajes de
programación estructurados cuyo propósito es repetir un bloque de código mientras una
condición se mantenga verdadera.
Contenido
[ocultar]
 1 Sintaxis
 2 Condición
o 2.1 Sentencias Comparativas
o 2.2 Particularidades de lenguajes
 3 Ejemplo (usando sintaxis de C)
 4 Ejemplo (usando el lenguaje Lexico)
Sintaxis
La sintaxis en pseudocódigo es la siguiente:
Condición
La condición ha de ser una sentencia que devuelva un valor booleano, y esta puede ser
el valor booleano en sí, verdadero(true) si la condición se cumple, o falso si esta no se
cumple(false). También puede contener el nombre de una variable booleana, y el valor
de la expresión dependerá de su contenido. Se debe tener en cuenta que además de las
variables también puede haber llamadas a funciones que devuelvan un valor.
Sentencias Comparativas
La forma más obvia tal vez, y la más usada sin duda, son las sentencias comparativas,
que usan los operandos igual, diferente, menor o igual, mayor o igual, menor y mayor.
En el caso del lenguaje C, se utilizan los siguientes símbolos para representar las
comparaciones anteriores: ==, !=, <=, >=, <, >,
Particularidades de lenguajes
En algunos lenguajes, se pueden utilizar variables no booleanas en la comparación: Por
ejemplo, si la variable vale 0 será como si la condición no se cumpliera, y siempre que
sea diferente de 0, se considerará que la condición se cumple.
Ejemplo (usando sintaxis de C)
int Tecla = 0;
while(Tecla == 0)
{
Tecla = readkey(); /* Intentamos leer una pulsación de tecla*/
}
En este ejemplo el programa va a leer la pulsación de una tecla mientras su valor sea
igual a cero, en el momento en el que se pulse una Tecla distinta, se detendrá.
Ejemplo (usando el lenguaje Lexico)
Genera y muestra los primeros 10 números naturales:
tarea
{
el objeto número_natural es una cantidad
copie 0 en número_natural
mientras número_natural < 10 haga:
{
copie número_natural + 1 en número_natural
muestre número_natural
}
}
Bucle repetir
El bucle repetir comprueba la condición de finalización al final del cuerpo del bucle, y
si ésta es cierta continua con el resto del programa, a veces esto resulta más adecuado.
Contenido
[ocultar]
 1 Sintaxis
 2 En lenguajes de programación
 3 Ejemplos
 4 Reemplazable en casi todos los casos
 5 Véase también
Sintaxis
La sintaxis en pseudocódigo es la siguiente:
El cuerpo del bucle es el fragmento de programa que será repetido en cada
iteración.
La condición es una variable o una función reducible a valor booleano.
En lenguajes de programación
En la mayoría de los lenguajes de programación seria:
REPEAT
…
…
UNTIL (condición)
Esta estructura de control siempre permite la ejecución del cuerpo del bucle cuando
menos una vez, y lo finaliza cuando la condición es cierta.
Ejemplos
Una situación típica en la que resulta cómoda el empleo de esta sentencia es la
que se produce cuando al finalizar cada iteración se pregunta al operador si
desea continuar con otra nueva. En estos casos, el programa siempre realiza la
primera iteración y según la condición de salida la repite. Otro caso también
típico son los filtros de entrada de datos, donde se comprueba si el valor de la
entrada esta en un rango de valores.
Admite un número del 3 al 7, si no pregunta de nuevo
REPEAT
WriteString(“Escribe el numero”)
ReadInt(numero)
UNTIL (numero >= 3) AND (numero <= 7)
Reemplazable en casi todos los casos
Dentro de la programación estructurada, el bucle repetir puede ser sustituido por un
bucle mientras, del siguiente modo:
Repetir
(Cuerpo del bucle)
Hasta que (condición)
Puede escribirse
(Cuerpo del bucle)
Mientras NO(condición)
(Cuerpo del bucle)
fmientras
Estos dos fragmentos de código son equivalentes, porque ambos presentan el mismo
resultado en la mayoría de los casos. De todos modos, el bucle repetir es útil cuando se
desean realizar las acciones que están dentro al menos en una ocasión.
Bucle repetir
El bucle repetir comprueba la condición de finalización al final del cuerpo del bucle, y
si ésta es cierta continua con el resto del programa, a veces esto resulta más adecuado.
Contenido
[ocultar]
 1 Sintaxis
 2 En lenguajes de programación
 3 Ejemplos
 4 Reemplazable en casi todos los casos
 5 Véase también
Sintaxis
La sintaxis en pseudocódigo es la siguiente:
El cuerpo del bucle es el fragmento de programa que será repetido en cada
iteración.
La condición es una variable o una función reducible a valor booleano.
En lenguajes de programación
En la mayoría de los lenguajes de programación seria:
REPEAT
…
…
UNTIL (condición)
Esta estructura de control siempre permite la ejecución del cuerpo del bucle cuando
menos una vez, y lo finaliza cuando la condición es cierta.
Ejemplos
Una situación típica en la que resulta cómoda el empleo de esta sentencia es la
que se produce cuando al finalizar cada iteración se pregunta al operador si
desea continuar con otra nueva. En estos casos, el programa siempre realiza la
primera iteración y según la condición de salida la repite. Otro caso también
típico son los filtros de entrada de datos, donde se comprueba si el valor de la
entrada esta en un rango de valores.
Admite un número del 3 al 7, si no pregunta de nuevo
REPEAT
WriteString(“Escribe el numero”)
ReadInt(numero)
UNTIL (numero >= 3) AND (numero <= 7)
Reemplazable en casi todos los casos
Dentro de la programación estructurada, el bucle repetir puede ser sustituido por un
bucle mientras, del siguiente modo:
Repetir
(Cuerpo del bucle)
Hasta que (condición)
Puede escribirse
(Cuerpo del bucle)
Mientras NO(condición)
(Cuerpo del bucle)
fmientras
Estos dos fragmentos de código son equivalentes, porque ambos presentan el mismo
resultado en la mayoría de los casos. De todos modos, el bucle repetir es útil cuando se
desean realizar las acciones que están dentro al menos en una ocasión.
Bucle infinito
Bucle infinito en programación es aquel ciclo que se repite de forma indefinida ya que
su condición para finalizar nunca se cumple.
Por definición un bucle debe contener condiciones que establezcan cuándo empieza y
cuándo acaba, de manera que, mientras las condiciones se cumplan, ejecute una
secuencia de código de manera repetitiva. En el caso de ciclo infinito, como la
condición de finalización no se alcanza, el bucle sigue ejecutando el segmento de
código indefinidamente.
Contenido
[ocultar]
 1 Ejemplo de ciclo infinito en C (WHILE)
 2 Ejemplo de ciclo infinito en C (FOR)
 3 Bucle infinito en Visual Basic (While)
 4 Véase también
Ejemplo de ciclo infinito en C (WHILE)
#include <stdio.h>
int main(void)
{
int x = 0;
while(x < 10)
{
printf("No acabaré nunca!\n");
}
return 0;
}
Se observa que la sentencia printf("No acabaré nunca\n"); siempre se ejecuta porque la
condición del bucle while() siempre es cierta, no existe una condición de salida que
obligue al bucle a finalizar. Exactamente, no se alcanza la condición de salida. Si en el
ejemplo anterior, dentro del bloque de código del bucle while, se encontrase la
instrucción
x++;
el bucle hubiera ejecutado 10 veces y hubiera terminado.
También existe esta posibilidad con el while(true). En C:
#include <stdio.h>
int main(void)
{
while(1)
{
printf("No acabaré nunca!\n");
}
return 0; /*De todas maneras no llega nunca a ejecutarse esta línea*/
}
Ejemplo de ciclo infinito en C (FOR)
#include <stdio.h>
int main(void)
{
int cont;
for (cont = 0; cont < 5; cont++)
{
if (cont == 4)
cont = 0;
printf("%d\n",cont);
}
return 0;
}
En la sentencia "printf" se muestra en pantalla 0,1,2,3,0,1,2,3,0,.... infinitamente y
mientras no llegue a 5 no se cerrará el programa.
Y también podemos crear un ciclo infinito con el for de esta forma:
#include <stdio.h>
int main(void)
{
for (;;)
printf("Bucle infinito\n");
return 0;
}
Bucle infinito en Visual Basic (While)
Public function suma2(a, b) As Double
suma2 = a + b
While (suma2 >= 10)
suma2 = suma2 + 1
Wend
Siempre que la suma de a y b sea superior o igual a 10
Programación estructurada
La programación estructurada es una forma de escribir programas de ordenador
(programación de computadora) de manera clara. Para ello utiliza únicamente tres
estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción
o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB
o múltiples RETURN).
Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las
necesidades de programación existentes en los años 1960, principalmente debido a las
aplicaciones gráficas, por lo que las técnicas de programación estructurada no son
suficientes. Ello ha llevado al desarrollo de nuevas técnicas, tales como la programación
orientada a objetos y el desarrollo de entornos de programación que facilitan la
programación de grandes aplicaciones.
Contenido
[ocultar]
 1 Orígenes de la programación estructurada
o 1.1 Estructura secuencial
o 1.2 Estructura selectiva o de selección
o 1.3 Estructura iterativa
o 1.4 Anidamiento
 2 Ventajas de la programación estructurada
 3 Inconvenientes de la programación estructurada
 4 Véase también
Orígenes de la programación estructurada
A finales de los años 1960 surgió una nueva forma de programar que no solamente daba
lugar a programas fiables y eficientes, sino que además estaban escritos de manera que
facilitaba su comprensión posterior.
El teorema del programa estructurado, demostrado por Böhm-Jacopini, demuestra que
todo programa puede escribirse utilizando únicamente las tres instrucciones de control
siguientes:
 Secuencia
 Instrucción condicional.
 Iteración (bucle de instrucciones) con condición al principio.
Solamente con estas tres estructuras se pueden escribir todos los programas y
aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio
de estructuras de control, éstas pueden ser construidas mediante las tres básicas.
Estructura secuencial
Una estructura de programa es secuencial si se ejecutan una tras otra a modo de
secuencia, es decir que una instrucción no se ejecuta hasta que finaliza la anterior.
Ejemplo:
INPUT x
INPUT y
auxiliar= x
x= y
y= auxiliar
PRINT x
PRINT y





Esta secuencia de instrucciones permuta los valores de x e y, con ayuda de una
variable auxiliar, intermedia.
1º Guardamos una copia del valor de x en auxiliar.
2º Guardamos el valor de y en x, se pierde el valor anterior de x pero no importa
porque tenemos una copia en auxiliar.
3º Guardamos en y el valor de auxiliar, que es el valor inicial de x.
El resultado es el intercambio de los valores de x e y, en tres operaciones
secuenciales.
Estructura selectiva o de selección
La estructura selectiva permite la realización de una instrucción u otra según un criterio,
solo una de estas instrucciones se ejecutara.
Ejemplo:
IF a > b THEN
PRINT a ; " es mayor que " ; b
ELSE
PRINT a ; " no es mayor que " ; b
END IF
Esta instrucción selectiva puede presentar dos mensajes, uno a es mayor que b, y el
otro a no es mayor que b, solo uno de ellos será presentado, según el resultado de la
comparación de a y b, si el resultado de a > b es cierto, se presenta el primer mensaje, si
es falso el segundo, las palabras IF, THEN, ELSE, END IF; son propias de la
instrucción (palabra reservadas) que tienen un significado en el lenguaje, sirven de
separadores, y el usuario no debe utilizarlas salvo para este fin.




IF señala el comienzo de la instrucción condicional, y se espera que después esté
la condición de control de la instrucción.
THEN señala el fin de la condición, y después estará la instrucción a realizar si
la condición es cierta.
ELSE separa la instrucción que se ejecutará si la condición es cierta de la que
se ejecutará si es falsa.
END IF indica que la instrucción condicional finaliza y el programa seguirá su
curso.
Ampliemos un poco el ejemplo anterior:
IF a > b THEN
PRINT a ; " es mayor que " ; b
ELSEIF a < b THEN
PRINT a ; " es menor que " ; b
ELSE
PRINT a ; " es igual que " ; b
END IF
Este ejemplo nos permite considerar situaciones en las que tenemos más de dos
alternativas. En este caso hemos considerado tres, pero hay situaciones en las que deben
considerarse más casos y para ellos se puede repetir las veces que queramos la parte
ELSEIF.
Estructura iterativa
Un bucle iterativo o iteración de una secuencia de instrucciones, hace que se repitan
mientras se cumpla una condición, en un principio el número de iteraciones no tiene
porque estar determinado.
Ejemplo:
a= 0
b= 7
WHILE b > a DO
PRINT a
a= a + 1
WEND
Esta instrucción tiene tres palabras reservadas WHILE, DO y WEND.
 WHILE: señala el comienzo del bucle y después de esta palabra se espera la
condición de repetición, si la condición es cierta se pasa al cuerpo del bucle, si
no al final de la instrucción mientras.
 DO: señala el final de la condición, lo que esté después será el cuerpo del bucle.
 WEND: señala el final del cuerpo del bucle y de la instrucción WHILE.
El bucle mientras, se repite mientras la condición sea cierta, esta condición se
comprueba al principio por lo que el cuerpo del bucle puede que no se ejecute nunca,
cuando la condición es falsa en un principio, o que se repita tantas veces como sea
necesario, mientras la condición sea cierta.
En el ejemplo tenemos dos variables a y b que al iniciarse el bucle tienen los valores
a=0 y b=7.
La condición del bucle es b > a.
Cuando a=0 y b=7. la condición es cierta, en el cuerpo del bucle se escribe el
valor de a en pantalla y se incrementa a en una unidad. Entonces a=1 y b=7.
...
...
Cuando a=6 y b=7. la condición es cierta, se escribe el valor de a en pantalla y
se incrementa en una unidad.
Resultando que a=7 y b=7. Entonces la condición es falsa y la instrucción
WHILE finaliza.
La salida por pantalla de este ejemplo seria 0 1 2 3 4 5 6
Anidamiento
El cuerpo de cualquier estructura puede ser una instrucción simple u otra estructura, que
a su vez puede anidar a otra.
Ejemplo:
IF a > b THEN
auxiliar= a
a= b
b= auxiliar
ELSE
REM nada
END IF
PRINT a ; b
Ventajas de la programación estructurada
1. Los programas son más fáciles de entender, ya que pueden ser leídos de forma
secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de los
bloques de código para entender la lógica.
2. La estructura del programa es clara, puesto que las instrucciones están más ligadas o
relacionadas entre sí.
3. Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o errores del
programa ("debugging") se facilita debido a la estructura más visible, por lo que los
errores se pueden detectar y corregir más fácilmente.
4. Reducción de los costos de mantenimiento de los programas.
5. Programas más sencillos y más rápidos (ya que es más fácil su optimización).
6. Los bloques de código son auto explicativos, lo que facilita la documentación.
7. Los GOTO se reservan para construir las instrucciones básicas. Aunque no se usan de
forma directa, por estar prohibida su utilización, están incluidas implícitamente en las
instrucciones de selección e iteración.
8. Un programa escrito de acuerdo a estos principios no solamente tendrá una mejor
estructura sino también una excelente presentación.
9. La programación estructurada ofrece estos beneficios, pero no se la debe considerar
como una panacea ya que el desarrollo de programas es, principalmente, una tarea de
dedicación, esfuerzo y creatividad.
Inconvenientes de la programación estructurada
El principal inconveniente de este método de programación es que se obtiene un único
bloque de programa, que cuando se hace demasiado grande puede resultar problemático
su manejo; esto se resuelve empleando la programación modular, definiendo módulos
interdependientes programados y compilados por separado (en realidad esto no es
necesario, pero es recomendable para su mantenimiento y funcionalidad).
En realidad, cuando se programa hoy en día (inicios del siglo XXI) se suelen utilizar,
tanto las técnicas de programación estructurada como las de programación modular, de
forma conjunta y por lo tanto es posible que cuando uno haga referencia a la
programación estructurada esté considerando también las técnicas de modularización.
Un método un poco más sofisticado es la programación por capas, en la que los
módulos tienen una estructura jerárquica en la que se pueden definir funciones dentro de
funciones o de procedimientos.