Se llama programación estructurada. Tecnología de programación estructural. Principios básicos de la programación estructurada

FGBOU VO "Estado de Mordovia

Instituto Pedagógico que lleva el nombre de M.E. evsevyeva"

Facultad de Física y Matemáticas

Departamento de Informática e Ingeniería Informática

ENSAYO

“Principios de programación estructurada. Estructuras algorítmicas básicas y sus superposiciones"

Completado por: estudiante gr. MDM-212

Yana Bagdanova

Saransk 2016

Introducción

A principios de los años 70 del siglo XX, cuando el desarrollo de los lenguajes de programación alcanzó un nivel bastante alto y los sistemas de software creados alcanzaron tamaños bastante impresionantes (cientos de miles, millones de comandos), se hizo evidente que los proyectos de software se había vuelto demasiado complejo para un diseño, codificación y depuración exitosos dentro de plazos aceptables. Los programadores que resolvían problemas complejos se enfrentaron al problema del crecimiento en la cantidad y el tamaño de los programas hasta tal punto que el proceso de desarrollo posterior se volvió casi inmanejable, y nadie de los desarrolladores podía decir con certeza que el producto de software creado siempre hace lo que es requerido, y que no hace nada que no sea requerido. Así, ha surgido el problema de un cambio radical en los enfoques para la creación de grandes sistemas de software.

En base a estos problemas, los principales programadores de los años 70 (Dijkstra , con , Dal , xoap , Jordán , Konstantin , Myers etc.), se desarrollaron reglas estrictas para la gestión de proyectos, que se denominaronmetodología estructural .

Un paso importante en el desarrollo de este enfoque fueron las conferencias internacionales de programación celebradas en 1968-69. En el segundo de ellosEdsger Dijkstra utilizó por primera vez el términoprogramación estructurada ” y propuso una forma fundamentalmente nueva de crear programas. Consideró el programa como un conjunto de niveles abstractos jerárquicos que permitían:

    estructurar claramente el programa, lo que mejoró su comprensión por parte de los programadores;

    realizar pruebas de su corrección y aumentar así la fiabilidad del programa;

    reducir el tiempo de desarrollo de los programas.

Otro impulso para cambiar la forma de pensar de los programadores fue la carta publicadaDijkstra editor de una de las editoriales científicas, que se titulaba "La declaración GOTO debe considerarse dañina ". Esta carta provocó una fuerte polémica entre los programadores de la época, pero al final triunfó el pensamiento estructural, que además deDijkstra , con el apoyo activo de un profesor de la Universidad Técnica de Zúrichcon y profesor de la Universidad de Oxfordxoap . Un resultado de la controversia fue la prueba de que cualquier programa podía escribirse usando solo una secuencia simple de declaraciones, una construcción iterativa comotiempo ( adiós ) y la construcción de eleccióncaso ( elección ), y el operadorir a ( ir a ) no es una construcción de control necesaria en la programación estructurada. Desafortunadamente, las disputas sobre el operadorir a tuvo un "efecto secundario" negativo - muy a menudo la programación sinir a se identificó con toda la programación estructurada. Sin embargo, los objetivos de la programación estructurada son mucho más globales y serios.

1. FUNDAMENTOS DE LA TECNOLOGÍA DE PROGRAMACIÓN ESTRUCTURAL

Programación estructurada - metodología de desarrollo software, que se basa en la representación del programa en forma de una estructura jerárquica de bloques. Propuesto en los años 70 del siglo XX. E. Dijkstroy, desarrollado y complementado por N. Wirth (Fig. 1).

Edsger Wiebe Dijkstra (1930 - 2002) - Científico holandés, cuyas ideas influyeron en el desarrollo de la industria informática. Conocido como el creador del algoritmo para encontrar el camino más corto en un gráfico, uno de los fundadores de la programación estructurada. En 1972 ganó el Premio Turing.

niklaus wirth (1934) - Científico suizo, informático, uno de los teóricos más famosos en el desarrollo de lenguajes de programación, profesor de informática, ganador del Premio Turing en 1984. Desarrollador líder de los lenguajes de programación Pascal, Modula-2, Oberon .

Arroz. 1. Los pioneros de la programación estructurada son E. Dijkstra y N. Wirth.

La metodología de programación estructurada apareció como resultado de la creciente complejidad de las tareas resueltas en las computadoras, y la correspondiente complicación del software: en los años 70 del siglo XX. el volumen y la complejidad de los programas ha llegado a tal nivel que el desarrollo "intuitivo" (no estructurado) de los programas, que era la norma en más tiempo temprano dejó de satisfacer las necesidades de la práctica. Los programas se estaban volviendo demasiado complejos para mantenerlos adecuadamente, por lo que se requería cierta sistematización del proceso de desarrollo y la estructura del programa.

El operadorIR A ( operador de salto incondicional ). El uso incorrecto e irreflexivo de transiciones arbitrarias en el texto del programa condujo a programas confusos y mal estructurados (los llamados.coda de espagueti ), según cuyo texto era casi imposible comprender el orden de ejecución y la interdependencia de los fragmentos.

La programación estructurada se basa en los principiosdescomposición secuencial tareas yútil suestructurando en componentes individuales. Los métodos de programación estructurada son un conjunto de principios técnicos y organizativos del diseño de sistemas de productos de software.

Los métodos típicos de programación estructurada son:

    diseño de arriba hacia abajo (diseño de arriba a abajo);

    modular (procesal)programación ;

    codificación estructural .

Según la metodología de programación estructurada:

1. Cualquier programa es una estructura construida a partir de tres tipos estructuras basicas:

    ejecución secuencial - una sola ejecución de operaciones en el orden en que están escritas en el texto del programa;

    derivación - una sola ejecución de una de dos o más operaciones, dependiendo del cumplimiento de alguna condición dada;

    ciclo - ejecución repetida de la misma operación hasta que se cumpla alguna condición dada (la condición para continuar el ciclo).

En el programa, las estructuras básicas se pueden anidar entre sí arbitrariamente, pero no se proporcionan otros medios para controlar la secuencia de operaciones.

2. Repetir fragmentos del programa (o no repetir, pero representar lógicamente coherente bloques de computación) se puede escribir en la formasubrutinas (procedimientos o funciones). En este caso, en el texto del programa principal, en lugar del fragmento colocado en la subrutina, se inserta la instrucción de llamada a la subrutina. Cuando se ejecuta una instrucción de este tipo, se ejecuta la subrutina llamada, después de lo cual la ejecución del programa continúa con la instrucción que sigue a la instrucción para llamar a la subrutina.

3. El desarrollo del programa se realiza paso a paso, utilizando el método "top-down".

Primero, se escribe el texto del programa principal, en el que, en lugar de cada fragmento de texto lógico conectado, se inserta una llamada a la subrutina que ejecutará este fragmento. En lugar de subrutinas de trabajo reales, "enchufes ' que no hacen nada. El programa resultante se comprueba y se depura. Una vez que el programador está convencido de que las subrutinas se llaman en la secuencia correcta (es decir, la estructura general del programa es correcta), las rutinas auxiliares se reemplazan secuencialmente por las reales y el desarrollo de cada subrutina se lleva a cabo de la misma manera. como programa principal. El desarrollo finaliza cuando no queda un solo "stub" que no se haya eliminado. Tal secuencia asegura que en cada etapa de desarrollo el programador trate simultáneamente con un conjunto de fragmentos visibles y comprensibles, y puede estar seguro de que la estructura general de todos los niveles superiores del programa es correcta. Al mantener y realizar cambios en el programa, queda claro qué procedimientos deben cambiarse y se realizan sin afectar las partes del programa que no están directamente relacionadas con ellos. Esto asegura que al realizar cambios y corregir errores, alguna parte del programa que actualmente está fuera del área de atención del programador no fallará.

Seguir los principios de la programación estructurada hizo que los textos de los programas, incluso los bastante grandes, fueran normalmente legibles. La comprensión de los programas se ha vuelto mucho más fácil, se ha vuelto posible desarrollar programas en un modo industrial normal, cuando un programa puede ser entendido sin mucha dificultad no solo por su autor, sino también por otros programadores. Esto hizo posible desarrollar sistemas de software que eran bastante grandes para ese momento por las fuerzas de los equipos de desarrollo y mantener estos complejos durante muchos años, incluso frente a cambios inevitables en la composición del personal.

La metodología de desarrollo de software estructural ha sido reconocida como "la formalización más fuerte de los años 70". Después de eso, la palabra "estructural" se puso de moda en la industria y comenzó a usarse en todas partes donde era necesario y donde no era necesario. Aparecieron trabajos sobre "diseño estructural", "ensayo estructural", "diseño estructural", etc.

Las ventajas de la programación estructurada incluyen lo siguiente:

1. La programación estructural le permite reducir significativamente la cantidad de opciones para construir un programa de acuerdo con la misma especificación, lo que reduce significativamente la complejidad del programa y facilita que otros desarrolladores lo entiendan.

2. En los programas estructurados, los operadores lógicamente relacionados están visualmente más cerca y los débilmente relacionados están más lejos, lo que hace posible prescindir de diagramas de flujo y otras formas gráficas de representar algoritmos (de hecho, el programa en sí es su propio diagrama de flujo).

3. El proceso de prueba y depuración de programas estructurados se simplifica enormemente.

Consideremos con más detalle los principales métodos de programación estructurada.

1.1. Objetivos y principios de la programación estructurada

Los objetivos de la programación estructurada están:

    Asegurar la disciplina de programación en el proceso de creación de sistemas de software .

    Mejorar la legibilidad del programa . La legibilidad mejora si se siguen las siguientes reglas:

    • evitar el uso de construcciones de lenguaje con semántica no obvia;

      esforzarse por localizar la acción de las estructuras de control y el uso de estructuras de datos;

      diseñar un programa para que pueda ser leído de principio a fin sin saltos de control a otra página.

    Mejorar la eficiencia del programa . Esto se puede lograr estructurando el programa en módulos para que los errores se puedan encontrar y corregir fácilmente, y que el texto de cualquier módulo se pueda reescribir independientemente de los demás para aumentar la eficiencia.

    Mejora de la confiabilidad del programa . Esto se puede lograr si el programa es fácil de probar de principio a fin y no crea problemas para organizar el proceso de depuración. Esto se asegura mediante una buena estructuración del programa cuando se divide en módulos y siguiendo las reglas para escribir programas legibles.

    Reduciendo tiempo y costo desarrollo de software . Esto sucede cuando cada programador en un equipo de desarrollo puede escribir y depurar más código que antes.

Principalprincipios de programación estructurada resumido en la tabla. 1.

Tabla 1. Principios de la programación estructurada

Principio

Explicación

Abstracción

La abstracción permite al programador imaginar la solución deseada a un problema sin tener que tener en cuenta muchos detalles en un momento dado. El programador puede ver el programa en capas: el nivel superior muestra mucha abstracción, lo que facilita ver el diseño, mientras que el nivel inferior muestra los detalles finos de la implementación.

Formalidad

El uso de un enfoque metodológico estricto en el desarrollo del programa, que es la base para la transformación de la programación de la improvisación en una disciplina de ingeniería. Este principio proporciona una base para probar la corrección de los programas, ya que permite estudiar los programas (algoritmos) como objetos matemáticos.

"Divide y vencerás"

Dividir el programa en fragmentos separados (módulos) que son fáciles de administrar y permiten la depuración y prueba independientes.

orden jerárquico

La estructura de la división en partes no es menos importante que el hecho mismo de tal división. Este principio plantea el requisito de la estructuración jerárquica de las relaciones entre los módulos. paquete de software, lo que facilita el logro de los objetivos de la programación estructurada.

1.2. Diseño de arriba hacia abajo

La especificación de la tarea sirve como punto de partida para crear un programa. Es necesario comprender qué acciones se deben tomar para resolver el problema, describirlas en lenguaje natural y con un nivel de abstracción suficientemente alto.

La especificación de la tarea es su anteproyecto principal. De él pasamos al programa, refinando gradualmente la descripción.

El refinamiento gradual del proyecto se llamamétodo de diseño de arriba hacia abajo ( paso a paso odiseño de arriba hacia abajo ).

Ejemplo 1 Como ejemplo, considere un proyecto de vestir a un niño.

Decisión:

1. Propósito principal :

Vestirse.

2. Especificación del objetivo en el primer paso :

Use la mitad inferior.

Use la mitad superior.

2.1. La mitad inferior se puede poner en dos etapas:

Ponte pantalones.

Ponte calcetines y botas.

2.2. La mitad superior también se puede vestir en dos etapas:

Ponte una camisa.

Ponte una chaqueta.

3. Borrador final tiene este aspecto:

Ponte pantalones.

Ponte calcetines.

Ponte las botas.

Ponte una camisa.

Ponte una chaqueta.

Método de diseño de arriba hacia abajo implica una descomposición secuencial de la función general de procesamiento de datos en elementos funcionales simples ("de arriba hacia abajo"). Como resultado, se construye un esquema jerárquico:estructura funcional del algoritmo ( FSA ), reflejando la composición y subordinación de las funciones individuales (Fig. 2).

Apéndice 1

Apéndice norte

Función 1

Función 2

Función metro

Departamento 11

Departamento 1 k

Sub-facción metro 1

Sub-facción metro 2

Sub-facción diputado

Meta 1

Subobjetivo 11

Subobjetivo 1s

Objetivo2

objetivo secundario2 1

objetivo secundario2 q

Arroz. 2. Estructura funcional de la aplicación.

La secuencia de acciones para desarrollar la solicitud de FSA es la siguiente:

    determinadoobjetivos de automatización área temática y su jerarquía (objetivo-subobjetivo);

    instaladocomposición de aplicaciones (tareas de procesamiento) que aseguren la implementación de las metas establecidas;

    para ser especificadola naturaleza de la relación aplicaciones y sus principales características (información para la resolución de problemas, tiempo y frecuencia de la solución, condiciones de ejecución, etc.);

    necesarios para resolver problemas se determinanfunciones de procesamiento de datos ;

    realizadodescomposición de funciones de procesamiento hasta la complejidad estructural necesaria implementada por el conjunto de herramientas propuesto.

Esta estructura de aplicación refleja lo más importante:composición yrelación de funciones información de procesamiento para la implementación de la aplicación, aunque no revela la lógica de ejecución de cada función individual, las condiciones o la frecuencia de sus llamadas.

1.3. Programación modular

Programación modular es una consecuencia natural del diseño de arriba hacia abajo y es que el programa se divide en partes:módulos , desarrollado por separado.

Módulo es una parte independiente del programa, que tiene un propósito específico y proporciona funciones predefinidas procesamiento independientemente de otros módulos de software. El módulo consta de un conjunto lógicamente interconectado de elementos funcionales.

En programación, un módulo es unsubrutina , y las subrutinas a menudo se denominanprocedimientos oprocedimientos de función . Por lo tanto, la programación modular también se llamaprocesal .

Al crear productos de software, se destacanmódulos reutilizables , se lleva a cabo su tipificación y unificación, por lo que se reducen el tiempo y los costos laborales para el desarrollo de un producto de software en su conjunto.

Algunos productos de software utilizan módulos de bibliotecas listas para usar de subrutinas, procedimientos, funciones, objetos y métodos de procesamiento de datos estándar.

Entre los muchos módulos están:

    módulo principal - gestiona el lanzamiento del producto de software (existe en singular);

    módulo de control – proporciona una llamada a otros módulos para su procesamiento;

    módulos de trabajo - realizar funciones de procesamiento;

    módulos de servicio y bibliotecas , utilidades - Implementar funciones de servicio.

En el trabajo del producto de software, se activan los módulos de software necesarios. Los módulos de control establecen la secuencia de llamadas para la ejecución del siguiente módulo. La comunicación de información de los módulos se proporciona mediante el uso de una base de datos común o la transferencia de datos entre módulos a través de variables de intercambio.

Cada módulo se puede configurar como un archivo de autoalmacenamiento; para el funcionamiento del producto de software es necesaria la presencia de módulos de software en plena composición.

El módulo debe tener lo siguientepropiedades :

    una entrada y una salida - en la entrada, el módulo del programa recibe un cierto conjunto de datos iniciales, realiza un procesamiento significativo y devuelve un conjunto de datos de resultados, es decir, implementa el principio estándaroferta pública inicial ( Entrada-Proceso-Salida entrada-proceso-salida );

    integridad funcional - el módulo realiza una lista de operaciones reguladas para la implementación de cada función individual en su totalidad, suficiente para completar el procesamiento iniciado;

    independencia lógica - el resultado del trabajo del módulo del programa depende solo de los datos iniciales, pero no depende del trabajo de otros módulos;

    vínculos de información débiles con otros módulos de software – el intercambio de información entre módulos debe minimizarse tanto como sea posible;

    previsible en tamaño y complejidad del código del programa .

Los módulos contienen:

    determinación de los datos disponibles para su procesamiento;

    operaciones de procesamiento de datos;

    esquemas de interconexión con otros módulos.

Cada módulo consta deespecificaciones ycuerpo . Especificaciones definir las reglas para usar el módulo, ycuerpo - una forma de implementar el proceso de procesamiento.

Las funciones del mismo tipo son implementadas por los mismos módulos. La función de nivel superior la proporciona el módulo principal; gestiona la ejecución de las subfunciones a las que corresponden los submódulos.

Al determinar un conjunto de módulos que implementen las funciones de un algoritmo en particular, se debe tener en cuenta lo siguiente:

    cada módulo es llamado para su ejecución por un módulo de nivel superior y, después de completar su trabajo, devuelve el control al módulo que lo llamó;

    tomar las decisiones principales en el algoritmo se lleva al nivel más alto posible en la jerarquía;

    para usar la misma función en diferentes lugares del algoritmo, se crea un módulo, que se llama para su ejecución según sea necesario.

Como resultado de un mayor refinamiento del algoritmo, unesquema funcional-modular ( FMS ) algoritmo de aplicación, que es la base para la programación (Fig. 2).

La composición y el tipo de módulos del programa, su propósito y la naturaleza del uso en el programa están determinados en gran medida por las herramientas.

El segundo nivel de la jerarquía. programas

El primer nivel de la jerarquía. programas

Módulo principal

(programa de servidor)

Módulo de control 1

(director de programa 1)

módulo de control m

(gerente de prog. n)

Módulo 1A

(subprograma 1A)

Módulo 1B

(subprograma 1B)

Módulo de 1W

(subrutina 1 W )

Módulo 0A

(subrutina 0A)

Módulo 0B

(subrutina 0B)

Módulo nA

(subrutina nA)

módulo nB

(subrutina nB)

módulo nW

(subrutina nW)

El tercer nivel de la jerarquía. programas

Arroz. 3. Estructura funcional-modular del algoritmo de aplicación.

La mayoría de los programas de aplicación de usuario final modernos operan en un modo interactivo de interacción con el usuario de tal manera que se intercambian mensajes que afectan el procesamiento de datos. En el modo de diálogo, bajo la influencia del usuario, se inician funciones de procesamiento, se cambian las propiedades de los objetos, se configuran los parámetros de salida de información, etc. El proceso de diálogo se controla de acuerdo al escenario creado, para lo cual se define lo siguiente:

    puntos (momento, condición) del inicio del diálogo;

    el iniciador del diálogo es una persona o un producto de software;

    parámetros y contenido del diálogo: mensajes, composición y estructura del menú, formularios de pantalla, etc.;

    la reacción del producto de software al final del diálogo.

Más adecuado para crear procesos de diálogo e interfaz de usuario finalherramientas de desarrollo de software orientadas a objetos .

1.4. Codificación estructural

La práctica de la programación ha demostrado la necesidad de una metodología con base científica para el desarrollo y documentación de algoritmos y programas. Esta metodología debe referirse al análisis del problema original, dividiéndolo en partes suficientemente independientes y programando estas partes con la mayor independencia posible entre sí. Esta metodología escodificación estructural ( programación ).

Codificación estructural es un método para escribir programas que tienen una cierta estructura y, por lo tanto, son fáciles de entender, probar, modificar y usar.

Este método se basa en el uso de un pequeño conjunto de estructuras de control simples (operadores estructurales ), cuyo correcto funcionamiento es fácil de analizar y establecer. En este caso, unos operadores constan de otros anidados en ellos.

La propiedad estructural de los operadores es quecada operador tiene una entrada y una salida . Un programa construido a partir de sentencias estructuradas se llamaestructurado .

La base de la programación estructurada esteorema de estructuración , formulado por los matemáticos italianos K. Bohm y G. Jacopini en 1966

El teorema establece que por compleja que sea la tarea, el esquema del algoritmo para resolverla (y, en consecuencia, el programa) siempre se puede representar como una composición de tres tipos de bloques anidados:

    siguiendo (principio-fin inicio fin ),

    derivación (si - después - más si-entonces-otro ),

    bucles con condición previa (tiempo adiós ).

En otras palabras, estas estructuras elementales tienenintegridad funcional , es decir. cualquier algoritmo puede implementarse como una composición de estas tres estructuras.

En la práctica, esto el teorema evita el uso de operadores de transiciónir a , que hace que los algoritmos y programas sean visuales y fáciles de entender.

Los tipos de las principales estructuras de control del algoritmo se muestran en la fig. cuatro

1. Estructura como "siguiendo » (figura 4, a) está formado por una secuencia de acciones, S 1, S 2, …, sn siguiendo uno tras otro:

ejecutarS 1;

ejecutarS 2;

ejecutarsn .

En un proceso computacional lineal, todas las operaciones se realizan secuencialmente en el orden en que están escritas. Un ejemplo típico de tal proceso es un esquema computacional estándar que consta de tres etapas:

    entrada de datos iniciales;

    cálculo por fórmulas;

    salida de resultados.

en idiomaPascal dicha estructura está encerrada entre paréntesis de operadorComenzar ... fin :

Comenzar

S 1;

S 2;

...

sn ;

fin

Arroz. cuatro Estructuras algorítmicas básicas:

a) siguiendo (Comenzar fin ); b) derivación (Si Después Más ); en) bucle con condición previa (Tiempo Hacer )

2. Estructura como " derivación » (SI - ENTONCES - DE LO CONTRARIO ) (figura 4,b ) – proporciona, dependiendo del resultado de la verificación, las condicionesR , que toma uno de dos valores booleanos (Verdadero ) oNo (Falso ), la elección de una de las formas alternativas del algoritmo:

si R

luego ejecutar S 1

de lo contrario ejecutar S 2 .

Cada ruta conduce a una salida común, por lo que el algoritmo continuará independientemente de la ruta que se elija.

en idiomaPascal

Si PAG

Después S 1

Más S 2;

3. Estructura como "bucle con condición previa » (figura 4, en) - proporciona la ejecución repetida de la acción S dependiendo de qué valor toma la condición lógica R:

Hasta queR

realizarS .

El ciclo termina cuando la condición R no se realiza.

en idioma Pascal tal estructura tiene el siguiente formato:

Tiempo PAG Hacer

S ;

El conjunto ampliado de estructuras algorítmicas elementales incluye además las siguientes estructuras de control (Fig. 5).

4. Estructura como " rama abreviada » (SI - ENTONCES ) (Figura 5,a ) – si el resultado de verificar la condiciónR toma el valor (Verdadero ), entonces la acción se realizaS ; de lo contrario, esta acción se omite y el control se transfiere a la siguiente estructura:

si R

luego ejecutar S 1 .

en idiomaPascal tal estructura tiene el siguiente formato:

Si PAG

Después S ;

5 . Estructura como " la eleccion es diferente » (Figura 5,b ) son una versión extendida de una estructura comoSI - ENTONCES - DE LO CONTRARIO . Aquí la condición a verificar esR puede tomar no dos valores lógicos, sino varios valores ordinales, por ejemplo, 1, 2, ...,norte . SiR = i , entonces la acción se realizaráSi . si el valorR saldrá del rango de valores válidos, entonces se realiza la acciónS (version corta)elección » no se realiza ninguna acción y el control pasa a la siguiente estructura. en idiomaPascal tal estructura tiene el siguiente formato:

caso PAG De

1:S1;

2:S2;

n: Sn

Más S

fin;

Arroz. cinco. Estructuras algorítmicas elementales adicionales:

a) rama abreviada (Si Después ); b) la eleccion es diferente (caso De Más );
en) bucle con postcondición (Repetir Hasta que ); GRAMO) bucle con parámetro (Para A ( Abajo a ) – Hacer )

6. Estructura como " bucle con postcondición » (Figura 5,en ) - proporciona la ejecución repetida de la acciónS hasta que se cumpla la condiciónR .

en idiomaPascal tal estructura tiene el siguiente formato:

Repetir

S

Hasta que PAG ;

7. Estructura como " bucle con parámetro » (Figura 5,GRAMO ) - proporciona una ejecución repetida predeterminada de una acciónS . En este caso, las siguientes operaciones típicas se realizan secuencialmente aquí:

    establecer el valor inicial del parámetro de bucle utilizado (por ejemplo, si la variable de bucle es i, entonces se le asigna el valor i 1, es decir i:=i 1);

    realizando acciones S provisto en el cuerpo del bucle;

    cambiando el parámetro de bucle, lo que asegura el cálculo del resultado con nuevos datos iniciales (por ejemplo, si el parámetro de bucle i cambios en incrementos i 3, i:=ii 3);

    comprobar el valor actual del parámetro de bucle con un valor final dado ( i<=i 2);

    transición a la repetición del cuerpo del ciclo si el parámetro del ciclo no ha excedido el valor final; de lo contrario, la ejecución de las siguientes acciones o la salida del resultado.

en idiomaPascal tal estructura tiene el siguiente formato:

Para Variable := i 1 A (Abajo) i 3 Hacer

S ;

Teniendo en cuenta el esquema del programa, es posible destacar partes (fragmentos) que tienen una estructura bastante simple y comprensible. Representar estos fragmentos como bloques ampliados facilita enormemente la percepción del algoritmo (y más tarde, del programa) como un todo.

Las declaraciones estructurales generalmente se usan en las primeras etapas del diseño de programas de arriba hacia abajo.

De este modo,programación estructurada Residencia enestructura modular producto de software ytípico (básico ) estructuras de gobierno algoritmos de procesamiento de datos de varios módulos de software.

RECOMENDACIONES

    La programación estructurada es una metodología de desarrollo de software basada en la representación de un programa en forma de estructura jerárquica de bloques. Propuesto en los años 70 del siglo XX. E. Dijkstroy, desarrollado y complementado por N. Wirth. Los métodos típicos de programación estructurada son: diseño de arriba hacia abajo (diseño de arriba hacia abajo); programación modular (procedimiento); codificación estructural.

    Los objetivos de la programación estructurada son: garantizar la disciplina de la programación, aumentar la eficiencia y confiabilidad de los programas, reducir el tiempo y el costo del desarrollo de software. Principios básicos de la programación estructurada: abstracción, formalidad, "divide y vencerás", ordenamiento jerárquico.

    El método de diseño de arriba hacia abajo implica la descomposición secuencial de la función general de procesamiento de datos en elementos funcionales simples ("de arriba hacia abajo"). Los medios para lograr las metas en el nivel anterior se convierten en las metas en el inferior.

    La codificación estructural es un método para escribir programas que tienen una estructura específica. Se basa en el uso de un pequeño conjunto de declaraciones estructurales, cuya corrección es fácil de analizar y establecer. En este caso, unos operadores constan de otros anidados en ellos.

    El fundamento de la programación estructurada es el teorema de estructuración, formulado por los matemáticos italianos C. Bohm y G. Iacopini en 1966. El teorema establece que por compleja que sea la tarea, el esquema del algoritmo para resolverla (y, en consecuencia, el programa) siempre se puede representar como una composición de tres tipos de bloques anidados: siguiente (principio-fin - principio-fin), bifurcación (if-then-else - if-then-else), ciclos con una condición previa (while - while ).

* E. Dijkstra dio la siguiente definición: “ La programación estructurada es una disciplina que el programador se impone a sí mismo.».

Programación estructurada - uno de los mayores avances en tecnología de programación. Aunque casi todo el mundo tiene la idea más general y bastante vaga de la programación estructurada, no existe una definición clara generalmente aceptada. La programación estructurada tiene como objetivo escribir programas de mínima complejidad, para que el programador piense con claridad, para que el programa sea más fácil de entender.

El texto del programa debe ser tal que se pueda leer "de arriba a abajo". El uso sin restricciones de las declaraciones GO TO viola esta condición, razón por la cual la programación estructurada a menudo se denomina programación no GO TO.

Puede dar ejemplos de programas que no contienen GO TO y están ordenados en forma de escalera según el nivel de anidamiento de las declaraciones, pero son completamente incomprensibles y hay otros programas que contienen GO TO y aún son comprensibles. Entonces, la presencia o ausencia de GO TO es un indicador deficiente de la calidad del programa (ilustración en D. Knuth). Y, sin embargo: el más difícil de controlar y potencialmente inestable es el operador de sucursal incondicional: IR A .

La estructura del cuerpo del módulo y las construcciones de programación básicas utilizadas deben ser potencialmente resistentes a fallas de hardware, distorsiones de datos de origen y errores de programa.

Cualquier programa se puede sintetizar sobre la base de estructuras básicas elementales de tres tipos:

1. Secuencia sencilla. 2. Condiciones (alternativas).

3. Repetición (ciclos, iteraciones). Uno de dos o ambos tipos son posibles:

Haz "hasta" Haz "todavía no"

4. Puede agregar un cuarto diseño: una opción (interruptor).

Los bloques se definen de forma recursiva: los rectángulos representan bloques de construcción anidados que se utilizan en lugar de un rectángulo.

Las construcciones elementales enumeradas, por ejemplo, en el lenguaje Pascal se implementan de la siguiente manera:

operador condicional SI Iniciar sesión. Exp. DESPUÉS operador 1 MÁS operador2;

SI Iniciar sesión. expresión DESPUÉS operador;

Repetición (ciclos, iteraciones)

a) Hacer "mientras" MIENTRAS condición de continuación HACER operador;

b) "todavía no" REPETIR operador HASTA QUE condición de terminación;

c) Bucle con iteración FOR K:=B1 TO B2 DO operador;

PARA K:=B2 HACIA B1 HACER operador;

Elección (cambio) CASO condición DE

N1, ... Nk : operador 1;

Ni , ... Nm : operador p;

FIN ;

En el lenguaje FoxBASE, estas construcciones se implementan como:

operador condicional SI Iniciar sesión. expresión

operadores1

[MÁS]

operadores2]

TERMINARA SI

Ciclo HACER MIENTRAS expresión

operadores

ENDDO

Elección (cambio) HACER CASO

CASO Iniciar sesión. expresión 1

operadores

CASO Iniciar sesión. expresión2

Operadores

CASO Iniciar sesión. Expresión p

Operadores

ENDCASE

Cada estructura se caracteriza por un único punto de transferencia de control a la estructura (entrada única) y un único punto de salida de la estructura.

Estas construcciones tienen un valor sistematizador y disciplinador. La simplicidad de las estructuras iniciales de la programación estructurada evita la aparición de enlaces de información complejos y transferencias de control intimidantes.

Con un aumento en la estructura de los módulos, la complejidad de los programas disminuye, aumenta su visibilidad, lo que ayuda a reducir la cantidad de errores. Sin embargo, para mejorar la calidad de los programas, se debe pagar con memoria adicional y tiempo para su implementación en una computadora.

La estructura del programa depende del lenguaje de programación utilizado. Las herramientas modernas de desarrollo de software son los "mejores" lenguajes de programación estructurados. De los lenguajes de programación comunes, Pascal, Basic, FoxBASE se consideran los más adecuados. La programación estructurada, por ejemplo, en lenguaje ensamblador es casi imposible. El mismo hecho de usar lenguaje ensamblador indica que el programa está escrito principalmente en términos de lenguaje máquina.

La programación estructural se centra en comunicarse con personas, no con una máquina, y promueve la escritura de programas que son una solución simple y clara a un problema.

Es importante que un programador, incluso cuando comienza a programar la lógica, piense en términos de construcciones estructurales básicas básicas.

La posición en la sentencia GO TO debe ser: evite usar GO TO siempre que sea posible, pero no a costa de la claridad del programa. A menudo tiene sentido usar GO TO para salir de un bucle o módulo, para saltar a construcciones ON (por ejemplo, en el lenguaje básico) o para evitar un anidamiento demasiado profundo de bifurcaciones, especialmente porque el salto es posterior (ubicado a continuación) declaraciones del programa, y ​​estructural el programa sigue siendo fácilmente legible de arriba a abajo. El peor uso de la sentencia GO TO es transferir el control a una sentencia más alta (anterior) en el texto del programa.

Además, para que el programa sea más fácil de leer, su texto debe dividirse físicamente en partes, agregando líneas vacías entre secciones, divisiones. El texto del programa debe escribirse con los turnos correctos, de modo que las interrupciones en la secuencia de ejecución se puedan rastrear fácilmente. Las declaraciones ejecutables de propósito único de cada módulo deben caber en una página del dispositivo de impresión.

Los primeros programas consistían en varias decenas - cientos de instrucciones de máquina. Complejos de software y sistemas de información incluidos desde varias decenas de miles hasta millones de operadores en lenguajes de alto nivel. A medida que aumentaba el volumen de herramientas de software, el proceso de depuración, aquellos. detección y corrección de errores. La práctica ha demostrado que es casi imposible escribir un programa más o menos grande sin errores. Además, incluso durante la operación de programas terminados, se detectan errores perdidos durante la depuración. Los errores se dividen en varias categorías.

El más simple son los errores de sintaxis. Están asociados con la ortografía incorrecta de las construcciones del lenguaje y se detectan de inmediato, en el momento en que el compilador intenta traducir el programa a lenguaje de máquina.

Si se corrigen todos los errores de sintaxis y de enlace, entonces el programa comienza a ejecutarse (etapa correr). Sin embargo, esta etapa puede ser interrumpida por una operación inválida (por ejemplo, dividir por cero), en cuyo caso se habla de un error de tiempo de ejecución. (Errores de tiempo de ejecución). O el programa ha contado hasta el final, pero los resultados obtenidos son incorrectos. Esto puede deberse a errores de algoritmo o errores en la organización de las comunicaciones entre módulos, errores de conversión de tipo de datos o errores tipográficos simples (por ejemplo, se omitió cero al escribir el número 100 y el programa usó 10 en los cálculos).

Los errores en tiempo de ejecución se detectan resolviendo una serie de casos de prueba (ejecución del programa), cuyo resultado se conoce de antemano. Como regla general, el tiempo dedicado a encontrar dichos errores excede significativamente el tiempo dedicado a escribir el programa en sí y corregir errores de sintaxis. El desarrollo del concepto de programación está estrechamente relacionado con el problema de reducir el desperdicio al escribir un programa.

Se están desarrollando los fundamentos teóricos de la programación estructurada, la teoría de probar la corrección de un programa y la programación basada en evidencia.

El concepto de programación estructurada implica un enfoque con base científica para la construcción de un programa y las posibilidades de un lenguaje de programación, que reducirá significativamente la cantidad de posibles errores. Se ha logrado un desarrollo significativo del concepto en el lenguaje de programación estructurado. Pascal. La esencia de la programación estructurada es que los datos son, ante todo, abstracciones de objetos reales y se formulan preferiblemente como estructuras abstractas que pueden no tener una implementación específica en un lenguaje de programación. En el proceso de construcción de un programa, la representación de datos se refina gradualmente siguiendo el refinamiento del algoritmo.

Un lenguaje de programación estructurado debe proporcionar la capacidad de construir sus propios tipos de datos. En el nivel más bajo se encuentran las estructuras fundamentales predefinidas en el lenguaje (por ejemplo: tipos escalares, registro, matriz y conjunto). A partir de estructuras fundamentales, como de moléculas, se construyen estructuras complicadas. Las variables de la estructura fundamental solo pueden cambiar el valor, conservando el tipo o el conjunto de valores válidos y el tamaño que ocupan. Las estructuras complicadas se caracterizan por un cambio no solo en el significado, sino también en la forma misma de representación, la composición de las estructuras fundamentales incluidas en ellas. La gestión de memoria dinámica se implementa a nivel de puntero y los datos dinámicos se combinan en una estructura de árbol (árboles).

Además, existen ciertos requisitos para la tipificación de datos, por lo que se puede determinar el tipo de cualquier expresión o variable sin necesidad de cálculos, es decir en la etapa de traducción. En este caso, se puede evitar una gran cantidad de errores de tiempo de ejecución difíciles de encontrar al detectarlos en la etapa de traducción del programa.

El concepto de programación estructurada implica no solo el uso de lenguajes especiales y la aplicación de un cierto estilo de programación. En primer lugar, esta es la filosofía de la programación, que también afecta un aspecto como la metodología para enseñar a los programadores.

Se observa que la programación es una actividad vasta y variada, que a menudo requiere un trabajo mental complejo. Es un error pensar que la programación puede reducirse al uso de recetas preparadas basadas en una descripción sistemática de los bloques más simples. Los estudiantes necesitan desarrollar la capacidad de pensar creativamente, y aquí el papel del maestro es extremadamente importante, mostrando cómo hace esto y aquello. La creatividad no está sujeta a cánones, métodos y tecnologías. Se adopta una cuidadosa selección y consideración de ejemplos característicos como método de enseñanza. Es necesario considerar programas largos y complejos, que a menudo se encuentran en la práctica y son los más adecuados para identificar esa propiedad esquiva pero importante llamada estilo programación. El análisis de programas largos es un ejercicio en el arte de leerlos, que no es menos importante que la habilidad para escribir programas.

Preguntas y tareas de control

5.1. Nombre y describa brevemente las partes del comando del programa.

5.2. La base para el programa de funcionamiento del IIO es ____; darle una definición.

5.3. ¿Qué se entiende por programación en códigos?

5.4. ¿Qué sabes sobre el lenguaje ensamblador?

5.5. ¿Qué lenguajes de programación se denominan independientes de la máquina?

5.6. ¿Cómo es comprensible para una computadora la "traducción" de un programa escrito en un lenguaje algorítmico a un código objeto?

5.7. ¿Qué se entiende por programación modular y un módulo separado?

5.8. ¿Qué sabes de programación estructurada?

Programación estructurada- una metodología de programación destinada a crear programas lógicamente simples y comprensibles. La programación estructurada se basa en la suposición de que la lógica y la comprensibilidad del programa facilitan el desarrollo, la prueba de corrección y el posterior mantenimiento del programa, y ​​también aseguran su confiabilidad.

Los principios característicos de la programación estructurada son:

· programación de arriba hacia abajo un método de desarrollo de programas en el que la programación se lleva a cabo utilizando el método "de arriba hacia abajo", desde lo general hasta los detalles;

· programación modular, en el que se programan subtareas relativamente independientes como módulos de programa separados;

· el uso de tres estructuras de control en la programación (seguir, elegir, repetir). La estructura de seguimiento asume una secuencia natural de ejecución de sentencias. La estructura de elección está dada por el esquema "if-then-else" (la declaración if). El operador de bucle está asociado con la estructura de repetición;

· Rechazo de transferencias incondicionales de control y uso limitado de variables globales.

La programación estructurada se basa en un teorema que ha sido probado rigurosamente en la teoría de la programación. Su esencia es que un algoritmo para resolver cualquier problema lógico solo puede estar compuesto por las siguientes estructuras. , ramificación, ciclo. Se denominan estructuras algorítmicas básicas. De hecho, nosotros y anteriormente en todos los ejemplos considerados de programas adheridos a los principios de la programación estructurada.

La siguiente es una secuencia lineal de acciones (Fig. 2.6):

Arroz. 2.6. siguiendo

Cada bloque puede contener tanto un comando simple como una estructura compleja, pero debe tener una entrada y una salida.

derivación alternativa algorítmica. El control se transfiere a uno de dos bloques dependiendo de la verdad o falsedad de la condición. Luego hay una salida a la continuación general (Fig. 2.7):

Arroz. 2.7. derivación

Ciclo repetición de un determinado grupo de acciones por condición. Hay dos tipos de ciclo. El primero bucle con condición previa (Fig. 2.8):

Arroz. 2.8. Bucle con condición previa

Mientras la condición es verdadera, se ejecuta la serie que forma el cuerpo del bucle.

El segundo tipo de estructura cíclica. bucle con postcondición (Fig. 2.9):

Arroz. 2.9. Bucle con poscondición

Aquí el cuerpo del bucle precede a la condición del bucle. El cuerpo del bucle repite su ejecución si la condición es falsa. La repetición termina cuando la condición se vuelve verdadera.

Teóricamente, sólo el primer tipo de ciclo es necesario y suficiente. bucle con condición previa. Cualquier algoritmo cíclico se puede construir usándolo. Esta es una versión más general del bucle que el loop-to. De hecho, el cuerpo del bucle hasta se ejecutará al menos una vez, ya que la condición se verifica después de su finalización. Y para el ciclo while, tal opción es posible cuando el cuerpo del ciclo no se ejecutará ni una sola vez. Por lo tanto, en cualquier lenguaje de programación, uno podría limitarse solo al ciclo while. Sin embargo, en algunos casos, el uso del ciclo-a es más conveniente y, por lo tanto, se usa.

La programación estructurada a veces se denomina en la literatura como programación sin goto. De hecho, con este enfoque no hay lugar para una transición incondicional. El uso injustificado del operador goto en los programas lo despoja de su estructura y, por lo tanto, de todas las propiedades positivas asociadas a él: la transparencia y confiabilidad del algoritmo. Aunque este operador está presente en todos los lenguajes de programación procedimental, sin embargo, siguiendo un enfoque estructural, se debe evitar su uso.

Un algoritmo complejo consta de estructuras básicas interconectadas. Estas estructuras se pueden conectar de dos maneras: coherente y anidado. Esta situación es similar a lo que observamos en ingeniería eléctrica, donde cualquier circuito eléctrico arbitrariamente complejo puede descomponerse en secciones conectadas en serie y en paralelo.

Las estructuras algorítmicas anidadas no son análogas a los conductores conectados en paralelo. Aquí, la analogía con las muñecas anidadas colocadas unas dentro de otras es más adecuada. Si el bloque que constituye el cuerpo del ciclo es en sí mismo una estructura cíclica, entonces significa que hay ciclos anidados. A su vez, el lazo interior puede tener otro lazo en su interior, y así sucesivamente. En este sentido, se introduce el concepto de profundidad de anidamiento de bucles. Del mismo modo, las ramas se pueden anidar unas dentro de otras.

El enfoque estructural requiere el cumplimiento del estándar en la imagen de diagramas de flujo de algoritmos. Debe dibujarlos como se hizo en todos los ejemplos dados. Cada estructura básica debe tener una entrada y una salida. Un diagrama de bloques no estándar es poco legible, se pierde la visibilidad del algoritmo.

Los lenguajes de programación Pascal y C se denominan lenguajes de programación estructurados. Cuentan con todas las estructuras de control necesarias para la construcción estructural del programa. La estructuración de la apariencia del texto del programa da claridad a esta construcción. La principal técnica utilizada para este turnos de línea, los cuales deben obedecer las siguientes reglas:

Las construcciones del mismo nivel de anidamiento se escriben en el mismo nivel vertical (comienzan desde la misma posición en la línea);

La construcción anidada se escribe desplazada a lo largo de la línea varias posiciones a la derecha con respecto a su construcción externa.

Método estructural de algoritmización no es solo una forma de descripción del algoritmo, sino que también es la forma de pensar de un programador . Al crear un algoritmo, uno debe esforzarse por componerlo a partir de estructuras estándar. Usando una analogía de construcción, podemos decir que el método estructural para construir un algoritmo es similar a ensamblar un edificio a partir de secciones estándar, en lugar de doblar ladrillo por ladrillo.

Otra importante técnica tecnológica de programación estructurada es la descomposición del problema a resolver en subtareas. partes del problema original que son más simples desde el punto de vista de la programación. Los algoritmos para resolver tales subproblemas se denominan algoritmos auxiliares. En este sentido, existen dos caminos posibles en la construcción del algoritmo:

"de arriba hacia abajo": primero, se construye el algoritmo principal, luego los algoritmos auxiliares;

“de abajo hacia arriba”: primero se compilan los algoritmos auxiliares, luego el principal.

El primer enfoque también se llama el método de detallado secuencial, el segundo método de montaje

El método ensamblador implica la acumulación y uso de bibliotecas de algoritmos auxiliares implementados en lenguajes de programación en forma de subrutinas, procedimientos y funciones. Con el detallado secuencial, primero se construye el algoritmo principal y luego se introducen en él las llamadas a los algoritmos auxiliares del primer nivel. Después de eso, se compilan los algoritmos auxiliares del primer nivel, en los que puede haber llamadas a los algoritmos auxiliares del segundo nivel, y así sucesivamente. Los algoritmos auxiliares del nivel más bajo consisten solo en comandos simples.

El método de detallado sucesivo se utiliza en cualquier diseño de objetos complejos. Esta es la secuencia lógica natural del pensamiento del diseñador: profundización gradual en los detalles. En nuestro caso, también hablamos de diseñar, pero no de dispositivos técnicos, sino de algoritmos. Es prácticamente imposible construir un algoritmo bastante complicado de otra manera.

En el método de detallado secuencial, primero se analiza el problema original. Tiene subtareas. Se construye una jerarquía de tales subtareas. Luego se compilan los algoritmos (o programas), comenzando con el algoritmo principal (programa principal), luego los algoritmos auxiliares (subrutinas) con una profundización de nivel sucesiva, hasta obtener algoritmos que consisten en comandos simples.

Primer paso de detallar. Primero, describimos todas las subrutinas necesarias, indicando solo sus encabezados (especificaciones). En lugar del cuerpo de los subprogramas, escribimos comentarios explicativos (este tipo de subprograma se llama "stub"). Escribamos la parte principal del programa. Y luego volveremos a la programación detallada de procedimientos y funciones. En la primera etapa de la programación, en lugar del cuerpo de la subrutina, describimos su propósito en forma de comentario.

El uso de la programación estructurada le permite aumentar la velocidad de escritura de programas y facilitar la depuración del programa escrito. La programación estructural también es posible en los lenguajes de programación ensamblador, donde no hay operadores estructurales similares a los operadores estructurales de los lenguajes de programación C, PASCAL, PL/M.

La programación para computadoras universales comenzó con la programación en códigos de máquina, luego aparecieron y comenzaron a desarrollarse los lenguajes de alto nivel, luego Dijkstroy desarrolló los principios de la programación estructurada, la programación de objetos reemplazó a la programación estructurada y la programación visual se está desarrollando activamente en la actualidad.

La programación de microcontroladores sigue en gran medida el mismo camino. La transición de etapa a etapa depende de los recursos internos disponibles de los microcontroladores. Hace unos años, el uso de lenguajes de alto nivel era imposible debido a la poca memoria de programa interna. (En los modelos económicos de microcontroladores, esta situación aún se conserva). En la actualidad, con la llegada de los microcontroladores y con una memoria interna de varias decenas de kilobytes, aparece la posibilidad del diseño de objetos.

Actualmente, hay dos formas de escribir programas: de abajo hacia arriba y de arriba hacia abajo. Al escribir un programa de abajo hacia arriba, es imposible comenzar a depurar el programa sin escribir todo el programa. Al escribir un programa de arriba a abajo, lo cual es obligatorio para la programación estructurada, en cualquier etapa de la escritura de un programa, puede traducirse y ejecutarse, mientras que puede realizar un seguimiento de todas las acciones algorítmicas del programa escrito en ese momento. El proceso de escribir un programa no es diferente del proceso de crear un algoritmo. Además, estas etapas de creación de un programa se pueden combinar. La acción algorítmica realizada se muestra en el nombre de la subrutina. Por ejemplo:

La idea básica detrás de la programación estructurada es que solo hay cuatro declaraciones estructuradas. Usando estos operadores estructurales, puede construir un programa arbitrariamente complejo.

El primer operador de estructura se llama cadena lineal de operadores. Cualquier tarea se puede dividir en varias subtareas. La ejecución de subtareas se puede confiar a un subprograma, cuyo nombre puede (y debe) reflejar la subtarea que este subprograma debe resolver. En el momento de escribir el algoritmo de nivel superior (y el programa), no estamos interesados ​​en cómo se resolverá este problema, por lo que en lugar de una subrutina real, ponemos