2.- Estructuras Condicionales Son estructuras que permiten dar condicin 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
Evala la Condicin lgica y ejecuta una solo instruccin A o instruccin B.
Sintaxis
Pseudocdigo Diagrama de flujo
Si la condicin es V ejecuta solo <instrucciones A>,
Si la condicin es F, ejecuta solo <instrucciones B>
Aplicacin 1.- Disear un Diagrama de Flujo que calcule el Producto y la Parte Entera de 2 nmeros m, n enteros. El programa debe solicitar el ingreso de 2 nmeros m, n y luego: a).-Calcula el producto de m por n. Si el numero m es mayor n. b).- Calcula la raz cuadrada si el numero m es menor que n.
Si (<condicin >) entonces Inicio <Instrucciones A> Fin Sino Inicio <Instrucciones B> fin Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 56
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 grfica se ilustra el Diagrama de flujo
Ejecucin: como el resultado de evaluar la condicin es Falso, entonces se calcula la raz cuadrada del nmero n y enva el mensaje de conformidad
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 57
Problema 2.- Disear un Diagrama de Flujo que permita validar datos de un alumno para ingresar al sistema informtico por cdigo =001 y clave = 1010. Si los datos son correctamente ingresados el diagrama permite ingresar 3 prcticas 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 Solucin La condicin a validar es Si ( cdigo=001) y (calve = 1010) entonces Leer 3 prcticas y calcular su Promedio. Sino Imprimir el mensaje Sr. Alumno, Errores en datos
Implementacin del Diagrama de flujo
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 58
Ejecucin: 1.- Modulo de validacin.- Se debe leer cdigo y clave respectivamente.
2- Modulo de ingreso de notas: como los datos de alumno son correctos entonces ingresar las 3 prcticas calificadas. Pc1=12, Pc2=10, Pc3=14. El promedio de prcticas, se ilustra en la siguiente grfica, as como la conformidad
Programa Pseudocdigo Programa Fuente Variables pc1, pc2,pc3,cod, clav : entero prom: real Inicio Imprimir (codigo = ), leer(cod), Imprimir (Clave = ), leer(clav), si((cod=001) y (clav=1010)) entonces Inicio Imprimir (Ingrese 3 practicas : ), leer(pc1,pc2,pc3), prom (pc1+ pc2+ pc3+)/3.0 imprimir(El promedio es =,prom) fin sino inicio imprimir(Sr, error, adios) fin fin
void main() { int pc1,pc2,pc3,cod,clav; float promp; gotoxy(10,3);cout<<"Ingrese codigo = "; cin>>cod; gotoxy(10,4);cout<<"Ingrese clave = "; cin>>clav; f((cod==001) && (clav==1010)) { gotoxy(10,6);cout<<"pc1";cin>>pc1; gotoxy(10,7);cout<<"pc2=";cin>>pc2; gotoxy(10,8);cout<<"pc3=";cin>>pc3; promp=(pc1+pc2+pc3)/3.0; gotoxy(10,12); cout<<"Promedio ="<<promp; } else {gotoxy(10,14);cout<<"Error, Adios..."; } getche(); } Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 59
Estructuras Condicional con Anidamiento Sintaxis Si <cond_logica1> entonces Inicio <accion1 > fin sino Si <cond_logica2> entonces Inicio <accion2 > fin sino <accion3>------------------ Problema 2.- Disear un diagrama de flujo que permita ingresar 3 nmeros 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. Relacin 1.- Si a = b + c, entones calcular el producto de los 3 nmeros Relacin 2.- Si b = a + c entones calcular la resta de los 3 nmeros Relacin 3.- Si c = a + b entones calcular la suma de los 3 nmeros Si ninguna relacin se cumple, emitir un mensaje: Sr. No existe relacin Solucin.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 60
Ejecucin.- Sean los nmeros a = 6, b = 4 y c = 10. La relacin que se cumple es la relacin 3, entones el resultado ser: m = a + b + c = 20. Los resultados se ilustran en la siguiente grfica y su confirmacin respectiva.
Programa Pseudocdigo Programa Fuente variables a,b,c, prod,res,suman:entero Inicio Imprimir (Ingrese 3 nmeros= ), leer(a,b,c), Si(a=b+c) entonces Inicio Prod a*b*c imprimir(El producto =,prod) fin Sino Si(b=a+c) entonces Inicio res a-b-c imprimir(La resta es =,res) fin Sino Si(c=a+b) entonces Inicio Suman a+b+c imprimir(La suma e =,suman) fin Sino Inicio Imprimir(Sr. No existe relacin) fin Fin
Problema 4.- Disear un diagrama de flujo que permita ingresar a un usuario cdigo=100 y clave=200. Silos datos de entrada son correctos, el sistema solicita al usuario que ingrese un numero n y verifica si este nmero es par o impar y luego enva el reporte segn sea el caso. Si el usuario no recuerda sus datos en la primera entrada, decide ingresar sus nuevos datos mediante ncdigo=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 enva un mensaje de error Segunda opcin, error. Solucin. El usuario tiene 2 cdigos y 2 claves para validar.. El programa Pseudocdigo es: Inicio Imprimir (Ingrese cdigo y clave), leer(cdigo, clave) Si ((cdigo = 10) y ( clave = 200)) entonces Inicio Imprimir(Bienvenidos:), leer(n) Si (n resto 2 = 0) entonces inicio Imprimir (El nmero es par) fin Sino inicio Imprimir(El nmero 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 opcin, error :) Fin
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 62
Implementacin 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 nmero es par"; } else { gotoxy(10,7);cout<<" El nmero 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(); } Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 63
Diseo del Diagrama de Flujo
Ejecucin.- Si usa sus primeros datos y este comete error, entonces le solicita los segundos datos y a estos los acumula. Ver la siguiente grfica.
A continuacin, se describen ms ejemplos, primero se desarrollan programas pseudocdigo y en la siguiente seccin se ilustra los Diagramas de Flujo de Datos.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 64
Aplicacin 5.- Disear un programa que permita determinar si un entero A es divisible por otro B. Solucin 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 Aplicacin 6.- Disear un programa para que calcule e imprima los valores de las races reales de una ecuacin de segundo grado: Ax^2+Bx+C=0 Se debe ingresar los coeficientes de la ecuacin A, B y C. Solucin Variables a, b, c: enteros raz : reales Inicio imprimir ( Ingrese el Coeficiente A:), Leer( a) imprimir ( Ingrese el Coeficiente B:), Leer (b) imprimir ( Ingrese el Coeficiente C:), Leer (c) raz (ver formulas en Diagrama de Flujo) imprimir ( El valor de la raz es:, raz) Fin Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 65
Aplicacin 7.- La tasa de inters sobre un prstamo 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 inters y el monto total. Solucin Variables inte, monto, montoa: reales Inicio imprimir ( Ingrese el Prstamo: ), 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 inters es:, inte) imprimir ( El monto actual es:, montoa) Fin Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 66
Implementacion en Borland c++ 5.02
void main() { float inte, monto, montoa; gotoxy(10,3);cout<<"Ingrese el Prstamo:" ; 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 inters es ="<<inte; gotoxy(10,14);cout<<"El monto actual es:"<<montoa; getche(); } Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 67
Aplicacin 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. Solucin 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
Aplicacin 9.- La comisin de las ventas totales es como sigue: a) Si ventas < S/. 80, entonces no hay comisin b) Si S/. 80 <= ventas <= S/. 600 entonces la comisin es igual al 12% de las ventas c) Si ventas > 600 entonces la comisin es igual al 15% de las ventas Hacer un programa para que se ingrese las ventas y se reporte la comisin.
Solucin
Variables ven, comisin: reales Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 68
Inicio imprimir ( Ingrese el monto de la venta:),Leer (ven) Si (ven < 80) entonces comisin 0 Sino Si (ven>=80 y ven<=600) entonces comisin ven*0.12 Sino Si (ven > 600) entonces comisin ven*0.15 imprimir ( La comisin es: , comisin) Fin Aplicacin 10.- Hacer un programa para calcular el peso semanal de un trabajador. Se debe ingresar el nombre, pago, por hora y el nmero 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. Solucin 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 nmero 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 Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 69
Aplicacin 11.- Se repartir la herencia entre los hijos de un seor como sigue: Si la cantidad de hijos es menor que 4; se repartir exactamente entre el nmero de hijos; si son 4 o ms hijos, la mitad le tocara al hermano mayor y el resto se dividir entre los dems hermanos. Hacer un programa para que reporte cuanto le corresponde a cada hijo. Se debe ingresar la herencia y el nmero de hijos. Solucin Variables herencia, nh, mh, mhm: enteros Inicio imprimir ( Ingrese el monto de la herencia:),Leer (herencia) imprimir ( Ingrese el nmero 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 dems hijos es de:, mh) Fin Fin Aplicacin 12.- Una empresa comercial desea hacer un programa para calcular el precio neto de un artculo 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 artculo, el cdigo de venta (c) contado, (b) plazos y si la venta es a plazos se debe ingresar el tiempo de pago.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 70
Solucin Variables pr, pn, des: reales co : carcter tiempo: entero Inicio imprimir ( Ingrese el precio del artculo:), Leer( pr) imprimir ( Ingrese el cdigo 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
Aplicacin 13.- En un tringulo 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 tringulo de los lados del tringulo y si estos valores cumplen las condiciones calcular el rea del tringulo en caso contrario reportar DATOS INCORRECTOS AREA=(S(S-A)(S-B)(S-C))^0.5
Solucin Variables s, a, b, c: enteros rea: real Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 71
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 tringulo:), 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 tringulo es: , rea) Sino imprimir ( DATOS INCORRECTOS) Fin Aplicacin 14.- Calcular el valor de la funcin 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 Solucin 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 Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 72
Aplicacin 15.- Los empleados de una fbrica 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 da de la semana. Solucin Variables: turno, das: cadena, td, tn, cd, ht; enteros, pago: real Inicio imprimir ( Ingrese el turno:),Leer (turno) imprimir ( Ingrese el da:), Leer (das) imprimir ( Ingrese el nmero de horas trabajadas: ); Leer (ht) Si (turno=diurno) entonces inicio Si (das<>domingo) entonces pago ht*1.5 fin Sino Si (das=domingo) entonces pago ht*(1.5+1) Sino Si (turno=nocturno) entonces Si (das<>domingo) pago ht*2.25 Sino Si (das=domingo) entonces pago ht*(2.25+1.25) Fin imprimir ( El pago diario es de:, pago) Fin Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 73
A continuacin se implementan estos programas pseudocdigo en Dfd. Se deja constancia que las formulas en muchos diagramas se muestran una parte, pero estas se encuentran en su correspondiente pseudocdigo . Diagrama de Flujo de Datos Para didctica, se ha redactar el enunciado de los problemas
Aplicacin 5.-Escriba un programa para determinar si un entero A es divisible por otro B.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 74
Aplicacin 6.- Hacer un programa para que calcule e imprima los valores de las races reales de una ecuacin de segundo grado:
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 75
Aplicacin 7.- La tasa de inters sobre un prstamo 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 inters y el monto total.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 76
Aplicacin 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
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 77
Aplicacin 9.-La comisin de las ventas totales es como sigue: a) Si ventas < S/. 80, entonces no hay comisin b) Si S/. 80 <= ventas <= S/. 600 entonces la comisin es igual al 12% de las ventas c) Si ventas > 600 entonces la comisin es igual al 15% de las ventas Hacer un programa para que se ingrese las ventas y se reporte la comisin.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 78
Aplicacin 10.-Hacer un programa para calcular el pago semanal de un trabajador. Se debe ingresar el nombre, pago por hora y el nmero 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.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 79
Aplicacin 11.-Se repartir la herencia entre los hijos de un seor como sigue: Si la cantidad de hijos es menor que 4; se repartir exactamente entre el nmero de hijos; si son 4 o ms hijos, la mitad le tocara al hermano mayor y el resto se dividir entre los dems hermanos. Hacer un programa para que reporte cuanto le corresponde a cada hijo. Se debe ingresar la herencia y el nmero de hijos.
Aplicacin 12.- Una empresa comercial desea hacer un programa para calcular el precio neto de un artculo de acuerdo a lo siguiente: Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 80
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 artculo, el cdigo de venta (c) contado, (b) plazos y si la venta es a plazos se debe ingresar el tiempo de pago.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 81
Aplicacin 13.-En un tringulo se cumple lo siguiente: s>0, s>b, s>c ,donde s: semiperimetro a, b, c: Lados del tringulo. Hacer un programa para que se ingresen los valores de los del tringulo de los lados del tringulo y si estos valores cumplen las condiciones calcular el rea del tringulo en caso contrario reportar DATOS INCORRECTOS. AREA=(S(S-A)(S-B)(S-C))^0.5
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 82
Aplicacin 14.- Calcular el valor de la funcin 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
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 83
Aplicacin 15.- Los empleados de una fbrica 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 da de la semana.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 84
3.- Estructuras de Control Repetitivas Permiten ejecutar sentencias hasta satisfacer una condicin Lgica.
Repetitiva con Entrada Controlada: Mientras Realiza 0,1 2,.., o ms tareas. Sintaxis
Aplicacin 1.- Disear un diagrama de flujo que permita calcular la suma acumulada de la serie: 1+2+3+4+5. Solucin. a).- Se define un contador (cont) para que incremente elementos a sumar y un acumulador (acum) que vaya acumulando los valores segn como avance el contador. b).- La condicin de terminacin 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 Pseudocdigo.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 85
Programa Pseudocdigo Programa Fuente Inicio Imprimir( Bienvenidos :) Cont 1 Acum 0 Mientras (cont<=5) hacer Inicio Acum acum.+ cont Cont Con t+ 1 Fin Imprimir (Suma acumulada=,Acum) Fin.
Diagrama de Flujo de datos Ejecucin.- Los resultados se ilustran en la siguiente grfica y su confirmacin respectiva.
void main() { int cont=1,acum=0;
gotoxy(10,3);cout<<"Bienvenidos";
while(cont<=5) { acum= acum+cont; cont++; }
gotoxy(10,4); cout<<"Suma es = "<<acum; getche(); } Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 86
Aplicacin 2.- Disear 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.. Solucin. 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 segn como avance el contador. b).- La condicin de terminacin est controlado por: Cont_I <= Lado_d , ambos deben leerse desde el teclado c).- Se debe inicializar el acumulador en 0 Programa Pseudocdigo. Programa Fuente
Inicio Imprimir( Ingrese lado izquierdo ), leer(ldi); Imprimir( Ingrese lado derecho );l eer(ldd) acum 0 Mientras (Cont_I<=Lado_d) hacer Inicio Acum acum.+ Cont_I Cont_I Con t_I+ 1 Fin
Imprimir (La suma es =: ,Acum) Fin
void main() { int ldi,ldd,acum=0; gotoxy(10,3);cout<<"Bienvenidos"; gotoxy(10,5);cout<<"Lado Izquierdo";cin>>ldi; gotoxy(10,6);cout<<"Lado Derrecho";cin>>ldd; while(ldi<=ldd) { acum= acum+ldi; ldi++; } gotoxy(10,8); cout<<"Suma de "<<ldi<<" a "<<ldd<<" es = "<<acum; getche(); } Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 87
Ahora se disea el Diagrama de Flujo
Ejecucin.- usando Cont_I=3 y Lado_d=5 , el resultado debe ser: 3+4+5=12. Los resultados se ilustran en las siguientes grficas y su confirmacin.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 88
Aplicacin 3.- Disear 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. Solucin. El programa solicita un dato, verifica si es diferente de cero, entonces acumula; se genera bucles hasta editar 0.
Ejecucin .- ingrese los nmeros: 11,15 y 14 , los resultados se ilustran a continuacin,
mientras(n!=0) hacer inicio acum acum+n imprimir(Ingrese datos= ); leer(n) fin imprimir(Suma es = ,acum) fin Aplicacin 4.- Disear 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 cdigo solo de 3 dgitos, 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. Solucin. El programa solicita Interface para ingresar Nmero de cursos y nmero de alumnos por curso. Interface donde se ingresa o de alumnos void main() { int n,acum=0; gotoxy(10,3);cout<<"Bienvenidos"; gotoxy(10,5);cout<<"Dato = ";cin>>n; while(n!=0) {acum= acum+n; gotoxy(10,5);cout<<"Dato = ";cin>>n; } gotoxy(10,8); cout<<"Suma = "<<acum; getche(); } Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 90
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; Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 91
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 Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 92
Implementacin 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; Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 93
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); } } } Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 94
Aplicacin 5.- Disear un programa que permita leer un numero entero formado por dos 0 mas dgitos, luego mostrar: Numero invertido, total de dgitos pares, e impares , secuencia de dgitos pares e impares Solucin. 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 Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 95
Implementacin 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(); } Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 96
Estructura de Control con nmero de instrucciones conocidas
desde V c <-- V i hasta V f Hacer Inicio <Instrucciones> Fin
Se ejecuta una serie de instrucciones hasta que vi=vf
Observacin: Se debe cumplir que Vi <= Vf
Aplicacin 1.- Disear un programa pseudocdigo y diagrama de flujo que permita leer el nmero de trminos de la serie 1+2+3+4+5+.+n y luego calcular la suma acumulada.
Solucin. a).- Se define un contador (cont) como variable de control y n el nmero de trminos a ingresar. Para sumar se define la variable Acum que va acumulando los valores segn como avance el contador. b).- La condicin de terminacin 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.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 97
Programa Pseudocdigo Programa Fuente Inicio Imprimir( Ingrese Nmero de Trminos:), leer(n) Acum.=0 dese cont1 Hasta n hacer Inicio Acum acum.+ cont Fin Imprimir (La suma es =, Acum) Fin.
Diagrama de Flujo
void main() { int n,acum=0; gotoxy(10,4); cout<<"Ingrese total datos "; cin>>n;
for(int cont=1;cont<=n;cont++) {acum=acum+cont; } gotoxy(10,7);cout<<"suma es ="<<acum;
getche(); } Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 98
Ejecucin.- Ingresando nmero de elementos: n=6 Acum: 1+2+3+4+5+6 = 21 En la siguiente grfica, se ilustra los procedimientos de ejecucin. Lectura y Proceso: Al ejecutar, el programa le solicita que ingrese el nmero de elementos de la serie a sumar, para nuestro caso ingrese 6.
Aplicacin 2.- Disear un diagrama de flujo que permita leer n datos de tipo entero y luego genere un reporte que muestre el nmero mayor. Solucin. Se definen las siguientes variables: n : para leer el nmero de elementos. Dato : para lectura de los elementos Mximo : para almacenar el nmero 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 mximo.
Finalmente se imprime la variable mxima.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 99
Diagrama de flujo de datos
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 100
Ejecucin:
Aplicacin 3.- Disear un diagrama de flujo que permita conocer el nmero total de puntos que se encuentran en el interior de la elipse: X*x/16 + y*y / 9=1 Solucin. Se definen las siguientes variables: Punto : para contar el total de puntos (x,y) Radio: para verificar la condicin: 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 continuacin se ilustra el diagrama de flujo.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 101
Ejecucin: La ejecucin del diagrama genera el reporte punto por punto, tal como se ilustra en la siguiente grfica.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 102
Implementado en el lenguaje de programacin Borland C ++ 5.0
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 103
Problemas resueltos usando tcnica de Pseudocdigo
Aplicacin1.--Disear un programa que permita calcular en forma independiente la suma de los nmeros pares e impares en el rango de 1 a 50. Programa Pseudocdigo Programa DFD
Variable n, sp=0, si=0,a,i=1: enteros Inicio imprimir (Ingrese total de nmeros), 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
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 104
Aplicacin 2.- Calcular y visualizar la suma y el producto de los nmeros impares comprendidos entre 20 y 80.
Solucin Programa Pseudocdigo 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. Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 105
Aplicacin 3.- Disear un programa que permita leer n nmeros enteros y obtener el promedio de los positivos y el promedio de los negativos. Solucin
Programa Pseudocdigo Programa DFD Variables n, l 1,nmero, cp 0, cn 0, sp 0, sn 0: enteros pp,pn:real Inicio imprimir ( Ingrese total), Leer (n) Mientras (l<=n) inicio imprimir (Ingrese Nmero:), Leer(nmero) Si (nmero>0) entonces inicio sp sp+nmero cp cp+1 fin Sino inicio sn sn+nmero 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
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 106
Aplicacin 4.- Calcular la suma de los cuadrados de los 15 primeros nmeros naturales. Solucin 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
Aplicacin 5.- Disear un programa que permita ingresar n nmeros y luego calcular el promedio de ellos. Solucin 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
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 107
Aplicacin 6.- Disear un programa que permita Ingresar nmeros enteros, visualizar la suma de los nmeros pares de la lista, cuantos nmeros pares existen y cual es la medio de los nmeros impares. Solucin 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 Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 108
Aplicacin 7.- Disear un programa que permita leer un numero entero,positivo formado por do o mas cifras, luego mostrarlo en forma invertida, secuencia de nmeros pares y secuencia de nmeros 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
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 109
Diagrama de flujo de datos
.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 110
Compendio de problemas en Pseudocdigo: Se mostrara problemas resueltos en pseudocdigo e implementados en el software libre PSeInt. En las siguientes pantallas se ilustra su instalacin.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 111
En la siguiente figura se ilustra la tcnica para implementar un Programa Pseudocdigo en el ordenado, veamos: 1.- Primero.- SEn el editor del programa PSeInt se edita las instrucciones del pseudocdigo y luego se ejecuta usando el botn que permite generar el reporte respectivo 2.- Segundo.- El programa Pseudocdigo se expresa en un Diagrama de flujo de datos usando el botn .
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 112
Aplicacin 1- Disear un programa que permita implementar un Juego simple y que pide al usuario que adivine un numero en 10 intentos, cuando este ingresa nmeros. 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
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 113
Aplicacin 2.- Disear un programa que permita leer un nmero y luego factorizarlo y mostrar sus elementos. Solucin 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 Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 114
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 115
Aplicacin 3.- Disear un programa que permita leer n nmeros enteros definidos por usuario, luego calcular el promedio de los n nmeros ingresaos Solucin 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 Aplicacin 4.- Resolver problema 3, usando estructura repetitivas MIENTRAS Solucin 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 Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 116
COMPENDIO DE PROBLEMAS
Problema 1.- Disear un programa que permita a un usuario leer un NUMERO entero positivo compuesto como mnimo 6 y mximo 8 dgitos, 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 dgitos repetidos, la secuencia que forma y la suma de este cuando el usuario ingresa un digito a buscar, Total de dgitos no repetidos, su secuencia y su suma respectiva. Asimismo de la secuencia no repetida mostrar la secuencia formada por solo nmeros pares as como de los impares, (Ver Figura, parte de RESULTADOS)
Problema 2.-Disee 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
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 117
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 segn resultado 1)
2.5.-Secuencia de cifras Pares segn 1) 2.6.-Suma de cifras Pares segn 5) 2.7.-Total de cifras ImPares segn resultado 2.1) 2.8.-Secuencia de cifras ImPares segn 1) 2.9.-Suma de cifras Impares segn 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.-Disear un programa que permita a un usuario validar sus datos de entrada por Clave=Per y cdigo=100P, si los datos de entrada son correctos el sistema enva el mensaje Procesando Edades de Poblacin en el Per , solicitando inmediatamente que ingrese Numero de Departamentos(Solo en el rango 1..30 ), por cada Departamento debe ingresar Nmero 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): Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 118
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 despus de cada consulta debe preguntar Sr. Desea hacer una siguiente consulta..?(S/N)==> . Si el usuario ingrese datos incorrectos, entonces el programa indica el nmero de error as como el nmero de intentos que le queda. Si el nmero de errores es mayor que 3, el programa finaliza enviando el mensaje Debido a errores, Hasta luego Problema 4.- Disear un programa que permita a un usuario validar sus datos de entrada por cdigo=tcn, si los datos de entrada son correctos el sistema enva el mensaje Bienvenidos as como el nmero de consulta y la fecha respectiva , luego solicita que ingrese un numero entero comprendido en el rango 1..99, este nmero permite calcular el factorial y con su resultado se debe mostrar el nmero total de dgitos, el nmero de dgitos nulos y dgitos 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 cdigo de validacin mostrando el nmero de Consultas a la fecha(Este nmero es diferente al total de errores que cometa el usuario en su validacin de
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 119
cdigo). Asimismo, si el usuario no desea continuar, el sistema enva el mensaje de agradecimientos mostrando el nmero total de consultas. Ahora si el dato de validacin es incorrecto (recuerde que solo se dispone de 3 alternativas), superado este nmero el sistema enva el mensaje FIN DE SESION, PUES SUPERO MAS DE INTENTENTOS " PROCEDIMIENTOS 4.1.- Primera ejecucin 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 nmero, para lo cual debe validando su cdigoTCN (observe que el valor esta en letras maysculas) Asimismo le indica el Numero de consulta y la fecha correspondiente. En esta interface, el usuario ingresa su cdigo=tc, cdigo que es incorrecto. Ante este error el sistema enva el mensaje de error y el nmero 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 cdigo=3tcn, cdigo que no est registrado en el sistema.
Se deja constancia que el nmero de consultas no cambia, pero si el contador de errores, como mximo 3.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 120
4.3.- En la siguiente interface, el usuario ingresa correctamente su cdigo tcn (observe que est en letras minsculas) 4.4.- A consecuencia del paso 3, el sistema enva el mensaje de Bienvenida y el nmero de errores ( 2) en este caso. 4.5.- A continuacin, el sistema solicita que ingrese un numero SOLO en el rango 1..99 (se debe validar descartando los negativos y los nmeros mayores a 99). En esta interface se calcula el factorial del nmero ingresado y otros resultados (total de dgitos, total de dgitos nulos, total de dgitos 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 nmero de Consultas actuales (4) y la fecha, tal como se ilustra en la siguiente interface.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 121
4.6.- El usuario despus en su consulta nmero 4, ingresa el nmero 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.-Disear un programa que permite leer 2 nmeros enteros y luego genere un reporte que permita visualizar tales nmeros en forma intercambiada, tal como se ilustra en la siguiente interface.
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 122
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 prcticas calificadas con notas solo en el rango de 0..20 y luego se calcula su promedio de prcticas (pp) eliminando la prctica con menor nota.
Para que el alumno tenga derecho a rendir Exmenes Parcial (exp.) y Final (exf.), el promedio de prcticas 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. Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 123
Problema 7.-Disear un Programa que permita al usuario ingresar n empleados(n<=100), a continuacin 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 da bajo las siguientes condiciones: a) Si ventas < S/. 80, entonces no hay comisin b) Si ventas est en el rango de : 80..600 entonces la comisin es igual al 12% c) Si ventas est en el rango de: 601..1000 entonces la comisin es igual al 15% Disear un programa que permita leer nombre de empleado, nombre de producto y el total respectivo, luego hacer un reporte de la comisin. Tambin si las ventas no satisfacen la Condicin a), enviar el mensaje Sr. ..Sus ventas No ameritan comisin. Si las ventas exceden la condicin c), enva el mensaje Felicitaciones, ser ascendido..
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 124
Problema 9.-Disee un programa que permita validar datos de usuario para ingresar al sistema de consultas, donde el usuario se identifica por cdigo=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.
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 125
<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 capica (en matemticas, nmero palndromo) se refiere a cualquier nmero que se lee igual de izquierda a derecha y de derecha a izquierda (Ejemplos: 121 ) El trmino se origina en la expresin catalana capicua (cabeza y cola).
Definicin.- Un nmero palindrmico es un nmero simtrico escrito en cualquier base a tal que a 1 a 2 a 3 | a 3 a 2 a 1 . Todos los nmeros de base 10 con un dgito {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} son palindrmicos. Existen nueve nmeros palindrmicos de dos dgitos: {11, 22, 33, 44, 55, 66, 77, 88, 99}. Noventa de tres dgitos: {101, 111, 121,, 181, 191, 202, 212,, 292, 303, 313,, 898, 909, 919, 929,, 979, 989, 999} Noventa con cuatro dgitos: {1001, 1111, 1221, 1331, 1441, 1551, 1661, 1771, 1881, 1991,, 9009, 9119, 9229, 9339, 9449, 9559, 9669, 9779, 9889, 9999}, Novecientos de cinco dgitos: {10001, 11011, 11111, 11211, 11311, 11411, 11511,,} Un pequeo truco para hallarlos sera sumar un nmero con otro en el que le damos la vuelta a sus cifras. Por ejemplo a m me encanta el nmero 17, y para buscar un nmero capica a partir del 17 lo que tengo que hacer es: 17+71=88 (capica). Ejemplo: partimos del nmero 96: Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 126
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 enva el mensaje Opcin no disponible y finaliza.
Problema 10.-Disear un programa que permita Leer o ingresar Edades de n alumnos(n es definido por usuario) y luego mostrar la Menor edad y la posicin 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 Lus Pedro Edades 30 15 28 posicin 1 2 3
El programa debe ser Interactivo, es decir; despus de finalizar con el ingreso de los datos, el sistema enva el mensaje de Desea continuar(S/N). Debe validar la edicin solo de S o N. por cada error debe mostrar el mensaje Ingrese nueva letra, error # . Cuando edita S, contina con la lectura de nuevos datos y si edita N, el programa finaliza indicando el nmero de consultas realizadas. 10.- Disear 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 dgito, el sistema confirma que dato es un DGITO y luego solicita que ingrese un nmero
Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 127
entero mayor o igual a 10 y menor que 10000. Luego puede ocurrir que: I.- Si el nmero es par, entonces el programa debe realizar las siguientes tareas: a).-Mostrar el numero en forma invertida b).-Conocer el nmero total de dgitos. c).-Conocer el nmero total de dgitos pares. (Ver figura.) d) Conocer el nmero total de dgitos impares (ver figura.) II.- Si el nmero es impar, entonces el sistema confirma que el dato es un DGITO 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 posicin del carcter, formar la secuencia respectiva. Ver figura Problema 11.- Disear 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.- Disear 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
Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 128
Problema 13.- Algunos nmeros enteros se pueden representar como suma de dos enteros al cuadrado, por ejemplo 50 = 1 2 + 7 2 = 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 a 2
+ b 2 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 mximo p y el valor mnimo q que toma la funcin f(x) = (ax + b)/(cx + d) en los enteros que se encuentran en el intervalo dado por m y n (incluyndolos). Observa que es posible que la funcin no este definida en todos los puntos de ese intervalo. Adems, 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 nmeros enteros a, b, c, d, m, n (con m n) separados por espacios y todos ellos en el intervalo de -1000 a 1000 (incluyndolos). Puedes suponer que el intervalo m x n contiene al menos un entero x en el cual la funcin f(x) est definida (y por lo tanto el mximo y el mnimo existen). Salida: Dos nmeros enteros r, s, separados por espacios. Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 129
Problema 15.-Euclides y Euler: Dados dos enteros positivos p y q, su mximo comn divisor es el entero positivo ms grande que los divide a ambos exactamente y se puede calcular con el algoritmo de Euclides (el cual puedes investigar cmo funciona casi en cualquier lugar). Si el mximo comn divisor de p y q es igual a 1, entonces se dice que p y q son primos relativos. La funcin 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 mximo valor m que toma la funcin j(n) de entre todos los enteros n en el intervalo de p a q, adems 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 nmeros enteros p y q tales que 1 p q 1,000,000. Salida: Un numero entero m y un nmero entero n. Problema 16.- Nmeros menores que dos mil: Imagine que tiene una lista de nmeros 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 nmeros enteros (todos ellos menores que dos mil) agrupando los dgitos tanto como sea posible desde el principio de la cadena. En nuestro caso, obtendr la lista 314, 1592, 65 con p = 3 elementos. Despus Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 130
usted realiza la misma operacin 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 dgitos encuentre cuantos elementos p y f contienen cada una de las listas. Entrada: Una cadena s que contiene entre 1 y 1000 dgitos. Salida: Dos nmeros 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
- 1 2 = 8 2 - 7 2 . 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 a 2 - b 2 donde a b 0. Entrada: Un nmero entero n tal que 0 n 1,000,000. Salida: Un nmero entero t. Problema 18.-Sumas de nmeros consecutivos Escribe un programa que determine la cantidad f de formas en las que se puede escribir un nmero entero positivo n como suma de uno o ms nmeros enteros positivos consecutivos. Tu programa tambin debe determinar el nmero ms pequeo 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 nmero entero n en el intervalo de 1 a 1,000,000 (incluyndolos). Salida: Dos nmero enteros f y p.
Problema 19.- Puntos dentro de un tringulo: Considera un tringulo T dado por sus tres vrtices (a, b), (c, d) y (e, f) con coordenadas enteras. Algunos puntos de coordenadas enteras estn sobre los lados de T y otros puntos de coordenadas enteras estn dentro de T. Escribe un programa que Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 131
encuentre las cantidades s y t de puntos sobre los lados y dentro de T, respectivamente. Por ejemplo, si los vrtices 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) estn sobre los lados de T mientras que los 4 puntos (1, 2), (2, 3), (2, 4) y (3, 3) estn dentro de T. Entrada: Seis nmeros enteros a, b, c, d, e, f separados por espacios y todos ellos en el intervalo de -1000 a 1000 (incluyndolos). Puedes suponer que los tres vrtices de T no estn alineados y por lo tanto forman un tringulo. Salida: Dos nmeros enteros s y t separados por un espacio.
Problema 20.- Boletos por besos: Para ir hacia su escuela, Juan aborda un camin. Cuando Juan sube al camin y deposita las monedas en la alcanca, el conductor le da un boleto con un nmero de serie consecutivo, el cual generalmente llega a la basura. Sin embargo, un da l se entera de algo interesante. Si la suma de los dgitos 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 drselos a cambio de dichos boletos, pero no es tan fcil conseguirlos. Juan ha decidido que si el boleto que le da el conductor no suma 21, esperar hasta que una persona suba despus 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 dgitos, le proporcione el numero p de personas que deben abordar despus de el para que obtenga el boleto deseado y m, donde m representa los 7 dgitos de dicho boleto. Cuando un tiraje de boletos termina, es decir llega a 9999999, el conductor toma otro tiraje comenzando nuevamente en el nmero 0000000. Universidad Nacional de Ingeniera -
Algoritmos y Estructura de Datos 132
Entrada: Un numero entero n de 7 dgitos (que posiblemente comienza con ceros). Salida: Un numero entero p y un nmero m de 7 dgitos.
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 sucesin numrica y la usara para determinar cmo 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 sucesin. Los brincos siempre sern paralelos a los lados de la mesa y siempre debern alejar a la pulga de su posicin inicial. Lo ideal es que la pulga logre llegar a la esquina contraria de la mesa. Sin embargo, basta con que llegue a una posicin 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 sucesin 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 podra lograr su objetivo si su sucesin de brincos fuera arriba, arriba, derecha, arriba, nada, nada y derecha. Por otro lado, si su sucesin fuera arriba, arriba, derecha, nada, nada, nada, nada entonces no llegara a la esquina contraria pero tampoco se saldra de la mesa. Entrada: El archivo de texto contendr un rengln con tres enteros n, a y b separados por espacios seguido de un rengln con n enteros positivos s1, s2, ..., sn y separados por espacios. Puedes suponer que todos estos enteros estn en el rango de 1 a 1000, incluyndolos. Salida: El archivo de texto nts.sal deber contener un rengln con tres enteros n, c y d separados por espacios seguido de un rengln con n enteros positivos t1, t2, ..., tn y separados por espacios. Los valores de c y d Centro de Extensin y Proyeccin Social (CEPS)
Algoritmos y Estructura de Datos 133
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. Evaluacin: 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 obtendra 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.- Disear 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 cuntos nmeros comunes estn en la misma posicin y cuntos valores comunes estn en distinta posicin. Ejemplo: 3786 y 8760 uno colocado (el 7) y dos descolocados (8 y 6) . Se terminar el programa cuando el jugador acierte la combinacin o haya agotado sus intentos (constante MAXINTENTOS con valor 10).