Escolar Documentos
Profissional Documentos
Cultura Documentos
4.1 Usando un Bucle while para Calcular una Suma de Enteros Consecutivos Este programa calcula la suma de 1 + 2 + 3 + + n, despus de leer un valor entero n:
in V suma suma + i i i +1
ESCRIBIR n, suma
Fin
% Usando un Bucle while para Calcular una Suma de Enteros Consecutivos clc clear all i=1; suma=0; n = input('Ingrese un entero positivo: '); while i <= n suma = suma + i; i = i + 1; end fprintf('La suma de los %4d primeros enteros es %8d\n', n,suma);
2 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.2 Usando un Bucle while para Calcular una Suma de Recprocos
Inicio LEER n
suma 0 i0
ESCRIBIR i, suma
Fin
Este programa calcula la suma de recprocos suma = 1 + 1/2 + 1/3 + + 1/n, donde n es el entero ms pequeos para los que n suma:
% Usando un Bucle while para Calcular una Suma de Recprocos clc clear all n = input('Ingrese un entero positivo: '); suma = 0; i = 0; while i < n i = i + 1; suma = suma + 1/i; end fprintf ('La suma de los primeros %3d recprocos es %7.4f\n',i,suma);
3 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.3 Usando un Ciclo Repetitivo while para Repetir un Clculo Inicio LEER x
LEER x
ESCRIBIR i, suma
Fin Este programa imprime la raz cuadrada de cada nmero ingresado por el usuario. Usa un bucle while para permitir un nmero cualquiera de clculos en una sola corrida del programa:
% Este programa imprime la raz cuadrada de cada nmero % ingresado por el usuario clc clear all x = input('Ingrese un nmero positivo: '); while x > 0 fprintf('La raz cuadrada de %8.2f es %8.2f\n', x,sqrt(x)); x = input('Ingrese otro nmero positivo (o cero para terminar): '); end
4 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.4 Usando una Sentencia break para Terminar un Ciclo Repetitivo Inicio i1 suma 0 LEER n
suma suma + i i i +1
ESCRIBIR i, suma
Fin
% Este programa tiene el mismo efecto que el EJEMPLO 4.1 clc clear all i = 0; suma = 0; n = input('Ingrese un numero positivo: '); while true if i > n break; % termina el bucle inmediatamente end suma = suma + i; i = i + 1; end fprintf('La suma de los primeros %4d enteros es %10d\n',n,suma);
5 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.5 Los Nmeros de Fibonacci inicio LEER n ESCRIBIR 0, 1 f0 0 f1 1
Verdad? V f2 f0 + f1
f2 > n V
F Fin-while
ESCRIBIR f2
f0 f1 f1 f2
Fin
6 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.5 Los Nmeros de Fibonacci El siguiente programa presenta todos los nmeros de Fibonacci menores que n clc clear all n = input('Ingrese un entero positivo: '); fprintf('Numeros de Fibonacci < %3d\n0\n\n',n); f0=0; f1=1; while true f2 = f0 + f1; if f2 > n break; % termina el bucle immediatamente end fprintf('%12d\n',f2); f0 = f1; f1 = f2; end
7 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.6 Terminando un Bucle Infinito Sin algn mecanismo de terminacin, el bucle correr por siempre. Para terminar su ejecucin despus que comienza, presione <Ctrl> + C (deje presionada la tecla Ctrl y luego presione la tecla C de su teclado): Inicio LEER n ESCRIBIR 0, 1 f0 0 f1 1 F Verdad? V f2 f0 + f1 ESCRIBIR f2
f0 f1 f1 f2
Fin
clc clear all n = input('Ingrese un nmero positivo: '); fprintf('Nmeros de Fibonacci < %4d\n0\n1\n',n); f0=0; f1=1; while true % ERROR: BUCLE INFINITO! (Presione <Ctrl>+C.) f2 = f0 + f1; fprintf('%12d\n',f2); f0 = f1; f1 = f2; end
8 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.7 Usando un Centinela para Controlar un Bucle while inicio LEER n
max n
LEER n
ESCRIBIR max
Fin
% Este programa encuentra el mximo de una secuencia de nmeros % introducidos: clc clear all n = input('Introduzca enteros positivos (Cero para terminar): '); max = n; while n > 0 if n > max max = n; end n = input('Introduzca enteros positivos (Cero para terminar): '); end fprintf('mximo = %8.2f\n', max);
9 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.8 Usando un Bucle Invariante para Probar que un Bucle while es Correcto Este programa encuentra el mnimo de una secuencia de nmeros introducidos. Es similar al programa en EJEMPLO 4.7: Inicio LEER n
min n
V min n
LEER n
ESCRIBIR min
Fin
% Este programa encuentra el mnimo de una secuencia de nmeros introducidos. % similar al programa en el EJEMPLO 4.15: clc clear all n = input('Introduzca enteros positivos (cero para terminar): '); min = n; while n > 0 if n < min min = n; % INVARIANTE: min <= n para todo n, end % y min se hace igual a uno de los n n = input('Introduzca enteros positivos (cero para terminar): '); end fprintf('mnimo = %9.2f\n',min);
Es
10 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.9 Usando una sentencia break para terminar un ciclo repetitivo while Este programa tine el mismo efecto que el EJEMPLO 4.1. Usa una sentencia break para controlar el ciclo repetitivo: Inicio
i0 LEER n
suma suma + i i i +1
Fin
clc clear all i = 0; n = input('Ingrese un entero positivo: '); suma = 0; while true if i > n break; end suma = suma + i; i = i + 1; end fprintf('La suma de los primeros %3d enteros es %8d\n',n,suma);
11 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.10 Usando un Bucle for para Calcular una Suma de Nmeros Consecutivos Inicio LEER n suma = 0 Desde i = 1 hasta n
Este programa tiene el mismo efecto que el EJEMPLO 4.1: clc clear all n = input('Ingrese un entero positivo: '); suma = 0; for i=1:n suma = suma + i; end fprintf('La suma de los primeros %3d enteros es %8d\n',n,suma);
12 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.11 Los Nmeros Factoriales
Inicio
LEER n
f = f *i
ESCRIBIR
Fin
clc clear all n = input('Ingrese un entero positivo: '); suma = 0; f = 1; fprintf('Nmeros factoriales que son <= %4d\n',n); disp(1); disp(1); for i=2:n f = f*i; disp(f); end
13 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.12 Usando un Bucle for Descendente
Inicio
Desde i = 10 hasta 1
ESCRIBIR
Fin
% Este programa imprime los diez primero enteros positivos % en orden inverso: clc clear all for i=10:-1:1 fprintf('%3d',i); end fprintf('\n');
14 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.13 Usando un Bucle for con un Paso Mayor que Uno Este programa determina si un nmero introducido es primo:
Inicio
LEER n
n<2
ESCRIBIR No es primo
F
n<4 F V ESCRIBIR Es primo
ESCRIBIR n = 2*n/2
n es divisible por d? F
ESCRIBIR n = d*n/2
Fin
clc clear all n = input('Ingrese un entero positivo: '); if n < 2 fprintf('%8d no es primo.\n',n); elseif n < 4 fprintf('%8d es primo.\n',n); elseif mod(n,2) == 0 fprintf('%5d = 2*%5d\n',n,n/2); else for d=3:2:n/2 if mod(n,d) == 0 fprintf('%5d = %5d*%5d\n',n,d,n/d); return; end end fprintf('%8d es primo.\n',n); end
15 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.14 Bucles for Anidados Inicio
Desde x = 1 hasta 12
Desde y = 1 hasta 12
Escribir x*y
Fin
% Este programa imprime una tabla de multiplicacin: clc clear all for x = 1:12 for y = 1:12 fprintf('%5d', x*y); end fprintf('\n'); end
16 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.15 Controlando un input con un centinela Este programa lee una secuencia de enteros positivos, termina con cero e imprime su promedio
Inicio
cuenta 0 suma 0
ESCRIBIR cuenta + 1
LEER n
n<0
Fin
% Este programa lee una secuencia de enteros positivos, termina con cero % e imprime su promedio clc clear all cuenta=0; suma =0; disp('Digite enteros positivos (0 para terminar):'); for i = 1:inf % "forever (sin fin)" fprintf('%d : ',cuenta + 1); n = input('Digite enteros positivos (0 para terminar):'); if n <= 0 break; end cuenta = cuenta + 1; suma = suma + n; end fprintf('El promedio de los %4d nmeros positivos es %7.2f\n',cuenta,suma/cuenta);
17 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.16 Usando una sentencia break con ciclos for anidados Puesto que la multiplicacin es conmutativa (es decir, 34 = 43), las tablas de multiplicacin se presentan frecuentemente omitienso los nmeros por encima de la diagonal principal. Este programa modifica el EJEMPLO 4.14 para imprimir una tabla de multiplicacin triangular: Inicio
Desde x = 1 hasta 12
Desde y = 1 hasta 12
y>x
Escribir x*y
Fin
clc clear all for x=1:12 for y=1:12 if y > x break; else fprintf('%4d', x*y); end end fprintf('\n'); end
18 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera 4.17 La Sentencia continue La sentencia break salta el resto de las sentencias del bloque del ciclo repetitivo, saltando inmediatamente a la siguiente sentencia fuera del ciclo repetitivo. La sentencia continue es similar. Tambin salta el resto de las sentencias del bloque del ciclo repetitivo, pero, en vez de terminar el ciclo repetitivo transfiere la ejecucin a la siguiente iteracin del ciclo repetitivo. Contina el ciclo despus de saltar las sentencias restantes de su iteracin actual. EJEMPLO 4.17 23 Usando las Sentencias continue y break
Inicio
LEER n V
n es divisible por 2?
Contina
F V
n es divisible por 3?
Fin
clc clear all % Este programita ilustra las sentencias continue y break: for i=1:inf n = input('Ingrese un entero: '); if mod(n,2) == 0 continue; end if mod(n,3) == 0 break; end fprintf('Final del ciclo repetitivo\n'); end fprintf('Fuera del ciclo repetitivo\n');