Sie sind auf Seite 1von 35

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.

GreysonAlberca

CAPTULO3:ESTRUCTURASDEREPETICIN
Seguimos avanzando en el desarrollo de contenidos y ahora revisemos otras estructuras de control denominadas como ciclos repetitivos. Adems, combinaremos todo lo aprendido anteriormente con lo que estudiaremos aqu, con el fin de resolver ciertos ejercicios con un mayor grado de dificultad. Muchas veces cuando estamos creando algoritmos y programas necesitamos repetir algunas veces un grupo de sentencias. Imagnese que necesita leer los datos de 5 alumnos. En pseudocdigo podra expresarse as:
Algoritmo 5 ALUMNOS Clase CincoAlumnos 1. Mtodo principal a. Declaraciones Variables n1, a1, n2, a2, n3, a3, n4, a4, n5, a5 : Cadena b. Solicitar Nombre y apellido del alumno 1 c. Leer n1, a1 d. Presentar n1, a1 e. Solicitar Nombre y apellido del alumno 2 f. Leer n2, a2. g. Presentar n2, a2 h. Solicitar Nombre y apellido del alumno 3 i. Leer n3, a3. j. Presentar n3, a3 k. Solicitar Nombre y apellido del alumno 4 l. Leer n4, a4 m. Presentar n4, a4 n. Solicitar Nombre y apellido del alumno 5 o. Leer n5, a5 p. Presentar n5, a5 r. Fin Mtodo principal Fin Clase CincoAlumnos Fin

Como podemos ver el pseudocdigo anterior las acciones solicitar, leer y presentar se repiten para cada alumno. Puede suceder que con el tiempo ya no sean 5 alumnos sino 10, 20 30 sera conveniente seguir trabajando as? La respuesta inmediata es no qu deberamos hacer? Buscar algn mecanismo que nos permita repetir las acciones: solicitar, leer y presentar. A continuacin se muestra una alternativa (usando el ciclo repetitivo FOR) para el pseudocdigo anterior:
Algoritmo 5 ALUMNOS USANDO FOR Clase CincoAlumnosFor 1. Mtodo principal a. Declaraciones Variables nom, ape: Cadena i : Entero b. FOR i = 1; i <= 5; i ++ 1. Solicitar Nombre y apellido del alumno i

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

2. Leer nom, ape 3. Presentar nom, ape c. ENDFOR d. Fin Mtodo principal Fin Clase CincoAlumnos Fin

A simple vista podemos ver la disminucin de las lneas de cdigo as como de las variables a usar, dando una mejor legibilidad del cdigo. El algoritmo anterior muestra el funcionamiento del ciclo FOR, podemos decir, sin entrar en demasiados detalles, que las acciones solicitar, leer y presentar se ejecutaran mientras i sea menor o igual que cinco (Fjese en el punto b. del algoritmo). Pasamos a estudiar la primera de tres estructuras de repeticin que generalmente existen en todos los lenguajes de programacin y veremos como al igual que con las estructuras de seleccin se usan condiciones para determinar la terminacin del ciclo repetitivo.

3.1CicloDOWHILE
Inicie el estudio de los ciclos repetitivos con la estructura DOWHILE, acuda al texto bsico y lea el Captulo 5 La repeticin DOWHILE pgina 98. Revise el formato y el funcionamiento de la estructura de repeticin motivo de nuestro estudio. Qu le pareci la lectura? Comprendi? Si es as avancemos y repasemos ciertos elementos de la lectura anterior. Estudiemos algunos detalles importantes de este ciclo repetitivo ya que ellos nos permitirn diferenciarlo de los otros ciclos repetitivos que estudiaremos ms adelante. Una de las caractersticas ms importantes, que posee este ciclo repetitivo es que se ejecuta por lo menos una vez, ya que la condicin se evala al final, luego de las acciones o sentencias que forman parte del bloque. Recuerden que este ciclo se debe interpretar as: hacer mientras se cumpla la condicin. Revise la nota que se encuentra en la pgina 99 del texto bsico. La representacin de este ciclo dentro de Java es la (Traduccin del algoritmo de la pgina 99 del texto bsico): siguiente

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 1 Ejemplo de un ciclo DO...WHILE en Java

La siguiente ilustracin muestra la ejecucin del programa Empleados1 (Ilustracin 28)

Ilustracin 2 Ejecucin del programa anterior

Para entender el programa lea la explicacin y las notas 1 y 2 que se muestran en la pgina 100 del texto bsico. Las sentencias desde la 24 hasta la 34 (en la Ilustracin 28) constituyen el bloque o cuerpo o lista de acciones del ciclo repetitivo, recuerde que en Java el bloque o cuerpo se encierra entre llaves {}. Dentro del algoritmo (que se encuentra en la pgina 99 del texto bsico) el bloque inicia en la siguiente lnea luego de la palabra DO y termina en la lnea anterior a la palabra WHILE. Fije su atencin en la lneas 33 y 34 de la Ilustracin 28, ellas muestran como se podra implementar en Java las acciones 5 y 6 del algoritmo de la pgina 99 del texto bsico. Si bien el algoritmo, en la lnea 5 dice Preguntar en Java, se debe escribir un mensaje, para luego leer la respuesta del mismo.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Dentro de la programacin se suele usar dos tipos de condiciones para determinar cuando se termina el ciclo repetitivo, que se denominan por valor centinela y por contador. El programa anterior (Ilustracin 28) muestra un ciclo repetitivo controlado por un valor centinela, es decir un valor que es ingresado por el usuario y que determina el momento en el que el ciclo termina. Este valor centinela puede ser un entero (Presione 1 para continuar y 0 para salir) o un carcter como en el programa anterior. Sera demasiado engorroso para el usuario decirle (presione 1.1 para continuar y 0.0 para salir digite las palabras Salir y Continuar). La repeticin controlada por un valor centinela nicamente se aplica para los ciclos repetitivos DOWHILE y WHILE. Un ciclo FOR siempre trabajar con un contador (aunque se podra implementar el control por centinela) Si bien el texto bsico en las pginas 101 y 102 explica lo que es un contador, el mismo no se usa para determinar el fin del ciclo repetitivo, pero se lo podra utilizar con ese propsito. Por ejemplo: Elabore un programa o algoritmo que permita ingresar los datos de 5 alumnos. Deberamos entonces contar los datos que han sido ingresados para determinar el fin del ciclo repetitivo. Acuda nuevamente al texto bsico y revise los conceptos contadores y acumuladores que se muestran en las pginas 101 y 102 del texto bsico y analice como se implementan en los algoritmos que ah se muestran. En la pgina 101, tambin se habla de la impresin de reportes, tema que lo dejaremos de lado, ya que el tratar de dar formato a la salida que produce un programa en Java, va lnea de comandos, resultara en una tarea compleja, y que por ahora no es necesaria. As que cuando en el pseudocdigo encuentre acciones que dicen Imprimir encabezado debe ignorarlas, en especial al momento de traducir el algoritmo a Java. Dentro de los lenguajes de programacin existen algunas funcionalidades que cambian el comportamiento de los ciclos repetitivos, ellas son break y continue. Analicemos ahora estas funciones.

3.1.1.Lasfuncionesbreakycontinue
En el captulo anterior cuando revisamos la estructura SWITCH en Java, usamos para cada caso (case) una sentencia denominada break. Ahora vamos a verla ms formalmente, nos ubicamos en la pgina 104 del texto bsico. El texto bsico enfoca la aplicacin de break y continue a los ciclos repetitivos exclusivamente, por tal motivo el autor del mismo escribe una nota que se encuentra en la pgina 104 y se complementa con un texto que se encuentra en la 105, en donde habla que el uso de break y continue crea programas no tan bien estructurados. Bajo nuestra apreciacin la afirmacin anterior es algo discutible, especialmente en lo referente a la funcin break, ya que se puede usar sin daar la estructura del programa y antes que causar problemas su uso puede mejorar el desempeo y tiempo de ejecucin de los ciclos repetitivos. Mientras que, coincidimos con el autor del texto bsico en lo que al uso de la sentencia
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

continue se refiere. En nuestra experiencia su uso es casi nulo y puede causar confusiones. Por ahora dejaremos el tema hasta ah y cuando analicemos el ciclo repetitivo FOR mostraremos el uso de la funcin break y comprenderemos su utilidad. Por lo contrario la funcin continue se quedar en la explicacin terica y no veremos su aplicacin prctica, lo cual no implica de ningn modo que no deba estudiarla y comprenderla. Como lo hemos venido haciendo anteriormente, explicaremos el funcionamiento del ciclo DO WHILE usando ejercicios y su representacin en Java. Al igual como sucede con las estructuras de seleccin, dentro de cualquier ciclo repetitivo, en general, se puede colocar como parte del bloque de sentencias, otras estructuras de repeticin. Recuerde que debemos combinar las diferentes estructuras de control, con el afn de resolver cualquier tipo de problema. Si bien los primeros ejercicios tienen el objetivo de que usted entienda el funcionamiento de cualquier estructura de control, en los ejercicios posteriores ver otros ejercicios en donde encontrar combinaciones de estructuras de control. Dentro del bloque de sentencias o acciones que forman parte de cualquier estructura de control, se pueden ubicar otras estructuras de control de diferente tipo. Con estas ideas analice el algoritmo que se encuentra en la pgina 106 del texto bsico, el cual muestra una estructura SWITCH dentro de un bucle DO WHILE, as como tambin el uso de contadores, que mencionamos anteriormente, pero que no vimos su aplicacin prctica en Java. El programa elaborado en base a dicho algoritmo es el siguiente:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 3 Programa en Java que representa al algoritmo de la pgina 106 (texto bsico). Parte 1

En esta primera parte (Ilustracin 30, lneas 8 a la 38) podemos ver: la declaracin e inicializacin de las variables y la creacin del objeto (lector). Vemos tambin parte del ciclo repetitivo y las sentencias para realizar la solicitud y el ingreso de los datos. En la lnea 38 la variable descuento es inicializada, aunque en el algoritmo de la pgina 106 no se muestra esta accin, en Java es necesario asignarle un valor, caso contrario el programa no compila, ya que la variable descuento se usa para realizar un clculo.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 4 Programa Java que representa el algoritmo de la pgina 106

En esta segunda parte (Ilustracin 31, lneas 39 hasta la 65) vemos como dentro de un ciclo DO WHILE podemos ubicar un SWITCH. El SWITCH que muestra el programa no tiene un caso por defecto. Y como mencionamos anteriormente, no siempre se necesita. Tal como se muestra en el programa los tipos de usuario son 4 (casos desde el 1 al 4), si el usuario ingresa otro valor (diferente a 1, 2, 3, 4) no se ejecutara ningn caso, por lo que el valor de descuento sera igual a 0 (revise la lnea 38 de la Ilustracin 31). En las lneas 56-59 (Ilustracin 31) vemos los contadores. Un contador siempre se incrementar de unidad en unidad. Para los mensajes de salida o escritura de informacin, lneas 54 y 55; 63 y 64 (Ilustracin 31); hemos obviado el texto por razones de espacio y presentamos nicamente valores. Adems mostramos cmo funciona la secuencia de escape \t (tabulador hacia la derecha). Finalmente veamos la salida que produce el programa:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 5 Salida del programa Java (Imgenes 23 y 24)

Podemos ver en la salida, el nombre del cliente, el sub-total, el descuento y el valor neto a pagar. Vemos como estos valores cambian segn el tipo de cliente. En el ltimo cliente intencionalmente se digito un tipo de cliente que no existe, para as mostrar que no se ejecuta ninguno de los casos del SWITCH y el descuento es igual a 0. Fije su atencin en la penltima lnea, vemos ah las salidas de los contadores, un entero (el primer nmero) y de valores reales (los otros valores). Ahora desarrollemos un ejercicio en donde se utilice un ciclo repetitivo DO WHILE, pero a diferencia de los anteriores que sea controlado por un contador. El siguiente algoritmo muestra un ciclo repetitivo controlado por un contador y calcula la sumatoria de los n primeros trminos de la siguiente sucesin numrica:

S = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + ...
O podramos plantearlo as: elabore un algoritmo que haga la suma de todos los nmeros enteros positivos que son menores o iguales a un valor ingresado por el usuario. Si analizamos el problema, vemos como la entrada es el nmero de elementos a sumar o el lmite superior (un nmero). La salida es la suma de todos los nmeros que pertenecen a la serie (o los nmeros enteros positivos menores o igual al nmero ingresado). El proceso es obtener un nmero y sumarlo a un acumulador. Veamos el algoritmo:
Algoritmo SUMATORIA Clase Sumatoria1 1. Mtodo principal a. Declaraciones

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Variables limite, contador, suma, nro : Entero b. contador = 0 suma = 0 nro = 1; c. Solicitar el lmite d. Leer limite e. DO 1. suma = suma + nro 2. nro = nro + 1; 3. contador = contador + 1 f. WHILE contador < limite g. Imprimir suma h. Fin Mtodo principal Fin Clase Sumatoria1 Fin

La representacin del algoritmo en Java es la siguiente:

Ilustracin 6 Programa Java que muestra un DO ... WHILE controlado por contador

Podemos ver, tanto en el algoritmo como en el programa en Java (Ilustracin 33), que el ciclo DO ... WHILE es controlado por el valor de la variable contador, es decir el fin del ciclo repetitivo es determinado por el valor de dicha variable; vemos tambin como el valor del contador es modificado dentro del bloque de sentencias del ciclo repetitivo. Uno de los errores ms frecuentes cuando se utiliza este tipo de control es olvidar modificar el valor del contador (lneas: 3 (algoritmo) y 29 (Java Ilustracin 33)) , provocando lo que se conoce como ciclo repetitivo infinito,

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

debido a que la condicin nunca dejar de ser verdadera, imagnese que no existen las lneas 3 del algoritmo y tampoco la lnea 29 del cdigo Java Qu pasara? La condicin del ciclo repetitivo ser siempre verdadera provocando un ciclo repetitivo infinito. En ciclos repetitivos controlados por un contador recuerde siempre modificar el valor del control, para evitar ciclos repetitivos infinitos. Continuando con la explicacin del ejemplo vemos que la variable suma es un acumulador, mientras que la variable nro, es la encargada de generar cada uno de los trminos de la serie, por tal motivo se la usa en la suma. La salida del programa (Ilustracin 33) sera la siguiente:

Ilustracin 7 Salida del programa Java que muestra un DO WHILE controlado por contador

Una vez analizada la estructura DO WHILE, estudiaremos otra estructura de repeticin denominado FOR. Esta estructura tiene una forma diferente pero el objetivo de repetir un grupo de sentencias un nmero finito de veces es el mismo.

3.2LarepeticinFOR
Es necesario, antes de continuar, que realice una lectura comprensiva del Captulo 6 La repeticin FOR del texto bsico, ah se desarrolla el tema de la repeticin controlada por un ciclo FOR Qu le pareci la lectura? Comprendi? Si es as avancemos y repasemos ciertos elementos de la lectura anterior. Como menciona el texto bsico, en el captulo 6, pgina 122, se trata de un ciclo repetitivo que se lo emplea, cuando se sabe de antemano cuantas veces se repetirn las sentencias que forman el bloque del ciclo. Y como se mencion anteriormente, esta estructura de repeticin es controlada por un contador. Lea detenidamente el formato y funcionamiento de la estructura de repeticin FOR (pginas de la 122 a la 124 del texto bsico). En la pgina 122, se dice que el contador es una variable tipo entero, real o carcter, pero en nuestra experiencia en lenguajes de programacin, el contador es una variable de tipo entero. Vea tambin la seccin incremento y la nota que ah se muestra, tenemos ya otros 2 operadores aritmticos (++ y --). En la pgina 124 casi al final de la misma se muestra un bucle FOR, en donde en lugar de hacer incrementos de la variable de control se hace decrementos, mire como cambia el valor inicial y la condicin. La codificacin en Java de un ciclo FOR se muestra a continuacin, representa al algoritmo de la pgina 125 del texto bsico.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 8 Ejemplo de bucle FOR en Java

En la Ilustracin 35, en la lnea 18 se puede ver la principal diferencia entre el pseudocdigo y el programa en Java. En el pseudocdigo, la variable de control se declara en la seccin de las variables, pero en Java se puede hacer en la declaracin del bucle. En la misma lnea observamos el uso del operador de incremento ++. En la siguiente tabla se muestran algunas equivalencias entre operadores:
Tabla 1 Operadores unarios y su equivalencia
Operador unario a++ b -Equivalencia A a=a+1 b=b1 Equivalencia B b += 1 b -= 1

Le recomiendo seleccionar el operador o la equivalencia (columnas A o B) que se les haga ms sencilla de manejar. Aunque dentro del ciclo FOR generalmente se hace uso del operador unario. En la pgina 125 del texto bsico, tambin se muestra el tema 6.1 FOR anidados, que como ya se ha venido mencionando anteriormente, es colocar un bucle FOR dentro de otro FOR. Recordemos nuevamente que dentro de una estructura de control se puede ubicar cualquier otra estructura. Una recomendacin es no modificar la variable de control en alguna de las sentencias que forman el bloque del ciclo FOR, esto puede traer confusiones al tratar de leer el mismo, recuerde que el propio ciclo define el incremento o decremento de la variable de control. En la pgina 132 del texto bsico se encuentra el ejercicio 6.2.8 en donde se muestra un algoritmo que trabaja con un FOR descendente, es decir que en lugar de incremento existe un decremento de la variable de control. Veamos este mismo algoritmo programado en Java.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 9 Programa en Java que muestra un bucle FOR descendente

Podemos ver, en la Ilustracin 36, la estructura del bucle FOR. En la lnea 25, vemos como a la variable de control en cada pasada del ciclo repetitivo se le disminuye una unidad, por tal motivo a este tipo de bucle se le denomina FOR descendente. Para que este tipo de bucle funcione, la variable de control se debe inicializar con un valor alto, la condicin generalmente ser mientras la variable de control sea mayor o igual que La salida del programa se muestra a continuacin:

Ilustracin 10 Ejecucin del programa que se muestra en la imagen anterior

Recuerde que para formular las condiciones de los ciclos repetitivos debe siempre pensar en: repetir estas acciones mientras se cumpla la condicin. Dentro de la condicin de los ciclos repetitivos FOR, no se usa el operador de igual, ya que ello hara que el bloque de sentencias del ciclo, se ejecuta como mximo una sola vez. En la pgina 133 del texto bsico, se explica como a travs de un bucle DO WHILE se puede representar o simular a un bucle FOR. Podemos generalizar y decir que se puede representar un ciclo repetitivo usando otro ciclo, con ms o menos lneas de cdigo. Para finalizar con el estudio de las estructuras de repeticin, explicaremos el ciclo repetitivo WHILE que es una combinacin de las estructuras de repeticin

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

anteriores.

3.3LarepeticinWHILE
Es el momento para que acuda al texto bsico y lea detenidamente el Captulo 7 La repeticin WHILE. Recuerde revisar a detalle los ejercicios que ah se plantean, as como tambin revisar el anlisis a los algoritmos que se desarrollan. Qu le pareci la lectura? Comprendi? Si es as avancemos y repasemos ciertos elementos de la lectura anterior. Este bucle es bastante similar al DO WHILE, su principal diferencia, es el nmero mnimo de veces que se ejecuta. En un ciclo repetitivo WHILE el bloque de sentencias se ejecuta cero(0) o varias veces; mientras que el DO WHILE lo hace una (1) o varias veces. Ubquese en la pgina 146 del texto bsico, ya que ah se explica el formato y funcionamiento del ciclo. En este ciclo (WHILE), primero se evala la condicin y luego se ingresa al bloque de sentencias o acciones que se repetirn. Revise la pgina 147 y 148 para ver como se puede usar un ciclo WHILE en lugar de un DO WHILE. En Java un ciclo WHILE se representa como lo muestra la siguiente Ilustracin:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 11 Programa en Java que muestra un ciclo WHILE

El programa que se elabor representa al algoritmo que se muestra en la pgina 148 del texto bsico. En la lnea 24 de la ilustracin anterior se puede ver al ciclo WHILE y a la condicin, el bloque o cuerpo del ciclo se forma desde la lnea 25 hasta la lnea 36. Para comprender el funcionamiento del mismo revise la nota de la pgina 148 y la explicacin que se encuentra en la pgina 149 del texto bsico. La ejecucin del programa es la siguiente:

Ilustracin 12 Ejecucin del programa anterior

En la pgina 149 del texto bsico se muestra como usar un ciclo WHILE para hacer las mismas acciones que un ciclo FOR. Mientras que en las pginas 150 y 151 muestra como se puede realizar una misma tarea usando los 3 ciclos repetitivos analizados. Vea la similitud entre el WHILE y el DO WHILE.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Al igual que el ciclo DO WHILE, en un ciclo WHILE se puede aplicar el control por un valor centinela (como lo muestra la Ilustracin 33) y por contador como lo muestra la siguiente ilustracin:

Ilustracin 13 Bucle WHILE, controlador por un contador

En la Ilustracin 40 la variable i hace las veces de contador y su valor controla la finalizacin del ciclo repetitivo. La lnea 21 imprime un salto de lnea y se la ubic con el fin de mejorar la salida del programa. El programa se elabor tomando como base el algoritmo que se encuentra en la pgina 150 del texto bsico. La ejecucin del programa es la siguiente:

Ilustracin 14 Ejecucin del programa anterior

A continuacin mostraremos algunos usos del ciclo WHILE. Una de las aplicaciones de un ciclo WHILE (controlado por contador), es cuando el valor del contador cambia cuando se satisface cierta(s) condicin(es). Veamos un ejemplo: Elabore un algoritmo y luego un programa que permita encontrar los 3 primeros nmeros perfectos. Un nmero es perfecto cuando la suma de sus divisores enteros positivos menores es igual al mismo nmero. Ejemplo: el nmero 6 es perfecto, porque sus divisores son (enteros positivos menores): 1, 2 y 3; y sumamos: 1 + 2 +3 = 6. Analizando el problema, vemos que no recibe entrada alguna, el proceso sera: generar nmeros y determinar cuales son sus divisores, sumarlos y comparar la suma con el nmero generado, si la suma es igual al nmero generador, entonces encontramos un nmero perfecto y el contador debe incrementarse en una unidad. En pseudocdigo tendramos:
Algoritmo ENCUENTRA 3 NUMEROS PERFECTOS
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Clase TresPerfectos 1. Mtodo principal a. Declaraciones contador, generaNum, div, sumaDiv: Entero b. contador = 0, generaNum = 0 c. WHILE contador < 3 1. generaNum = generaNum + 1 2. sumaDiv = 0 3. FOR div = 1; div < generNum; div ++ a. IF generaNum MOD div == 0 THEN 1. sumaDiv = sumaDiv + div b. ENDIF 4. ENDFOR 5. IF sumaDiv == generaNum THEN a. Presentar generaNum b. contador = contador + 1 6. ENDIF d. ENDWHILE e. Fin Mtodo principal Fin Clase TresPerfectos Fin

El programa en Java equivalente al algoritmo anterior sera:

Ilustracin 15 Programa en Java que calcula y muestra los 3 primeros nmeros perfectos

El resultado de ejecutar el programa que se muestra en la Ilustracin 42 es la siguiente:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 16 Ejecucin del programa de la Ilustracin 42

Podemos ver (en el algoritmo como en el programa) que se usa un bucle WHILE controlado por un contador para determinar cuantos nmeros perfectos se han encontrado, un ciclo FOR para encontrar los divisores del nmero generado y una estructura IF para determinar si se trata de un nmero perfecto. Entremos en detalles del algoritmo y programa anterior: se declaran las variables, luego se inicializan, e ingresamos al ciclo WHILE ya que contador es menor que 3. En la lnea 20(Java) y lnea 2(algoritmo) se genera un nmero. En la siguiente lnea la suma de los divisores se iguala a cero (por cada nmero generado la suma de divisores debe igualarse a cero, para evitar errores). Ingresamos al ciclo FOR para encontrar los divisores (Los posibles divisores deberan empezar por el 1 y ser siempre menor al nmero generado, esto explica la inicializacin y condicin del FOR). En el IF de la lnea 24 (Java) y a. bajo 3. (algoritmo), se determina si el contador del FOR (variable div) es un divisor del nmero generado (para lo cul se usa el mdulo), si el mdulo es igual a cero es un divisor y debemos sumar dicho divisor (variable div) a la suma de divisores. Una vez completado el ciclo FOR (es decir una vez encontrados y sumados los divisores menores al nmero generado) llegamos a la lnea 28 (Java) 5. bajo c. (algoritmo) en donde se compara si la suma de divisores es igual al nmero generado; si es as presentamos el nmero (ya que es un nmero perfecto) e incrementamos el contador. Todo lo anterior se repite mientras el contador no sea igual a 3. El problema anterior muestra como se pueden anidar diferentes estructuras de repeticin, y como se pueden combinar varias estructuras para resolver un problema. Si bien hemos visto como se pueden dar equivalencias entre las estructuras de repeticin, en este caso no sera posible usar un ciclo FOR para reemplazar al bucle WHILE (lnea 19 Java y lnea c. algoritmo); porque en las recomendaciones de uso del ciclo FOR se dice claramente que no se debe modificar el valor de la variable de control del ciclo FOR en el bloque de sentencias a repetir, y eso es justamente lo que hace la lnea 30 (Java) y b. bajo 5. del ciclo WHILE (algoritmo), modificar el valor de la variable de control. Recuerde que el bucle FOR, en su declaracin, especifica como la variable de control debe cambiar y sera contradictorio que otra sentencia cambie nuevamente la variable de control. Lo anterior trae confusiones y posibles errores. Por lo contrario, el bucle WHILE (lnea 19 Java c. algoritmo) se podra reemplazar con un ciclo DO WHILE y el ciclo FOR (lnea 23 Java 3 bajo c. en el algoritmo) podra ser reemplazado por un DO WHILE o un WHILE. Al final de la pgina 151 del texto bsico, se muestra la diferencia de los tipos de repeticin, lalo ya que le ayudar a decidir que ciclo repetitivo utilizar. A continuacin presentamos un resumen e indicaciones de cuando usar cada bucle, aunque se diferencia en algo a lo dicho por el texto bsico.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Cundo usar cada ciclo repetitivo? - Cuando se conoce con anticipacin cuntas veces se repite(n) la(s) sentencia(s) se debe usar un ciclo FOR. - Cuando se requiere modificar la variable de control a alguna lgica, es conveniente utilizar un ciclo WHILE. - Cuando es necesario que se ejecute(n) la(s) sentencia(s), por lo meno una vez, debe utilizar el ciclo DO WHILE. A continuacin se presenta una serie de ejercicios que pretende aclarar las conceptos expuestos y sobretodo con la finalidad de que ejercite en la resolucin de problemas.

3.4Seriesnumricas
Una serie numrica es un grupo de nmeros que comparten una o varias caractersticas. Los elementos de una serie numrica pueden ser nmeros enteros o reales (generalmente expresados como fracciones). Algunos ejemplos: 1, 2, 3, 4, 5, 6, 7, (Nmeros consecutivos) 2, 4, 6, 8, 10, 12, 14, (Nmeros pares) 1, 2, 3, 5, 7, 11, 13, 17, (Nmeros primos) 0, 1, 1, 2, 3, 5, 8, 13, 21, (Serie Fibonacci1 ) Los ejemplos anteriores muestran algunos series formadas por nmeros enteros. Las series que se forman por nmeros reales se expresan como fracciones, as:

S=

2 4 6 8 10 12 + + + + + + ... 1 2 3 5 7 11

El uso de las sucesiones numricas es una estrategia que tiene como objetivo poner en prctica los conocimientos en el manejo de las diferentes estructuras de control (y sus combinaciones) para resolver problemas. En la gua didctica vamos a desarrollar varios ejercicios de este tipo, muchos de ellos hacen combinaciones de las series de nmeros enteros, para generar series de nmeros reales. En nuestra experiencia personal, hemos clasificado a las series numricas en 2 grupos. Veamos una explicacin de dicha clasificacin. Tipos de series - Segn sus elementos: o Elementos que se calculan aplicando una frmula. Ejemplo: Fibonacci. La frmula que se aplica es que el siguiente elemento se calcula sumandos los dos anteriores. Para trabajar con este tipo de series se usa un ciclo FOR.
1

Wikipedia, Sucesin de Fibonacci [En lnea] Disponible http://es.wikipedia.org/wiki/Sucesin_de_Fibonacci [Consultado: 25 de Sep 2009]

en:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Elementos que cumplen ciertas condiciones. Ejemplo: nmeros primos. La condicin que deben cumplir los nmeros que pertenecen a esta serie es tener como nicos divisores a s mismo y la unidad. Para resolver este tipo de series se genera un nmero y se determina si cumplo con las condiciones. Se usa ciclos WHILE o DO WHILE para resolver series as.

Al igual que debe hacerlo con cualquier tipo de problema, cuando se enfrente a un problema de series, debe analizar la serie, para clasificarla en alguno de los 2 grupos y as tener una idea de cual estructura de repeticin podra usar. Debe analizar elemento por elemento para tratar de determinar como se forma cada uno de ellos. Veamos unos ejemplos de series, resueltas a travs de algoritmos. El primer algoritmo resuelve el siguiente problema: Calcule y presente la sumatoria de los n primeros trminos de una serie formada por nmeros primos (un nmero primo es el que es divisible nicamente para si mismo y la unidad). La representacin de la serie sera: S = 1 + 2 + 3 + 5 + 7 +11 +13 +17 + Como lo dijimos en la clasificacin de las series segn sus elementos, los primos corresponden al grupo en donde los elementos cumplen ciertas condiciones. En este caso la condicin es que nicamente tenga 2 divisores (el 1 y a si mismo). Al hablar de los n primeros nmeros, n representa cuantos nmeros de la serie se deben sumar, es decir un lmite. Por ejemplo si n = 3, se debera sumar los nmeros 1, 2 y 3. Si n = 6 se debera sumar 1, 2, 3, 5, 7 y 11. Recuerde que los programas que estamos desarrollando, deben buscar la solucin ms general para el problema, de tal manera que este pueda responder a todas las entradas vlidas hechas por el usuario. Para el caso de las series lo anterior implica que el programa, que resuelve una serie, debera trabajar para cualquier valor de n.
Algoritmo SUMATORIA DE NUMEROS PRIMOS Clase SumaPrimos 1. Mtodo principal a. Declaraciones genNum, suma, contador, limite, i: Entero esPrimo : Boolean b. suma = 0, genNum = 0, contador = 0 c. Solicitar el nmero de elementos a sumar d. Leer limite e. WHILE contador < limite 1. genNum = genNum + 1 2. esPrimo = True 3. FOR i = 2; i < genNum; i ++ a. IF genNum % i == 0 THEN 1. esPrimo = False b. ENDIF 4. ENDFOR 5. IF esPrimo == True THEN a. suma = suma + genNum

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

b. contador = contador + 1 6. ENDIF f. ENDWHILE g. Imprimir suma h. FIN Mtodo principal Fin Clase SumaPrimos Fin

El algoritmo anterior, genera un nmero (vea la lnea 1, bajo el punto e.) y luego se comprueba que ese nmero es primo (lneas de la 2. a la 4., bajo e.) la comprobacin se hace buscando otro divisor diferente de la unidad y del nmero generado, si se encuentra otro divisor (sentencia IF lnea a. y b., bajo 3.), la variable (esPrimo) cambia de valor. Luego en el punto 5. (bajo e.) se verifica si el valor de la variable esPrimo se ha conservado en verdadero (True), eso seala que no se encontr otro divisor, de tal manera que el nmero generado es primo, se agrega a la variable acumulador (suma) y el contador se incrementa en una unidad. Usualmente a una variable, que toma un valor para sealar el cumplimiento de una determinada regla y otro para sealar lo contrario es denomina bandera. Es el caso de la variable esPrimo, mientras sea verdadera, el nmero generado es primo y cuando cambia a falsa, el nmero generado no es primo. El siguiente programa muestra el programa en Java del algoritmo anterior.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 17 Programa en Java que hace una sumatoria de nmeros primos

La ejecucin del programa anterior sera:

Ilustracin 18 Ejecucin del programa 39

Veamos un algoritmo que resuelve las series que pertenecen al primer tipo, elementos que se obtienen aplicando una frmula. El problema es el siguiente: Elabore un algoritmo que encuentra la suma de las n primeros trminos de la siguiente serie: S = 0 + 1 + 1+ 2 + 3 + 5 + 8 + 13 + 21 + Analizando el problema, vemos que la entrada es el nmero de elementos a sumar, es decir el lmite de la serie. Esta sucesin pertenece al primer tipo de series, ya que a partir del tercer elemento en adelante se obtiene sumando los dos elementos anteriores. Vamos a llamar a los dos primeros trminos primero y segundo; luego de haber calculado el siguiente trmino (al que llamaremos fibo), se hace un intercambio, primero toma el valor de segundo y segundo toma el valor de fibo, y procederemos de la misma forma con los siguientes
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

elementos. La salida ser en este caso la suma de todos los valores que toma la variable fibo. El algoritmo es el siguiente:
Algoritmo SUMA TERMINOS DE FIBONACCI Clase SumaFibonacci 1. Mtodo principal a. Declaraciones Variables limite, primero, segundo, fibo, suma, i: Entero b. Solicitar lmite c. Leer lmite d. primero = 0, segundo = 1, suma = 0 e. IF limite == 1 OR limite == 2 THEN suma = limite 1 f. ELSE 1. suma = suma + 1 2. FOR i = 0; i < limite; i++ a. fibo = primero + segundo b. primero = segundo c. segundo = fibo d. suma = suma + fibo 3. ENDFOR g. ENDIF h. Imprimir suma 2. Fin Mtodo principal Fin Clase SumaFibonacci Fin

Explicando el algoritmo, empezamos por la lnea e., bajo el mtodo principal; en dicha lnea encontramos una estructura de seleccin IF, esta estructura es necesaria porque los 2 primeros elementos de la serie (0 y 1) no son generados por la frmula, entonces si el usuario ingresa un valor para lmite que sea 1, la suma debera ser 0, mientras que si el usuario ingresa 2, la suma debera ser 1, como se puede haber percatado la suma sera igual al lmite menos 1. Ahora nos ubicamos en la lnea 1. bajo f. (ELSE - si el usuario ingresa un valor mayor o igual a 3 para lmite) la variable suma se incrementa en una unidad, porque la suma de los dos elementos anteriores es 1. Ingresamos al ciclo FOR y calculamos el siguiente trmino de la serie y hacemos el intercambio de los valores de las variables (primero pasa a ser segundo, segundo toma el valor de fibo). Finalmente en la lnea h. se imprime el resultado. El programa en Java que representa a este algoritmo es el siguiente:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 19 Programa en Java que muestra la suma de los elementos de Fibonacci

La ejecucin del programa anterior muestra la siguiente salida

Ilustracin 20 Ejecucin del programa 41

Fjese en la lnea 28 del programa que se muestra en la Ilustracin 46. Hacemos uso de los operadores aritmticos, adicionales que tiene Java y que vimos en la Tabla 5. Con las explicaciones realizadas deberan estar en la capacidad de resolver ejercicios un poco ms complejos, por tal motivo les planteamos los siguientes problemas. Les recomendamos que primero trate de resolver el ejercicio y luego compare su solucin con la que nosotros proponemos. No olvide revisar la parte de anlisis de cada ejercicio independientemente si pudo o no llegar a resolver el problema.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

3.5Ejercicios
Importante: En el anlisis de los ejercicios desarrollados se utiliza nmeros para referirse a lneas de cdigo de los programas Java. Mientras que, para los algoritmos escritos en pseudocdigo se utiliza letras del alfabeto y a veces la combinacin de letras y nmeros.

Muchas veces en nuestros programas es necesario realizar una validacin, de los datos ingresados por los usuarios, antes de realizar cualquier accin. La validacin no es ms que determinar si el valor(es) ingresado(s) cumple(n) con alguna(s) caracterstica(s). Por ejemplo: Validar que un valor ingresado por el usuario este en un rango. Ejemplo: Verificar que el valor ingresado sea mayor que 0 y menor que 70. Validar el tipo de dato. Ejemplo: Validar que el nmero ingresado sea un nmero real. Aunque en el pseudocdigo que estudiamos no es posible realizar este tipo de validaciones, por no contar con algunas funcionalidades, en Java s es posible. Las validaciones se las puede hacer a travs de ciclos repetitivos, el ms comnmente empleado es el DOWHILE. Veamos un ejemplo. 1. Elabore un algoritmo y luego un programa en Java que reciba como entrada un nmero y verifique si es un nmero comprendido entre 0 y 10; sino es as, se debe volver a solicitar el ingreso hasta que ingrese un valor correcto.
Algoritmo VALIDA NUMERO ENTRE 0 Y 10 Clase ValidarNumero1_10 1. Mtodo principal a. Declaraciones Variables numero : Entero b. DO 1. Solicitar nmero 2. Leer numero c. WHILE numero < 0 || numero > 10 d. Presentar Nmero correcto 2. Fin mtodo principal Fin Clase ValidarNumero1_10 Fin

El programa en Java es el siguiente:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 21 Programa en Java que muestra la validacin va DO...WHILE

Anlisis: Recuerde que: para el anlisis del cdigo Java todas los nmeros de lneas hacen referencia a la Ilustracin 48. Vemos tanto en el algoritmo como en el programa Java, que la condicin del DO WHILE siempre seala valores fuera del rango que necesitamos validar (Lnea 22 Java c. Algoritmo). En el problema que estamos analizando (Validar que el nmero est entre 0 y 10), el ciclo repetitivo dice mientras el nmero sea menor a cero mayor que diez. El planteamiento es lgico ya que, mientras el nmero este fuera del rango (menor que 0 mayor que 10) debemos solicitar el ingreso del nmero nuevamente. La ejecucin del programa es la siguiente y podemos ver que se rechazan los valores que se encuentran fuera del rango. La ejecucin del programa Java (Ilustracin 48) es la que se muestra a continuacin:

Ilustracin 22 Salida del programa que realiza la validacin de rangos

La validacin puede integrarse tambin a otros algoritmos/programas, como por ejemplo las series. En ese caso la validacin se realiza sobre el nmero de elementos a sumar, validando que sea un nmero positivo mayor que cero.
Algoritmo SUMA TERMINOS DE FIBONACCI VALIDACION Clase SumaFibonacci1 1. Mtodo principal a. Declaraciones Variables
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

limite, primero, segundo, fibo, suma, i: Entero b. DO 1. Solicitar lmite 2. Leer lmite c. WHILE limite < 0 d. primero = 0, segundo = 1, suma = 0 e. IF limite == 1 || limite == 2 THEN suma = limite 1 f. ELSE 1. suma = suma + 1 2. FOR i = 0; i < limite; i++ a. fibo = primero + segundo b. primero = segundo c. segundo = fibo d. suma = suma + fibo 3. ENDFOR g. ENDIF h. Imprimir suma 2. Fin Mtodo principal Fin Clase SumaFibonacci Fin

El programa en Java es el siguiente:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 23 Suma de la serie de Fibonacci con validacin del ingreso de datos

2. Elabore un algoritmo y luego un programa en Java que imprima los nmeros pares que existen entre 20 y 70. Adems se debe contar la cantidad de nmeros pares que existen.
Algoritmo Nmeros Pares Clase Pares 1. Mtodo Principal a. Declaraciones Variables i, contador : Entero b. Calcular contador = 0 c. FOR i = 20; i < 70; i = i + 2 1. Imprimir i 2. contador = contador + 1 d. ENDFOR e. Imprimir contador f. Fin Mtodo principal Fin Clase Pares Fin

El cdigo en Java se presenta a continuacin:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 24 Programa que imprime y cuenta nmeros pares

Anlisis: Tenga presente que: para el anlisis del cdigo Java todas los nmeros de lneas hacen referencia a la Ilustracin 51. En este caso el programa no usa datos de entrada. El proceso usa un ciclo repetitivo FOR (Vea el punto c. del algoritmo y la lnea 16 del cdigo Java) la variable de control del ciclo se inicializa en 20 y se ejecutar hasta que sea mayor que 70, con incrementos de 2 unidades. Se imprime cada valor de i ya que es un nmero par. La variable contador (que es un acumulador) se incrementa en una unidad. La salida del programa son los nmeros pares y el valor del contador. El contador se imprime al final del ciclo FOR (punto d., lnea 20; algoritmo y Java respectivamente), la impresin se hace al final porque se quiere conocer el valor total. 3. Elabore un algoritmo y luego un programa en Java que permita obtener cada uno de los dgitos que forman un nmero entero positivo. Algoritmo OBTENER DIGITOS Clase Digitos 1. Mtodo Principal a. Declaraciones Variables cifra, digito, resto : Entero b. Solicitar un nmero c. Leer cifra d. WHILE cifra > 0 1. Calcular digito = cifra MOD 10 2. Calcular resto = cifra \ 10 3. Calcular cifra = resto 3. Imprimir digito e. ENDWHILE f. Fin Mtodo principal Fin Clase Digitos Fin

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

El programa en Java se muestra a continuacin:

Ilustracin 25 Programa que obtiene los dgitos de un nmero

La ejecucin del programa es la siguiente:

Ilustracin 26 Ejecucin del programa Digitos

Anlisis: No olvide que: para el anlisis del cdigo Java todas los nmeros de lneas hacen referencia a la Ilustracin 52. El problema recibe como entrada una cifra entera. El proceso es obtener cada dgito que forma el nmero, para ello obtenemos el residuo de la divisin entera del nmero para 10 (vea el punto 1., bajo el punto d. del algoritmo y la lnea 24 del cdigo Java); una vez obtenido el nmero debemos extraer de la cifra el dgito que se obtuvo, y se hace una divisin entera por 10 (punto 2. del algoritmo y lnea 25 de Java). El proceso anterior se repetir mientras an existen dgitos (punto d. del algoritmo, lnea 23 de Java). La salida del programa es cada uno de los dgitos. 4. Elabore un algoritmo y luego un programa en Java que adivine en un mximo de 7 intentos un nmero entero entre 0 y 100 que fue pensado
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

por el usuario. El usuario debe pensar en un nmero y luego responder a una pregunta. Jams ingresar el nmero que pens. Si el usuario es realmente sincero el programa encontrar el nmero pensado por el usuario. El algoritmo es el siguiente
Algoritmo ADIVINA NMERO Clase Adivina 1. Clase Principal a. Declaraciones Variables inf, sup, medio, resp, nroIntentos : Entero encontrado : Booleano b. Calcular inf = 0 sup = 100 resp = 0 nroIntentos = 0 encontrado = false c. Imprimir Piense en un nmero d. DO 1. medio = (inf + sup) / 2 2. Imprimir El nro que pens es medio 3. nroIntentos ++ 4. Imprimir Digite 1. Si acert 2. Si el nro es mayor 3. Si es menor 5. Leer resp 6. SWITCH rep 1 : encontrado = true 2 : inf = medio + 1 3 : sup = medio 1 7. DEFAULT: Imprimir Opcin no vlida 8. ENDSWITCH e. WHILE nroIntentos <= 7 AND encontrado == true f. Imprimir nroIntentos g. Fin Mtodo principal Fin Clase Adivina Fin

El programa en Java se puede ver en la siguiente ilustracin:

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Ilustracin 27 Programa que Adivina un nmero en 7 intentos

Anlisis: Es necesario que tenga presente lo siguiente: para el anlisis del cdigo Java todas los nmeros de lneas hacen referencia a la Ilustracin 54. La entrada que recibe el programa es la respuesta a la pregunta que se plantea en el punto 2 bajo d. (algoritmo) o en Java en la lnea 25. El proceso consiste en aplicar una tcnica que se denomina bsqueda binaria, la cual consiste en calcular el valor medio de la lista de posibles valores (en este caso 0 y 100). Con el valor medio calculado (punto 1. bajo d. (algoritmo) y lnea 24 (Java)) se pregunta si el valor medio es el valor pensado, si es as se termin la bsqueda (por eso el caso 1 del SWITCH cambia el valor de la variable encontrado); sino se debe
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

preguntar si el valor pensado es mayor o menor al valor medio (punto 4., bajo d. (algoritmo) y lneas de la 27 a la 30 (Java)). La bsqueda binaria consiste en cambiar los lmites inferior y superior de la lista segn las respuestas del usuario. Si el usuario afirma que el valor pensado es menor que el medio, se mueve el lmite superior (Vea el punto 3. bajo 6. y lnea 40); caso contrario si el valor pensado es mayor que el medio se mueve el lmite inferior (Vea el punto 2. bajo 6. del algoritmo y lnea 37 de Java). Se debe repetir este proceso mientras el nmero de intentos sea menor o igual que 7 y que la variable bandera, encontrado, sea igual a falso (punto e. del algoritmo y lnea 45 Java). Las salidas que produce el algoritmo se encuentran en los puntos: 2. bajo d. y 2. bajo f., mientras que en Java en las lneas 25 y 46. 5. Elabore un algoritmo y programa en Java que encuentre la sumatoria de los n primeros trminos de la siguiente serie: S = 10 + 21 + 31 + 52 + 73 + 115 +
Algoritmo SUMATORIA SERIE Clase Serie 1. Mtodo Principal a. Declaraciones Variables limite, genNum, cont, i : Entero suma : Real primero, segundo, fibo : Entero esPrimo : Boleano b. Calcular genNum = 0, cont = 0, suma = 0 c. Calcular primero = 0, segundo = 1, esPrimo = false d. Solicitar el nmero de trminos e. Leer limite f. WHILE cont < limite 1. genNum = genNum + 1 2. esPrimo = True 3. FOR i = 2; i < genNum; i++ a. IF genNum % i == 0 THEN 1. esPrimo = False b. ENDIF 4. ENDFOR 5. IF esPrimo == True THEN a. cont = cont + 1 b. IF cont == 1 OR cont == 2 THEN 1. fibo = cont 1 c. ELSE 1. fibo = primero + segundo 2. primero = segundo 3. segundo = fibo d. ENDIF e. suma = suma + Pot(genNum, fibo) 6. ENDIF g. ENDWHILE h. Imprimir suma 2. Fin Mtodo principal Fin Clase
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Fin

El cdigo Java es el siguiente:

Ilustracin 28 Ejemplo de una serie numrica

Anlisis: Recuerde que: para el anlisis del cdigo Java todas los nmeros de lneas hacen referencia a la Ilustracin 55. Este problema recibe como entrada el nmero de trminos a sumar (vea el punto d. y e. bajo 1. o las lneas de cdigo 23 y 24).

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

El proceso tal como se lo explico en este mismo captulo se tiene que analizar cada elemento de la serie; en ella podemos ver que tenemos como base a los nmeros primos y como exponentes a los trminos de Fibonacci. Cada uno de estos elementos pertenecen a cada uno de los tipos de series que se analiz, Fibonacci es del tipo en la que un elemento se obtiene aplicando una frmula; mientras que los primos son del tipo en la que un elmento cumple con una o varias caractersticas. El tipo de serie determina que ciclo repetitivo usar y cuando se tiene una serie con ambos tipos, se selecciona el bucle de la serie cuyos elementos cumplen con ciertas restricciones, es decir primos. Por eso se usa un ciclo repetitivo WHILE (punto 1. bajo f. del algoritmo lnea 26 Java). Lo primero que haremos ser generar un nmero (punto 1. bajo f. del mtodo principal del algoritmo o lnea 27 de Java) y determinar si ese nmero generado es primo (puntos desde el 2. bajo f. del mtodo principal al 4. bajo f. del mismo mtodo o lneas desde la 28 a la 33). Para determinar si el nmero (genNum) es primo se busca otro divisor diferente de la unidad y del mismo nmero (genNum) (por eso el FOR del punto 3. bajo f. y de la lnea 29 inicia en 2 y se ejecuta mientras sea menor que genNum). Si el mdulo de la divisin es igual 0 (IF del punto a. bajo 3. del ciclo WHILE que se encuentra en f) ese nmero (i) es divisor por lo que la variable esPrimo toma el valor de falso (punto 1. bajo el IF que se encuentra en a. o lnea 31 de Java) Una vez encontrado un nmero primo el contador de trminos se incrementa y se empieza a trabajar con los elementos de Fibonacci lneas del algoritmo desde la b. hasta el d. del IF que se encuentra en 5. del algoritmo o lneas desde la 36 a la 42 en Java. Es necesario recordar que los 2 primeros trminos de la serie de Fibonacci son la base de la misma, por lo que si se trata de alguno de estos elementos se asigna a fibo el valor de la variable contador menos una unidad (puntos b. y 1. (bajo b.) que se encuentran bajo el IF del punto 5. lneas 36 y 37 Java). Si se trata del tercer elemento en adelante se aplica la frmula para calcular los elementos de Fibonacci (puntos desde el c. hasta el d. bajo el IF del punto 5. o lneas desde la 39 a la 41 de Java). Finalmente se realiza la suma, punto e. bajo el IF que se encuentra en 5. del algoritmo o lnea 43 Java, para ello se aplica la funcin Pot del algoritmo o pow de la clase Math. En Java este mtodo devuelve un valor tipo real lo que hace que la variable suma deba ser de ese tipo de dato. En el algoritmo no tendramos ese problema, si la variable suma es entero o real. Por ltimo se presenta la suma (punto h. bajo 1. del algoritmo o lnea 46 de Java). En este captulo se estudio las estructuras de repeticin, as como las equivalencias entre dichas estructuras, se dieron recomendaciones para usar cada ciclo de repeticin, analizamos lo que son las series numricas y su importancia en la enseanza de la programacin en general. Como un complemento a lo expuesto en esta gua didctica los invitamos a revisar el siguiente material adicional, que le permitir incrementar su conocimiento del lenguaje de programacin Java.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

EscueladeCienciasdelaComputacinUTPL FundamentosdelaProgramacin Autores:Ing.JorgeLpez,Ing.GreysonAlberca

Material adicional:

En el CD que se adjunt en la gua didctica, puede revisar (programacin-en-java-i\Contenidos\LecturaObligatoria\) los archivos: 6-sentenciasrepetitivasobucles.pdf 7-otrassentencias.pdf Hasta el punto 7.2

Es el momento de comprobar lo aprendido en este captulo, para lo cual le proponemos que desarrolle las siguiente autoevaluacin. Trate de resolverlos usted mismo y compare su respuesta con la respuesta que proponemos al final de la gua didctica.

Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).

Das könnte Ihnen auch gefallen