Você está na página 1de 18

1 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.

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:

inicio i1 suma 0 LEER 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);

Profesor: Heber Helfer

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

i<n V i i +1 suma suma + 1/i

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);

Profesor: Heber Helfer

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

x>0 V ESCRIBIR x, x1/2

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

Profesor: Heber Helfer

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

Verdad? V i>n V Fin-while

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);

Profesor: Heber Helfer

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

Profesor: Heber Helfer

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

Profesor: Heber Helfer

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

Profesor: Heber Helfer

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

F n>0 V n > max F V 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);

Profesor: Heber Helfer

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

n>0 V n < min F

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

Profesor: Heber Helfer

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 0 F Verdad? V i>n F V Fin-while

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);

Profesor: Heber Helfer

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

LEER dato suma = suma + i

ESCRIBIR n, suma Fin

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);

Profesor: Heber Helfer

12 UNMSM Escuela Acadmica de Ingeniera Qumica Computacin Aplicada a la Ingeniera EJEMPLO 4.11 Los Nmeros Factoriales

Inicio
LEER n

suma 0 f1 Desde i = 2 hasta 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

Profesor: Heber Helfer

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');

Profesor: Heber Helfer

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

n es divisible por 2? F Desde d=3 hasta n/2 de 2 en 2

ESCRIBIR n = 2*n/2

n es divisible por d? F

ESCRIBIR n = d*n/2

Fin ESCRIBIR Es primo

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

Profesor: Heber Helfer

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

Profesor: Heber Helfer

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 Digite enteros positivos (cero para terminar)

Desde i = 1 hasta infinito

ESCRIBIR cuenta + 1

LEER n

n<0

Fin del for

cuenta cuenta + 1 suma suma + n

ESCRIBIR cuenta, suma/cuenta

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);

Profesor: Heber Helfer

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

Fin del for

Escribir x*y

Pasar a la siguiente lnea

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

Profesor: Heber Helfer

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

Desde i = 1 hasta infinito

LEER n V
n es divisible por 2?

Contina

F V
n es divisible por 3?

Fin del for

ESCRIBIR Final del ciclo repetitivo

ESCRIBIR Fuera del ciclo repetitivo

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');

Profesor: Heber Helfer

Você também pode gostar