Oraciones compuestas informáticas
El bucle también se llama repetición. En el procesamiento de programas, a menudo es necesario ejecutar repetidamente una determinada declaración o un grupo de declaraciones para finalmente completar una determinada tarea.
3.4.1 Bucle de conteo
A veces queremos ejecutar repetidamente un conjunto de declaraciones durante un número conocido de veces sin depender de los resultados de las declaraciones en el bucle. , tal estructura Utilice la declaración FOR para describir.
1. El formato de la declaración es:
(1)para la variable de control:=valor inicial al valor final haga
una declaración;
(2)para la variable de control: = Valor inicial downto Valor final do
Una declaración
Entre ellos, for, to, downto y do son palabras reservadas de Pascal. Debe haber una sola declaración (una declaración simple o una declaración compuesta)
2. Proceso de ejecución
(1) Primero asigne el valor inicial a la variable de la izquierda (llamada variable de control de bucle);
(2) Determine si el valor de la variable de control de bucle ha "excedido" Si se ha excedido el valor final, salte al paso (6);
(3) Si no se ha excedido el valor final, ejecute la instrucción después de do (llamada cuerpo del bucle);
(4) La variable del bucle se incrementa (para hasta) o se disminuye (para downto) en 1;
(5) Regresa al paso (2);
(6) El ciclo finaliza, ejecuta una declaración debajo del ciclo for.
3. Notas
(1) El valor inicial y el valor final pueden ser expresiones, y las variables de control son del mismo tipo que el valor inicial y el valor final, y están limitadas a tipos secuenciales como entero, booleano y tipos de caracteres, pero no pueden ser de tipo real.
(2) Cuando la variable de control es un número entero, el valor posterior es el valor original más (restado) 1. Para las cantidades de tipos de caracteres, se calculan en el orden de la tabla de códigos ASCII. Por ejemplo: el valor sucesor de 'B' es 'C' y el valor predecesor es 'A'.
(3) El valor inicial y el valor final se calculan antes de comenzar a repetirse y sus valores no se ven afectados durante la ejecución repetida. El cuerpo del bucle puede ser una declaración simple o una declaración compuesta.
(4) La variable de control no puede realizar ninguna operación de asignación en el bucle; modificar el valor de la variable del bucle dentro del cuerpo del bucle a menudo hará que el bucle finalice antes de tiempo o entre en un bucle infinito. Se recomienda no modificar arbitrariamente el valor de la variable de control en el cuerpo del bucle.
(5) Cuando el valor inicial excede el valor final, el bucle no se ejecuta y el número de bucles es 0
(6) El número de bucles es igual a ABS; (valor final - valor inicial) + 1
(7) La regla para aumentar o disminuir el valor de la variable de control del bucle es: si lo elige, aumentará; si elige bajar a, aumentará; disminuir. El llamado valor de la variable de control del bucle "excede" el valor final. Para bucles crecientes, "excede" significa mayor que, y para bucles decrecientes, "excede" significa menor que.
Ejemplo 1: Calcular la suma de 1+2+3+……+100.
Llamamos a funciones como variables de superposición "acumuladores". Si el valor de la variable de superposición es una constante cada vez, se llama "contador" y "acumulador" se encuentran en declaraciones de operación básica que se usan con frecuencia en programas. .
El programa es el siguiente:
programa aa;
var
i,s:integer;
comenzar
s:=0;
para i:=1 a 100 hacer s:=s+i;
escribirln(s); p>
end.
Ejemplo 2: Programación para encontrar el número en el entero de cuatro dígitos ABCD que satisface la siguiente relación:
(AB+CD)(AB+ CD)=ABCD
p>El programa es el siguiente:
programa aa;
var
i,m,n, k:longint;
comenzar
para i:=1000 a 9999 hacer
comenzar
m:=i div 100;
n:=i-m* 100;
k:=(m+n)*(m+n);
si k=i entonces
writeln('fu he tiao jian de si wei zheng shu shi:',i);
end;
end.
El método El utilizado anteriormente se denomina "método de enumeración" y, denominado "método exhaustivo", es un método de uso común para resolver problemas utilizando computadoras. Su idea básica es enumerar varias situaciones posibles una por una y juzgar cada posibilidad como una solución que cumple con los requisitos. Aunque el método es muy estúpido, es más útil cuando se combina con las capacidades de procesamiento de alta velocidad de las computadoras. A través de los ejemplos anteriores, vemos que es muy conveniente utilizar bucles para solucionar problemas de enumeración.
Ejemplo 3: Imprime el siguiente triángulo compuesto por números: (sin espacios entre caracteres)
El programa es el siguiente:
programa aa; p>
var
i,j,k,L:integer;
comenzar
L:=5;
para i: =1 a 5 hacer
comenzar
escribir(1:L);
para j:=2 hacer yo
escribir (j:1);
para k:=i-1 hasta 1 hacer
escribir(k:1);
escribirln;
L:=L-1;
end;
end.
Un bucle que contiene otro bucle se llama Anidamiento de bucles. En este ejemplo, la declaración FOR interna es una declaración en el cuerpo del bucle FOR externo, mientras que los dos bucles internos (J, K) son paralelos. Preste atención a la diferencia en la relación entre ellos.
Ejercicio 9
1. Determine los resultados de ejecución del siguiente programa
(1) program aa;
var
t,s,i:integer;
comenzar
t:=0;s:=0;
para i:=-5 a 5 hacer
comenzar
t: =t+1;
s:=s+t+1;
fin;
writeln('t,s=',t, s: 10);
fin (2) programa aa;
var
a,b:integer;
c, d: booleano;
comenzar
a:=8;b:=7;
c:=odd(a);
writeln('c=',c);
writeln('d=',d);
si a>b entonces p>
comenzar
si c=d entonces escribir(c) en caso contrario escribir(d);
finalizar;
finalizar.
2. (Nombre de archivo: k902.pas) Imprima los siguientes gráficos: (sin espacios entre caracteres)
Análisis: Se pueden usar dos bucles para hacer esto:
for i:=1 a 5 hacer
comenzar
escribir('*':6-i);
para j:=2 a 2*i-1 hacer p>
escribir('*');
escribir;
fin;
3. (Nombre del archivo: k903.pas) ¡Pregunte por N! =1*2*3*…*N, donde N no es mayor que 10.
Análisis: El programa primero debe ingresar N y luego multiplicar de 1 a N. Tenga en cuenta que el acumulador debe configurarse en 1 antes de su uso
4. (Nombre de archivo: k904.pas) Genera todos los números pares entre 1 y 100. Los números están separados por un espacio y se generan 10 números en cada línea.
Análisis: Se pueden generar 10 números en cada línea mediante la siguiente declaración: (K es el número de registros impresos ahora, I es la variable del bucle)
for i:= Del 1 al 100
comienzan
si no es impar(i), entonces
comienzan
k:=k+1; p>
si (k mod 10=0) entonces writeln(i) else write(i,' ');
end;
end;
Resultados de la ejecución:
2 4 6 8 10 12 14 16 18 20
......
82 84 86 88 90 92 94 96 98 100
La declaración de bucle de tipo When (declaración WHILE) describe el bucle de la siguiente manera: cuando la condición especificada es verdadera, la declaración especificada se ejecuta repetidamente.
1. Formato de declaración: mientras que la expresión booleana DO una declaración
2. Proceso de ejecución: primero encuentre el valor de la expresión booleana. Cuando su valor es verdadero (VERDADERO), la declaración especificada se ejecuta repetidamente. Cuando su valor es falso (FALSO), el ciclo finaliza.
3. Notas:
(1) Para que el bucle WHILE termine normalmente, las variables contenidas en la expresión deben cambiarse en la declaración especificada por el bucle, es decir, es posible hacer que el valor de la expresión es falsa, provocando que el ciclo termine. De lo contrario, el bucle nunca terminará y se producirá un bucle infinito.
(2) Dado que la condición se juzga primero, a las variables en la expresión booleana se les deben asignar valores iniciales antes de la declaración de bucle.
(3) Las declaraciones especificadas en el bucle generalmente son declaraciones múltiples y deben encerrarse usando BEGIN y END para formar una declaración compuesta.
(4) El bucle WHILE permite que la condición no sea verdadera al principio. En este caso, la sentencia WHILE no hace nada.
Usemos algunos ejemplos para profundizar nuestra comprensión.
Ejemplo 1: Ingrese varios caracteres cuyo terminador sea '#' y cuente el número de veces que aparece la letra 'A' en los caracteres ingresados (incluidas mayúsculas y minúsculas).
El procedimiento es el siguiente:
PROGRAMA AA;
VAR CH:CHAR;I:INTEGER;
BEGIN
I:=0;
LEER(CH);
MIENTRAS CH<>'#' HACER
COMENZAR
SI ( CH='A')OR(CH='a') ENTONCES I:=I+1;
LEER(CH);
FINAL;
WRITELN('A,a=',I);
END.
Durante la ejecución, siempre que el carácter de entrada sea 'A' o 'a', la variable i Sumar 1 al valor original y luego asignarlo a I es equivalente a sumar 1 al valor original de i. Como se mencionó anteriormente, la variable i aquí se llama contador.
Cuando se ingresa un '#', la condición del bucle no se establece, el bucle finaliza y se genera el resultado.
En este programa, los datos de entrada '#' son el signo del final del bucle. Este método de establecer artificialmente la condición de fin del bucle en el programa se denomina método de marca de fin al diseñar el bucle. programa de estructura Este método se utiliza a menudo.
Ejemplo 2: Encuentra la suma de los dígitos de un número entero de entrada.
El procedimiento es el siguiente:
PROGRAMA AA;
VAR X,T,S:INTEGER;
BEGIN
READLN(X); S:=0;
MIENTRAS X<>0 HACER
COMIENZAR
T:=X MOD 10;
S:=S+T;
X:=X DIV 10
FINAL;
ESCRIBIR(S);
FIN.
Ejemplo 3: Encuentra el mínimo común múltiplo de dos números naturales M y N.
PROGRAMA AA;
VAR M,N,I,S:LONGINT;
BEGIN
WRITE('INGRESA DOS NÚMEROS: ' );
READLN(M,N);
I:=1;
S:=M*I;
MIENTRAS S MOD N<>0 HACER
COMENZAR
I:=I+1;
S:=M*I
END;
WRITELN('[',M,',',N,']=',S);
END.
Relaciones en el programa La función de la expresión S MOD N es determinar si un número es divisible por otro número, lo cual se usa a menudo en programas.
Si lo estudias con ejemplos, ¡creo que lo entenderás!
Ejemplo 1: compre 100 botones por 5 yuanes, incluidos botones de metal por 5 centavos cada uno, botones de plexiglás por 1 centavo cada uno y 3 botones pequeños por 1 centavo. Requisitos de programación ¿Cuántos botones compraste de cada uno? ¿tipo?
Análisis: Supongamos que X, Y y Z representan el número de botones metálicos, botones orgánicos y botones pequeños respectivamente. Según el significado de la pregunta, se puede obtener la siguiente ecuación Grupo: Si lo usas todo para comprar botones de metal, puedes comprar hasta 10 piezas, y si lo usas todo para comprar botones de plexiglás, puedes comprar hasta 50 piezas. Por lo tanto, el número máximo de botones pequeños que puedes comprar es: 100-X-Y piezas a partir de esto, el programa se puede escribir de la siguiente manera:
programa aa;
var
x,y,z:integer;
comenzar
para x:=1 a 10 hacer
para y:=1 a 50 hacer
comenzar
z:=100-x-y;
si 50*x+ 10*y+z/3=500 entonces writeln('jshk:',x,' yjk:',y,' nk:' ,z);
end
end .
Ejemplo 2: Se sabe que los primeros números de la secuencia faibonacai (Fibonacci) son 0,1 ,1,2,3,5..., programa para encontrar el número de esta secuencia.
Análisis: primero considere el algoritmo para resolver el problema: observe cuidadosamente la secuencia y encuentre que el patrón es:
F1=0 (N=1) F2=1 (N =2)
Fn=Fn-2+Fn-1 (N>=3) p>
Es decir, a partir del tercer elemento, cada vez es uno de sus dos primeros elementos y.
programa aa;
var
<. p> f,n,p,L,t:longint;comenzar
escribir('n=');
leer(n);
p:=0;
L:=1;
p>t:=2;
mientras (t<>n ) y (n>2)
comenzar
t:=t +1;
f:=p+L;
p:=L;
L:=f;
fin;
si n=1 entonces writeln(p);
si n=2 entonces writeln(L);
si n>2 entonces writeln(f);
fin.
Resultado de ejecución:
n=20
4181
En este ejemplo, utilizamos un algoritmo "recursivo". La llamada recursividad significa que en una secuencia de números, el valor del siguiente elemento se calcula en función del valor del elemento anterior, es decir, el siguiente elemento tiene cierta dependencia del elemento anterior.
Ejemplo 3: Utiliza el método Nicomanche para encontrar el máximo común divisor de dos números naturales A y B.
Análisis: Hay muchas formas de encontrar el máximo común divisor (MCD) de dos números naturales A y B. El método de Nicomanche es un método para encontrar el MCD, que se caracteriza por hacer una serie de restas. y restarlos repetidamente, para finalmente obtener MCD.
Por ejemplo: A y B son 35 y 21, una serie de procesos de resta son:
(35,21)=(14,21)
( 14,21)=(21,14)=(7,14)
(7,14)=(14,7)=(7,7)
7 -7 = 0, entonces (35,21) =7
Todo el proceso consta de una serie de operaciones de resta. Lo único que se debe procesar es: cuando A
Por lo que el programa se puede obtener de la siguiente manera:
programa aa;
var
a,b,r:integer;
comenzar
leer(a,b);
mientras que a<>0 hacer
comenzar
si a
comenzar
r:=a; a:=b; b:=r;
finalizar;
a:= a-b;
fin;
writeln(b);
fin
Datos de prueba:
Entrada:35 21
Salida: 7
Todo el programa es conciso y claro, y es más rápido porque evita operaciones de división.
Ejemplo 4: Encuentra el máximo común divisor de dos números naturales M y N.
Análisis: En el ejemplo anterior, introdujimos el método Nicomanches para encontrar el máximo común divisor de dos números naturales A y B. A continuación, presentaremos otro método: el método de eliminación. Este es un método para encontrar el máximo común divisor a partir de la aritmética. Divide M entre N. Si el resto R es cero, entonces N es M y el máximo común divisor de N. Si el resto no es cero, entonces el último divisor N. se usa como dividendo y el último resto se usa como divisor. Después de dividir nuevamente, se encuentra el resto R. De esta manera, la división se repite repetidamente y se considera que el resto es cero hasta que R = 0. , lo llamamos "juicio de división euclidiana" método restante ". Cuando R = 0, el divisor es el máximo común divisor de los dos números M y N.
El programa es el siguiente:
programa aa;
var
a,b,r:integer;
comenzar
readln(a,b);
r:=a mod b;
mientras r<>0 hacer
comenzar
a:=b;
b:=r;
r:=a mod b;
finalizar;
writeln(b);
end.
Para escribir un programa, primero debes determinar el algoritmo, pero el algoritmo requiere algo de reflexión antes de poder ser escrito correctamente Este pensamiento es El proceso es el proceso de "de lo concreto a lo abstracto". En este ejemplo, A se usa para representar uniformemente el dividendo en múltiples divisiones, B se usa para representar uniformemente el divisor y R se usa para representar uniformemente el resto. Este es un método abstracto, que es una abstracción obtenida después de resumir y ordenar. cada dato. En programación, usaremos este método ampliamente. Después de la demostración de los ejemplos anteriores, creo que todos pueden aprender y dominar gradualmente este método.
A través de la discusión anterior, podemos encontrar que en Pascal, la estructura secuencial es la estructura básica más simple. Si no consideramos la estructura de selección y la estructura de bucle en el programa localmente y las consideramos como una declaración compuesta, entonces el programa en sí puede considerarse como una estructura secuencial. A su vez, podemos observar los componentes de la estructura de selección o bucle. estructura con más detalle, entonces su parte principal (cuerpo del bucle, declaración seleccionada, etc.) es en realidad una estructura secuencial o una declaración compuesta.
Al escribir un programa, si se conoce el número de bucles, generalmente se usa la declaración FOR; si se desconoce el número de bucles, se debe usar la declaración WHILE. Al diseñar la programación del bucle, asegúrese de averiguar qué se debe hacer antes del bucle (generalmente se debe realizar algún trabajo preparatorio antes del bucle, como: acumulación, borrar el contador, asignar valores iniciales a las variables, etc.), y qué se debe hacer durante el ciclo, qué problemas resolver y qué hacer después del ciclo. Si olvida lo que debe hacer o los coloca en el orden o ubicación incorrectos, no obtendrá los resultados correctos. Al diseñar un programa Pascal a gran escala, el programa grande se puede dividir en pequeños módulos compuestos de estructuras básicas según funciones según la idea estructural, y diseñarse por separado.