Programación de procesos cíclicos de procesamiento de datos computacionales. Programación de procesos de computación cíclica. Un ejemplo de uso de la declaración for

En programación, a menudo hay tareas que requieren la ejecución repetida del mismo grupo de declaraciones de programa con diferentes valores de sus operandos. Estos procesos se denominan cíclico o simplemente ciclos. Un grupo de declaraciones repetidas cíclicamente forma el llamado cuerpo de bucle, que puede representarse mediante una expresión simple o compuesta. Llamaremos a la ejecución única del cuerpo del bucle. iteración.

El cuerpo de un bucle en un programa siempre va precedido de encabezado de bucle, que contiene la designación operador de bucle y una expresión que define (directa o indirectamente) el número de iteraciones. Tenga en cuenta que el cuerpo del bucle es el operando del operador del bucle; por lo tanto, el encabezado y el cuerpo del bucle constituyen una unidad estructural indivisible del programa. A continuación se utiliza el término " operador de bucle", nos referiremos tanto al encabezado como al cuerpo del bucle.

Para organizar los ciclos en todos los sistemas de programación, existen especialistas operadores de bucle, cuyo uso libera al programador de la necesidad de programar ciclos “manualmente”. MathCAD admite dos tipos de operadores de este tipo: ciclo con predestinación Para (también llamado bucle con contador) Y bucle con condición previa Mientras . En el Cuadro 5 se ofrece una descripción de la estructura de estos operadores.

5.4.1 Operador Para

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

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

Parámetro de bucle tiene el estado de una variable interna del programa y tiene todas sus propiedades (descritas en la sección 5.1.4). Como regla general, el parámetro de bucle se usa en el lado derecho de las expresiones incluidas en el cuerpo del bucle, aunque no está formalmente prohibido usarlo en el lado izquierdo de las expresiones (es decir, a la izquierda de la definición local operador "f"). Debe recordarse que si se cambió un parámetro en el cuerpo del bucle, su valor modificado solo será válido hasta el final de la iteración actual, ya que antes del inicio de la siguiente iteración el parámetro seguirá recibiendo el siguiente valor del lista especificada en el encabezado del bucle.

Formalmente, está permitido no utilizar el parámetro del bucle en absoluto en las expresiones del cuerpo del bucle; en este caso, la lista de valores de los 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).

Al finalizar 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 iteración[*]. 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 una salida "temprana" del bucle cuando se activa el operador. Romper incluido en el cuerpo del bucle.

Lista de valores El parámetro del bucle está escrito en el encabezado del bucle después del símbolo " Î ", que indica membresía en un conjunto (no es necesario ingresar este símbolo manualmente; se mostrará automáticamente al ingresar al 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; en estilo variable clasificado – 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, las columnas de izquierda a derecha, luego las filas de arriba a abajo).

Los tres programas mostrados en la Figura 21 ilustran diferentes usos del operador. Para .

Programa Hecho(n) calcula el factorial de un número norte . El operador de bucle en este programa es parte de una expresión compuesta, que, a su vez, es el operando de un operador condicional. De lo contrario. Parámetro de bucle 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 especificados por los elementos del segundo vector de entrada norte . En este ejemplo, se muestra una lista de valores de parámetros de bucle. i definido por un conjunto de elementos vectoriales norte . Tenga en cuenta que ambos programas realizan 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 ), va acompañado de comentarios detallados y no requiere explicación. Este programa ilustra la posibilidad de utilizar múltiples declaraciones de bucle, una de las cuales se incluye entre las declaraciones cuerpo otro. Uso bucles anidados- una técnica típica utilizada para procesar matrices multidimensionales.

Figura 21 – Ejemplos de programación de ciclos Para


La Figura 22 ilustra el uso de operadores. Romper Y Continuar en el cuerpo del bucle. Normalmente, 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 al operador que sigue al operador del bucle interrumpido. Tenga en cuenta que si el operador Romper interrumpido bucle anidado, la ejecución del bucle externo continuará.

Operador Continuar ("continuar") actúa de manera diferente - él interrumpe sólo la iteración actual del bucle y transfiere el control al encabezado de este bucle, después de lo cual se ejecuta el bucle continúa de la siguiente iteración (a menos, por supuesto, que la iteración interrumpida fuera la última).

Operador Romper permitido su uso y afuera cuerpo del ciclo. En este caso, se interrumpe la ejecución de toda la subrutina y se devuelve el resultado de la evaluación de su última expresión 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 y omite los elementos restantes. Función Inversa(V) forma un vector cuyos elementos son los valores inversos de los elementos correspondientes del vector original. Además, si el siguiente elemento contiene el número "0" o no es un escalar de tipo numérico, el ciclo se interrumpe. Tenga en cuenta que el operador Romper en el último ejemplo no interrumpe el programa, sino que 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 lógica, cuyo valor se calcula automáticamente antes del comienzo ejecución de cada siguiente iteración[†]. Mientras esta expresión sea verdadera, el ciclo continuará iterando; Tan pronto como la expresión se vuelva falsa después de completar la siguiente iteración, la siguiente iteración del ciclo no se ejecutará y la declaración del programa que sigue a la declaración recibirá el control. Mientras .

Obviamente, si se coloca una expresión lógica idénticamente falsa en el encabezado del bucle, este bucle no completará ninguna de sus iteraciones, y si esta expresión es idénticamente verdadera, el bucle será infinito (esta última situación se llama bucle programas). Para evitar este tipo de situaciones, los operandos de una expresión lógica deben incluir una o más variables que cambien sus valores. en el cuerpo del bucle para que el bucle sea finito (se pueden utilizar otros medios para evitar el bucle, por ejemplo, obligar al operador a salir del bucle Romper ).

Ejemplos de uso del operador. 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 primer elemento del vector fuenteV superando el valor especificadoz .

Primer programa (ejemplo A ) agrega uno al contador k en el cuerpo del bucle Mientras hasta el proximo k el ésimo elemento del vector original no excederá el valor especificado z . Después de esto, el ciclo finaliza y el programa devuelve el último valor modificado de la variable. k , que es la solución al problema. Tenga en cuenta que, a diferencia del ciclo Para , encimera k aquí es necesario procesarlo con declaraciones separadas: inicializar (es decir, asignarle un valor inicial) antes del operador del bucle y cambiar su valor en el cuerpo del bucle.

Es fácil ver que la opción A ) del programa tiene un inconveniente importante: no evita que el programa se repita 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 esto no es mérito de nuestro programa, sino del sistema MathCAD, que controlará la salida del índice vectorial. V fuera de los valores permitidos y generará un mensaje de error.

Libre de este inconveniente es la opción. b ) de un programa en el que el cuerpo del bucle contiene una verificación adicional de la validez del siguiente valor de índice e interrumpe por la fuerza el bucle con el operador Romper en la situación apropiada con la emisión de un mensaje de texto.

Quizás la solución más eficaz a este problema sea la opción V ), que no utiliza el operador en absoluto Mientras . En este programa la variable k se utiliza sólo para mantener la "pureza de estilo" - para excluir el procesamiento del parámetro del bucle i fuera del operador Para .

Figura 23 – Ejemplos de programación de ciclos Mientras

Objetivo del trabajo:

Estudie los operadores cíclicos for, while, do - while, aprenda a componer y programar algoritmos cíclicos.

Breve información teórica

Los operadores de bucle se utilizan cuando es necesario repetir ciertas acciones (operadores y operaciones) varias veces, y dichas secciones de algoritmos se denominan bucles.

El operador de bucle for

La forma básica de la declaración 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– comprobar las condiciones para la continuación del ciclo;

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

operador– operador simple o compuesto en lenguaje C.

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

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

printf(“\n %d”, k);

Como resultado de ejecutar este operador, los números del 1 al 4 se imprimen en una columna.

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

Por ejemplo:

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

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

Es necesario controlar cuidadosamente la estructura de los bucles for en el programa para no terminar con un bucle sin fin (del cual no hay salida).

Por ejemplo:

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

printf(“bucle sin fin\n”);

bucle de salida antes de lo previsto de las siguientes maneras:

Por condición adicional;

Usando los siguientes operadores:

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

salir(int Kod);- salir del programa;

devolver;- salir de la función;

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

Temprano finalización del paso cíclico actual posible utilizando una condición u operador adicional continuar, que interrumpe la ejecución del paso del bucle actual, es decir omite las declaraciones del resto del ciclo y transfiere el control a la declaración principal del ciclo para ajustar el parámetro y verificar la condición.

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

Es posible que falte alguna de las expresiones del bucle for entre paréntesis, pero el símbolo ";" no se puede bajar.

Por ejemplo:

para (; yo<3; i++)

pone(“¡Hola!”);

Declaraciones cíclicas while y do- while

Forma básica del operador cíclico. mientras:

Mientras (condición)

operador;

Dónde operador

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

Forma básica de operador. hacer - mientras:

operador;

mientras(condición);

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

Operador hacermientras– operador de bucle con poscondición, es decir Primero se ejecuta la declaración y luego se verifica que la condición sea cierta. Dado que en un bucle do- while la condición se comprueba al final del bucle, el bucle 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 finalización anticipada del paso actual del bucle que en la instrucción for, pero en el último caso, a diferencia del bucle for, el control se transfiere para comprobar el estado. Para evitar un bucle sin fin dentro de los bucles while y do- while, es necesario prever el cambio de las variables incluidas en la condición.

Por ejemplo:

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

si (i%5!=0) continúa;

printf(“%5d”,i);

Ejemplos de bucles infinitos:

operador;

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

operador;

operador;

mientras(número_no_0); // ¡Siempre cierto!

Entre los operadores del bucle debe existir 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 bucle interno se ejecutará para cada valor del parámetro i que satisfaga la condición del bucle externo.

Ejemplo:

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

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

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

printf(“\n”);

Un ejemplo de uso de la declaración for

Calcular. El programa debe imprimir resultados intermedios y finales.

El texto del programa puede verse así

#incluir

#incluir

pone(“Ingrese N”);

scanf(“%d”,&N);

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

( // toma y duplica la asignación

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

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

Opciones para tareas individuales

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

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 teorica

4.1.1. Algoritmos cíclicos.

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

Un algoritmo de operación por turnos es un algoritmo que contiene uno o más bucles.

Hay 3 tipos de ciclos:

Bucle con condición previa;

Bucle con poscondición;

Bucle con contador (bucle de conteo).

Si la ejecución de un bucle está asociada con alguna condición lógica, entonces se utilizan bucles con una condición previa o una condición posterior.

Los bucles de contador son 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 un contador.

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

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

En C++, para cada tipo de bucle existe un operador correspondiente:

Bucle como while (con condición previa);

Bucle como do... while (con poscondición);

Bucle como para (contando).

1.Operador de bucle como while

Formulario de entrada:

declaración while (condición);

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

operador: el operador o cuerpo del bucle ejecutado en un bucle.

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

mientras (condición)

grupo de operadores

El esquema de cómo funciona dicho bucle: mientras la condición es verdadera, se ejecuta el cuerpo del bucle y se vuelve a comprobar la condición, etc. Cuando la condición se vuelve falsa, el bucle sale.

2. Operador de bucle como do... while

Formulario de entrada:

operador;

mientras(condición);

El esquema de cómo funciona dicho bucle: primero se ejecuta el operador, luego se verifica la condición, si la condición es verdadera, se ejecuta el operador y se verifica nuevamente la condición, etc. Cuando la condición se vuelve falsa, el bucle sale.

Si el cuerpo del bucle es una declaración compuesta, entonces, al igual que para un bucle con una condición previa, debe estar entre corchetes de operador (...):



grupo de operadores

mientras(condición);

3. Operador de bucle como for

Formulario de entrada:

operador;

A es una expresión inicial que especifica valores iniciales para el parámetro del 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 especifica el incremento del parámetro del bucle y, si es necesario, otros parámetros, luego se escriben en una lista. Por ejemplo: x+=0,1, i++

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

Calcular el valor de una expresión:

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

a– cambios en el rango en pasos de 1;

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

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

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

#incluir

#incluir

#incluir

printf("Ingrese b: ");

scanf(“%f”,&b);

printf(“a y\n”);

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

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

El diagrama de bloques del algoritmo para resolver este problema usando 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: ");

scanf(“%f”,&b);

printf(“a y\n”);

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

else printf(“y no existe\n”);

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

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

#incluir

#incluir

#incluir

printf("Ingrese b: ");

scanf(“%f”,&b);

printf(“a y\n”);

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

else printf(“y no existe\n”);

mientras (un<=10);

Parte practica

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 que se está cambiando, su rango de cambio y paso se indican en la Tabla 4. Cree diagramas de bloques de algoritmos y programas para los dos tipos de ciclos especificados en la tarea individual (Tabla 4).

Formalice la salida de los resultados de tal manera que los valores del parámetro variable estén claramente resaltados y para cada valor específico, los valores del resultado (tres variables de la columna 2 de la Tabla 3) se muestren en el formulario de una mesa.

El orden de trabajo.

1. Realizar un análisis de la tarea, formular un planteamiento del problema.

2. Crear diagramas de bloques de algoritmos.

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

4. Verifique la funcionalidad del programa en varios datos iniciales.

5. Analizar los resultados obtenidos.

Opciones para tareas individuales.

Las opciones para tareas individuales se seleccionan de la Tabla 4 de acuerdo con el número de estudiante en la lista de grupos en el diario del maestro.

Tabla 4. Opciones para tareas individuales

No. Variable mutable Tipos de ciclos
10 ≤ un ≤ 10,Δ un=1
-4 ≤ d ≤ 4, Δ re = 0,5
-6≤x≤3, Δ x = 0,5
0 ≤ b ≤ 3 0, Δ segundo = 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 ≤ mi ≤ 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,Δ segundo = 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 ≤ b ≤ 15, Δ segundo =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,Δ segundo = 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,Δ pag = 0,2 1. Con condición previa, 2. Contable

4.3 Preguntas tipo test y tareas prácticas:

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

2. ¿Cómo funciona la declaración do... while?

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

4. Subraya las afirmaciones del programa que forman un ciclo.

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

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

En programación, a menudo nos encontramos con problemas que involucran procesos que se repiten. Por lo tanto, debemos conocer y poder utilizar un concepto como " procesos de computación cíclica».

Para un programador novato será fácil entenderlos utilizando un ejemplo generalizado. Además, es importante comprender que en todos los lenguajes de programación existen formas de implementar bucles.

¿Qué es un bucle en programación?

Un ciclo - en programación, es la repetición repetida de las mismas acciones o cálculos, pero según las mismas dependencias con diferentes valores de las variables.

El concepto de ciclo no sólo lo encontramos 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 nuestras vidas.

Ahora veamos las reglas y conceptos generales 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).
    Establecer el valor inicial para el parámetro y la variable de bucle.
    Parámetro de bucle– este valor que cuenta el número de pasos del ciclo (el número de repeticiones del ciclo).
    variable de bucle es una cantidad que cambia su valor en cada etapa del ciclo.
    Inicialización– esto es establecer los valores iniciales para el parámetro y la variable de bucle.
  • Etapa 2 – cuerpo del ciclo.
    Se trata de una repetición repetida de una acción en un ciclo o cálculos basados ​​en 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 verificación de condición para la continuación o el inicio del ciclo.
Hay 3 operadores de bucle en pascal que pueden implementar cualquier algorítmicamente – estructura cíclica :
  1. Declaración de bucle con parámetro
  2. Operador de bucle con condición previa
  3. Operador de bucle con poscondición
Los veremos en detalle en el siguiente artículo.

1. Métodos para construir procesos computacionales cíclicos en programas.

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

Introducción

Los programas cíclicos se utilizan en casi cualquier software. En este caso, los ciclos pueden ser explícitos o implícitos. En particular, el bucle implícito está presente en los manejadores de interrupciones, que efectivamente se ejecutan en un bucle infinito cuyo cuerpo es desencadenado por la interrupción. Las subrutinas (funciones de ventana de las aplicaciones de Windows) también son cíclicas. A continuación consideramos programas con un bucle 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 (Y);

realizar 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 de estos pasos, como T y M, puede variar. Dependiendo del lugar donde se realice la comprobación del estado de fin de ciclo, se distingue entre ciclos con final inferior y superior. Para un bucle que termina en la parte inferior, el cuerpo del bucle se ejecuta al menos una vez porque los cálculos se realizan primero y luego se verifica la condición para salir del bucle.


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

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

Cuerpo de bucle- Esta es una sección del programa que se repite repetidamente.

Parámetro de bucle es una variable que toma nuevos valores cada vez que se repite el bucle (los bucles pueden ser simples o complejos).

Vista general del bucle n veces.

En general, un bucle n veces se escribe así:

nc número de repeticiones veces

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

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

Al ejecutar el algoritmo, la secuencia de comandos en el cuerpo del bucle se repite el número de veces especificado. 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, el cuerpo del bucle simplemente no se ejecutará ni una sola vez y la computadora procederá inmediatamente a ejecutar los comandos escritos después de cc.

Panorama general del ciclo hasta el momento

En general, el ciclo actualmente está escrito de la siguiente manera:

ninguna condición todavía

| cuerpo del bucle (secuencia de comandos)

Al realizar un ciclo, la computadora repite las siguientes acciones:

a) verifica la condición escrita después de la palabra funcional while;

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

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 números enteros arbitrarios o expresiones con valores enteros. El cuerpo del bucle 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 un error; simplemente el cuerpo del bucle no se ejecutará ni una sola vez y la computadora procederá inmediatamente a ejecutar los comandos escritos después de cc.

Repita n veces y repita mientras

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

Sin embargo, estos dos ciclos tienen una diferencia significativa. Cuando la computadora comienza a ejecutar un bucle n veces, sabe cuántas veces tendrá que repetir el cuerpo del bucle. Al ejecutar un bucle, este aún no es el caso: la computadora verifica el estado del bucle cada vez y no puede determinar de antemano cuándo finalizará la ejecución. Por ahora, puedes averiguar el número de repeticiones de un ciclo sólo después de completarlo.

Esto deja claro en qué casos se debe utilizar qué bucle. Si se conoce el número de repeticiones cuando comienza el ciclo, es conveniente utilizar el ciclo n veces. Si no se puede determinar de antemano el número de repeticiones, es necesario un ciclo.

Por ejemplo, un 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, generalmente tienen la característica de que 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 del programa actual o al comienzo del siguiente. A continuación consideraremos únicamente estos módulos de programas cíclicos y los designaremos brevemente como MCP.


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

Los MCP tienen una estructura variada, cuya complejidad debe evaluarse según criterios especiales. V.V. Lipaev propuso un criterio conveniente y objetivo para la complejidad de los módulos de software, a saber: el número y la longitud total de las rutas en el gráfico de control del módulo. Solo se tienen en cuenta declaraciones condicionales y de selección. Sin embargo, este criterio claramente no es suficiente para un MCP con memoria estática, porque al analizar un MCP es necesario recordar los valores de todas las variables estáticas establecidas en el ciclo anterior. Además, no existen recomendaciones para la estandarización de algoritmos y programas, excepto la programación estructurada conocida desde hace mucho tiempo en lenguajes de programación de uso común como C y Pascal. Este artículo propone llenar estos vacíos en relación con MCP.

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

Un fragmento de dos terminales, o simplemente un fragmento, se considerará una sección de un programa con una entrada y una salida (incluidos los operadores de bucle) bajo el supuesto de que los MCP considerados están estructurados. El fragmento más simple incluye una sola declaración. 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 el método de fragmentos independientes para sintetizar la estructura de módulos que implementan tablas de decisión. En este caso, un fragmento que se puede insertar en cualquier lugar de la secuencia de fragmentos del módulo se considera independiente. La independencia de la ubicación de dicho fragmento se debe al hecho de que los datos analizados en él no se generan 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. La Figura 2 muestra posibles opciones de implementación para un módulo con dos fragmentos independientes. En las opciones “a” y “b” se reordenan los fragmentos sin distorsionar la esencia del programa; en la opció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 línea horizontal doble indica la paralelización del programa, una línea horizontal gruesa indica la finalización de procesos paralelos.

Un fragmento dependiente es aquel cuya ubicación depende de la ubicación de otro fragmento en el módulo. Distinguiremos entre fragmentos dependientes arriba y abajo. El fragmento dependiente superior siempre debe ubicarse debajo de algún fragmento en el que se forman las variables utilizadas en este fragmento (dependiente). Un fragmento dependiente de la parte inferior siempre debe colocarse encima de un fragmento que utiliza variables generadas en este fragmento. Dos fragmentos dependientes, uno de los cuales depende desde arriba del segundo y el segundo desde abajo depende del primero, se denominarán fragmentos mutuamente dependientes. No pueden intercambiarse ni implementarse en paralelo. En la Fig. La Figura 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 dependiente cuya ubicación en el módulo esté estrictamente definida como fija. 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 de la entrada del carácter real. Los operadores de "inicio" y "fin" de un módulo son fragmentos fijos.

Los fragmentos absolutamente independientes no existen, aunque sólo sea porque en cualquier módulo existen los mencionados fragmentos fijos del principio y del final. Por lo tanto, un fragmento independiente, en general, tiene un área de posible ubicación limitada por dos fragmentos mutuamente dependientes. Es decir, una definición más estricta de fragmento independiente es la siguiente: independiente con respecto a dos fragmentos fijos llamaremos a un fragmento que se puede colocar en cualquier lugar de la secuencia de fragmentos delimitados arriba y abajo por los fragmentos fijos especificados.




Arriba