Programación de procesos de procesamiento de datos computacionales cíclicos. Programación de procesos de computación cíclica. Ejemplo de uso de la sentencia for

En programación, a menudo hay tareas que requieren la ejecución múltiple del mismo grupo de sentencias de programa con diferentes valores de sus operandos. Tales procesos se denominan cíclico o simplemente ciclos Un grupo de declaraciones que se repiten cíclicamente forma el llamado cuerpo de bucle, que se puede representar como una expresión simple o compuesta. Se llamará a una única ejecución del cuerpo del bucle. iteración.

El cuerpo del ciclo en el programa siempre está precedido por encabezado de bucle, que contiene la notación operador de bucle y una expresión que especifica (directa o indirectamente) el número de iteraciones. Tenga en cuenta que el cuerpo del ciclo es un operando del operador del ciclo, por lo tanto, el encabezado y el cuerpo del ciclo constituyen una unidad estructural indivisible del programa. En adelante, utilizando el término declaración de bucle", tendremos presente tanto el título como el cuerpo del ciclo.

Para organizar los ciclos en todos los sistemas de programación, existen instrucciones de bucle, cuyo uso evita que el programador tenga que programar ciclos "manualmente". MathCAD admite dos tipos de operadores de este tipo: ciclo con la predestinación Para (también llamado lazo con contador) Y bucle con condición previa Mientras . La estructura de estos operadores se describe en la Tabla 5.

5.4.1 Operador Para

Este operador debe utilizarse en los casos en que el número de iteraciones esté predeterminado, es decir, conocido de antemano.

Encabezado de ciclo de este operador (el operando derecho) contiene una variable llamada parámetro(o mostrador) ciclo, Y lista de valores esta configuración. El número de elementos de la lista determina el número de iteraciones: durante cada iteración, el parámetro de bucle recibe el siguiente valor de la lista especificada en el encabezado.

Parámetro de ciclo tiene el estado de una variable interna del programa y tiene todas sus propiedades (descritas en el párrafo 5.1.4). Por regla general, el parámetro bucle se utiliza en el lado derecho de las expresiones que forman parte del cuerpo del bucle, aunque no está formalmente prohibido usarlo en el lado izquierdo de las expresiones (es decir, a la izquierda del local). operador de definición "f"). Debe recordarse que si el parámetro se cambió en el cuerpo del ciclo, su valor modificado será válido solo hasta el final de la iteración actual, porque antes de la siguiente iteración, el parámetro aún recibirá el siguiente valor de la lista especificada en el encabezado de bucle

Formalmente, está permitido no usar el parámetro de bucle en absoluto en las expresiones del cuerpo del bucle; en este caso, la lista de valores de parámetros no juega ningún papel; solo la longitud de esta lista es significativa, lo que determina el número de iteraciones (posiblemente sin sentido).

Una vez completada la última iteración, se ejecutará la instrucción del programa que sigue a la instrucción del bucle. En este caso, la variable utilizada como parámetro del bucle completado conserva el valor que tenía. en el último realmente completado iteraciones[*]. Tenga en cuenta que este valor no siempre coincide con el último valor de la lista especificada en el encabezado del bucle, ya que es posible salir "antes" del bucle cuando se activa el operador Romper incluido en el cuerpo del bucle.

Lista de valores el parámetro de bucle está escrito en el encabezado del bucle después del símbolo " Î ", que indica pertenencia a un conjunto (no es necesario introducir este símbolo "manualmente"; se mostrará automáticamente al introducir el operador Para ). MathCAD permite el uso tres formas entradas en esta lista: transferencia directa– los elementos de la lista se especifican explícitamente separados por comas, el parámetro recibe valores de la lista en el orden en que aparecen; al estilo de una variable de rango − los elementos de la lista forman la serie aritmética correspondiente; formación– los elementos de la lista reciben secuencialmente los valores de los elementos de la matriz en el orden de sus índices (primero, columnas de izquierda a derecha, luego, filas de arriba a abajo).

Los tres programas que se muestran en la Figura 21 ilustran diferentes usos del operador Para .

Programa Hecho(n) calcula el factorial de un numero norte . El operador de bucle en este programa es parte de una expresión compuesta que, a su vez, es el operando del operador condicional de lo contrario. Parámetro de ciclo k obtiene valores de una serie aritmética entera.

Programa Ch(V,N,p) procesa el vector de entrada V , reemplazándolo con el valor pag aquellos elementos cuyos índices están dados por los elementos del segundo vector de entrada norte . En este ejemplo, la lista de valores de parámetros de bucle i dada por un conjunto de elementos vectoriales norte . Tenga en cuenta que ambos programas realizan el control de datos de entrada y bloquean la ejecución del algoritmo principal si los argumentos reales del programa se especifican incorrectamente.

Programa L(M, z) , dado en el ejemplo V ), se acompaña de comentarios detallados y no requiere explicación. Este programa ilustra la posibilidad de utilizar varias sentencias de bucle, una de las cuales está incluida en las sentencias cuerpo otro. Uso bucles anidados es un truco típico utilizado para procesar matrices multidimensionales.

Figura 21 - Ejemplos de ciclos de programación Para


La Figura 22 ilustra el uso de los operadores Romper Y Continuar en el cuerpo del bucle. Por lo general, estos operadores son en sí mismos operandos. declaraciones condicionales Si o de lo contrario .

Operador Romper ("abortar") interrumpe ejecución del bucle y transfiere el control a la sentencia que sigue a la sentencia del bucle interrumpido. Tenga en cuenta que si el operador Romper interrumpido bucle anidado, la ejecución del bucle exterior continuará.

Operador Continuar ("continuar") actúa de manera diferente: rompe solo la iteración actual del ciclo y transfiere el control al encabezado de este ciclo, después de lo cual la ejecución del ciclo continúa de la siguiente iteración (a menos, por supuesto, que la iteración interrumpida fuera la última).

Operador Romper permitido usar y afuera cuerpos de ciclo En este caso, se interrumpe la ejecución de toda la subrutina y se devuelve el resultado de evaluar la expresión de la última subrutina realmente ejecutada.

Figura 22 - Ejemplos de uso de operadores Romper Y Continuar

Función SumaN(V) suma solo aquellos elementos del vector que contienen datos escalares de tipo numérico, e ignora el resto de los elementos. Función Inverso (V) genera un vector cuyos elementos son los recíprocos de los valores de los elementos correspondientes del vector original. En este caso, si el siguiente elemento contiene el número "0" o no es un escalar de tipo numérico, se interrumpe el ciclo. Tenga en cuenta que el operador Romper en el último ejemplo, no interrumpe el programa, pero transfiere el control al operador devolver inmediatamente después del operador Para .

5.4.3 Operador Mientras

A diferencia del operador Para , encabezado de declaración Mientras (En traducción - " Adiós") no contiene indicaciones explícitas del número de iteraciones - contiene expresión booleana, cuyo valor se calcula automáticamente antes del principio ejecución de cada iteración sucesiva[†]. Siempre que esta expresión sea "verdadera", las iteraciones del ciclo continuarán; tan pronto como después de la finalización de la siguiente iteración, la expresión se vuelve "falsa", la próxima iteración del ciclo no se ejecutará y la instrucción del programa recibirá el control después de la instrucción Mientras .

Obviamente, si se coloca una expresión lógica idénticamente falsa en el encabezado del ciclo, este ciclo no realizará ninguna de sus iteraciones, y si esta expresión es idénticamente verdadera, el ciclo será infinito (esta última situación se denomina bucle programas). Para evitar tales situaciones, una o más variables que cambian sus valores deben incluirse en el número de operandos de una expresión lógica. en el cuerpo del bucle de tal manera que el ciclo sea finito (se pueden usar otros medios para evitar el ciclo, por ejemplo, una salida forzada del ciclo por parte del operador Romper ).

Ejemplos de uso de operadores Mientras se muestran en la Figura 23. Se dan tres opciones para resolver el mismo problema: cada uno de los programas F0 , F1 Y F2 devuelve el índice del primero de los elementos del vector originalV exceder el valor dadoz .

Primer programa (ejemplo A ) añade uno al contador k en el cuerpo del bucle Mientras hasta el siguiente k -ésimo elemento del vector original no excederá el valor dado z . Después de eso, el ciclo termina y el programa devuelve el último valor modificado de la variable. k , que es la solución al problema. Tenga en cuenta que, en contraste con el ciclo Para , encimera k aquí es necesario procesar con declaraciones separadas: inicializar (es decir, asignarle un valor inicial) antes de la declaración del ciclo y cambiar su valor en el cuerpo del ciclo.

Es fácil ver que la opción A ) del programa tiene un inconveniente importante: no evita que el programa haga un bucle en el caso de que el problema no tenga solución, es decir, cuando el parámetro z excede el valor del elemento más grande del vector V . En este ejemplo, el bucle en tal situación realmente no sucederá, pero este no es el mérito de nuestro programa, sino del sistema MathCAD, que controla la salida del índice vectorial. V fuera de rango y generará un mensaje de error.

Libre de esta deficiencia está la opción b ) de un programa en el que el cuerpo del bucle contiene una comprobación adicional de la validez del siguiente valor de índice e interrumpe el bucle por la fuerza con el operador Romper en la situación correspondiente con la emisión de un mensaje de texto.

Quizás la forma más eficiente de resolver este problema es V ), que no utiliza el operador en absoluto Mientras . En este programa, la variable k utilizado solo para mantener la "pureza de estilo" - para excluir el procesamiento del parámetro de ciclo i fuera del operador Para .

Figura 23 - Ejemplos de ciclos de programación Mientras

Objetivo del trabajo:

Para estudiar sentencias cíclicas for, while, do - while, aprenda a componer y programar algoritmos cíclicos.

Breve información teórica

Los operadores de ciclo se utilizan cuando es necesario repetir algunas acciones (operadores y operaciones) varias veces, y tales secciones de algoritmos se denominan ciclos.

para sentencia de bucle

La forma básica del operador de bucle for es

para (expresión_1; expresión_2; expresión_3)

operador;

Dónde expresión_1– valor inicial del parámetro de ciclo;

expresión_2– verificar la condición para la continuación del ciclo;

expresión_3– cambio de parámetro de ciclo (corrección);

operador es un operador de C simple o compuesto.

El esquema de operación del operador es el siguiente: solo una vez que se calcula expresión_1, luego se verifica expresión_2, y si es "verdadera", luego se ejecuta la sección cíclica del programa, luego se corrige el parámetro, y así sucesivamente hasta expresión_2 toma el valor “falso”.

Por ejemplo: para (k=1; k<5; k++)

printf("\n %d", k);

Como resultado de ejecutar esta instrucción, los números del 1 al 4 se imprimen en una columna.

Puede utilizar una variable de cualquier tipo base como parámetro de bucle.

Por ejemplo:

for(ch='a'; ch<=’z’; ch++) // Вывод на экран букв

printf(“%c”,ch); // alfabeto latino

Debe controlar cuidadosamente la estructura de los bucles for en el programa para que no termine con un bucle infinito (del que no hay salida).

Por ejemplo:

para(k=10;k>6;k++)

printf("bucle infinito \n");

Salir del bucle temprano de las siguientes maneras:

Por condición adicional;

Usando las siguientes declaraciones:

romper;- salir del bucle en el que se encuentra la ruptura, el control se transfiere a la primera instrucción ejecutada después del bucle;

salir(códigoint);- salir del programa;

devolver;- salir de la función;

Usando el operador de salto incondicional ir a<метка>;

Temprano final del paso cíclico actual posible con la ayuda de una condición u operador adicional continuar, que interrumpe la ejecución del paso de bucle actual, es decir salta las declaraciones del resto del ciclo y transfiere el control a la declaración principal del ciclo para corregir el parámetro y probar la condición.

Está prohibido transferir el control del exterior al interior del circuito.

Cualquiera de las expresiones del bucle for entre paréntesis puede estar ausente, pero el carácter ";" no se puede dejar caer.

Por ejemplo:

para(;yo<3; i++)

puts("¡Hola!");

Bucles de instrucciones while y do-while

Forma básica del operador cíclico mientras:

mientras (condición)

operador;

Dónde operador

El bucle se ejecuta siempre que la condición se evalúe como "verdadera", es decir, la expresión entre paréntesis devuelve un resultado no nulo. Este es un ciclo con una condición previa: primero se verifica la condición y luego se ejecuta la declaración. Por lo tanto, el ciclo while no se ejecutará ni una sola vez si el resultado inicial de la evaluación de la condición es 0.

Formulario de operador básico hacer - mientras:

operador;

mientras (condición);

Dónde operador es una declaración simple, compuesta o vacía.

Operador hacermientras es un operador de bucle con una condición posterior, es decir, primero, se ejecuta la declaración y luego se verifica la condición para que sea cierta. Dado que en un ciclo do-while la condición se verifica al final del ciclo, el ciclo se ejecutará al menos una vez.

En bucles como while y do–while, se permiten los mismos métodos de salida anticipada del bucle y terminación anticipada del paso actual del bucle, como en la declaración for, pero en el último caso, a diferencia del bucle for, el control es transferido a la verificación de la condición. Para evitar un bucle infinito dentro de los bucles while y do-while, debe permitir cambiar las variables incluidas en la condición.

Por ejemplo:

para (i=1;i<=300;i++) // Печать целых чисел, кратных 5

si (i%5!=0) continuar;

imprimirf("%5d",i);

Ejemplos de bucles infinitos:

operador;

2) while(number_not_0) // ¡Siempre cierto!

operador;

operador;

while(numero_no_0); // ¡Siempre cierto!

Entre las declaraciones del ciclo, debe haber una condición de salida.

Bucles anidados

En el caso de bucles anidados, un bucle está dentro de otro, por ejemplo:

para(i=nn;i

para(j=mn;j

operador;

Dónde operador es una declaración simple, compuesta o vacía. El ciclo interno se ejecutará para cada valor del parámetro i que satisfaga la condición del ciclo externo.

Ejemplo:

para(i=1;i<10;i++) // Печать таблицы умножения

para(j=1;j<4;j++)

printf("\n %d*%d=%2d", i, j, i*j);

imprimirf("\n");

Ejemplo de uso de la sentencia for

Calcula El programa debe imprimir resultados intermedios y finales.

El texto del programa puede verse como

#incluir

#incluir

puts("Ingrese N");

escaneo(“%d”,&N);

para (s=0, k=1; k<=N; k++) // В заголовке цикла можно выпол-

( // toma y asignacion doble

printf(" \n k=%d s=%f ", k, s);

printf("\n RESPUESTA: s=%f, presione cualquier tecla...",s);

Variantes de tareas individuales.

Escribir un programa para definir una tabla de valores de funciones en en un rango arbitrario [ a,b] cambios de argumento X con paso arbitrario h. Valores un, b, h introducido desde el teclado. La tabla debe contener las siguientes columnas: número de serie, valor del argumento X, valor de función, mensaje sobre función creciente o decreciente, diferencia entre dos valores de función vecinos.

Determinar los valores máximo y mínimo de la función.

1. a=-p; b=p; h=0,4.

2. a=0,7; b=1,8; h=0,1.

3. a=-0,5; b=2,5; h=0,2.

4. a=-0,9; b=2,7; h=0,3.

5. a=-2; b=0,8; h=0,2.

6. a=-1,9; b=2,7; h=0,3.

7.a=-0,4p; b=0,4p; h=0,5.

8. a=-0,3p; b=1,3p; h=p/10.

9. a=-p/2; b=p/2; h=p/10.

10. a=-3; b=3; h=0,5.

“Programación de procesos de computación cíclica”

Objetivo del trabajo: dominar métodos para compilar algoritmos para procesos computacionales cíclicos y organizar programas cíclicos de estructura compleja.

parte teórica

4.1.1. Algoritmos cíclicos.

Un bucle es una secuencia de acciones que se pueden realizar más de una vez.

Un algoritmo cíclico es un algoritmo que contiene uno o más ciclos.

Hay 3 tipos de ciclos:

Bucle con condición previa;

Bucle con poscondición;

Ciclo con contador (ciclo de conteo).

Si la ejecución del bucle está asociada con alguna condición lógica, entonces se utilizan bucles con una precondición o una poscondición.

Los bucles de conteo representan una clase en la que la ejecución del cuerpo del bucle debe repetirse un número predeterminado de veces.

Los diagramas de bloques de algoritmos cíclicos se ven así:

1. Bucle con contador.

2. Bucle con condición previa. 3. Bucle con poscondición.

4.1.2 Sentencias de bucle en el lenguaje de programación C++.

En C++, hay un operador correspondiente para cada tipo de ciclo:

while loop (con precondición);

bucle do...while (con poscondición);

Para bucle (contable).

1. Operador de bucle como while

Forma de registro:

mientras declaración (condición);

donde: (condición) – expresión lógica;

declaración: la declaración o el cuerpo del ciclo que se ejecuta en el ciclo.

Si el cuerpo del ciclo es una declaración compuesta, debe estar entre corchetes de operador (...):

mientras (condición)

grupo de operadores

El esquema de cómo funciona dicho ciclo: mientras la condición es verdadera (verdadera), el cuerpo del ciclo se ejecuta y la condición se verifica nuevamente, etc. Cuando la condición se vuelve falsa, el ciclo termina.

2. Operador de bucle como do...while

Forma de registro:

operador;

mientras (condición);

El esquema de operación de dicho ciclo: primero, se ejecuta el operador, luego se verifica la condición, si la condición es verdadera, se ejecuta el operador y la condición se verifica nuevamente, etc. Cuando la condición se vuelve falsa, el ciclo termina.

Si el cuerpo del ciclo es una declaración compuesta, entonces, como para un ciclo con una condición previa, debe encerrarse entre corchetes de operador (...):



grupo de operadores

mientras (condición);

3. Operador de bucle como para

Forma de registro:

operador;

A es una expresión inicial que establece valores iniciales para el parámetro de bucle y, si es necesario, valores iniciales para otros parámetros. Por ejemplo:

i=0, x=0,5, p=1, s=0

B es una expresión condicional que verifica la condición para continuar el ciclo. Por ejemplo:

C es una expresión de incremento que incrementa el parámetro de bucle y, si es necesario, otros parámetros, luego se escriben como una lista. Por ejemplo: x+=0.1, i++

4.1.3 Un ejemplo de compilación de un algoritmo y un programa en C++ para un proceso computacional cíclico.

Calcular el valor de una expresión:

b- el valor inicial, su valor se ingresa desde el teclado y no cambia;

a– cambios en el rango con el paso 1;

y– resultado, sus valores se muestran en la pantalla.

Según la condición de asignación, la variable a es un número entero, por lo que puede usarse como contador en el ciclo de conteo.

El diagrama de bloques del algoritmo para resolver este problema utilizando el ciclo de conteo es el siguiente:

#incluir

#incluir

#incluir

printf("Ingrese b: ");

escaneo(“%f”,&b);

printf("un y\n");

para (a=0;a<=10;a++)

printf("%3d",a);

imprimirf("%8.2f\n",y);

y=(a-b)/raíz cuadrada(a);

imprimirf("%8.2f\n",y);

El diagrama de bloques del algoritmo para resolver este problema utilizando un bucle con una condición previa es el siguiente:

El texto del programa C++ correspondiente a este algoritmo es el siguiente:

#incluir

#incluir

#incluir

printf("Ingrese b: ");

escaneo(“%f”,&b);

printf("un y\n");

printf("%3d",a);

imprimirf("%8.2f\n",y);

y=(a-b)/raíz cuadrada(a);

imprimirf("%8.2f\n",y);

else printf("y no existe\n");

El diagrama de bloques del algoritmo para resolver este problema utilizando un ciclo con una condición posterior es el siguiente:

El texto del programa C++ correspondiente a este algoritmo es el siguiente:

#incluir

#incluir

#incluir

printf("Ingrese b: ");

escaneo(“%f”,&b);

printf("un y\n");

printf("%3d",a);

imprimirf("%8.2f\n",y);

y=(a-b)/raíz cuadrada(a);

imprimirf("%8.2f\n",y);

else printf("y no existe\n");

mientras (un<=10);

parte práctica

4.2.1 Requisitos para la realización del trabajo:

Complete la tarea del trabajo de laboratorio No. 3 para un rango de valores de una de las variables. La variable variable, su rango de cambio y el paso se indican en la Tabla 4. Elaborar diagramas de flujo de algoritmos y programas para dos tipos de ciclos indicados en la tarea individual (Tabla 4).

Organice la salida de los resultados de tal manera que los valores del parámetro variable se distingan claramente y, para cada uno de sus valores específicos, se muestren los valores del resultado (tres variables de la columna 2 de la tabla 3) en forma de mesa.

El orden de la obra.

1. Realizar análisis de tareas, formular un enunciado del problema.

2. Hacer diagramas de bloques de algoritmos.

3. Escriba un programa en C++. Proporciona entrada de datos iniciales desde el teclado y salida de resultados a la pantalla.

4. Verifique el rendimiento del programa en varios datos iniciales.

5. Realizar un análisis de los resultados.

Variantes de tareas individuales.

Las variantes de tareas individuales se seleccionan de la tabla 4 de acuerdo con el número del estudiante en la lista de grupo en el diario del maestro.

Tabla 4. Variantes de tareas individuales

Nº p/p variable mutable Tipos de bucle
10 ≤ un ≤ 10,Δ un=1
-4 ≤ re ≤ 4, Δ d = 0,5
-6 ≤ x ≤ 3, Δ x = 0,5
0 ≤ segundo ≤ 3 0, Δ b = 1,5 1. Con condición previa, 2. Contable
-15 ≤ j ≤ 1 0, Δ j = 0,5 1. Con condición previa, 2. Con condición posterior
5 ≤ mi ≤ 35,Δ mi = 2 1. Contable, 2. Con poscondición
-5 ≤ metro ≤ 15,Δ metro = 1 1. Con condición previa, 2. Contable
1 ≤ c ≤ 70,Δ c=3 1. Con condición previa, 2. Con condición posterior
1.5 ≤ c ≤ 15,Δ c = 0,5 1. Contable, 2. Con poscondición
-8 ≤ segundo ≤ 28,Δ segundo = 2 1. Con condición previa, 2. Contable
-4,5 ≤ x ≤ 11,5,Δ x = 0,5 1. Con condición previa, 2. Con condición posterior
-7 ≤ k ≤ 2,Δ k = 0,3 1. Contable, 2. Con poscondición
-1 ≤ metro ≤ 21,Δ metro = 1 1. Con condición previa, 2. Contable
-2 ≤ e ≤ 34,Δ mi = 2 1. Con condición previa, 2. Con condición posterior
-11 ≤ c ≤ 23,Δ c = 2 1. Contable, 2. Con poscondición
-13 ≤ p ≤ 50,Δ pag=3 1. Con condición previa, 2. Contable
3.3 ≤ b ≤ 9.3,Δ b = 0,3 1. Con condición previa, 2. Con condición posterior
3.5 ≤ y ≤ 12.3,Δ y=0.4 1. Contable, 2. Con poscondición
-7.5 ≤ a ≤ 5.7,Δ a = 0,6 1. Con condición previa, 2. Contable
-1,5 ≤ h ≤ 1,2,Δ h = 0,1 1. Con condición previa, 2. Con condición posterior
0 ≤ h ≤ 10,Δ h=0,5 1. Contable, 2. Con poscondición
-15 ≤ segundo ≤ 15, Δ b=2 1. Con condición previa, 2. Contable
-7 ≤ l ≤ 3, Δ l = 0,5 1. Con condición previa, 2. Con condición posterior
-5,5 ≤ b ≤ 6,5, Δ b = 0,5 1. Contable, 2. Con poscondición
1 ≤ k ≤ 9, Δ k = 0,4 1. Con condición previa, 2. Contable
0 ≤ b ≤ 6.9,Δ b = 0,3 1. Con condición previa, 2. Con condición posterior
-3 ≤ v ≤ 9,Δ v = 0,6 1. Contable, 2. Con poscondición
-2 ≤ p ≤ 2.6,Δ p = 0,2 1. Con condición previa, 2. Contable

4.3 Preguntas de control y tareas prácticas:

1. ¿Cómo funciona la instrucción while?

2. ¿Cómo funciona la sentencia do... while?

3. ¿Cómo funciona la instrucción for?

4. Subraye las declaraciones en el programa que forman el bucle.

5. ¿Cuál es la diferencia entre las declaraciones while y do... while?

6. Reemplace un operador de bucle con otro en el programa.

En programación, a menudo nos encontramos con tareas en las que hay procesos que se repiten. Por lo tanto, debemos conocer y ser capaces de utilizar un concepto como " procesos de computación cíclica».

Será fácil para un programador novato entenderlos usando un ejemplo generalizado. Además, es importante entender que en todos los lenguajes de programación hay formas de implementar ciclos.

¿Qué es un ciclo en programación?

Ciclo: en programación, se llama repetición repetida de las mismas acciones o cálculos, pero de acuerdo con las mismas dependencias con diferentes valores de variables.

Con el concepto de ciclo, nos encontramos no solo en la programación. Hay ciclos en muchas áreas de nuestras vidas.

Por ejemplo, el ciclo del agua en la naturaleza es un ciclo natural en nuestra vida.

Y ahora considere las reglas generales y los conceptos utilizados en los ciclos computacionales.

Etapas del proceso cíclico

En general, el ciclo debe implementarse en 4 etapas:
  • Etapa 1 - preparación del ciclo (inicialización).
    Configuración del valor inicial para el parámetro y la variable de bucle.
    Parámetro de ciclo- este valor, que cuenta el número de pasos del ciclo (el número de repeticiones del ciclo).
    variable de bucle es un valor que cambia su valor en cada etapa del ciclo.
    Inicialización es la asignación de valores iniciales al parámetro y la variable de bucle.
  • Etapa 2 - el cuerpo del ciclo.
    Esta es una repetición múltiple de una acción en un ciclo o cálculos sobre las mismas dependencias matemáticas con diferentes valores de variables.
  • Etapa 3 - modificación (cambio) del ciclo.
  • Etapa 4 - gestión del ciclo.
    Esta es una prueba de la condición para la continuación o el comienzo del ciclo.
Hay 3 declaraciones de bucle en pascal que pueden implementar cualquier algorítmicamente - estructura cíclica :
  1. Instrucción de bucle con parámetro
  2. Declaración de bucle con condición previa
  3. Instrucción de bucle con condición posterior
Los veremos en detalle en el próximo artículo.

1. Métodos para construir procesos de cómputo cíclico en programas.

2. Ingresó a la computadoranortenumeros reales. Escriba un programa que muestre la media aritmética de este conjunto.

Introducción

Los programas de bucle se utilizan en casi cualquier software. En este caso, los ciclos pueden ser explícitos e implícitos. En particular, el bucle implícito está presente en los controladores de interrupción, que en realidad se ejecutan en un bucle infinito cuyo cuerpo es activado por la interrupción. Las subrutinas también son cíclicas: funciones de ventana de aplicaciones de Windows. Además, se consideran programas con un ciclo, cuyo cuerpo contiene módulos funcionales.

Proceso cíclico es un proceso computacional en el que los cálculos se realizan repetidamente utilizando las mismas fórmulas para diferentes valores del argumento.

Programas que implementan un proceso cíclico se denominan programas cíclicos.

La organización del ciclo se puede dividir en las siguientes etapas:

preparación (inicialización) del ciclo (AND);

ejecución de cálculos de bucle (cuerpo de bucle) (T);

modificación de parámetros (M);

comprobando la condición de fin de ciclo (U).

El orden en el que se pueden realizar estos pasos, por ejemplo, T y M, puede variar. Dependiendo de la ubicación de la prueba, las condiciones de terminación del bucle distinguen entre bucles con extremos inferior y superior. Para un bucle con un extremo inferior, el cuerpo del bucle se ejecuta al menos una vez, ya que primero se realizan los cálculos y luego se verifica la condición de salida del bucle.


En el caso de un bucle terminado en la parte superior, es posible que el cuerpo del bucle no se ejecute ni una sola vez si la condición de salida se cumple inmediatamente.

Un bucle se llama determinista si el número de repeticiones del cuerpo del bucle se conoce o determina de antemano. El ciclo se llama iterativo si el número de repeticiones del cuerpo del ciclo no se conoce de antemano, sino que depende de los valores de los parámetros (algunas variables) involucradas en los cálculos.

cuerpo de bucle Esta es una parte del programa que se repite muchas veces.

Parámetro de ciclo es una variable que toma nuevos valores cada vez que se repite el bucle (hay bucles simples y complejos).

Vista general del ciclo n veces

En general, el ciclo n veces se escribe de la siguiente manera:

nc número de repeticiones veces

Las palabras de servicio nts (comienzo de un ciclo) y kts (final de un ciclo) se escriben estrictamente una debajo de la otra y están conectadas por una barra vertical. A la derecha de esta línea, se escribe una secuencia repetida de comandos (cuerpo del bucle).

El número de repeticiones es un número entero arbitrario.

Cuando se ejecuta el algoritmo, la secuencia de comandos en el cuerpo del ciclo se repite el número especificado de veces. Las reglas del lenguaje algorítmico permiten especificar cualquier número entero de repeticiones. Puede ser cero o incluso negativo. Estos casos no se consideran erróneos, solo el cuerpo del bucle no se ejecutará ni una sola vez, y la computadora procederá inmediatamente a la ejecución de los comandos escritos después de los kts.

Vista general del ciclo

En general, el ciclo se escribe de la siguiente manera:

condición de adiós nc

| cuerpo del bucle (secuencia de comandos)

Al realizar un ciclo, la computadora repite los siguientes pasos:

a) comprueba la condición escrita después de la palabra de servicio;

b) si la condición no se cumple, entonces la ejecución del ciclo finaliza y la computadora comienza a ejecutar los comandos escritos después de los kts. Si se cumple la condición, la computadora ejecuta el cuerpo del ciclo, verifica la condición nuevamente, y así sucesivamente.

Vista general del ciclo para

nc para i de i1 a i2

| cuerpo del bucle (secuencia de comandos)

Aquí i es el nombre de un valor de tipo entero, i1, i2 son enteros arbitrarios o expresiones con valores enteros. El cuerpo del ciclo se ejecuta secuencialmente para i = i1, i = i1 + 1, i1 + 2, …i = i2.

Las reglas del lenguaje algorítmico permiten especificar cualquier número entero i1, i2. en particular, i2 puede ser menor que i1. este caso no se considera erróneo: solo el cuerpo del bucle no se ejecutará ni una sola vez, y la computadora procederá inmediatamente a la ejecución de los comandos escritos después de los kts.

Bucle n veces y bucle mientras

Los bucles n veces y hasta ahora están dispuestos en el lenguaje algorítmico casi de la misma manera. Esto no es sorprendente, porque ambos comandos configuran un ciclo: una secuencia repetitiva de comandos. Las palabras de servicio nts y kts indican que se está ejecutando un ciclo y el encabezado del ciclo especifica un mecanismo específico para su ejecución.

Sin embargo, estos dos ciclos tienen una diferencia significativa. Comenzando a ejecutar el bucle n veces, la computadora sabe cuántas veces tendrá que repetir el cuerpo del bucle. Cuando se ejecuta un ciclo, este no es el caso todavía: la computadora verifica la condición del ciclo cada vez y no puede determinar de antemano cuándo terminará la ejecución. Solo puede averiguar el número de repeticiones del ciclo hasta después de que se complete el ciclo.

Esto deja claro en qué casos se debe usar qué ciclo. Si se conoce el número de repeticiones en el momento en que comienza el bucle, es conveniente utilizar el bucle n veces. Si no se puede predeterminar el número de repeticiones, es necesario un ciclo con mucho.

Por ejemplo, el programa de control automático tiene la estructura que se muestra en la Fig. 1. Módulos incluidos en el ciclo(así como los módulos de manejo de interrupciones), con una entrada y una salida cada uno, suelen tener un rasgo característico: los módulos contienen variables estáticas a las que se les asigna un valor en el ciclo actual, y el análisis de estas variables se realiza en el siguiente ciclo. Así, las variables mencionadas caracterizan el estado del módulo al final del ciclo actual o al comienzo del siguiente ciclo de programa. En el futuro, consideraremos solo dichos módulos de programas cíclicos y los denominaremos brevemente como MCP.


Figura 1. Estructura típica de un programa de control con bucle infinito.

Los MCP tienen una estructura diversa, cuya complejidad debe evaluarse de acuerdo con criterios especiales. VV Lipaev propuso un criterio conveniente y objetivo para la complejidad de los módulos del programa, a saber: el número y la longitud total de las rutas en el gráfico de control del módulo. Esto solo tiene en cuenta las declaraciones condicionales y selectas. Sin embargo, este criterio claramente no es suficiente para el MCP con memoria estática, ya que al analizar el MCP es necesario recordar los valores de todas las variables estáticas configuradas en el ciclo anterior. Además, no existen recomendaciones para la estandarización de algoritmos y programas, a excepción de la conocida programación estructurada en lenguajes de programación de uso común como C y Pascal. Este artículo se propone llenar estos vacíos en relación con el MCP.

2. Fragmentos de módulos de programas cíclicos

Un fragmento de dos polos, o simplemente un fragmento, consideraremos una sección de programa con una entrada y una salida (incluidos los operadores de bucle) bajo el supuesto de que los MCP en consideración están estructurados. El fragmento más simple incluye un solo operador. Una secuencia de fragmentos también es un fragmento. El MCP, a su vez, es un fragmento y consta de una secuencia de fragmentos.

Se propone un método de fragmentos independientes para sintetizar la estructura de módulos que implementan tablas de decisión. En este caso, un fragmento se considera independiente si se puede insertar en cualquier parte de la secuencia de fragmentos del módulo. La independencia de la ubicación de dicho fragmento se debe al hecho de que los datos analizados en él no se forman en la secuencia de fragmentos especificada, y los datos generados en el fragmento independiente no se analizan en esta secuencia de fragmentos. Por lo tanto, los fragmentos independientes se pueden ejecutar en paralelo (pseudoparalelo). En la fig. 2 muestra posibles implementaciones de un módulo con dos fragmentos independientes. En las opciones "a" y "b" se reordenan los fragmentos sin desvirtuar la esencia del programa; en la versión “c”, los fragmentos se implementan en paralelo.


Figura 2. Opciones para implementar un módulo con fragmentos independientes:

a) y b) - implementación secuencial,

c) - implementación paralela: una doble línea horizontal indica la paralelización del programa, una línea horizontal en negrita indica la finalización de procesos paralelos.

Un fragmento dependiente es aquel cuya ubicación depende de la ubicación de otro(s) fragmento(s) en el módulo. Distinguiremos entre fragmentos dependientes de arriba y de abajo. Un fragmento dependiente superior siempre debe ubicarse debajo de algún fragmento en el que se formen las variables utilizadas en este fragmento (dependiente). Un fragmento dependiente de la parte inferior siempre debe colocarse encima del fragmento que utiliza las variables generadas en este fragmento. Dos fragmentos dependientes, uno de los cuales depende superiormente del segundo y el segundo depende del primero desde abajo, se denominarán fragmentos mutuamente dependientes. No se pueden intercambiar y no se pueden implementar en paralelo. En la fig. 3 muestra un ejemplo de un módulo con fragmentos mutuamente dependientes. Entre fragmentos mutuamente dependientes puede haber otros, dependientes o independientes de ellos. Fig. 3. Módulo con fragmentos dependientes.

Llamaremos a un fragmento fijo un fragmento dependiente, cuya ubicación en el módulo está estrictamente definida. Por ejemplo, en el módulo para reconocer un carácter ingresado desde el teclado, el primero debe ser el fragmento dependiente de la parte inferior del carácter ingresado directamente. Los operadores de "inicio" y "fin" de un módulo son fragmentos fijos.

No existen fragmentos absolutamente independientes, aunque sólo sea porque en cualquier módulo se mencionan fragmentos fijos de principio y fin. Por tanto, un fragmento independiente, en general, tiene una región de posible ubicación limitada por dos fragmentos mutuamente dependientes. Es decir, una definición más estricta de un fragmento independiente es la siguiente: independiente con respecto a dos fragmentos fijos es un fragmento que se puede colocar en cualquier lugar de la secuencia de fragmentos limitados por arriba y por abajo por los fragmentos fijos indicados.




Arriba