Para declaración de bucle. Tareas típicas


Intentemos escribir un programa para resolver el siguiente problema:
Encuentra la suma de todos los números enteros entre 100 y 500. 

Al resolver este problema, se vuelve difícil encontrar la suma. Si simplemente escribimos el resultado de la suma de la variable s, por ejemplo, como

s=100+101+102+103+...+500

tomará mucho tiempo para la grabación en sí, porque la computadora no entenderá cómo usar los puntos suspensivos en la expresión aritmética y tendremos que escribir todos los números del 100 al 500 en esta suma. Y el valor de tal programa sería insignificante. Especialmente si queremos cambiar nuestros números y tomar un rango diferente.

¿Qué debemos hacer?

Si prestamos atención a la entrada anterior, entonces usamos constantemente la adición "+".
Puede intentar agregar números a la variable s gradualmente. Por ejemplo, usando esta notación
s := s + i;
lo que hicimos aquí:
1) a la derecha ponemos la expresión s+i,, es decir, tomamos el valor de la variable s, que ahora tenemos en memoria y le sumamos el valor de la variable i< a ella /strong>
2) a la izquierda establecemos el nombre de la variable s, es decir, todo el resultado del cálculo de la derecha se almacenará en esta variable, por lo que cambiaremos el valor de la variable s. 

¿Dónde podemos obtener números de nuestro rango?

Los números del 100 al 500 que pertenecen a nuestro rango deben caer en la variable i uno por uno. Y esto se puede hacer usando el conocido bucle for
Por ejemplo, de esta manera s := 0; //al principio es necesario resetear la variable s, para que en el primer paso se sume el numero 100 a cero, y no a lo que esta en memoria! for i := 100 to 500 do //cabecera del ciclo, en el cual la variable i cambia su valor de 100 a 500 en incrementos de 1 s := s + yo; //el cuerpo del ciclo, en el que agregamos gradualmente el valor de la variable cambiante i a la variable s // y el resultado se almacena en la variable s Esta solución es muy similar a calcular la suma por acciones
 s = 0 + 100 = 100
 s = 100 + 101 = 201
 s = 201 + 102  = 303
etc.

Número máximo entre los números dados

Al estudiar el operador condicional, tocamos el tema de encontrar el número máximo de varios números ingresados. En el problema "Máximo de cuatro números" usamos el siguiente algoritmo:
1. asignar el valor a la variable M a la primera de las cuatro variables;
2. si el valor de la segunda variable es mayor que el valor de la variable M, entonces reemplace el valor de la variable con el valor de la segunda variable;
3. si el valor de la tercera variable es mayor que el valor de la variable M, entonces reemplace el valor de la variable M con el valor de la tercera variable;< br /> 4. Si el valor de la cuarta variable es mayor que el valor de la variable M, reemplace el valor de la variable con el valor de la cuarta variable.

Se puede ver que cada  el número (vamos a indicarlo con X) lo comparamos con la variable M, de la siguiente manera:
 
pseudocódigo
entrada X si (M < X) entonces   M = X
Lo principal en este código es determinar qué valor inicial tendrá la variable M.
Normalmente, al resolver un problema de encontrar un máximo o un mínimo, el valor inicial de la variable M se asigna igual al primer número.
Por lo tanto, el código anterior debe ejecutarse 1 vez menos que el número de números (porque el primer número debe ingresarse y almacenarse como el valor inicial de la variable M).
Si tenemos la cantidad de números configurada desde el teclado (por ejemplo, en la variable n), entonces podemos organizar un ciclo (de 2 a n), usando el mismo número para almacenar la variable numérica.

Intente escribir el programa usted mismo.

Máximo no entre todos

Si necesitamos encontrar el máximo (mínimo) no entre todos los números ingresados, sino solo entre los números que satisfacen una determinada condición, entonces debemos tener en cuenta el hecho de que el primer número que tomamos como el valor inicial del máximo (mínimo) no siempre satisfará nuestros requisitos.

Por ejemplo, si estamos buscando el número negativo máximo, entonces tenemos el conjunto de datos: \(\{5, -2, 4, 2, -1, -3\}\ ) obtendremos el número 5 en el valor inicial del máximo, y es positivo y mayor que cualquier negativo. Y de ahí la condición X > M siempre será falso.

Por lo tanto, no es suficiente agregar solo una verificación para un número negativo al algoritmo del problema anterior, también es necesario tener en cuenta el hecho de que el primer número puede no satisfacer la condición requerida (en este caso, ser negativo ).

Puede solucionar esto agregando la siguiente condición dentro del ciclo:

pseudocódigo
si x es negativo entonces si M >= 0 o M < entonces M=X
En el código especificado, la condición  M >= 0 le permite realizar la acción  M = X incluso si variable inicialmente contiene un valor que es obviamente mayor que el resto (en nuestro ejemplo, el valor es igual a 5).

También notamos que si se conoce el rango de números, entonces el número mínimo (máximo) del rango especificado se puede tomar como el valor inicial del máximo (mínimo).

Tarea

Se dan N números. Encuentra el segundo elemento más grande en una secuencia.

Este problema admite dos interpretaciones.
Por ejemplo, si nos dan un conjunto de números: \(10\ 15\ 20\ 35\ 14\ 35\ 10\), ¿cuál debería ser la respuesta? ?
Bajo el "segundo elemento más grande" o simplemente "segundo máximo", puede entenderse como:
1) el valor que estaría en el penúltimo lugar si ordenáramos (ordenamos) todos los valores en orden no decreciente (cada uno siguiente es mayor o igual que el anterior). Entonces para el conjunto de números considerado la respuesta será el valor 35;
2) el valor del elemento, que es mayor que solo el máximo. Entonces la respuesta es 20.
Si solo hay un elemento máximo en el conjunto de números (todos los demás son menores), entonces ambas interpretaciones son iguales y la respuesta será la misma para ambos casos; de lo contrario, la respuesta será diferente.

Considere el primer caso (escribiremos el algoritmo en pseudocódigo).
Para encontrar la respuesta, utilizaremos dos variables:
1) maximum1 - valor máximo (primer máximo);
2) maximum2 - segundo máximo (nuestra respuesta).

Si se conoce el cambio de rango de valores, entonces como valores iniciales tomamos un número que es obviamente menor que el límite inferior del rango (por ejemplo, con un rango de -1000 a 1000 - tomar el número -1001)
Si se desconoce el rango de valores, puede escribir los dos primeros números de entrada en los valores iniciales de las variables max1 y max2, y luego compararlos dos variables entrada N //número de números entrada a, b máx1 = un máx2 = b si b > una, entonces     máx1 = b     máx2 = un
A continuación, consideramos todos los demás elementos (los 2 primeros ya se han visto, por lo que comenzaremos desde el 3) nc para i de 3 a n ingrese un si un > maximo1 //hubo un valor mayor que maximo1 Eso max2 = max1 //el primer máximo anterior se convierte en el segundo max1 = a //el nuevo elemento será el primer máximo de lo contrario //siguiente elemento no mas que max1 // necesita ser comparado con el valor maximo2 si un > máximo 2 Eso max2 = a //tomarlo como el nuevo valor max2 // max1 no cambia en este caso Todo Todo nudos
Intente implementar este algoritmo usted mismo.