You are on page 1of 23

La estructura do while es otra estructura repetitiva, la cual ejecuta al menos una

vez su bloque repetitivo, a diferencia del while o del for que podan no ejecutar
el
bloque.
Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo
menos
una
vez
se
ejecutar
el
bloque
repetitivo.
La condicin de la estructura est abajo del bloque a repetir, a diferencia del
while o del for que est en la parte superior.
Representacin grfica:

El bloque de operaciones se repite MIENTRAS que la condicin sea Verdadera.


Si la condicin retorna Falso el ciclo se detiene. En Java, todos los ciclos
repiten
por
verdadero
y
cortan
por
falso.
Es importante analizar y ver que las operaciones se ejecutan como mnimo una
vez.

Problema 1:
Escribir un programa que solicite la carga de un nmero entre 0 y 999, y nos
muestre un mensaje de cuntos dgitos tiene el mismo. Finalizar el programa
cuando se cargue el valor 0.
Diagrama de flujo:

No hay que confundir los rombos de las estructuras condicionales con los de
las
estructuras
repetitivas
do
while.
En este problema por lo menos se carga un valor. Si se carga un valor mayor o
igual a 100 se trata de un nmero de tres cifras, si es mayor o igual a 10 se
trata de un valor de dos dgitos, en caso contrario se trata de un valor de un
dgito. Este bloque se repite hasta que se ingresa en la variable valor el nmero
0 con lo que la condicin de la estructura do while retorna falso y sale del
bloque repetitivo finalizando el programa.
Programa:

importjava.util.Scanner;
publicclassEstructuraRepetitivaDoWhile1{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in);

intvalor;
do{
System.out.print("Ingreseunvalor
entre0y999(0finaliza):");
valor=teclado.nextInt();
if(valor>=100){
System.out.println("Tiene3
dgitos.");
}else{
if(valor>=10){
System.out.println("Tiene2
dgitos.");
}else{
System.out.println("Tiene1
dgito.");
}
}
}while(valor!=0);
}
}
Problema 2:
Escribir un programa que solicite la carga de nmeros por teclado, obtener su
promedio. Finalizar la carga de valores cuando se cargue el valor 0.
Cuando la finalizacin depende de algn valor ingresado por el operador
conviene el empleo de la estructura do while, por lo menos se cargar un valor
(en el caso ms extremo se carga 0, que indica la finalizacin de la carga de
valores)
Diagrama de flujo:

Es
importante
analizar
este
diagrama
de
flujo.
Definimos un contador cant que cuenta la cantidad de valores ingresados por el
operador
(no
lo
incrementa
si
ingresamos
0)
El valor 0 no es parte de la serie de valores que se deben sumar.
Definimos el acumulador suma que almacena todos los valores ingresados por

teclado.
La estructura repetitiva do while se repite hasta que ingresamos el valor 0. Con
dicho valor la condicin del ciclo retorna falso y contina con el flujo del
diagrama.
Disponemos por ltimo una estructura condicional para el caso que el operador
cargue nicamente un 0 y por lo tanto no podemos calcular el promedio ya que
no
existe
la
divisin
por
0.
En caso que el contador cant tenga un valor distinto a 0 el promedio se obtiene
dividiendo el acumulador suma por el contador cant que tiene la cantidad de
valores ingresados antes de introducir el 0.
Programa:

importjava.util.Scanner;
publicclassEstructuraRepetitivaDoWhile2{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in);
intsuma,cant,valor,promedio;
suma=0;
cant=0;
do{
System.out.print("Ingreseunvalor
(0parafinalizar):");
valor=teclado.nextInt();
if(valor!=0){
suma=suma+valor;
cant++;
}
}while(valor!=0);
if(cant!=0){
promedio=suma/cant;
System.out.print("Elpromediode
losvaloresingresadoses:");
System.out.print(promedio);
}else{
System.out.print("Noseingresaron
valores.");
}
}
}

El contador cant DEBE inicializarse antes del ciclo, lo mismo que el acumulador
suma. El promedio se calcula siempre y cuando el contador cant sea distinto a
0.

Problema 3:
Realizar un programa que permita ingresar el peso (en kilogramos) de piezas.
El proceso termina cuando ingresamos el valor 0. Se debe informar:
a) Cuntas piezas tienen un peso entre 9.8 Kg. y 10.2 Kg.?, cuntas con ms
de
10.2
Kg.?
y
cuntas
con
menos
de
9.8
Kg.?
b) La cantidad total de piezas procesadas.
Diagrama de flujo:

Los tres contadores cont1, cont2, y cont3 se inicializan en 0 antes de entrar a la


estructura
repetitiva.
A la variable suma no se la inicializa en 0 porque no es un acumulador, sino
que guarda la suma del contenido de las variables cont1, cont2 y cont3.
La estructura se repite hasta que se ingresa el valor 0 en la variable peso. Este
valor no se lo considera un peso menor a 9.8 Kg., sino que indica que ha
finalizado la carga de valores por teclado.
Programa:

importjava.util.Scanner;
publicclassEstructuraRepetitivaDoWhile3{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in);
intcant1,cant2,cant3,suma;
floatpeso;
cant1=0;
cant2=0;
cant3=0;
do{
System.out.print("Ingreseelpeso
delapieza(0perafinalizar):");
peso=teclado.nextFloat();
if(peso>10.2){
cant1++;
}else{
if(peso>=9.8){
cant2++;
}else{
if(peso>0){
cant3++;
}
}
}
}while(peso!=0);
suma=cant1+cant2+cant3;
System.out.print("Piezasaptas:");
System.out.println(cant2);
System.out.print("Piezasconunpeso
superiora10.2:");
System.out.println(cant1);
System.out.print("Piezasconunpeso
inferiora9.8:");
System.out.println(cant3);
}
}

Problemas propuestos

1. Realizar un programa que acumule (sume) valores ingresados por


teclado hasta ingresar el 9999 (no sumar dicho valor, indica que ha
finalizado la carga). Imprimir el valor acumulado e informar si dicho valor
es cero, mayor a cero o menor a cero.
2. En un banco se procesan datos de las cuentas corrientes de sus
clientes. De cada cuenta corriente se conoce: nmero de cuenta y saldo
actual. El ingreso de datos debe finalizar al ingresar un valor negativo en
el
nmero
de
cuenta.
Se pide confeccionar un programa que lea los datos de las cuentas
corrientes
e
informe:
a)De cada cuenta: nmero de cuenta y estado de la cuenta segn su
saldo,
sabiendo
que:
3.Estado de la cuenta
'Acreedor' si el saldo es >0.
4.
'Deudor' si el saldo es <0.
5.
'Nulo' si el saldo es =0.
b) La suma total de los saldos acreedores.
importjava.util.Scanner;
publicclassEstructuraRepetitivaDoWhile4{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in);
intsuma,valor;
suma=0;
do{
System.out.print("Ingreseunvalor:");
valor=teclado.nextInt();
if(valor!=9999){
suma=suma+valor;
}
}while(valor!=9999);
System.out.print("Elvaloracumuladoes");
System.out.println(suma);
if(suma==0){
System.out.println("Elvaloracumuladoes
cero.");
}else{
if(suma>0){
System.out.println("Elvaloracumuladoes
positivo.");
}else{
System.out.println("Elvaloracumuladoes
negativo");
}

}
}
}

importjava.util.Scanner;
publicclassEstructuraRepetitivaDoWhile5{
publicstaticvoidmain(String[]ar){
Scannerteclado=newScanner(System.in);
intcuenta;
floatsaldo,suma;
suma=0;
do{
System.out.print("Ingresenmerode
cuenta:");
cuenta=teclado.nextInt();
if(cuenta>=0){
System.out.print("Ingresesaldo:");
saldo=teclado.nextFloat();
if(saldo>0){
System.out.println("Saldo
Acreedor.");
suma=suma+saldo;
}else{
if(saldo<0){
System.out.println("Saldo
Deudor.");
}else{
System.out.println("Saldo
Nulo.");
}
}
}
}while(cuenta>=0);
System.out.print("TotaldesaldosAcreedores:");
System.out.print(suma);
}
}

Ejercicio 1

Crear un programa que permita un valor n positivo ingresado por el usuario . Luego,
calcule la suma de los n primeros nmeros naturales, los pares, los impares y los
cuadrados. Finalmente mostrar resultados en pantalla.
Solucin
Crear la siguiente interfaz.

Doble clik al boton para programar su accion:


private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {
int num,res,cuadrado;
int suma=0,sumap=0,sumai=0,sumac=0;
int contador=0;
num=Integer.parseInt(txtNum.getText());
contador=1;
while(contador<=num){
suma=suma+contador;
res=contador%2;
if(res==0)
sumap=sumap+contador;
else
sumai=sumai+contador;
cuadrado=contador*contador;
sumac=sumac+cuadrado;
contador++;
}
txaSalida.setText("La suma de los "+num +" primeros nmeros naturales es:" +
suma+"\n");
txaSalida.append("La suma de los pares: " + sumap +"\n");
txaSalida.append("La suma de los impares es:"+ sumai+"\n");
txaSalida.append("La suma de los cuadrados es:" +sumac);
}
Puede ejecutar su aplicacin sin pormenores.
2. Sentencia dowhile. Permite realizar acciones si las condiciones establecidas se
cumplen, pero a diferencia de while, la condicion se evala despues de realizar las acciones
dentro del dowhile. Eso quiere decir que las acciones se ejecutarn por lo menos una vez.

Sintaxis
do{
acciones a realizar;
}while(condicion);
Ejercicio 2. Creando tu minijuego 21
Crear una aplicacin con la lgica del juego 21. En este juego, se deben sacar cartas
mientras la suma sea menor o igual a 21, si la suma de los valores sobrepasa 21 entonces
mostrar un mensaje que muestre Perdio. Si se detiene la aplicacin y, con la siguiente carta
que iba a ser puesta en juego, no se llega a sobrepasar 21, tambin mostrar Perdio. Los
valores de las cartas seran del 1 al 13.
Solucin
Antes que nada algunas notas previas.
Para generar un nmero entre 1 y 13 haremos un llamado a la clase Math.random() de la
siguiente manera:
int numero; //para el numero al azar
numero=Int(Math.random()*13)+1; // El int es para convertirlo a entero
//se suma +1 para que genere valores desde 1 hasta 13 y no de 0 a 12;
Crear la siguiente interfaz:

El JButton btnReiniciar solo servira para limpiar el JTextArea (txaSalida) y devolver los
valores a su estado inicial (Incluyendo tambin poner activo el JButton btnJugar)
Doble clik al JButton (btnReiniciar) para programar su accion:
private void btnJugarActionPerformed(java.awt.event.ActionEvent evt) {
int numero,resp;
int suma=0;
do{
numero = ((int)(Math.random()*13))+1;
suma=suma+numero;
txaSalida.append("Numero generado: "+numero+"\t"+"Acumulado: "+suma+"\n");

if(suma<=21){
resp=JOptionPane.showConfirmDialog(null, "Desea
Continuar?","",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(resp==JOptionPane.NO_OPTION){
numero = ((int)(Math.random()*13))+1;
suma=suma+numero;
txaSalida.append("El numero generado hubiera sido: "+numero +" y el
acumulado: "+suma);
if(suma<=21){
JOptionPane.showMessageDialog(null, "Perdiste!!!");
}
else{
JOptionPane.showMessageDialog(null, "Ganaste!!!");
}
}
}
else{
JOptionPane.showMessageDialog(null, "Perdiste...! Vuelve a intentarlo!!");
resp=JOptionPane.NO_OPTION;
}
}while(resp==JOptionPane.YES_OPTION);
btnJugar.setEnabled(false);
}
Usamos los JOptionPane para controlar las respuestas del usuario si desea seguir jugando o
no.
Hasta ahora, tal vez sta sea la aplicacin mas complicada. Pero esto es slo el principio.
Java nos ofrece muchas posibilidades, entre las cuales est crear juegos de este tipo mucho
ms vistosos.

3. Sentencia for. Permite crear estructuras ligeramente sencillas (En realidad es la estructura
repetitiva mas sencilla de usar). Su sintaxis es:

for (int cont= valor inicial; cont <= limite; cont++)


Donde:

cont : Un contador o un valor(nmero) entero. Sera el encargado de realizar el respectivo


conteo de la cantidad de valores en el bucle.
limite : Establece el lmite despues del cual, cuando la condicion ( cont <= limite) es falsa,
sale del bucle y contina con la ejecucin del resto del programa.
cont ++ : Establece el incremento (o decremento, segn la necesidad) del contador ( cont +
+ quiere decir cont = cont+1)
Para su mayor comprensin pasemos a unos sencillos ejemplos:
Ejercicio 3
Calcular el factorial de un nmero. (Si Es un ejemplo demasiado sencillo, pero como bsico
es ms que perfecto para ver el funcionamiento de un bucle for).
Un factorial de un nmero cualquiera se calcula multiplicando desde 1 hasta el mismo
nmero. Por ejemplo:
5! = 1*2*3*4*5 = 120
Crear la siguiente interfaz:

Doble clik al botn (btnCalcular) para programar su accin:


private void btnCalcularActionPerformed(java.awt.event.ActionEvent
evt) {
int num=0;
float factorial=1;
num= Integer.parseInt(txtNum.getText());
for(int i=1;i<=num;i++)
factorial=factorial*i;
txtFac.setText(""+factorial);
}
Y listo, ya puede ejecutar su aplicacin. La razn de habler declarado al factorial
como float es que la operacin factorial resulta en nmeros naturales demasiado grandes en
expresiones pequeas. Por ejemplo, en el ejemplo anterior el factorial de 5 resulta 120, pero
si ingresamos el factorial de 11 ya nos da un resultado de 3.99168E7, valor que no podra
ser contenido en el rango de int.Otra aclaracin, se inicializa al factorial en 1 para que pueda
darnos resultados correctos, ya que cualquier nmero multiplicado por 0 (cero) siempre
dara cero.
Si bien es cierto que esta aplicacin ha sido de las mas sencillas, se puede usar la misma
solucin para, por ejemplo, calcular la suma de los nmeros naturales, el producto, suma de
series de fracciones, y otras variantes ms. Lo importante es establecer el inicio y los lmites.
Unos ejemplo ms:

Ejercicio 4

Crear un programa que calcule los divisores de un nmero natural cualquier. Tambin
mostrar si el nmero ingresado es primo. Un nmero primo es aquel que solo sea divisible
por 1 y por el mismo nmero.
Solucin
La lgica de este programa es sencilla. Luego de leer el nmero, se debe dividir al mismo por
cada nmero natural, desde 1 hasta el mismo nmero. Cada vez que el residuo sea 0, se
debe mostrar el nmero. Finalmente, con una condicional, mostrar el respectivo mensaje
(Primo o no).
Crear la siguiente interfaz:

Doble clik al botn para programar su accin:


private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {
int num=0,res=0,contDiv=0;
num= Integer.parseInt(txtNum.getText());
txtMen.setText("");
for(int i=1;i<=num;i++){
res=num % i;
if(res==0){
txtMen.append(""+i +"\n");
contDiv++;
}
}
if(contDiv==2)
txtMen.append("El nmero "+ num + " es primo!");
else
txtMen.append("El nmero "+ num + " no es primo!");
}
Y ya puede ejecutar su aplicacin.

La estructura mientras que (while) es aquella en la que el nmero de repeticiones de


bucle no se conoce por anticipado, y el cuerpo del buque se repite mientras se cumple
una determinada condicin.
1.Realizar un programa que imprima en pantalla los nmeros del 1 al 100.
public class EstructuraRepetitivaWhile1 {
public static void main(String[] ar) {
int x; x=1; while (x<=100) {
System.out.print(x);
System.out.print(" - "); x = x + 1;
}
}
}
2.Escribir un programa que solicite la carga de un valor positivo y nos muestre
desde 1 hasta el valor ingresado de uno en uno.
Ejemplo: Si ingresamos 30 se debe mostrar en pantalla los nmeros del 1 al 30.

public class EstructuraRepetitivaWhile2 {


public static void main(String[] ar) {
Scanner teclado=new Scanner(System.in);
int n,x;
System.out.print("Ingrese el valor final:");
n=teclado.nextInt();
x=1;
while (x<=n) {
System.out.print(x);
System.out.print(" - ");

x = x + 1;
}
}
3.Desarrollar un programa que permita la carga de 10 valores por teclado y nos
muestre posteriormente la suma de los valores ingresados y su promedio.

public class EstructuraRepetitivaWhile3 {


public static void main(String[] ar) {
Scanner teclado=new Scanner(System.in);
int x,suma,valor,promedio;
x=1;
suma=0;
while (x<=10) {
System.out.print("Ingrese un valor:");
valor=teclado.nextInt();
suma=suma+valor;
x=x+1;
}
promedio=suma/10;
System.out.print("La suma de los 10 valores es:");
System.out.println(suma);
System.out.print("El promedio es:");
System.out.print(promedio);
}
}
4.Elaborar un programa que muestre los numeros pares comprendidos entre 10
y 20 inclusive.
#include<stdio.h>
main(){
int i;
printf("Los numeros pares entre 10 y 20 inclusive son: \n");
for(i=10;i<=20;i=i+2)
printf("%d \n",i);
return 0;
}
5. Mostrar la tabla de caracteres ASCII a partir del Cdigo 32 (el espacio en
blanco) hasta el Cdigo 164 (o sea la ) sin incluir las minsculas (rango del 97
al 122).
# include<stdio.h>
main(){
int i;
printf("Los Caracteres ASCII son: \n");
for(i=32;i<=164;i++) {
if(i<97 || i>122)
printf("%c %d \t",i,i);
}

return 0;
}

1.Crear una aplicacin que permita ingresar dos valores y que


visualice dos resultados con el operador division y division entera
Module Module11
Sub main()
Dim n1, n2, division As Double
Dim divisionentera As Integer
Console.WriteLine("ingrese el n1:")
n1 = Console.ReadLine()
Console.WriteLine("ingrese el n2:")
n2 = Console.ReadLine()
division = n1 / n2
divisionentera = n1 / n2
Console.WriteLine("la division es :" & division)
Console.WriteLine("la division entera es :" & divisionentera)
Console.ReadLine()
Console.Clear()
main()
End Sub
End Module

2.determinar si un numero es positivo o negativo a traves de un


mensaje
Module Module32
Sub main()
Dim num As Integer
Dim resultado As String
Console.WriteLine("ingrese numero:")

num = Console.ReadLine()
If num > 0 Then
resultado = "positivo"
Else
resultado = "cero"
If num < 0 Then
resultado = "negativo"
Else : resultado = "es cero"
End If
End If
Console.WriteLine("el numero ingresado es:" & resultado)
Console.ReadLine()
End Sub
End Module

3.implementar una aplicacion que permita digitar un lenguaje


de programacin.
Module Module33
Sub main()
Console.WriteLine("digite su lenguaje favorito:")
Dim lenguaje As String
lenguaje = Console.ReadLine()
lenguaje = lenguaje.ToUpper
If lenguaje = "visual basic" Or lenguaje = "visual basic.net"
Then
Console.Write(lenguaje & "es otro lenguaje")
End If
Console.ReadLine()
End Sub
End Module

4.En una playa de estacionamiento cobran S/. 2,5 por hora o


fraccin. Disear una aplicacin que determine cuanto debe
pagar un cliente por el estacionamiento de su vehculo,
conociendo el tiempo de estacionamiento en horas y fraccin.
Module Module34

Sub main()
'modulo35
Dim h, m, m1, resul, tiempo As Integer
Console.WriteLine("ingrese el tiempo en horas: ")
h = Console.ReadLine()
Console.WriteLine("ingrese cntidad en minutos: ")
m = Console.ReadLine()
If m > 0 And m < 60 Then
m1 = 2.5
Else
m=0
Console.WriteLine("ingrese minutos entre 1 y 60 ")
If m > 0 And m < 60 Then
m1 = 2.5
End If
End If
resul = (h * 2.5) + m1
Console.WriteLine("el pago a realizar es: " & " s/. " & resul & "
nuevos soles ")
Console.ReadLine()
Console.Clear()
main()
End Sub
End Module

5.Una compania dedicada al alquiler de automoviles cobra un


monto fijo de 200.00 para los primeros 300 km, cobra un
adicional de S/. 5.00 por cada km en exceso sobre los 300
km.Para mas de 1000 km cobra S/ 3.00 por cada km en exceso
sobre los 1000 km.Determinar el mont a pagar e impuesto.
Module Module35
Sub main()
Dim monto = 200
Dim km, km1, km2, igv, exce, exce1, monto1 As Integer
Console.WriteLine("Ingrese kilometros:")
km = Console.ReadLine()
If km > 0 And km < 300 Then
Console.WriteLine("el monto a pagar es: " & monto)
igv = monto * 0.19

ElseIf km > 300 And km <= 1000 Then


Console.WriteLine("el monto fijo por los primeros 300 km
es:" & monto)
km1 = km - 300
Console.WriteLine("los km excedidos son:" & km1)
exce = (km1 * 5)
Console.WriteLine("el exceso delos kms importa:" & exce)
monto1 = monto + (km1 * 5)
Console.WriteLine("el monto a pagar es:" & monto1)
End If
Console.ReadLine()
Console.Clear()
main()
End Sub
End Module

6.Una ferreteria desea tener un programa que le permita


seleccionar cualquiera de las opcines, segn tabla en tu hoja
de consola 39 Calcular el total a pagar por cada articulo segn
aparatos sanitarios o materiales de construccion.
Module Module36
Sub main()
'modulo39
Dim opcion As Integer
opcion = 0
Do While opcion < 3
Console.WriteLine("DISTRIBUCION")
Console.WriteLine("[1] aparatos sanitarios")
Console.WriteLine("[2] materiales de construccion")
Console.WriteLine("[3] terminar")
Console.Write("elija la opcion de la ferreteria: ")
opcion = Console.ReadLine()
Select Case opcion
Case Is = 1
aparatos()
Case Is = 2
materiales()

End Select
Loop
End Sub

Calcular sumatoria de la inversa de nmeros impares


Codigo en C++
Problema
Disear un algoritmo que permita calcular la suma de los primeros 30 trminos de la
siguiente serie: 1-1/3+1/5-1/7...+1/9 , Siendo N un numero ingresado por el teclado.

Codigo Fuente en C++


view plainprint?

1.

#include <iostream>

2.

using namespace std;

3.

int main(){

4.

int i,n;

5.

double suma=0.0,div=0.0;

6.

cout<<"Ingresa Numero"<<endl;

7.

cin>>n;

8.

for(i=1;i<(n+1);i++){

9.

div=(1/(double)((2*i)-1));

10.

if(i%2==0){

11.

suma=suma-div;

12.

}else{

13.

suma=suma+div;

14.
15.

}
}

16.
17.

cout<<suma;
return 0;

18. }
Publicado por George Tacuri en 21:23