You are on page 1of 79

Centro de Extensión y Proyección Social (CEPS)

2.- Estructuras Condicionales


Son estructuras que permiten dar condición o condiciones para resolver un
algoritmo, son de 3 tipos:
2.1.- Estructuras condicionales Simples
2.2.- Estructuras condicionales Compuestas
2.3.- Estructuras condicionales Anidadas

Estructuras Condicional compuesta

Evalúa la Condición lógica y ejecuta una solo instrucción A o instrucción


B.

Sintaxis

Pseudocódigo Diagrama de flujo

Si (<condición >) entonces


Inicio
<Instrucciones A>
Fin
Sino
Inicio
<Instrucciones B>
fin

Si la condición es V ejecuta solo <instrucciones A>,

Si la condición es F, ejecuta solo <instrucciones B>

Aplicación 1.- Diseñar un Diagrama de Flujo que calcule el Producto y la


Parte Entera de 2 números m, n enteros. El programa debe solicitar el
ingreso de 2 números m, n y luego:
a).-Calcula el producto de m por n. Si el numero m es mayor n.
b).- Calcula la raíz cuadrada si el numero m es menor que n.

Algoritmos y Estructura de Datos


55
Universidad Nacional de Ingeniería -

Ejemplo: Si m = 1 y n =2 entonces la estructura de control a usa es:


SI ( m> n ) entonces
multip m* n
sino
Raiz sqrt(n)
En la presente gráfica se ilustra el Diagrama de flujo

Ejecución: como el resultado de evaluar la condición es Falso, entonces se


calcula la raíz cuadrada del número n y envía el mensaje de conformidad

Algoritmos y Estructura de Datos 56


Centro de Extensión y Proyección Social (CEPS)

Problema 2.- Diseñar un Diagrama de Flujo que permita validar datos de un


alumno para ingresar al sistema informático por código =001 y clave = 1010.
Si los datos son correctamente ingresados el diagrama permite ingresar 3
prácticas calificadas pc1, pc2 y pc3,
luego calcula el promedio y muestra
el reporte respectivo. Si los datos
del alumno son incorrectos, debe
emitir un mensaje “Sr. Alumno,
Errores en datos”
Solución
La condición a validar es
Si ( código=001) y (calve = 1010) entonces Leer 3 prácticas y calcular
su Promedio.
Sino
Imprimir el mensaje “Sr. Alumno, Errores en datos”

Implementación del Diagrama de flujo

Algoritmos y Estructura de Datos


57
Universidad Nacional de Ingeniería -

Ejecución:
1.- Modulo de validación.- Se debe leer código y clave respectivamente.

2- Modulo de ingreso de notas: como los datos de alumno son correctos


entonces ingresar las 3 prácticas calificadas.
Pc1=12, Pc2=10, Pc3=14.
El promedio de prácticas, se ilustra en la siguiente gráfica, así como la
conformidad

Programa Pseudocódigo Programa Fuente


Variables
pc1, pc2,pc3,cod, clav : entero void main()
{ int pc1,pc2,pc3,cod,clav;
prom: real
float promp;
Inicio gotoxy(10,3);cout<<"Ingrese codigo =
Imprimir (“codigo = “), leer(cod), ";
Imprimir (“Clave = “), leer(clav), cin>>cod;
si((cod=001) y (clav=1010)) entonces gotoxy(10,4);cout<<"Ingrese clave = ";
cin>>clav;
Inicio
f((cod==001) && (clav==1010))
Imprimir (Ingrese 3 practicas : “), { gotoxy(10,6);cout<<"pc1";cin>>pc1;
leer(pc1,pc2,pc3), gotoxy(10,7);cout<<"pc2=";cin>>pc2;
prom (pc1+ pc2+ pc3+)/3.0 gotoxy(10,8);cout<<"pc3=";cin>>pc3;
imprimir(“El promedio es =”,prom) promp=(pc1+pc2+pc3)/3.0;
gotoxy(10,12);
fin cout<<"Promedio ="<<promp; }
sino else
inicio {gotoxy(10,14);cout<<"Error, Adios...";
imprimir(“Sr, error, adios…”) }
getche();
fin
}
fin

Algoritmos y Estructura de Datos 58


Centro de Extensión y Proyección Social (CEPS)

Estructuras Condicional con Anidamiento


Sintaxis
Si <cond_logica1> entonces
Inicio
<accion1 >
fin
sino
Si <cond_logica2> entonces
Inicio
<accion2 >
fin
sino
<accion3>------------------
Problema 2.- Diseñar un diagrama de flujo que permita ingresar 3 números
enteros a, b y c. luego el programa averiguar si se cumple una de las tres
relaciones y la que se cumple ejecutar su tarea respectiva. Veamos.
Relación 1.- Si a = b + c, entones calcular el producto de los 3 números
Relación 2.- Si b = a + c entones calcular la resta de los 3 números
Relación 3.- Si c = a + b entones calcular la suma de los 3 números
Si ninguna relación se cumple, emitir un mensaje: ‘ Sr. No existe relación ’
Solución.

Algoritmos y Estructura de Datos


59
Universidad Nacional de Ingeniería -

Ejecución.- Sean los números a = 6, b = 4 y c = 10. La relación que se


cumple es la relación 3, entones el resultado será: m = a + b + c = 20. Los
resultados se ilustran en la siguiente gráfica y su confirmación respectiva.

Programa Pseudocódigo Programa Fuente


variables
void main()
a,b,c, prod,res,suman:entero { int a,b,c,sumas,res,prod;
Inicio float promp;
Imprimir (Ingrese 3 números= “), gotoxy(10,3);cout<<"Ingrese a = ";
leer(a,b,c), cin>>a;
gotoxy(10,4);cout<<"Ingrese b = ";
Si(a=b+c) entonces
cin>>b;
Inicio gotoxy(10,5);cout<<"Ingrese c = ";
Prod a*b*c cin>>c;
imprimir(“El producto =”,prod) if(a==b+c)
fin { prod=a*b*c;
gotoxy(10,17);cout<<"Producto="<<prod
Sino
;
Si(b=a+c) entonces }
Inicio else
res a-b-c if(b==a+c)
imprimir(“La resta es =”,res) {res=a-b-c;
gotoxy(10,17);cout<<"Producto="<<res;
fin }
Sino else
Si(c=a+b) entonces if(c==a+b)
Inicio { prod=a+b+c;
gotoxy(10,17);cout<<"Suma =
Suman a+b+c
"<<sumas;
imprimir(“La suma e =”,suman) }
fin else
Sino { gotoxy(10,17);
Inicio cout<<"No existe relacion = ";
Imprimir(“Sr. No existe relación”) }
fin getche();
Fin }

Algoritmos y Estructura de Datos 60


Centro de Extensión y Proyección Social (CEPS)

Problema 4.- Diseñar un diagrama de flujo que permita ingresar a un


usuario código=100 y clave=200. Silos datos de entrada son correctos, el
sistema solicita al usuario que ingrese un numero n y verifica si este número
es par o impar y luego envía el reporte según sea el caso. Si el usuario no
recuerda sus datos en la primera entrada, decide ingresar sus nuevos datos
mediante ncódigo=10 y nclave=12. Si estos son correctos el sistema calcula
la suma de sus datos ingresado y emite un reporte, en caso que sean
incorrectos el sistema solo envía un mensaje de error “Segunda opción,
error”.
Solución.
El usuario tiene 2 códigos y 2 claves para validar.. El programa
Pseudocódigo es:
Inicio
Imprimir (‘Ingrese código y clave’), leer(código, clave)
Si ((código = 10) y ( clave = 200)) entonces
Inicio
Imprimir(‘Bienvenidos:’), leer(n)
Si (n resto 2 = 0) entonces
inicio
Imprimir (‘El número es par’)
fin
Sino
inicio
Imprimir(‘El número es impar’)
fin
Fin
Sino
Imprimir(‘ingrese nuevos datos :’), leer(ncodigo, nclave)
Si (( ncodigo=10 ) y ( nclave=12 ) ) entonces
Inicio
Suma_codigo ncodigo+ nclave,
Imprimir(Suma_codigo)
Fin
Sino
Imprimir(‘Segunda opción, error :’)
Fin

Algoritmos y Estructura de Datos


61
Universidad Nacional de Ingeniería -

Implementación en Borland c++


void main()
{ int codigo,clave, ncodigo,nclave,n,Suma_codigo=0;
gotoxy(10,3);cout<<"Ingrese codigo = "; cin>>codigo;
gotoxy(10,4);cout<<"Ingrese clave = "; cin>>clave;
if((codigo==10) && (clave==200))
{clrscr();
gotoxy(10,4);cout<<" Bienvenido..";
gotoxy(10,5);cout<<" Ingrese n = ";cin>>n;
if(n%2==0)
{ gotoxy(10,7);cout<<" El número es par";
}
else
{ gotoxy(10,7);cout<<" El número es impar";
}
}
else
{clrscr(); gotoxy(10,3);cout<<"Ingrese ncodigo = "; cin>>ncodigo;
gotoxy(10,4);cout<<"Ingrese nclave = "; cin>>nclave;
if((ncodigo==10) && (nclave==12))
{clrscr(); Suma_codigo=ncodigo+ nclave;
gotoxy(10,7);cout<<" LA SUMA ES = "<<Suma_codigo;
}
}
getche();
}

Algoritmos y Estructura de Datos 62


Centro de Extensión y Proyección Social (CEPS)

Diseño del Diagrama de Flujo

Ejecución.- Si usa sus primeros datos y este comete error, entonces le


solicita los segundos datos y a estos los acumula. Ver la siguiente gráfica.

A continuación, se describen más ejemplos, primero se desarrollan


programas pseudocódigo y en la siguiente sección se ilustra los
Diagramas de Flujo de Datos.

Algoritmos y Estructura de Datos


63
Universidad Nacional de Ingeniería -

Aplicación 5.- Diseñar un programa que permita determinar si un entero A


es divisible por otro B.
Solución
Variables: a, b, r; enteros
Inicio
imprimir (“Ingrese el Valor de A:” ),Leer (a)
imprimir ( “Ingrese el Valor de B:” ),Leer( b)
Si (b mod a=0) entonces
inicio
imprimir ( “Si es Divisible” )
fin
Sino
inicio
imprimir ( “No es Divisible”)
fin
Fin
Aplicación 6.- Diseñar un programa para que calcule e imprima los valores
de las raíces reales de una ecuación de segundo grado:
Ax^2+Bx+C=0
Se debe ingresar los coeficientes de la ecuación A, B y C.
Solución
Variables
a, b, c: enteros raíz : reales
Inicio
imprimir ( “Ingrese el Coeficiente A:”), Leer( a)
imprimir ( “Ingrese el Coeficiente B:”), Leer (b)
imprimir ( “Ingrese el Coeficiente C:”), Leer (c)
raíz (ver formulas en Diagrama de Flujo)
imprimir ( “El valor de la raíz es:”, raíz)
Fin

Algoritmos y Estructura de Datos 64


Centro de Extensión y Proyección Social (CEPS)

Aplicación 7.- La tasa de interés sobre un préstamo es de 8% si la cantidad


es menor o igual que S/. 200, pero es de 6% si excede a 200. Hacer un
programa para que ingrese la cantidad y reporte el interés y el monto total.
Solución
Variables
inte, monto, montoa: reales
Inicio
imprimir ( “Ingrese el Préstamo:” ), Leer( monto)
Si (monto<=200) entonces
inicio
inte monto*0.08
montoa (monto*0.08)+monto
fin
Sino
Si (monto>200) entonces
inicio
inte monto*0.06
montoa (monto*0.06)+monto)
Fin

imprimir ( “El interés es:”, inte)


imprimir ( “El monto actual es:”, montoa)
Fin

Algoritmos y Estructura de Datos


65
Universidad Nacional de Ingeniería -

Implementacion en Borland c++ 5.02

void main()
{ float inte, monto, montoa;
gotoxy(10,3);cout<<"Ingrese el Préstamo:" ; cin>>monto;
if(monto<=200)
{ inte= monto*0.08;
montoa=(monto*0.08)+monto;
}
else
if(monto>200)
{
inte = monto*0.06;
montoa=(monto*0.06)+monto;
}
gotoxy(10,12);cout<<"El interés es ="<<inte;
gotoxy(10,14);cout<<"El monto actual es:"<<montoa;
getche();
}

Algoritmos y Estructura de Datos 66


Centro de Extensión y Proyección Social (CEPS)

Aplicación 8.- Hacer un programa de tal manera que se ingrese las 2


evaluaciones de un alumno y luego genere un reporte de APROBADO si el
promedio es mayor o igual a 10.5 y DESPROBADO en caso contrario.
Solución
Variables
n1, n2: enteros promedio: real
Inicio:
imprimir ( “Ingrese Nota 1:” ), Leer (n1)
imprimir( “Ingrese Nota 2:” ), Leer (n2)
promedio (n1+n2)/2
Si (promedio>=10.5) entonces
inicio
imprimir ( “APROBADO”)
fin
Sino
inicio
imprimir ( “DESAPROBADO” )
fin
Fin

Aplicación 9.- La comisión de las ventas totales es como sigue:


a) Si ventas < S/. 80, entonces no hay comisión
b) Si S/. 80 <= ventas <= S/. 600 entonces la comisión es igual al 12%
de las ventas
c) Si ventas > 600 entonces la comisión es igual al 15% de las ventas
Hacer un programa para que se ingrese las ventas y se reporte la
comisión.

Solución

Variables
ven, comisión: reales

Algoritmos y Estructura de Datos


67
Universidad Nacional de Ingeniería -

Inicio
imprimir ( “Ingrese el monto de la venta:”),Leer (ven)
Si (ven < 80) entonces
comisión 0
Sino
Si (ven>=80 y ven<=600) entonces
comisión ven*0.12
Sino
Si (ven > 600) entonces
comisión ven*0.15
imprimir ( “La comisión es: ”, comisión)
Fin
Aplicación 10.- Hacer un programa para calcular el peso semanal de un
trabajador. Se debe ingresar el nombre, pago, por hora y el número de horas
trabajadas. Si normalmente se trabaja 40 horas a la semana y por cada hora
extra trabajada se paga 1.5 veces la hora normal, reportar el nombre y el
pago semanal del trabajador.
Solución
Variables
ph, nh, phe, pt, nhe : reales nom : cadena
Inicio
imprimir ( “Ingrese el nombre del trabajador:”),Leer( nom)
imprimir ( “Ingrese el pago por hora:”), Leer (ph)
imprimir ( “Ingrese el número de horas trabajadas:”),Leer (nh)
Si (nh<=40) entonces
pt nh*ph
Sino
Si (nh>40) entonces
inicio
nhe nh-40
phe ph*1.5
pt (40*ph)+(nhe*phe)
fin
imprimir ( “El trabajador es:”, nom)
imprimir ( “El pago semanal es:”, pt)
Fin
Algoritmos y Estructura de Datos 68
Centro de Extensión y Proyección Social (CEPS)

Aplicación 11.- Se repartirá la herencia entre los hijos de un señor como


sigue: Si la cantidad de hijos es menor que 4; se repartirá exactamente entre
el número de hijos; si son 4 o más hijos, la mitad le tocara al hermano mayor
y el resto se dividirá entre los demás hermanos. Hacer un programa para
que reporte cuanto le corresponde a cada hijo. Se debe ingresar la herencia
y el número de hijos.
Solución
Variables
herencia, nh, mh, mhm: enteros
Inicio
imprimir ( “Ingrese el monto de la herencia:”),Leer (herencia)
imprimir ( “Ingrese el número de hijos:”), Leer (nh)
Si (nh<4) entonces
mh herencia/nh
imprimir ( “El monto a repartir entre los hijos:”, mh)
Sino
Si (nh>=4) entonces
inicio
mhm herencia/2
mh mhm/(nh-1)
imprimir ( “El monto para el hermano mayor es de:”,
mhm)
imprimir ( “El monto para los demás hijos es de:”, mh)
Fin
Fin
Aplicación 12.- Una empresa comercial desea hacer un programa para
calcular el precio neto de un artículo de acuerdo a lo siguiente:
a) si la venta es al contado se le da el 40% de descuento.
b) si la venta es a plazos y:
T<12 meses se recargara al 30%, T>12 meses se recargara al 60%
Se debe ingresar el precio del artículo, el código de venta (c) contado, (b)
plazos y si la venta es a plazos se debe ingresar el tiempo de pago.

Algoritmos y Estructura de Datos


69
Universidad Nacional de Ingeniería -

Solución
Variables
pr, pn, des: reales co : carácter tiempo: entero
Inicio
imprimir ( “Ingrese el precio del artículo:”), Leer( pr)
imprimir ( “Ingrese el código de venta:”), Leer (co)
Si (co=’c’) entonces
inicio
des pr*0.40, pn pr-des
fin
Sino
Si (co=’p’) entonces
inicio
imprimir ( “Ingrese el tiempo de pago en meses:”), Leer(tiempo)
Si (tiempo>12) entonces
inicio
des pr*0.60, pn pr+des
fin
Sino
Si (tiempo<12) entonces
inicio
des pr*0.30
pn pr+des
fin
imprimir ( El pago neto es:”, pn)
Fin

Aplicación 13.- En un triángulo se cumple lo siguiente:


s>0, s>b, s>c ,donde s: semiperimetro a, b, c: Lados del triangulo
Hacer un programa para que se ingresen los valores de los del triángulo de
los lados del triángulo y si estos valores cumplen las condiciones calcular el
área del triángulo en caso contrario reportar DATOS INCORRECTOS
AREA=(S(S-A)(S-B)(S-C))^0.5

Solución
Variables s, a, b, c: enteros
Área: real
Algoritmos y Estructura de Datos 70
Centro de Extensión y Proyección Social (CEPS)

Inicio
imprimir ( “Ingrese el lado a:”), Leer (a)
imprimir ( “Ingrese el lado b:”), Leer b)
imprimir ( “Ingrese el lado c:”), Leer (c)
imprimir ( “Ingrese el semiperimetro del triángulo:”), Leer (s)
Si (s>a y s>b y s>c)
área ((s*((s-a)*(s-b)*(s-c))))^0.5
imprimir ( “El área del triángulo es: ”, área)
Sino
imprimir ( “DATOS INCORRECTOS”)
Fin
Aplicación 14.- Calcular el valor de la función de acuerdo a lo siguiente:
Y=x^2+5 Si x<=0
Y=3x-1 Si 0<x<2
Y=x^2-4x+5 Si x>=2
Solución
Variables
x, y: reales
Inicio
imprimir ( “Ingrese el valor de x:”), Leer (x)
Si (x<=0) entonces
inicio
y x^2+5
imprimir ( “El valor de y es:”, y)
fin
Sino
Si (x>0 y x<2) entonces
inicio
y 3*x-1
Imprimir ( “El valor de y es:”, y)
fin
Sino
Si (x>=2) entonces
inicio
y x^2-4*x+5
imprimir ( “El valor de y es:”, y)
fin
Fin

Algoritmos y Estructura de Datos


71
Universidad Nacional de Ingeniería -

Aplicación 15.- Los empleados de una fábrica trabajan en dos turnos:


diurno y nocturno. Se desea calcular el jornal diario de acuerdo a los
siguientes puntos:
- La tarifa de las horas diurnas es de S/. 1.5
- La tarifa de las horas nocturnas es de S/. 2.25
- En caso de ser domingo la tarifa aumentara en S/. 1 en el turno
diurno y S/. 1.25 en el turno nocturno.
Se debe leer el turno, las horas trabajadas y el día de la semana.
Solución
Variables: turno, días: cadena, td, tn, cd, ht; enteros, pago: real
Inicio
imprimir ( “Ingrese el turno:”),Leer (turno)
imprimir ( “Ingrese el día:”), Leer (días)
imprimir ( “Ingrese el número de horas trabajadas:” ); Leer (ht)
Si (turno=”diurno”) entonces
inicio
Si (días<>”domingo”) entonces
pago ht*1.5
fin
Sino
Si (días=”domingo”) entonces
pago ht*(1.5+1)
Sino
Si (turno=”nocturno”) entonces
Si (días<>”domingo”)
pago ht*2.25
Sino
Si (días=”domingo”) entonces
pago ht*(2.25+1.25)
Fin
imprimir ( “El pago diario es de:”, pago)
Fin

Algoritmos y Estructura de Datos 72


Centro de Extensión y Proyección Social (CEPS)

A continuación se implementan estos programas pseudocódigo en Dfd.


Se deja constancia que las formulas en muchos diagramas se muestran
una parte, pero estas se encuentran en su correspondiente
pseudocódigo .
Diagrama de Flujo de Datos
Para didáctica, se ha redactar el enunciado de los problemas

Aplicación 5.-Escriba un programa para determinar si un entero A es


divisible por otro B.

Algoritmos y Estructura de Datos


73
Universidad Nacional de Ingeniería -

Aplicación 6.- Hacer un programa para que calcule e imprima los valores
de las raíces reales de una ecuación de segundo grado:

Algoritmos y Estructura de Datos 74


Centro de Extensión y Proyección Social (CEPS)

Aplicación 7.- La tasa de interés sobre un préstamo es de 8% si la cantidad


es menor o igual que S/. 200, pero es de 6% si excede a 200. Hacer un
programa para que ingrese la cantidad y reporte el interés y el monto total.

Algoritmos y Estructura de Datos


75
Universidad Nacional de Ingeniería -

Aplicación 8.-Hacer un programa de tal manera que se ingrese las 2


evaluaciones de un alumno reporte APROBADO si el promedio es mayor o
igual a 10.5 y DESAPROBADO en caso contrario

Algoritmos y Estructura de Datos 76


Centro de Extensión y Proyección Social (CEPS)

Aplicación 9.-La comisión de las ventas totales es como sigue:


a) Si ventas < S/. 80, entonces no hay comisión
b) Si S/. 80 <= ventas <= S/. 600 entonces la comisión es igual al 12%
de las ventas
c) Si ventas > 600 entonces la comisión es igual al 15% de las ventas
Hacer un programa para que se ingrese las ventas y se reporte la
comisión.

Algoritmos y Estructura de Datos


77
Universidad Nacional de Ingeniería -

Aplicación 10.-Hacer un programa para calcular el pago semanal de un


trabajador. Se debe ingresar el nombre, pago por hora y el número de horas
trabajadas. Si normalmente se trabaja 40 horas a la semana y por cada hora
extra trabajada se paga 1.5 veces la hora normal, reportar el nombre y el
pago semanal del trabajador.

Algoritmos y Estructura de Datos 78


Centro de Extensión y Proyección Social (CEPS)

Aplicación 11.-Se repartirá la herencia entre los hijos de un señor como


sigue: Si la cantidad de hijos es menor que 4; se repartirá exactamente entre
el número de hijos; si son 4 o más hijos, la mitad le tocara al hermano mayor
y el resto se dividirá entre los demás hermanos. Hacer un programa para
que reporte cuanto le corresponde a cada hijo. Se debe ingresar la herencia
y el número de hijos.

Aplicación 12.- Una empresa comercial desea hacer un programa para


calcular el precio neto de un artículo de acuerdo a lo siguiente:

Algoritmos y Estructura de Datos


79
Universidad Nacional de Ingeniería -

a) si la venta es al contado se le da el 40% de descuento.


b) si la venta es a plazos y:
T<12 meses se recargara al 30%, T>12 meses se recargara al 60%
Se debe ingresar el precio del artículo, el código de venta (c) contado, (b)
plazos y si la venta es a plazos se debe ingresar el tiempo de pago.

Algoritmos y Estructura de Datos 80


Centro de Extensión y Proyección Social (CEPS)

Aplicación 13.-En un triángulo se cumple lo siguiente: s>0, s>b, s>c ,donde


s: semiperimetro a, b, c: Lados del triángulo. Hacer un programa para que
se ingresen los valores de los del triángulo de los lados del triángulo y si
estos valores cumplen las condiciones calcular el área del triángulo en caso
contrario reportar DATOS INCORRECTOS.
AREA=(S(S-A)(S-B)(S-C))^0.5

Algoritmos y Estructura de Datos


81
Universidad Nacional de Ingeniería -

Aplicación 14.- Calcular el valor de la función de acuerdo a las siguientes


condiciones:
Y=x^2+5 Si x<=0
Y=3x-1 Si 0<x<2
Y=x^2-4x+5 Si x>=2

Algoritmos y Estructura de Datos 82


Centro de Extensión y Proyección Social (CEPS)

Aplicación 15.- Los empleados de una fábrica trabajan en dos turnos:


diurno y nocturno. Se desea calcular el jornal diario de acuerdo a los
siguientes puntos:
- La tarifa de las horas diurnas es de S/. 1.5
- La tarifa de las horas nocturnas es de S/. 2.25
- En caso de ser domingo la tarifa aumentara en S/. 1 en el turno
diurno y S/. 1.25 en el turno nocturno. Se debe leer el turno, las horas
trabajadas y el día de la semana.

Algoritmos y Estructura de Datos


83
Universidad Nacional de Ingeniería -

3.- Estructuras de Control Repetitivas


Permiten ejecutar sentencias hasta satisfacer una condición Lógica.

Repetitiva con Entrada Controlada: Mientras


Realiza 0,1 2,.., o más tareas.
Sintaxis

Aplicación 1.- Diseñar un diagrama de flujo que permita calcular la suma


acumulada de la serie: 1+2+3+4+5.
Solución.
a).- Se define un contador (cont) para que incremente elementos a sumar y
un acumulador (acum) que vaya acumulando los valores según como
avance el contador.
b).- La condición de terminación está controlado por el contador, el cual
avanza hasta que se menor o igual a 5.
c).- Se debe inicializar el contador en 1 y el acumulador en 0
Programa Pseudocódigo.

Algoritmos y Estructura de Datos 84


Centro de Extensión y Proyección Social (CEPS)

Programa Pseudocódigo Programa Fuente


Inicio
Imprimir(‘ Bienvenidos :’) void main()
{ int cont=1,acum=0;
Cont 1
Acum 0 gotoxy(10,3);cout<<"Bienvenidos";
Mientras (cont<=5) hacer
while(cont<=5)
Inicio
{ acum= acum+cont;
Acum acum.+ cont
cont++;
Cont Con t+ 1
}
Fin
Imprimir (‘Suma acumulada=’,Acum)
gotoxy(10,4);
Fin. cout<<"Suma es = "<<acum;
getche();
}

Diagrama de Flujo de datos


Ejecución.-
Los resultados se ilustran
en la siguiente gráfica y su
confirmación respectiva.

Algoritmos y Estructura de Datos


85
Universidad Nacional de Ingeniería -

Aplicación 2.- Diseñar un diagrama de flujo que permita ingresar al usuario


un elemento de la serie y luego un segundo elemento de tal manera que
ambos elementos definen un grupo de elementos de la serie y luego calcular
la suma acumulada de la serie: 1+2+3+4+5+ 6 +………+ n..
Solución.
a).- Se define un Contador (Cont_I) para que defina lado izquierdo de la
serie y Lado_d, lado derecho como segundo elemento de la serie. Ambos
elementos definen un intervalo, bajo el cual se calcula la suma. Asimismo se
define el acumulador (Acum) que va acumulando los valores según como
avance el contador.
b).- La condición de terminación está controlado por: Cont_I <= Lado_d ,
ambos deben leerse desde el teclado
c).- Se debe inicializar el acumulador en 0
Programa Pseudocódigo. Programa Fuente

void main()
Inicio
{ int ldi,ldd,acum=0;
Imprimir(‘ Ingrese lado izquierdo “),
gotoxy(10,3);cout<<"Bienvenidos";
leer(ldi); gotoxy(10,5);cout<<"Lado
Imprimir(‘ Ingrese lado derecho “);l Izquierdo";cin>>ldi;
eer(ldd) gotoxy(10,6);cout<<"Lado
acum 0 Derrecho";cin>>ldd;
Mientras (Cont_I<=Lado_d) hacer while(ldi<=ldd)
Inicio { acum= acum+ldi;

Acum acum.+ Cont_I ldi++;


}
Cont_I Con t_I+ 1
gotoxy(10,8); cout<<"Suma de
Fin
"<<ldi<<" a "<<ldd<<" es = "<<acum;
getche();
Imprimir (‘La suma es =: ’,Acum)
}
Fin

Algoritmos y Estructura de Datos 86


Centro de Extensión y Proyección Social (CEPS)

Ahora se diseña el Diagrama de Flujo

Ejecución.- usando Cont_I=3 y Lado_d=5 , el resultado debe


ser: 3+4+5=12.
Los resultados se ilustran en las siguientes gráficas y su confirmación.

Algoritmos y Estructura de Datos


87
Universidad Nacional de Ingeniería -

Aplicación 3.- Diseñar un diagrama de flujo que permita ingresar datos tipo
entero y luego calcular la sumatoria y el promedio del conjunto de datos.
Finaliza el ingreso de notas si edita 0.
Solución. El programa solicita un dato, verifica si es diferente de cero,
entonces acumula; se genera bucles hasta editar 0.

Ejecución .- ingrese los números: 11,15 y 14 , los resultados se ilustran a


continuación,

Algoritmos y Estructura de Datos 88


Centro de Extensión y Proyección Social (CEPS)

Programa Pseudocódigo Programa Fuente

variables void main()


m,acum 0 : enteros { int n,acum=0;
Inicio gotoxy(10,3);cout<<"Bienvenidos";
imprimir(“Ingrese datos= ”); gotoxy(10,5);cout<<"Dato = ";cin>>n;
leer(n) while(n!=0)
{acum= acum+n;
mientras(n!=0) hacer gotoxy(10,5);cout<<"Dato =
inicio ";cin>>n;
acum acum+n }
imprimir(“Ingrese datos= ”); gotoxy(10,8); cout<<"Suma =
leer(n) "<<acum;
fin getche();
imprimir(“Suma es = ”,acum) }
fin
Aplicación 4.- Diseñar un programa que permita leer m cursos definidos,
por el usuario y por cada curso n alumnos, n>1 y por cada alumno
identificarlo por código solo de 3 dígitos, nombre y leer 3 practicas, luego
calcular el promedio de practicas eliminando la menor nota. Mostrar el
promedio de practicas indicando el estado Aprobado o Desaprobado.
Solución. El programa solicita
Interface para ingresar Número
de cursos y número de alumnos
por curso.

Interface donde se ingresa o de


alumnos

Algoritmos y Estructura de Datos


89
Universidad Nacional de Ingeniería -

variables
n,i,cu=0,co, pc1,pc2,pc3,menorp: enteros
nomb : cadena de longitud 20 caracteres, resp='S': caracter
Inicio
imprimir(“SISTEMA ACADEMICO ");
mientras((resp=='S')|| (resp=='s')) hacer
Inicio
cu=cu+1;
imprimir(“Curso No.:",cu);
imprimir(“Ingrese total alumnos = ");leer(n);
i=1;
mientras(i<=n) hacer
Inicio
imprimir(“Ingrese datos= ”);
imprimir(“Alumno No.: ",i," .- ");
imprimir(“Codigo = "); leer(cod);
si((cod>99) y (cod<1000)) hacer
Inicio
imprimir(“Es Correcto.....");
imprimir(“Nombre=");leer(nomb);
imprimir(“Pc1=");leer(pc1);
si((pc1>=0) y (pc1<21)) entonces
Inicio
imprimir(“Pc1 es correcto continuar");
imprimir(“Pc2 =");leer(pc2);
si((pc2>=0) y (pc2<21)) entonces
Inicio
imprimir(“Pc2 es correcto continuar");
imprimir(“Pc2 =");leer(pc3);
menorp=20;

Algoritmos y Estructura de Datos 90


Centro de Extensión y Proyección Social (CEPS)

si(menorp>pc1) menorp=pc1;
si(menorp>pc2) menorp=pc2;
si(menorp>pc3) menorp=pc3;
imprimir(“Menor =",menorp);
pp=((pc1+pc2+pc3)-menorp)/2;
imprimir(“Promedio = ",pp);
si(pp>10) entonces
imprimir(“APROBADO);
sino
imprimir(“DESAPROBADO");
fin
sino
imprimir(“Error en Pc2, adios...");
fin
fin
sino
imprimir(“Error en Pc1, adios...");
fin
fin
sino
imprimir(“Es InCorrecto.....");
i=i+1;
fin
imprimir(“Sr. desea procesar siguiente curso...?(S/N)==>");leer(resp)
si(resp=='N') entonces
inicio
imprimir(“Ud proceso ",cu," cursos");
exit(0);
fin
fin
fin

Algoritmos y Estructura de Datos


91
Universidad Nacional de Ingeniería -

Implementación en Borland c++ 5.02


void main()
{ system("title Por Cordova neri; T."); system("color AD");
int n,i,cu=0,cod; char nomb[20], resp='S';
gotoxy(20,2);cout<<" SISTEMA ACADEMICO ";
gotoxy(10,3);cout<<" ___________________________________";
while((resp=='S')|| (resp=='s'))
{clrscr();system("color 4a");cu++;
gotoxy(10,2); cout<<" Curso No.:"<<cu;
gotoxy(20,5);cout<<"Ingrese total alumnos = ";cin>>n;
int pc1,pc2,pc3,menorp;
i=1;
while(i<=n)
{ clrscr();system("color 1b");
gotoxy(25,7); cout<<"Alumno No.: "<<i<<" .- ";
gotoxy(25,8); cout<<"Codigo = ";; cin>>cod;
if((cod>99) && (cod<1000))
{gotoxy(55,8);cout<<"Es Correcto.....";
gotoxy(25,9);cout<<"Nombre=";gets(nomb);
gotoxy(25,11);cout<<"Pc1=";cin>>pc1;
if((pc1>=0) && (pc1<21))
{gotoxy(55,11);cout<<"Pc1 es correcto continuar";
gotoxy(25,12);cout<<"Pc2 =";cin>>pc2;
if((pc2>=0) && (pc2<21))
{ gotoxy(55,12);cout<<"Pc2 es correcto continuar";
gotoxy(25,13);cout<<"Pc2 =";cin>>pc3;
menorp=20;
if(menorp>pc1) {menorp=pc1; }
if(menorp>pc2) {menorp=pc2; }
if(menorp>pc3) {menorp=pc3; }
gotoxy(55,13);cout<<"Menor ="<<menorp;

Algoritmos y Estructura de Datos 92


Centro de Extensión y Proyección Social (CEPS)

float pp=((pc1+pc2+pc3)-menorp)/2;
gotoxy(25,16);cout<<"Promedio = "<<pp;
if(pp>10)
{gotoxy(45,16);cout<<"APROBADO"; getche();
}
else
{gotoxy(45,16);cout<<"DESAPROBADO"; getche();
}
}
else
{gotoxy(25,11);cout<<"Error en Pc2, adios...";
}
}
else
{ gotoxy(25,11);cout<<"Error en Pc1, adios...";
}
}
else
{gotoxy(55,8);cout<<"Es InCorrecto-.....";
}
i++;
}
gotoxy(10,23);
cout<<"Sr. desea procesar sigte curso...?(S/N)==>"; resp=getch();
if(resp=='N')
{clrscr(); system("color 7b");
gotoxy(20,12);cout<<"Ud proceso "<<cu<<" cursos";getche(); exit(0);
}
}
}

Algoritmos y Estructura de Datos


93
Universidad Nacional de Ingeniería -

Aplicación 5.- Diseñar un programa que permita leer un numero entero


formado por dos 0 mas dígitos, luego mostrar:
Numero invertido, total de dígitos pares, e impares , secuencia de dígitos
pares e impares
Solución. El programa solicita
Inicio
variables
int n,secimpar=0,nnr=0,imp=0,secpar=0,pa=0,
nr=0,d,inv=0: enteros;
imprim ir(“ INVERTIR NUMERO ");
imprim ir(“ ___________________________________");
imprim ir(“ Ingrese numero n =");leer(n);
si(n>99) entonces
Inicio
mientras(n>0) hacer
inicio
d=n%10;
si (d%2==0) entonces
inicio
pa++; secpar=secpar+d*pow(10,nr); nr++;
fin
sino
inicio
imp++; secimpar=secimpar+d*pow(10,nnr); nnr++;
fin
inv=inv*10+d;
n=n/10;
fin
imprim ir(“ Numero invertido = ",inv);
imprim ir(“ Total de pares = ",pa);
imprim ir(“ Secuencia par = ",secpar);
imprim ir(“ Total de impares = ",imp );
imprim ir(“ Secuencia impar = ",secimpar);
fin
sino
imprim ir(“ Numero incorrecto........ "); fin

Algoritmos y Estructura de Datos 94


Centro de Extensión y Proyección Social (CEPS)

Implementación en Borland c++ 5.02


void main()
{ system("title Por Cordova neri; T."); system("color F9");
int n,secimpar=0,nnr=0,imp=0,secpar=0,pa=0, nr=0,d,inv=0;
gotoxy(20,2);cout<<" INVERTIR NUMERO ";
gotoxy(10,3);cout<<" ___________________________________";
gotoxy(20,5);cout<<"Ingrese numero n =";cin>>n;
if (n>99)
{ while(n>0)
{d=n%10;
if (d%2==0)
{ pa++; secpar=secpar+d*pow(10,nr); nr++;
}
else
{ imp++; secimpar=secimpar+d*pow(10,nnr); nnr++;
}
inv=inv*10+d;
n=n/10;
}
gotoxy(20,7);cout<<"Numero invertido= "<<inv;
gotoxy(20,8);cout<<"Total de pares = "<<pa;
gotoxy(20,9);cout<<"Secuencia par = "<<secpar;
gotoxy(20,11);cout<<"Total de impares = "<<imp ;
gotoxy(20,12);cout<<"Secuencia impar = "<<secimpar;
}
else
{ gotoxy(20,5);cout<<"Numero incorrecto........ ";
}
getche();
}

Algoritmos y Estructura de Datos


95
Universidad Nacional de Ingeniería -

Estructura de Control con número de instrucciones conocidas

desde Vc <-- Vi hasta Vf Hacer


Inicio
<Instrucciones>
Fin

Se ejecuta una serie de instrucciones hasta que vi=vf

Observación: Se debe cumplir que Vi <= Vf

Aplicación 1.- Diseñar un programa pseudocódigo y diagrama de flujo que


permita leer el número de términos de la serie 1+2+3+4+5+…….+n y luego
calcular la suma acumulada.

Solución.
a).- Se define un contador (cont) como variable de control y n el número de
términos a ingresar. Para sumar se define la variable Acum que va
acumulando los valores según como avance el contador.
b).- La condición de terminación está controlado por el contador, el cual
avanza hasta que se menor o igual a n, dato ingresado por el usuario.
c).- Se debe inicializar el Acumulador en cero.

Algoritmos y Estructura de Datos 96


Centro de Extensión y Proyección Social (CEPS)

Programa Pseudocódigo Programa Fuente


Inicio
Imprimir(‘ Ingrese Número de Términos:’),
leer(n) void main()
{ int n,acum=0;
Acum.=0 gotoxy(10,4);
dese cont1 Hasta n hacer cout<<"Ingrese total datos ";
cin>>n;
Inicio
Acum acum.+ cont for(int cont=1;cont<=n;cont++)
{acum=acum+cont;
Fin }
Imprimir (‘La suma es =’, Acum) gotoxy(10,7);cout<<"suma es
="<<acum;
Fin.
getche();
}
Diagrama de Flujo

Algoritmos y Estructura de Datos


97
Universidad Nacional de Ingeniería -

Ejecución.- Ingresando número de elementos: n=6


Acum: 1+2+3+4+5+6 = 21
En la siguiente gráfica, se ilustra los procedimientos de ejecución.
Lectura y Proceso:
Al ejecutar, el programa le solicita que ingrese el número de elementos de la
serie a sumar, para nuestro caso ingrese 6.

Aplicación 2.- Diseñar un diagrama de flujo que permita leer n datos de tipo
entero y luego genere un reporte que muestre el número mayor.
Solución. Se definen las siguientes variables:
n : para leer el número de elementos.
Dato : para lectura de los elementos
Máximo : para almacenar el número mayor.
Se usa la estructura de control repetitiva dese…. que permite leer desde el
segundo elementos hasta el total y luego se usa la estructura condicional
si….., para comparar dos datos y si es verdadera la respuesta asigne o
cargue el dato la variable máximo.

Finalmente se imprime la variable máxima.

Algoritmos y Estructura de Datos 98


Centro de Extensión y Proyección Social (CEPS)

Diagrama de flujo de datos

Algoritmos y Estructura de Datos


99
Universidad Nacional de Ingeniería -

Ejecución:

Aplicación 3.- Diseñar un diagrama de flujo que permita conocer el número


total de puntos que se encuentran en el interior de la elipse:
X*x/16 + y*y / 9=1
Solución.
Se definen las siguientes variables:
Punto : para contar el total de puntos (x,y)
Radio: para verificar la condición: radio<1 entonces existe punto
interior a
La elipse.
Se definen 2 bucles:
Un bucle externo y un Bucle Interno
El bucle externo: está definido para cada valor de las abscisas (puntos en el
eje x)
El bucle Interno: está definido para cada valor de las ordenadas (puntos en
el eje y).
A continuación se ilustra el diagrama de flujo.

Algoritmos y Estructura de Datos 100


Centro de Extensión y Proyección Social (CEPS)

Ejecución: La ejecución del diagrama genera el reporte punto por punto,


tal como se ilustra en la siguiente gráfica.

Algoritmos y Estructura de Datos


101
Universidad Nacional de Ingeniería -

Implementado en el lenguaje de programación Borland C ++ 5.0

Algoritmos y Estructura de Datos 102


Centro de Extensión y Proyección Social (CEPS)

Problemas resueltos usando técnica de Pseudocódigo

Aplicación1.--Diseñar un programa que permita calcular en forma


independiente la suma de los números pares e impares en el rango de 1 a
50.
Programa Pseudocódigo Programa DFD

Variable
n, sp=0, si=0,a,i=1: enteros
Inicio
imprimir (“Ingrese total de
números”),
leer(n)
Mientras
Inicio
Imprimir (“Ingrese numero =”),
leer(a)
Si (n mod 2=0) entonces
inicio
Sp sp+a
fin
Sino
Si (n mod 2 <>0) entonces
inicio
Si si+a
fin
i=i+1
fin
imprimir ( “ La suma de pares es:”,sp)
imprimir ( “ La suma de impares es:”,si)
Fin

Algoritmos y Estructura de Datos


103
Universidad Nacional de Ingeniería -

Aplicación 2.- Calcular y visualizar la suma y el producto de los números


impares comprendidos entre 20 y 80.

Solución
Programa Pseudocódigo Programa DFD

Variables
p, s, n: enteros
Inicio
n 20
p 1
s 0
Mientras (n<=80)
Inicio
Si (n mod 2<>0 entonces
inicio
s s+n
p p*n
Fin
n n+1
fin
imprimir ( La suma de los
impares es:”, s)
imprimir ( “El producto de los
impares es:”, p)
Fin.

Algoritmos y Estructura de Datos 104


Centro de Extensión y Proyección Social (CEPS)

Aplicación 3.- Diseñar un programa que permita leer n números enteros y


obtener el promedio de los positivos y el promedio de los negativos.
Solución

Programa Pseudocódigo Programa DFD


Variables
n, l 1,número, cp 0,
cn 0, sp 0, sn 0:
enteros
pp,pn:real
Inicio
imprimir ( Ingrese total”), Leer (n)
Mientras (l<=n)
inicio
imprimir (“Ingrese Número:”),
Leer(número)
Si (número>0) entonces
inicio
sp sp+número
cp cp+1
fin
Sino
inicio
sn sn+número
cn cn+1
fin
l l+1
fin
pp sp/cp
pn sn/cn
imprimir ( “El promedio de los
positivos es:”, pp)
imprimir ( “El promedio de los negativos es:”, pn)
Fin

Algoritmos y Estructura de Datos


105
Universidad Nacional de Ingeniería -

Aplicación 4.- Calcular la suma de los cuadrados de los 15 primeros


números naturales.
Solución
Variables
n, suma: enteros
Inicio
n 1
mientras(n<=15) hacer
inicio
suma suma+n^2
n n+1
fin
imprimir ( “La suma es:”, suma)
Fin

Aplicación 5.- Diseñar un programa


que permita ingresar n números y
luego calcular el promedio de ellos.
Solución
Variables:
n, l, suma, cantidad : enteros
promedio: reales
Inicio:
cantidad 0, suma 0
imprimir ( Ingrese total:”), Leer (n)
l 1
Mientras (l<=n)
inicio
suma suma + l
cantidad cantidad+1

l l+1
fin
promedio suma/cantidad
imprimir(“Promedio= :”, promedio)
Fin

Algoritmos y Estructura de Datos 106


Centro de Extensión y Proyección Social (CEPS)

Aplicación 6.- Diseñar un programa que permita Ingresar números


enteros, visualizar la suma de los números pares de la lista, cuantos
números pares existen y cual es la medio de los números impares.
Solución
Variables
n,sp,si,cp,ci,mni,l,ni:enteros
Inicio
sp 0, cp 0, i 1

imprimir ( “Total:”) Leer (n)


Mientras(i<=n) hacer
inicio
Si (n mod 2=0) entonces
inicio
sp sp+n
cp cp+1
Sino
inicio
si si+n
Fin
Fin
mni si/2
imprimir (“La suma de pares
es:”, sp)
imprimir (“La cantidad de
pares es:”, cp)
imprimir (“La media = ”,mni)
Fin

Algoritmos y Estructura de Datos


107
Universidad Nacional de Ingeniería -

Aplicación 7.- Diseñar un programa que permita leer un numero


entero,positivo formado por do o mas cifras, luego mostrarlo en forma
invertida, secuencia de números pares y secuencia de números impares.

Variables
N, inv0, i=1,secpar=0,secimp=0,nr=0,nnr=0,
imprimir(“Ingrese n= “), leer(n)
Si (n>9) entonces
Inicio
Mientras (n>0 ) hacer
d n mod 10
inv inv*10+d
n n/10
si(d mod 2=0) entonces
inicio
fin
secpar secpar+d*pow(10,nr)
nr nr+1
sin
inicio
secimp secimp+d*pow(10,nnr)
nnr nnr+1
fin
fin
Fin
Sino
Imprimr(“Error, hasta luego..”)
fin
Fin

Algoritmos y Estructura de Datos 108


Centro de Extensión y Proyección Social (CEPS)

Diagrama de flujo de datos

Algoritmos y Estructura de Datos


109
Universidad Nacional de Ingeniería -

Compendio de problemas en Pseudocódigo: Se mostrara problemas


resueltos en pseudocódigo e implementados en el software libre

PSeInt. En las siguientes pantallas se ilustra su instalación.

Algoritmos y Estructura de Datos 110


Centro de Extensión y Proyección Social (CEPS)

En la siguiente figura se ilustra la técnica para implementar un Programa


Pseudocódigo en el ordenado, veamos:

1.- Primero.- SEn el editor del programa PSeInt se edita las

instrucciones del pseudocódigo y luego se ejecuta usando el botón

que permite generar el reporte respectivo


2.- Segundo.- El programa Pseudocódigo se expresa en un Diagrama de

flujo de datos usando el botón .

Algoritmos y Estructura de Datos


111
Universidad Nacional de Ingeniería -

Aplicación 1- Diseñar un programa que permita implementar un Juego


simple y que pide al usuario que adivine un numero en 10 intentos, cuando
este ingresa números.
Variables
Intent, num_secr: enetros
INICIO
Intent 9;
num_secr ALEATORIO(100)+1;
imprimir( "Adivine su numero (de 1 a 100):))";leer (num),
Mientras(( num_sec<>num) y ( intentos>0)) Hacer
Inicio
Si (num_sec>num) Entonces
inicio
imprimir( ""Muy bajo");
Fin
Sino
imprimir( " "Muy alto");
imprimir("Le quedan ",intentos," intentos:");
imprimir("Ingrese nuevo numero:);
Leer(num);
intent<- intent-1;
Fin
Si (intentos=0) Entonces
imprimir("El numero era: ", num_sec);
Sino
imprimir("Suerte, adivino en ",11- intentos, " intentos.");
Fin
Fin

Algoritmos y Estructura de Datos 112


Centro de Extensión y Proyección Social (CEPS)

Aplicación 2.- Diseñar un programa que permita leer un número y luego


factorizarlo y mostrar sus elementos.
Solución
Variables Factoriza, factor_primo: boleano. n,div: enteros
Inicio
imprimir("Ingrese numero = ");Leer( n);
factoriza verdad;
Mientras (factoriza y n>1) hacer
Inicio
Div 0;
Si (n/2 = trunc(n/2)) Entonces
inicio
imprimir( 2)
n n/2;
Fin
Sino
inicio
div 1;
factor_primo Verdad;
Mientras (div<=rundc(n) y factor_primo ) Hacer
Inicio
div div+2;
Si (n /div = trunc(n/div) Entonces
factor_primo Falso;

Si (factor_primo ) Entonces
imprimir( n );
factoriza falso;
sino
imprimir(div) ; n n/div;
factor_primo verdad
Fin
Fin
FIN

Algoritmos y Estructura de Datos


113
Universidad Nacional de Ingeniería -

Algoritmos y Estructura de Datos 114


Centro de Extensión y Proyección Social (CEPS)

Aplicación 3.- Diseñar un programa que


permita leer n números enteros definidos por
usuario, luego calcular el promedio de los n
números ingresaos
Solución
variables
n, sumaac : enteros,
Inicio
imprimir(" Ingrese datos: “)
Leer (n),
sumaac 0;
desde i 1 hasta n Hacer
inicio
imprimir("Ingrese dato ",i,"=";
leer(dato),
sumaac sumaac +dato;
Fin
prom sumaac /n;
imprimir(" El promedio es: ",prom);
Fin
Aplicación 4.- Resolver problema 3,
usando estructura repetitivas
MIENTRAS
Solución
variables n,i, sumaac: enteros,
Inicio
sumaac 0, i 1,
imprimir(" Ingrese la cantidad de datos: “) ",Leer (n),
Mientras (i<=n ) hacer
Inicio
sumaac sumaac +dato;
imprimir("Ingrese dato ",i,"="; leer(dato),
Fin
imprimir("Suma =", sumaac ),
Fin

Algoritmos y Estructura de Datos


115
Universidad Nacional de Ingeniería -

COMPENDIO DE PROBLEMAS

Problema 1.- Diseñar un programa que permita a un usuario leer un


NUMERO entero positivo compuesto como mínimo 6 y máximo 8 dígitos,
asimismo el usuario ingresa un DIGITO a buscar en NUMERO. Por lo tanto,
el programa debe brindar al usuario los siguientes reportes; numero
invertido, total de dígitos repetidos, la secuencia que forma y la suma de
este cuando el usuario ingresa un digito a buscar, Total de dígitos no
repetidos, su secuencia y su suma respectiva. Asimismo de la secuencia no
repetida mostrar la secuencia formada por solo números pares así como de
los impares, (Ver Figura, parte de RESULTADOS)

Problema 2.-Diseñe un programa que permita calcular la suma acumulada


de la siguiente serie:
Para lo cual se debe leer el elemento desde donde desea iniciar la suma y
luego el elemento hasta
donde se debe sumar. Se

Algoritmos y Estructura de Datos 116


Centro de Extensión y Proyección Social (CEPS)

debe validar que el primer elemento sea estrictamente menor o igual al


segundo elemento. Luego realicen los siguientes reportes:
2.1.-La suma acumulada de la serie
2.2.-El resultado de 1), mostrarlo en forma Invertida
2.3-El total de cifras que tiene resultado 1).
2.4.-Total de cifras Pares según resultado 1)

2.5.-Secuencia de cifras Pares


según 1)
2.6.-Suma de cifras Pares según
5)
2.7.-Total de cifras ImPares según
resultado 2.1)
2.8.-Secuencia de cifras ImPares
según 1)
2.9.-Suma de cifras Impares
según 2.8)
En la siguiente interface se ilustra
como debe presentar sus respuestas.
El programa debe ser Interactivo con el usuario, es decir, ejecutar el
mensaje:
“ Desea continuar…..? (S/N)..”

Problema 3.-Diseñar un programa que permita a un usuario validar sus


datos de entrada por Clave=”Perú” y código=”100P”, si los datos de
entrada son correctos el sistema envía el mensaje “ Procesando Edades
de Población en el Perú ”, solicitando inmediatamente que ingrese
Numero de Departamentos(Solo en el rango 1..30 ), por cada
Departamento debe ingresar Número de Distritos(Solo en el rango 1..50 ) y
por cada Distrito debe ingresar cantidad de Pobladores,(solo en el rango
1..10000) donde por cada Poblador ingrese su Edad(Solo en el rango
1..100), luego genere reportes para conocer( ver figura):

Algoritmos y Estructura de Datos


117
Universidad Nacional de Ingeniería -

a) Promedio de Edades de pobladores en cada Distrito


b) Promedio de edades de Pobladores en cada Departamento

El programa debe ser Interactivo, es decir después de cada consulta debe


preguntar “Sr. Desea hacer una siguiente consulta..?(S/N)==> ”.
Si el usuario ingrese datos incorrectos, entonces el programa indica el
número de error así como el número de intentos que le queda. Si el número
de errores es mayor que 3, el programa finaliza enviando el mensaje
“Debido a errores, Hasta luego…”
Problema 4.- Diseñar un programa que permita a un usuario validar sus
datos de entrada por código=”tcn”, si los datos de entrada son correctos el
sistema envía el mensaje “ Bienvenidos así como el número de consulta
y la fecha respectiva ”, luego solicita que ingrese un numero entero
comprendido en el rango 1..99, este número permite calcular el factorial y
con su resultado se debe mostrar el número total de dígitos, el número de
dígitos nulos y dígitos no nulos, asimismo el menor y mayor digito.
Adicionalmente, el programa debe ser interactivo, es decir; cada vez que se
repite un nuevo proceso, el sistema solicita que ingrese el código de
validación mostrando el número de Consultas a la fecha(Este número es
diferente al total de errores que cometa el usuario en su validación de

Algoritmos y Estructura de Datos 118


Centro de Extensión y Proyección Social (CEPS)

código). Asimismo, si el usuario no desea continuar, el sistema envía el


mensaje de agradecimientos mostrando el número total de consultas.
Ahora si el dato de validación es incorrecto (recuerde que solo se dispone de
3 alternativas), superado este número el sistema envía el mensaje “ FIN DE
SESION, PUES SUPERO MAS DE INTENTENTOS "
PROCEDIMIENTOS
4.1.- Primera ejecución del programa: en esta interfase, el Sistema le
advierte al usuario que SOLO dispone de 3 Alternativas para ingresar al

sistema a calcular el factorial de un número, para lo cual debe validando su


código”TCN” (observe que el valor esta en letras mayúsculas) Asimismo le
indica el Numero de consulta y la fecha correspondiente.
En esta interface, el usuario ingresa su código=”tc”, código que es
incorrecto. Ante este error el sistema envía el mensaje de error y el número
de oportunidades que quedan, tal como se ilustra en la figura.
4.2.- La siguiente interface ilustra el error numero 2 cometido por el usuario
al ingresar un código=”3tcn”, código que no está registrado en el sistema.

Se deja constancia que el número de consultas no cambia, pero si el


contador de errores, como máximo 3.

Algoritmos y Estructura de Datos


119
Universidad Nacional de Ingeniería -

4.3.- En la siguiente interface, el usuario ingresa correctamente su código


”tcn” (observe que está en letras minúsculas)
4.4.- A consecuencia del paso 3, el sistema envía el mensaje de
Bienvenida y el número de errores ( 2) en este caso.
4.5.- A continuación, el sistema solicita que ingrese un numero SOLO en el
rango 1..99 (se debe validar descartando los negativos y los números mayores a
99). En esta interface se calcula el factorial del número ingresado y otros resultados
(total de dígitos, total de dígitos nulos, total de dígitos diferentes de 0, digito menor y
digito mayor ), tal como se ilustra en la figura.

Si el usuario contesta la pregunta con “ s ”, entonces se debe reiniciar el sistema


mostrando el número de Consultas actuales (4) y la fecha, tal como se ilustra en
la siguiente interface.

Algoritmos y Estructura de Datos 120


Centro de Extensión y Proyección Social (CEPS)

4.6.- El usuario después en su consulta número 4, ingresa el número 14 y los


resultados se ilustran en la siguiente interface

4.7.- Si el usuario responde con “n”, el sistema envié la siguiente interface,


indicando los agradecimientos por las diferentes consultas así como el total de
consultas realizadas.

Problema 5.-Diseñar un programa que


permite leer 2 números enteros y luego
genere un reporte que permita visualizar
tales números en forma intercambiada,
tal como se ilustra en la siguiente
interface.

Algoritmos y Estructura de Datos


121
Universidad Nacional de Ingeniería -

Problema 6.-La siguiente figura, representa una Interface para calcular el


Promedio Final de n alumnos(n>1), donde por cada alumno, se lee 4
prácticas calificadas con notas solo en el rango de 0..20 y luego se calcula
su promedio de prácticas (pp) eliminando la práctica con menor nota.

Para que el alumno tenga derecho a rendir Exámenes Parcial (exp.) y Final
(exf.), el promedio de prácticas debe ser mayor que 6,6. En otro caso ‘El
alumno esta desaprobado en el ciclo
El promedio final (pf.) se calcula mediante: pf= (pp+exp+exf). Si pf >10
entonces ‘Alumno Aprobado’. En otro caso alumno puede rendir examen
sustitutorio (exs). Para calcular
el nuevo promedio final (pf), se
considera el examen
sustitutorio el cual reemplaza al
examen parcial o final
dependiendo cual tiene menor
nota. Si pf>10 entonces
‘Alumno Aprobado’, en otro caso ‘Alumno Desaprobado’.

Algoritmos y Estructura de Datos 122


Centro de Extensión y Proyección Social (CEPS)

Problema 7.-Diseñar un Programa que permita al usuario ingresar n


empleados(n<=100), a continuación por cada empleado ingresar su sueldo
respectivo. El programa debe generar reportes para conocer:
a).- Suma acumulada de sueldo de empleados en el rango 100..1000
b).- Suma acumulada de sueldo de empleados en el rango 1000..1999
c).- Suma acumulada de sueldo de empleados en el rango 2000..3000.
Obs. Se deja al lector que muestre la cantidad de Empleados por cada
rango de sueldo.
Problema 8.-Una empresa, premia a sus Empleados de un cierto producto
por las ventas del día bajo las siguientes condiciones:
a) Si ventas < S/. 80, entonces no hay comisión
b) Si ventas está en el rango de : 80..600 entonces la comisión es igual al
12%
c) Si ventas está en el rango de: 601..1000 entonces la comisión es igual al
15%
Diseñar un programa que permita leer nombre de empleado, nombre de
producto y el total respectivo, luego hacer un reporte de la comisión.
También si las ventas no satisfacen la
Condición a), enviar el mensaje “ Sr. ..Sus ventas No ameritan comisión”.
Si las ventas exceden la condición c), envía el mensaje “ Felicitaciones,
será ascendido.. ”

Algoritmos y Estructura de Datos


123
Universidad Nacional de Ingeniería -

Problema 9.-Diseñe un programa que


permita validar datos de usuario para
ingresar al sistema de consultas, donde el
usuario se identifica por código=100 y
clave=”tlcn”.

a).- La validacion se debe realizar primero


el codigo y luego la clave. La clave debe
visualizarse con el “ * ” . El usuario
ingresa su codigo, si este es correcto, el
sistema solicita que ingrese clave, si esta
contiene error, el sistema envia el mensaje
“Es Incorrecto, hasta luego ”. con lo cual
finaliza el programa. Analogo para el
codigo
b)- Si los datos son correctamente
ingresados, el sistema envia las siguientes
alternativas, tal como se ilustra en el
siguiente formulario, donde cada opcion
realiza las siguientes tareas:
<F> Formar intervalo: se trata de formar un
intervalo I:[a,b], donde a<b. para lo cual el
usuario ingresa los numeros enteros a,b.
Ejemplo.
*.- Si a=2 y b= 8 el sistema envia el
mensaje “intervalo es correcto”
* .- pero si a=8 y b=2, el sistemema envia
el mensaje de obseracion, mostrado en el
formulario adjunto, pero el miso debe
intercabiar los valores y mostrar que el
intrevalo es correcto I:2<8 o [2..8] . luego calcula el resto de 8 entre 2.

Algoritmos y Estructura de Datos 124


Centro de Extensión y Proyección Social (CEPS)

<M> Mayor de 3 Numeros : El usuario ingresa 3 numeros enteros positivos


y luego el sistema muestra el mayor respectivamente, ademas indicando si
es numero Par o Impar
<N> Numero de Cifras: El usuario ingresa un numero entero positivo como
minimo de 1 cifra y maximo de k>1 cifras, luego el sistema debe identificar y
mostrar el total de cifras del numero ingresado.
< I > Numero de Capicua(Palindromico): La palabra capicúa (en
matemáticas, número palíndromo) se refiere a cualquier número que se lee
igual de izquierda a derecha y de derecha a izquierda (Ejemplos: 121 ) El
término se origina en la expresión
catalana capicua (cabeza y cola).

Definición.- Un número palindrómico es


un número simétrico escrito en cualquier
base a tal que a1a2a3…|… a3a2a1.
Todos los números de base 10 con un
dígito {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} son
palindrómicos.
 Existen nueve números palindrómicos de dos dígitos: {11, 22, 33,
44, 55, 66, 77, 88, 99}.
 Noventa de tres dígitos: {101, 111, 121,…, 181, 191, 202, 212,…, 292,
303, 313,…, 898, 909, 919, 929,…, 979, 989, 999}
 Noventa con cuatro dígitos: {1001, 1111, 1221, 1331, 1441, 1551,
1661, 1771, 1881, 1991,…, 9009, 9119, 9229, 9339, 9449, 9559,
9669, 9779, 9889, 9999},
 Novecientos de cinco dígitos: {10001, 11011, 11111, 11211, 11311,
11411, 11511,…,}
 Un pequeño truco para hallarlos sería sumar un número con otro en el
que “le damos la vuelta” a sus cifras. Por ejemplo a mí me encanta el
número 17, y para buscar un número capicúa a partir del 17 lo que
tengo que hacer es: 17+71=88 (capicúa).
 Ejemplo: partimos del número 96:

Algoritmos y Estructura de Datos


125
Universidad Nacional de Ingeniería -

 96 + 69 = 165; 165 + 561 = 726; 726 + 627 = 1353; 1353 + 3531 =


4884
<S> Salir: Permite finalizar con el sistema
Si el usuario ingresa una letra que no corresponde a las opciones, el
sistema envía el mensaje “Opción no disponible” y finaliza.

Problema 10.-Diseñar un programa que permita Leer o ingresar Edades de n


alumnos(n es definido por usuario) y luego mostrar la Menor edad y la posición
Actual del dato ingresado.
En la siguiente grafica se ilustra la lectura y los reportes, así como las edades
cuando se tiene que actualizar
Verificar: n=3, con las siguientes datos

Nombres Ana Luís Pedro


Edades 30 15 28
posición 1 2 3

El programa debe ser Interactivo, es decir; después de finalizar con el ingreso


de los datos, el sistema envía el mensaje de
“Desea continuar…(S/N)”. Debe validar la
edición solo de S o N. por cada error debe
mostrar el mensaje Ingrese “ nueva letra,
error # “. Cuando edita S, continúa con la

lectura de nuevos datos y si edita N, el programa


finaliza indicando el número de consultas realizadas.
10.- Diseñar un programa interactivo que permita
a un usuario Validar sus datos de ingreso al
sistema. Los datos pueden ser: una letra o un
digito. Si el usuario ingresa un dígito, el sistema
confirma que dato es un DÍGITO y luego solicita que ingrese un número

Algoritmos y Estructura de Datos 126


Centro de Extensión y Proyección Social (CEPS)

entero mayor o igual a 10 y menor que 10000. Luego puede ocurrir que:
I.- Si el número es par, entonces el programa
debe realizar las siguientes tareas:
a).-Mostrar el numero en forma invertida
b).-Conocer el número total de dígitos.
c).-Conocer el número total de dígitos pares.
(Ver figura.)
d) Conocer el número total de dígitos impares
(ver figura.)
II.- Si el número es impar, entonces el sistema confirma que el dato es un
DÍGITO y luego el programa debe calcular y mostrar el factorial del último
digito. Ahora, si el usuario ingresa una letra, el sistema confirma mediante el
mensaje, que el dato es una LETRA, luego solicita que ingrese una cadena,
de la cual mostrar su longitud y por cada posición del carácter, formar la
secuencia respectiva. Ver figura
Problema 11.- Diseñar un Programa que permita leer un numero entero n,
en Base Decimal y devuelve su equivalente en el Sistema Binario. En la
siguiente interface se ilustra el ejemplo.

Problema 12.- Diseñar un Programa que


permita leer un numero entero n(n>1) en
Base Binaria y devuelve el numero
expresado en base Decimal. En la
siguiente interface se ilustra el ejemplo

Algoritmos y Estructura de Datos


127
Universidad Nacional de Ingeniería -

Problema 13.- Algunos números enteros se pueden representar como


suma de dos enteros al cuadrado, por ejemplo 50 = 1 2 + 72 = 52 + 52.
Escribe un programa que determine la cantidad de formas distintas t en las
que se puede escribir un numero entero n como suma de dos cuadrados a2
+ b2 donde 0 ≤ a ≤ b ≤ n. Por ejemplo, si n = 50 entonces hay dos formas,
por lo que t = 2.
Entrada: Un numero entero n tal que 1 ≤ n ≤ 2,000,000,000.
Salida: Un numero entero t.

Problema 14.- Escribe un programa que determine el valor máximo p y el


valor mínimo q que toma la función f(x) = (ax + b)/(cx + d) en los enteros que
se encuentran en el intervalo dado por m y n (incluyéndolos). Observa que
es posible que la función no este definida en todos los puntos de ese
intervalo. Además, deberá determinar los enteros r y s en los cuales se
alcanzan estos valores (es decir, tales que f(r) = p y f(s) = q). En caso de
que haya varios enteros r y s con esa propiedad, se deben dar aquellos
cuyos valores sean los menores posibles. Por ejemplo, si f(x) = (x + 2)/(x - 2)
y el intervalo está dado por m = -2 y n = 3 entonces vemos que f(-2) = 0, f(-
1) = -1/3, f(0) = -1, f(1) = -3, f(2) no está definida y f(3) = 5, por lo que r = 3 y
s = 1.
Entrada: Seis números enteros a, b, c, d, m, n (con m ≤ n) separados por
espacios y todos ellos en el intervalo de -1000 a 1000 (incluyéndolos).
Puedes suponer que el intervalo m ≤ x ≤ n contiene al menos un entero x en
el cual la función f(x) está definida (y por lo tanto el máximo y el mínimo
existen).
Salida: Dos números enteros r, s, separados por espacios.

Algoritmos y Estructura de Datos 128


Centro de Extensión y Proyección Social (CEPS)

Problema 15.-Euclides y Euler: Dados dos enteros positivos p y q, su


máximo común divisor es el entero
positivo más grande que los divide a
ambos exactamente y se puede
calcular con el algoritmo de Euclides
(el cual puedes investigar cómo
funciona casi en cualquier lugar). Si el máximo común divisor de p y q es
igual a 1, entonces se dice que p y q son primos relativos. La función j(n) de
Euler es igual a la cantidad de enteros en el intervalo del 1 al n que son
primos relativos con n. Por ejemplo, j(9) = 6 debido a que 9 es primo relativo
con los seis enteros 1, 2, 4, 5, 7 y 8.
Escribe un programa que, dados dos enteros p y q, encuentre el máximo
valor m que toma la función j(n) de entre todos los enteros n en el intervalo
de p a q, además del menor valor de n en ese intervalo tal que j(n) = m.
Ejemplo, si p = 4 y q = 10 entonces j(4) = 2, j(5) = 4, j(6) = 2, j(7) = 6, j(8) =
4, j(9) = 6 y j(10) = 4 por lo que m = 6 y n = 7.
Entrada: Dos números enteros p y q tales que 1 ≤ p ≤ q ≤ 1,000,000.
Salida: Un numero entero m y un número entero n.
Problema 16.- Números menores que dos mil: Imagine que tiene una
lista de números enteros (todos ellos menores que dos mil) a la cual se le
han suprimido las separaciones. Por ejemplo, si
comenzó con la lista 31, 415, 9, 265 entonces
obtuvo la cadena s = 314159265. Ahora usted
quiere recuperar una lista de números enteros

(todos ellos menores que dos mil) agrupando los


dígitos tanto como sea posible desde el principio
de la cadena. En nuestro caso, obtendrá la lista
314, 1592, 65 con p = 3 elementos. Después

Algoritmos y Estructura de Datos


129
Universidad Nacional de Ingeniería -

usted realiza la misma operación pero comenzando desde el final de la lista.


En nuestro caso, obtendrá la lista 314, 159, 265 con f = 3 elementos. Escriba
un programa que dada la cadena de dígitos encuentre cuantos elementos p
y f contienen cada una de las listas.
Entrada: Una cadena s que contiene entre 1 y 1000 dígitos.
Salida: Dos números enteros p y f separados por un espacio.
Problema 17.- Diferencias de cuadrados: Algunos enteros se pueden
representar como diferencia de dos enteros al cuadrado, por ejemplo 15 = 4 2
- 12 = 82 - 72. Escribe un programa que determine la cantidad de formas
distintas t en las que se puede escribir un numero entero n como diferencia
de dos cuadrados a2 - b2 donde a ≥ b ≥ 0.
Entrada: Un número entero n tal que 0 ≤ n ≤ 1,000,000.
Salida: Un número entero t.
Problema 18.-Sumas de números consecutivos
Escribe un programa que determine la cantidad f de formas en las que se
puede escribir un número entero positivo n como suma de uno o más
números enteros positivos consecutivos. Tu programa también debe
determinar el número más pequeño p que forma parte de alguna de estas
sumas. Por ejemplo: Si n = 33 entonces
f = 4 y p = 3 ya que 3 + 4 + 5 + 6 + 7 + 8 = 10 + 11 + 12 = 16 + 17 = 33.
Entrada: Un número entero n en el intervalo de 1 a 1,000,000
(incluyéndolos).
Salida: Dos número enteros f y p.

Problema 19.- Puntos dentro de un triángulo: Considera un triángulo T


dado por sus tres vértices (a, b), (c, d) y (e, f) con coordenadas enteras.
Algunos puntos de coordenadas enteras están sobre los lados de T y otros
puntos de coordenadas enteras están dentro de T. Escribe un programa que

Algoritmos y Estructura de Datos 130


Centro de Extensión y Proyección Social (CEPS)

encuentre las cantidades s y t de puntos sobre los lados y dentro de T,


respectivamente.
Por ejemplo, si los vértices de T tienen las coordenadas (0, 1), (4, 3) y (2, 5)
entonces s = 6 y t = 4 ya que los 6 puntos (0, 1), (2, 2), (4, 3), (3, 4), (2, 5) y
(1, 3) están sobre los lados de T mientras que los 4 puntos (1, 2), (2, 3), (2,
4) y (3, 3) están dentro de T.
Entrada: Seis números enteros a, b, c, d, e, f separados por espacios y
todos ellos en el intervalo de -1000 a 1000 (incluyéndolos). Puedes suponer
que los tres vértices de T no están alineados y por lo tanto forman un
triángulo.
Salida: Dos números enteros s y t separados por un espacio.

Problema 20.- Boletos por besos: Para ir hacia su escuela, Juan aborda
un camión. Cuando Juan sube al camión y deposita las monedas en la
alcancía, el conductor le da un boleto con un número de serie consecutivo, el
cual generalmente llega a la basura. Sin embargo, un día él se entera de
algo interesante. Si la suma de los dígitos de dicho boleto es 21, él lo puede
cambiar con quien quiera por un beso. Juan quiere conseguir muchos besos
de la persona que está enamorado y ella ha aceptado dárselos a cambio de
dichos boletos, pero no es tan fácil conseguirlos. Juan ha decidido que si el
boleto que le da el conductor no suma 21, esperará hasta que una persona
suba después de él y sume 21, y le pedirá a esta su boleto, para lo cual
debe ir realizando las cuentas a mano, cosa que es muy tediosa. Ayuda a
Juan escribiendo un programa que dado un numero n de 7 dígitos, le
proporcione el numero p de personas que deben abordar después de el para
que obtenga el boleto deseado y m, donde m representa los 7 dígitos de
dicho boleto. Cuando un tiraje de boletos termina, es decir llega a 9999999,
el conductor toma otro tiraje comenzando nuevamente en el número
0000000.

Algoritmos y Estructura de Datos


131
Universidad Nacional de Ingeniería -

Entrada: Un numero entero n de 7 dígitos (que posiblemente comienza con


ceros).
Salida: Un numero entero p y un número m de 7 dígitos.

Problema 21.-No te salgas: Una pulga muy especial se encuentra en la


esquina de una mesa y quieres que brinque hasta la esquina contraria de la
misma mesa. Lo especial de la pulga es que se ha aprendido una sucesión
numérica y la usara para determinar cómo brinca. Cada vez que aplaudas, la
pulga decidirá si se queda donde esta o si da un brinco cuya longitud está
determinada por el termino correspondiente de la sucesión. Los brincos
siempre serán paralelos a los lados de la mesa y siempre deberán alejar a la
pulga de su posición inicial. Lo ideal es que la pulga logre llegar a la esquina
contraria de la mesa. Sin embargo, basta con que llegue a una posición tan
cercana como sea posible. Lo que no está permitido es que la pulga salte
hacia afuera de la mesa (le ha costado mucho subir a la mesa como para
que ahora la dejes caer). Ejemplo, si la sucesión de n = 7 saltos de la pulga
fuera s = (3, 1, 4, 1, 5, 9, 2) y la mesa midiera a = 5 por b = 6 entonces la
pulga podría lograr su objetivo si su sucesión de brincos fuera arriba, arriba,
derecha, arriba, nada, nada y derecha. Por otro lado, si su sucesión fuera
arriba, arriba, derecha, nada, nada, nada, nada entonces no llegaría a la
esquina contraria pero tampoco se saldría de la mesa.
Entrada: El archivo de texto contendrá un renglón con tres enteros n, a y b
separados por espacios seguido de un renglón con n enteros positivos s1,
s2, ..., sn y separados por espacios.
Puedes suponer que todos estos enteros están en el rango de 1 a 1000,
incluyéndolos.
Salida: El archivo de texto nts.sal deberá contener un renglón con tres
enteros n, c y d separados por espacios seguido de un renglón con n
enteros positivos t1, t2, ..., tn y separados por espacios. Los valores de c y d
Algoritmos y Estructura de Datos 132
Centro de Extensión y Proyección Social (CEPS)

representan la coordenada a la que llega la pulga y para 1 ≤ i ≤ n, el valor de


ti es 0 si la pulga no dio el salto de longitud si, 1 si lo dio hacia arriba y 2 si lo
dio hacia la derecha.
Evaluación: 1 punto si los n saltos indicados dejan a la pulga en la
coordenada ( c, d) de la mesa. En ese caso, 9(c2 + d2)/(a2 + b2) puntos
adicionales. El primer ejemplo de salida mostrado abajo obtendría 1 +
9(52+62)/(52+62) = 10 puntos, el segundo ejemplo 1 + 9(42+42)/(52+62) = 4
puntos y el tercer ejemplo 0 puntos porque la pulga se salió de la mesa.

Problema 22.- Diseñar un programa que permita jugar al Master Mind.


Para ello se escribirá el Programa de la siguiente forma:
• Generar cuatro valores enteros aleatorios entre 0 y 9 distintos entre sí.
• Preguntar al usuario por cuatro valores enteros.
• Considerando ambas combinaciones, indicar cuántos números comunes
están en la misma posición y cuántos valores comunes están en distinta
posición. Ejemplo: 3786 y 8760 → uno colocado (el 7) y dos descolocados
(8 y 6) .• Se terminará el programa cuando el jugador acierte la combinación
o haya agotado sus intentos (constante MAXINTENTOS con valor 10).

Algoritmos y Estructura de Datos


133