ejercicios estructura repetitiva 1

Upload: juancito-juan-baltazar

Post on 05-Nov-2015

239 views

Category:

Documents


0 download

TRANSCRIPT

(Microsoft Word - cap\355tulos 3.doc)

3 Estructuras Repetitivas

3.1 El concepto.

Se denominan estructuras repetitivas a las estructuras que permiten incluir dentro de ellas un grupo de instrucciones que deben hacerse mientras una cierta condicin sea vlida, esto significa que dichas instrucciones pueden ejecutarse 0 o n veces.

Una estructura repetitiva est compuesta de una instruccin de repeticin, la condicin y el bloque de instrucciones que deber ejecutarse mientras la condicin se cumpla. Java ofrece tres tipos de estructuras repetitivas, las cuales se presentarn en este captulo.

3.2 Instruccin while (condicin).

Es una de las instrucciones repetitivas ms utilizadas en los diferentes lenguajes de programacin, prcticamente todos la implementan. La forma en la cual funciona es equivalente a mencionar, en una conversacin casual, algo como: Mientras ests estudiando en la universidad, debers llegar a casa antes de las11 p.m. Es claro que mientras la persona no termine el semestre que est cursando es su obligacin estar en la casa, a ms tardar, a las 11 de la noche.Mientras el equipo siga ganando y no se presenten faltas por disciplina, se les seguir entregando el premio. Para seguir obteniendo el premio, es necesario que el equipo siga ganando y no se presenten faltas contra la disciplina.Mientras consigues completar la plata para comprar un televisor para ti, o encuentras una promocin, debers seguir viendo televisin con nosotros. Aqu es claro que mientras no se cumpla una, o ambas, condiciones la persona deber ver televisin con la familia.

En java estas situaciones se manejan a travs de la instruccin while (condicin),cuya sintaxis se presenta a continuacin:

while (condicin) {/** En este espacio debe ir el bloque de cdigo que se requiere se ejecute mientras la condicin se cumpla. */}

Del anterior bloque, se deben hacer las siguientes consideraciones:la palabra reservada while es indispensable en el encabezado del bloque.la condicin debe ir entre parntesis. Debe haber condicin, o sea no es posible dejar los parntesis vacos. La condicin se maneja igual que en las estructuras selectivas, es decir puede ser simple o estar compuesta de varias condiciones unidas a travs de operadores y (& - &&) u o (| - ||).

8

si la condicin no se cumple la primera vez que se llega al while, las instrucciones contenidas en l no se ejecutarn ni una vez.el que se requieran llaves o no, en este caso depende de la cantidad de instrucciones que estn sujetas al cumplimiento de la condicin. Si es una instruccin no son necesarias, si son varias si lo son, pero es recomendable utilizarlas siempre. Sea que se utilicen o no llaves, debe ser claro que las instrucciones dentro del while forman un bloque de cdigo, as que si se definen variables dentro de este bloque, dejaran de existir una vez se salga de l.

Ejercicio Resuelto:Problema: Suponga que se desea elaborar un programa que calcule e imprima los valores de la serie de Fibonnacci, menores al nmero cincuenta.Anlisis: Salidas. Nmeros, entre cero y cincuenta, que correspondan a la serie. Esta salida es repetitiva. Entradas.// Observe este es un caso en el cual no se requiere pedir nada ! Procedimiento. mtodo main: +main(String[ ]):void salidas: valor de retorno: entradas: parmetros: procedimiento: llamar al mtodo generarNmeros() mtodo generarNmeros: +generarNmeros():void salidas: Los nmeros entre 0 y 50 que correspondan a la serie. valor de retorno: entradas: parmetros: procedimiento: iniciar con 0 y 1, pues la serie, por definicin, empieza con estos valores. mientras (siguienteTrmino < 50) muestre siguienteTrmino. temporal = siguienteTrmino. siguienteTrmino += anterior. anterior = temporal. Cdigo en java: import java.util.*;public class Fibonacci {public static void main(String args[]) {generarNmeros();}public static void generarNmeros(){

int anterior = 0, temporal = 0; int siguienteTrmino = 1; System.out.println(anterior); while (siguienteTrmino < 50) {System.out.println(siguienteTrmino);temporal = siguienteTrmino; siguienteTrmino += anterior; anterior = temporal;}}}

Ejercicios Resueltos:Problema: Suponga que se desea elaborar un programa que calcule e imprima los valores de la serie de Fibonnacci, menores que cincuenta. Los nmeros pares deben ir marcados con un asterisco.Anlisis: Salidas. Nmeros, entre cero y cincuenta, que correspondan a la serie. Los pares irn acompaado de un asterisco. Esta salida es repetitiva. Entradas. Procedimiento. mtodo main: +main(String[ ]):void salidas: valor de retorno: entradas: parmetros: procedimiento: llamar al mtodo generarNmeros() mtodo generarNmeros: +generarNmeros():void salidas: Los nmeros entre 0 y 50 que correspondan a la serie, los pares irn marcados con un asterisco. valor de retorno: entradas: parmetros: procedimiento: iniciar con 0 y 1, pues la serie, por definicin, empieza con estos valores mientras (siguienteTrmino < 50)si (siguienteTrmino es par).muestre siguienteTrmino + '*'.sinomuestre siguienteTrmino + ' '.temporal = siguienteTrmino.siguienteTrmino += anterior.anterior = temporal. Cdigo en java:import java.util.*;public class FibonacciConParesResaltados {

public static void main(String args[]) {generarNmeros();}public static void generarNmeros(){int anterior = 0, temporal = 0; int siguienteTrmino = 1; char signo = '*';System.out.println(anterior+" "+signo);while (siguienteTrmino < 50) {signo = (siguienteTrmino % 2 == 0) ? '*' : ' '; System.out.println(siguienteTrmino+" "+signo); temporal = siguienteTrmino;siguienteTrmino += anterior;anterior = temporal;}}}

Problema: Se necesita saber el valor total de los libros que hay en una librera, se sabe que el valor de un libro se calcula multiplicando el nmero de pginas por 100. Si la edicin no es nacional o el libro fue editado este ao se le aplica un recargo, al valor obtenido, del 10%. No se sabe cuntos libros hay en la librera.Anlisis: Salidas.mensaje que indique el valor total de los libros. Esta salida es nica. Entradasmientras (haya ms libros) S La entrada es repetitiva.el nmero de pginas del libro.tipo de edicin (nacional o extranjero).si el libro fue editado este ao o no. Procedimiento. mtodo main: +main(String[ ]):void salidas: valor de retorno: entradas: parmetros: procedimiento: llamar al mtodo gestinLibros() mtodo gestinLibros: +gestinLibros():void salidas: Mensaje que indique el valor total de los libros. valor de retorno: entradas: para cada libro: pginas, edicin, ao. parmetros: procedimiento: mientras (haya ms libros)leer las entradas.valor = calcularBase(pginas)si la edicin es extranjera o si el libro fue editado este aovalor += recargo(valor)total += valor.

preguntar si hay ms libros. mostrar El valor total de los libros es: +total. mtodo calcularBase: +calcularBase(int):double salidas: valor de retorno: valor base del libro entradas: parmetros: nmero de pginas del libro. procedimiento: retorne pginas * 100 mtodo recargo: +recargo(double):double salidas: valor de retorno: valor del recargo entradas: parmetros: valor base del libro. procedimiento: retorne valor * 0.1Cdigo en java: import java.util.Scanner.*;public class ValorDelLibro {public static void main (String arg[] ) {gestinLibros();}public static void gestinLibros(){Scanner lector = new Scanner(System.in);char respuesta = 's';double valorTotal = 0;while ((respuesta == 's') || (respuesta == 'S')){double valor = 0;System.out.println("Digite la cantidad de pginas");int nmeroDePginas = lector.nextInt ();System.out.println("Digite (1) si es edicin nacional \n(2) si es extranjera");int nacional = lector.nextInt ();System.out.println("Digite (1) si es edicin de este ao \n(2) si es de otro ao");int ao = lector.nextInt ();valor = calcularBase(nmeroDePginas);if ((nacional == 2) || (ao == 1)) {valor += recargo(valor);}valorTotal += valorDelLibro; System.out.println(" Hay ms libros ?"); respuesta =lector.nexLine ().charAt(0);}System.out.println ("El valor total de los libros es "+valorTotal);}public static double calcularBase(int pginas){return pginas * 100;}public static double recargo(double base){return base* 0.1;}}

Problema: Se necesita sumar los nmeros pares entre un valor cualquiera, digitado por el usuario, y 100.Anlisis: Salidas. total obtenido al realizar la suma. Entradas valor inicial. Procedimiento. mtodo main: +main(String[ ]):void salidas: valor de retorno: entradas: parmetros: procedimiento: llamar al mtodo sumar() mtodo sumar: +sumar():void salidas: El resultado de la suma. valor de retorno: entradas: El nmero a partir del cual se debe sumar parmetros: procedimiento: pedir el nmero a partir del cual se debe sumar si (el residuo de dividir tope entre 2 es 1)sume 1 a tope. mientras (tope