Sei sulla pagina 1di 142

Universidad Nacional de Ingeniera Fac.

Ingeniera Industrial y de Sistemas

Structuras de

Capitulo II

ontrol

Crdova Neri, T.

Borland C++ 5. 0.2

Contenido
1.- Estructuras Secuenciales Aplicaciones 2.- Estructuras Selectivas Pueden ser de tres tipos: 2.1.- Estructura Selectiva Simple: sentencia if aplicaciones Cuando se ejecuta una sola sentencia dentro de la estructura Aplicaciones Cuando se ejecutan varias sentencias dentro de la estructura Aplicaciones

2.2.- Estructura Selectiva Doble: sentencia if-else Cuando las instrucciones a ejecutarse son simples Aplicaciones Cuando las instrucciones a ejecutarse son anidadas: Aplicaciones 2.3.- Estructura Selectiva Compuesta Aplicaciones 3.- Estructuras Repetitivas 3.1.while (<condicion_prueba>)

3.2 . do <insts> while(<condicion_prueba>) 3.3.- for(inicializacion;cond_prueba;contador)

Cordova Neri, T.

61

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Estructuras de Control
Permiten ejecutar una serie de sentencias, hasta cumplirse una condicin.. C++, al ser producto de la evolucin de C, tambin hereda toda su potencia en el estilo de programacin estructurada, la cual puede ser escrita en mdulos, que se componen bsicamente de algoritmos y estructuras de datos que en su conjunto conforman un programa. Estos ltimos son escritos usando tres tipos de estructuras: Secunciales, Selectivas y Repetitivas

1.- Estructuras Secuenciales


Son aquellas que se escriben lnea a lnea y son ejecutadas en el orden en que se encuentran, desde el inicio hasta el final del programa. En C++ estas son slo sentencias simples que terminan en un punto y coma (;): Sintaxis <instruccion_1>; < instruccion _2>; ........................... < instruccion _ n>; Sentencia Nula: En C++ existe adems la sentencia nula (una instruccin que no hace nada) est representada por un punto y coma ; Su aplicacion se dea las estructuras repetitivas, cuando se quieren ignorar ciertos valores y procesar otros en funcin de una condicin lgica. Problema 1.- Escribir un programa que calcule el permetro y el rea de un tringulo dados como datos las longitudes de sus tres lados (suponer que siempre se cumple la desigualdad triangular). Solucion // AREA.CPP

#include<iostream.h> #include<iomanip.h> //para setiosflags #include<conio.h> #include<math.h> #include <stdlib.h> // para system() int main() {
Crdova Neri, T.

Borland C++ 5. 0.2 float a,b,c,p,area; clrscr(); cout<<"Ingrese los lados del tringulo:"<<endl; cout<<"\ta = "; cin>>a; cout<<"\tb = "; cin>>b; cout<<"\tc = "; cin>>c; p=(a+b+c)/2; cout<<setiosflags(ios::showpoint+ios::right)<<setfill('.'); cout<<"El perimetro es "<<setw(10)<<setprecision(2)<<2*p<<endl; area=sqrt(p*(p-a)*(p-b)*(p-c)); cout<<"El area es "<<setw(15)<<setprecision(2)<<area<<endl; system(pause); } Salida:

Problema 2.- Disear un programa que permita leer datos de un trabajador consistentes en: nombre, codigo, sueldo basico y bonificacin. Tambien : Los descuentos son: AFP: 8%, Invalidez :1.44%. Las aportaciones son: Fonavi: 5%, Seguro nacional de pensiones:11%, Senati:1% Existe un aumento de : 0.125; El programa debe mostrar mostrar todos los procesos de calculos para generar la Boleta de pago. Solucion: //simula_planilla.cpp #include<conio.h>
Cordova Neri, T.

63

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

#include<iostream.h> #include<stdio.h> void main() { float s_basico,bonif,dscto,aumento,s_neto,s_real,fon,afp,snp, inval,senati,aport; char nom[20],cod[5]; clrscr();

gotoxy(24,1),cout<<" SISTEMA DE PLANILLAS "; gotoxy(24,3),cout<<" Ingrese datos del trabajador:"; gotoxy(5,5),cout<<"Nombre gotoxy(5,6),cout<<"Codigo :";cin>>nom; :";cin>>cod;

gotoxy(5,7),cout<<"Sueldo Basico :";cin>>s_basico; gotoxy(5,8),cout<<"Bonificacion :";cin>>bonif; afp=s_basico*0.08; //8% //descuentos

inval=s_basico*0.0114; //1.44% dscto=(afp+inval); fon=s_basico*0.05; snp=s_basico*0.011; senati=s_basico*0.001; aport=(fon+snp+senati); s_real=(s_basico+bonif)-dscto; aumento=s_basico*0.125; s_neto=s_real+aumento; //Reportes clrscr(); gotoxy(2,1),cout<<"----------------------------------------------------------------------------"; gotoxy(38,2),cout<<"Planilla del trabajador "; gotoxy(2,3),cout<<"----------------------------------------------------------------------------"; //aportaciones //5% //11% //1% //Calculos

Crdova Neri, T.

Borland C++ 5. 0.2 gotoxy(2,4),cout<<"Sr. "<<nom; gotoxy(20,4),cout<<"Cod. "<<cod; gotoxy(44,4),cout<<"Area: SISTEMAS"; gotoxy(2,5),cout<<"----------------------------------------------------------------------------"; gotoxy(2,8),cout<<"----------------------------------------------------------------------------"; gotoxy(3,7),cout<<"BASICO"; gotoxy(4,9),cout<<s_basico; gotoxy(11,7),cout<<"BONIF"; gotoxy(11,9),cout<<bonif; gotoxy(19,6),cout<<"DESCUENTOS"; gotoxy(19,7),cout<<"AFP"; gotoxy(19,9),cout<<afp; gotoxy(25,7),cout<<"INVAL"; gotoxy(26,9),cout<<inval; gotoxy(30,6),cout<<" TOTAL"; gotoxy(30,7),cout<<" DSCTOS"; gotoxy(31,9),cout<<dscto; gotoxy(42,6),cout<<"APORTACIONES"; gotoxy(39,7),cout<<"FONAVI"; gotoxy(39,9),cout<<fon; gotoxy(47,7),cout<<"SNP"; gotoxy(48,9),cout<<snp; gotoxy(51,7),cout<<"SENATI"; gotoxy(53,9),cout<<senati; gotoxy(58,6),cout<<"TOTAL"; gotoxy(58,7),cout<<"APORT";
Cordova Neri, T.

65

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

gotoxy(59,9),cout<<aport; gotoxy(65,7),cout<<"BRUTO"; gotoxy(65,9),cout<<s_real; gotoxy(71,7),cout<<"AUMENTO"; gotoxy(73,9),cout<<aumento<<endl; gotoxy(2,11),cout<<"-----------------------------------------------------------------------------"; gotoxy(65,12),cout<<"TOTAL: S/."; gotoxy(65,13),cout<<"====="; gotoxy(72,12),cout<<s_neto; getche(); } Salida

Crdova Neri, T.

Borland C++ 5. 0.2 Problema 3.- Disear un programa que permita leer dos numeros enteros y luego generar un reporte que permita conocer los valores de las variables intercambiados. Solucion //valor1.cpp #include <iostream.h> #include<stdio.h> #include<conio.h> void main() { int a,b,aux; clrscr(); gotoxy(2,1);cout<<"Intercambio de Valores"; gotoxy(2,3);cout<<"ingrese a=";cin>>a; gotoxy(2,4); cout<<"ingrese b=";cin>>b; gotoxy(2,6); cout<<"Valores iniciales de a= "<<a<< " y de b= "<<b; aux=a; a = b; b = aux; gotoxy(2,8); cout<<" Valores intercambiados para a es = "<<a<< " y para b= "<<b; getche(); }

Cordova Neri, T.

67

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

2.- Estructuras Selectivas


Pueden ser de tres tipos:

2.1.- Estructura Selectiva Simple: sentencia if


Son aquellas que realizan una determinada secuencia de instrucciones de acuerdo a determinada condicin lgica. Si esta es verdadera la secuencia se ejecuta, si no lo es, contina el programa con la instruccin siguiente. Sintaxis Cuando se ejecuta una sola sentencia dentro de la estructura if (expresin) intruccin; Cuando se ejecutan varias sentencias dentro de la estructura If (expresin) { instruccin_1; instruccin_2; ... I nstruccin_n; }

Observaciones: a.- expresin es la condicin lgica, valor numrico o funcin que ser evaluada como verdadera (distinta de cero) o falsa (cero). Esta puede ser simple (un solo valor o condicin) o compuesta, la cual est formada por varias condiciones simples conectadas por los operadores lgicos vistos anteriormente: &&, || y ! b.- siempre se usa parntesis encerrando a la expresin a evaluarse. c.- Las estructuras if se pueden anidar, es decir, puede haber una estructura if dentro de otra:

Crdova Neri, T.

Borland C++ 5. 0.2 if (exp1 ) { <acciones_1>; If (exp2) <acciones_2>; } Problema 1.- Disear un programa que permita leer un numero real y luego que redondee este nmero a su primera cifra decimal. Si la cifra es mayor que 5, la parte entera se incrementa en 1; si es igual a 5, y adems la parte entera es impar, esta ltima se incrementa en 1. En cualquier otro caso no se modifica la parte entera. Solucion // REDONDEO.CPP

#include <iostream.h> #include <conio.h> void main() { float num; int numr; clrscr(); gotoxy(1,1);cout<<"Ingrese el nmero: "; cin>>num; numr = int(num); if (num-numr>0.5) numr++; if ((num-numr==.5)&&(numr%2)) numr++; gotoxy()1,2);cout<<"El nmero redondeado es: "<<numr; getch(); }Salida: //Moldeado de tipos

Cordova Neri, T.

69

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

2.2.- Estructura Selectiva Doble: sentencia if-else


Es aquella que realiza dos acciones distintas, ambas mutuamente excluyentes, de acuerdo al valor lgico de una expresin. Sintaxis Cuando las instrucciones a ejecutarse son simples

if (expresin) instruccin_1; else instruccin_2; Problema 1.- Disear un programa que permita leer datos de usuario por: codigo =10 y clave=12, luego si los datos son correctos, el programa solicita que ingrese un numero, inmediatamente el programa debe enviar un reporte si el numero ingresado es par, en otro caso es impar. Si los datos del usuario son incorrectos, el programa envia el mensaje Datos incorrectos y finaliza. Solucion: // Sielse.cpp #include <iostream.h> //para usar funciones cout, cin #include <conio.h> //Para usar funcion Clrs(), getche() main() {int cod, clave,p; clrscr(); cout<<"ingrese codigo :"; cin>>cod; cout<<"ingrese clave :"; cin>>clave; if((cod==10) && (clave==12)) { cout<<"Ingrese practica:"; cin>>p; if (p % 2==0)

Crdova Neri, T.

Borland C++ 5. 0.2 cout<<p << " es numero par"; else cout<<p<<" es numero impar"; } else cout<<" Datos incorrectos "; getche(); } Salida

Tambin se puede usar la expresin condicional abreviada equivalente: (expresin) ? instruccin1 : instruccin2; Cuando las instrucciones a ejecutarse son compuestas if (expresin) { instruccion_1; instruccion_2; ....... instruccion_n; } else { instruccion_1; instruccion_2; ....... instruccion_n; } } Si < expresin > es verdadera, se ejecuta el bloque se <instrucciones >, en otro caso se ejecuta las <instrucciones> del bloque else.

Cordova Neri, T.

71

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 1.- Disear un programa que permita leer un numero y luego averiguar si es capica. Solucion // if_capicua.cpp #include<iostream.h> #include<stdio.h> #include<conio.h> void main() { int num,c,r1,d,u,inv; clrscr(); gotoxy(10,4);cout<<" Ingrese Numero: ";cin>>num; c=num/100; // obtiene primer digito r1=num%100; //obtiene dos ultimos digitos d=r1/10; u=r1%10; inv=u*100+d*10+u; if (num==inv) { clrscr(); gotoxy(10,4);cout<<" El numero"<<num << " Es capicua"; gotoxy(10,5);cout<<" su primer digito es="<<c; } else { clrscr(); gotoxy(10,4);cout<<"El numero"<<num <<" No capicua";

gotoxy(10,5);cout<<"Sus ultimos dos digitos es="<<r1; } getch();

Crdova Neri, T.

Borland C++ 5. 0.2 } Salida

Problema 2.- Disear un programa que permita leer los coeficientes de una ecuacin cuadrtica y luego generar un reporte para conocer sus racices reales. Solucion //if_ecuacion.cpp

#include <iostream.h> #include <conio.h> #include <stdlib.h> #include <math.h> main() { double a, b, c, d, x1, x2,dd; gotoxy(6,2);cout<<"SOLUCIONDE UNA ECUACION CUADRATICA "; gotoxy(8,4);cout<<"Ingrese coeficientes a b c: "; gotoxy(8,6); cout<<"ingrese coeficiente a: ";cin>>a; gotoxy(8,7); cout<<"ingrese coeficiente b: ";cin>>b; gotoxy(8,8); cout<<"ingrese coeficiente c: ";cin>>c; d = b * b - 4 * a * c; if (d < 0) { gotoxy(8,10); cout<<"Las races son complejas\n"; exit(0); } else
Cordova Neri, T.

73

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

{ gotoxy(8,12); cout<<"Las raices reales son:"; dd = sqrt(d); x1 = (-b + dd) / (2 * a); x2 = (-b - dd) / (2 * a); gotoxy(8,14); cout<<"x1 ="<<x1<<" y "<<" x2="<<x2; } getche(); }

Problema 3.- Disear un programa que permita leer los coeficientes de una ecuacin cuadrtica y luego generar un reporte para conocer sus racices reales o sus raices complejas. Obs. Este programa es de propsito general respecto a anterior, ver todas las soluciones posibles en las graficas de salida. Solucion //if_ecua2grado1.cpp #include <iostream.h> #include <stdio.h> #include <conio.h> #include <math.h> main()

Crdova Neri, T.

Borland C++ 5. 0.2 { double a, b, c, d double re, im; // parte real e imaginaria de la raz gotoxy(6,2);cout<<"SOLUCION DE UNA ECUACION CUADRATICA "; gotoxy(8,4);cout<<"Ingrese coeficientes a b c: "; gotoxy(8,6); cout<<"ingrese coeficiente a: ";cin>>a; gotoxy(8,7); cout<<"ingrese coeficiente b: ";cin>>b; gotoxy(8,8); cout<<"ingrese coeficiente c: ";cin>>c; if (a == 0 && b == 0) { gotoxy(8,10); cout<<"La ecuacin es degenerada"; } else if (a == 0) { gotoxy(8,11); cout<<" La unica raz es:"<<-c/b; } else { re=-b/(2*a); d=b*b-4*a*c; im = sqrt(fabs(d))/(2*a); if (d >= 0) { gotoxy(8,10);cout<<"Raices reales:"<<endl; gotoxy(8,12);cout<<"Raiz 1 : "<<re<<" + "<<im<<endl; gotoxy(8,13);cout<<"Raiz 2 : "<<re<<" - "<<im<<endl; } else { gotoxy(8,10);cout<<"Raices complejas:"; gotoxy(8,12);cout<<"Raiz 1 : "<<re<<" + "<<im<<"i"<<endl; gotoxy(8,13);cout<<"Raiz 2 : "<<re<<" - "<<im<<"i"<<endl;
Cordova Neri, T.

75

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

} } getche();} Salida

Cuando las instrucciones a ejecutarse son anidadas:


if (expresion==valor1) <instruccion_1;> else if (expresin==valor2) < instruccion_1;> ... else if (expresin==valorn)

Crdova Neri, T.

Borland C++ 5. 0.2 < instruccion_1;> else <instruccion_n;> Aqu el programa realiza una sola <instruccion_x> para un <valor_x > de una expresin (numrica o lgica). Si el valor que toma la expresin no figura entre los especificados, se ejecutar el bloque de instrucciones_else.(sino...) Obs.- Si el bloque de <instrucciones_x> est formado por varias instrucciones estas debern agruparse con llaves { }. Problema 1.- Diseara un programa que permita leer tres nmeros enteros a, b y c (a, b, c 0) y que verifique si se cumplen algunas de las siguientes relaciones: a = b + c; b = a + c; c = a + b; a = b = c Solucion //:
RELACION.CPP

#include <iostream.h> #include <conio.h> void main(void) { int a,b,c; clrscr(); cout<<"Ingrese a: "; cin>>a; cout<<"Ingrese b: "; cin>>b; cout<<"Ingrese c: "; cin>>c; if (a==b+c) cout<<"\nSe cumple a = b + c"; else if (b==a+c) cout<<"\nSe cumple b = a + c"; else if (c==a+b) cout<<"\nSe cumple c = a + b"; else if ((a==b)&&(b==c)) cout<<"\nSe cumple a = b = c"; else cout<<"No se cumple ninguna relacin"; getch();
Cordova Neri, T.

} Salida: 77

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

2.3.- Estructura Selectiva Compuesta


Es aquella en la cual se realiza una determinada accin para cada tipo de valor que pueda tomar una expresin. Cada accin a realizarse excluye a las dems, de modo que solamente una de ellas es ejecutada. switch (expresion) { case valor1: case valor2: <instruccines_1>; break; < instruccines_2>; break; .... case valor_n: default: < instruccines_n>; break; < instruccines_default>; break; } //fin de switch() OBS 1.- La etiqueta default indica al programa lo mismo que el else en la secuencia de if anidados, es decir; se ejecuta cuando el usuario edita un valor que no esta en la lista de valores. 2.- La sentencia break permite que el programa abandone la estructura switch omitiendo los dems casos. 3.- La variable selector no puede ser: cadena, real, cadena de dgitos. 4.- Cuando se quiere realizar una misma accin para distintos valores de la expresin evaluada, se coloca una sentencia case por cada valor, sin ninguna

Crdova Neri, T.

Borland C++ 5. 0.2 accin, y la accin comn se pone al final del ltimo valor. Por ejemplo, el segmento de cdigo: switch (a) { case 1:case 2: case 3: cout<<"Accin para 1, 2 y 3"; break; case 4: cout<<"Accin para 4"; break; default: cout<<"Accin para cualquier otro valor"; break; } producir las siguientes salidas: para a=1: Accin para 1 Accin para 2 Accin para 3 para a=2: Accin para 2 Accin para 3 para a=3: Accin para 3 para otro a: Accin para cualquier otro valor

Problema1. Escribir un programa, controlado por men, que permita calcular el rea del cuadrado, del crculo, del rectngulo o el tringulo de acuerdo a la opcin seleccionada. Implementar tambin una opcin "finalizar", que permita abandonar el programa.
SOLUCIN

// MENU.CPP

#include <iostream.h> #include <iomanip.h> // para setiosflags() #include <conio.h> #include <math.h> // Para pow () #include <stdlib.h> //Para r exit (1) int main() { int sel; clrscr(); cout<<setiosflags(ios::showpoint+ios::right); cout<<"\tMENU: AREAS"<<endl<<endl; cout<<"\t1.-Cuadrado"<<endl; cout<<"\t2.-Circulo"<<endl; cout<<"\t3.-Rectangulo"<<endl;
Cordova Neri, T.

79

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

cout<<"\t4.-Triangulo"<<endl; cout<<"\t5.-Finalizar"<<endl<<endl; cout<<"\tSelecciona opcion: "; cin>>sel; switch (sel) { case 1: float l;clrscr(); cout<<"Area del Cuadrado"<<endl; cout<<"Ingresa el lado: "; cin>>l; cout<<"El area es: "<<setw(8)<<setprecision(2)<<pow(l,2); break; case 2: clrscr(); float r,ci; cout<<"Area del Circulo"<<endl; cout<<"Ingrese el radio: "; cin>>r; ci=M_PI*pow(r,2); cout<<"El area es: "<<setw(8)<<setprecision(2)<<ci; break; case 3:case 4: float b,h,area; clrscr(); if (sel=3) cout<<"Area del Tringulo"<<endl; else cout<<"Area del Rectngulo"<<endl; cout<<"Ingrese la base y la altura: "; cin>>b>>h; area=b*h; if (sel=3) area/=2; cout<<"El area es: "<<setw(8)<<setprecision(2)<<area; break; case 5:exit(1); break; } //switch (sel) getche(); return 0; }

Crdova Neri, T.

Borland C++ 5. 0.2 Salida:

Ejemplo 2. -Disear un programa que permita disponer de 3 alternativas :


Alternativa 1: Permite leer la base y el exponente para calcular la potencia de un numero. Alternativa 2: Permite leer un numero n positivo y luego calcula la raiz cuadrada Alternativa 3: permite salir del modo compilacin al programa fuente Asimismo, el programa debe enviar el mensaje Fuera de rango , cuando el usuario digita un numero que no esta dentro de la lista disponible.

Solucion

// problema case1.cpp

#include <stdlib.h> // para exit(1) #include <math.h> //para pow() ,sqrt() #include<iostream.h> //para cin,cout #include<conio.h> // para clrscr() # define linea "----------------------------------------------------" void main() { int opc,n,raiz,pot,poten,base; clrscr(); gotoxy(15,3);cout<<" Bienvenidos al Menu"; gotoxy(4,4);cout<<linea;
Cordova Neri, T.

81

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

gotoxy(15,5);cout<<" [1] Potencia"; gotoxy(15,6);cout<<" [2] Raiz cuadrada"; gotoxy(15,7);cout<<" [3] Salir"; gotoxy(4,10);cout<<linea; gotoxy(15,11);cout<<" Ingrese opcion: ";cin>>opc; switch(opc) { case 1: clrscr(); gotoxy(4,2);cout<<linea; gotoxy(15,4);cout<<" Ingrese la base :"; cin>>base; gotoxy(15,5);cout<<" Ingrese la potencia:"; cin>>pot; gotoxy(15,6);poten=pow(base,pot); gotoxy(15,7);cout<<" El numero "<< base<<" elevado a " <<pot <<" es ="<<poten; gotoxy(4,10);cout<<linea; getche(); break; case 2: clrscr(); gotoxy(4,2);cout<<linea; gotoxy(15,4);cout<<" Ingrese un numero :"; cin>>n; raiz=sqrt(n); gotoxy(15,5);cout<<" La raiz cuadrada de "<< n<<" es ="<<raiz; gotoxy(4,10);cout<<linea; getche(); break; case 3:default:

Crdova Neri, T.

Borland C++ 5. 0.2 clrscr(); gotoxy(2,8);cout<<linea; gotoxy(10,12);cout<<" Fuera de Rango "; gotoxy(2,14);cout<<linea; exit(1); getche(); } // fin de switch() } Salida

Ejemplo 3.-Disear un programa que permita validar datos de usuario por apellido y clave, si los datos son correcto el sistema presenta un menu de opciones para <1> Ordenadores <2> Impresoras <3> Lectoras y <4> Salir. Si edita 1, el sistema presenta un submenu mostrando los tipos de marcas por cada ordenador: < I > Ibm, <C> Compac y <O> Olietti. Por cada opcin Ud. ingrese el numero de ordenadores a comprar y luego el precio por unidad y calcula el monto a pagar.

Cordova Neri, T.

83

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Anlogamente sucede para las dems opciones : para Impresoras y Lectoras. Si Ud. ingreso sus datos de validacin incorrectos el sistema enva el mensaje: " Sr. usuario, sus Datos son incorrectos, hasta pronto"; Solucion // programa case.cpp #include <stdlib.h> #include <math.h> #include <stdio.h> #include<iostream.h> #include<conio.h> #include<dos.h> # define linea "----------------------------------------------------" main() { int nibm,pibm,monto,montoc,ncomp,pcomp,noliv,poliv,montooliv; int montolasser,nimpl,pimpl; int montomat,nimpm,pimpm; int montolcre,nlcre,plcre; int montolhp,nlhp,plhp; char apell[10],clave[10], char opc,imp; clrscr(); gotoxy(25,8);cout<<"MODULO DE VALIDACION"; gotoxy(14,9);cout<<linea; gotoxy(20,12);cout<<" Ingrese apellido :",gets(apell); gotoxy(20,13);cout<<" Ingrese clave :" ,gets(clave);

if (strcmp(cod,"cordova")==0&& strcmp(clave,"tcn")==0) {clrscr(); gotoxy(15,12);cout<<" Bienvenidos al sistema de Ventas";

Crdova Neri, T.

Borland C++ 5. 0.2 gotoxy(4,2);cout<<linea; gotoxy(15,5);cout<<" [O] Ordenadores"; gotoxy(15,6);cout<<" [I] Impresoras"; gotoxy(15,7);cout<<" [L] Lectoras"; gotoxy(15,8);cout<<" [S] Salir"; gotoxy(4,10);cout<<linea; gotoxy(16,14);cout<<" Ingrese opcion :"; cin>>opc; switch(opc) { case 'o':case 'O': clrscr(); gotoxy(4,2);cout<<linea; gotoxy(15,4);cout<<" <I> IBM :"; gotoxy(15,5);cout<<" <C> Compact"; gotoxy(15,6);cout<<" <O> Olivetti"; gotoxy(4,10);cout<<linea; gotoxy(15,7);cout<<" Edite opcion";cin>>imp; switch(imp) { case 'i':case 'I': { clrscr(); cout<<"\nOrdenadores marca IBM"; cout<<"\ningrese numero de ordenadores a comprar:";cin>>nibm; cout<<"\ningese precio por unidad:"; cin>>pibm; monto=nibm*pibm; cout<<" \nUd. debe pagar :"<<monto; getche(); }
Cordova Neri, T.

85

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

break; case 'c':case 'C': {clrscr(); cout<<"\nOrdenadores marca Compac"; cout<<"\ningrese numero de ordenadores a comprar:";cin>>ncomp; cout<<"\ningese precio por unidad:"; cin>>pcomp; montoc=ncomp*pcomp; cout<<" \nUd. debe pagar :"<<montoc; getche(); } break; case 'o':case 'O': {clrscr(); cout<<"\nOrdenadores marca OLIVETTI"; cout<<"\ningrese numero de ordenadores a comprar:";cin>>noliv; cout<<"\ningese precio por unidad:"; cin>>poliv; montooliv=noliv*poliv; cout<<" \nUd. debe pagar :"<<montooliv; getche(); } break; default:cout<<"No de existe Marca de tal Ordenador, hasta luego"; getche(); exit(1); } break; // fin de alternativas de ordenadores :O : Ordenadores

Crdova Neri, T.

Borland C++ 5. 0.2 case 'i':case 'I':// Opcion de case principal :I : Impresoras clrscr(); gotoxy(15,2); cout<<"Impresoras"; gotoxy(15,4);cout<<"<L> Lasse :"; gotoxy(15,5);cout<<"<M> Matricial"; gotoxy(15,6);cout<<" Edite opcion";cin>>imp; switch(imp) { case 'l':case 'L': clrscr(); cout<<"\ningrese numero de impresoras Lasser:";cin>>nimpl; cout<<"\ningese precio por unidad:"; cin>>pimpl; montolasser=nimpl*pimpl; cout<<" \nUd. debe pagar :"<<montolasser; getche(); break; case 'm':case 'M': clrscr(); cout<<"\ningrese numero de impresoras Matricial:";cin>>nimpm; cout<<"\ningese precio por unidad:"; cin>>pimpm; montomat=nimpm*pimpm; cout<<" \nUd. debe pagar :"<<montomat; getche(); break; default:cout<<"No existe Impresoras"; getche(); exit(1);
Cordova Neri, T.

87

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

}// fin de alternativas de Impresoras :I: Impresoras break; case 'l':case 'L':// Opcion de case principal :L : Lectaras clrscr(); gotoxy(15,2); cout<<"Lectoras"; gotoxy(15,4);cout<<"<C> Creative :"; gotoxy(15,5);cout<<"<H> HP"; gotoxy(15,6);cout<<" Edite opcion";cin>>imp; switch(imp) { case 'c':case 'C': clrscr();

cout<<"\ningrese numero de Lectoras Creative: ";cin>>nlcre; cout<<"\ningese precio por unidad:"; cin>>plcre; montolcre=nlcre*plcre; cout<<" \nUd. debe pagar :"<<montolcre; getche(); break; case 'h':case 'H': clrscr();

cout<<" \ningrese numero de Lectoras HP: ";cin>>nlhp; cout<<" \ningese precio por unidad:"; cin>>plhp; montolhp=nlhp*plhp; cout<<" \nUd. debe pagar :"<<montolhp; getche(); break; default: cout<<"No existe Marca de lectoras"; getche(); exit(1);

Crdova Neri, T.

Borland C++ 5. 0.2 } break; case 's':case 'S': cout<<" Salida del sistema, presione ENTER"; getche(); exit(1); default:clrscr();gotoxy(20,8);cout<<" No existe Marca de Producto"; } //fin switc(opc) } // alternativa de if else cout<<" Sr. usuario, sus Datos son incorrectos, hasta pronto"; getche(); } Salida.- Se presenta el modulo de validacin de datos para el usuario

Si los datos son ingresados correctamente, se muestra las alternativas :

Cordova Neri, T.

89

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Ud. dispone de las alternativas, cada una tiene otras alternativas, por ejemplo si edita O, entonces se obtiene los diferentes tipos de ordenadores :

Ahora Ud. puede seleccionar tipo de impresoras y genera su reporte del monto a cancelar. Problema 4.- Disear un programa que permita leer la letra inicial del mes (Enero, Febrero, Marzo o Abril) y luego se visualice el mensaje: Mes de ...................... Observacin En el siguiente programa se ilustra que usando la estructura Mltiple o la estructura if con anidamiento se puede obtener el mismo resultado Solucion A) Mediante Case (..)
Crdova Neri, T.

Borland C++ 5. 0.2 //case_if_anidados.cpp #include<iostream.h> #include<conio.h> main() { char mes; clrscr();

gotoxy(24,1),cout<<"Meses del Ao"; gotoxy(23,2),cout<<"=============="; gotoxy(5,3),cout<<"Ingrese letra inicial del mes:";cin>>mes; switch(mes) { case 'E':case 'e': gotoxy(20,5),cout<<" Mes de Enero";break; case 'F':case 'f': gotoxy(20,5),cout<<" Mes de Febrero";break; case 'M':case 'm': gotoxy(20,5),cout<<" Mes de Marzo";break; case 'A':case 'a': gotoxy(20,5),cout<<" Mes de Abril";break; default: gotoxy(20,5),cout<<" Letra fuera de rango......!"; } getche(); } b) Mediante If #include<iostream.h> #include<conio.h> main() {char mes[10]; clrscr(); gotoxy(20,1),cout<<" Meses del Ao"; gotoxy(21,2),cout<<"================"; gotoxy(20,4),cout<<"Ingrese letra inical del mes:";gets(mes); if(strcmp(mes,"E")==0||strcmp(mes,"e")==0) { gotoxy(20,6);cout<<" Mes de Enero"; }
Cordova Neri, T.

91

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

else if(strcmp(mes,"F")==0||strcmp(mes,"f")==0) {gotoxy(20,6);cout<<" Mes de Febrero"; } else if(strcmp(mes,"M")==0||strcmp(mes,"m")==0) { gotoxy(20,6);cout<<" Mes de Marzo"; } else if(strcmp(mes,"A")==0||strcmp(mes,"a")==0) {gotoxy(20,6);cout<<" Mes de Abril"; } else {gotoxy(20,5); cout<<" El valor ingresado esta disponible......!"; } getche();} Salida

Problema 5.- Disear un programa que permia leer el mes y ao( en numeros) y luego el programa envia el mensaje indicando el numero de dias correspondiente al ao. Solucion //case_dias.cpp del mes y

Crdova Neri, T.

Borland C++ 5. 0.2 #include <iostream.h> #include <stdio.h> #include <conio.h> main() { int dias=0, mes=0, an=0; gotoxy(12,4);cout<<"CALENDARIO SEGUN DIA Y ANN"; gotoxy(12,6); cout<<"Ingrese mes :";cin>>mes; gotoxy(12,7); cout<<"Ingrese anno :";cin>>an; switch (mes) { //definir los mese de 31 dias case 1: case 3: case 5: case 7: case 8: case 10: case 12: dias = 31; break; //definir los mese de 30 dias case 4: case 6: case 9: case 11: dias = 30; break; case 2: // Febrero 93 // Abril // Junio // Setiembre // Noviembre // Enero // Marzo // Mayo // Julio // <gosto // Octubre // Diciembre

Cordova Neri, T.

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

// verificando si existe anno bisiesto if ((an % 4 == 0) && (an % 100 != 0) || (an % 400 == 0)) dias = 29; else dias = 28;

break; default: clrscr(); gotoxy(12,4); cout<<"El mes no es valido"; break; } if (mes>=1 && mes<=12) gotoxy(12,9); cout<<"El mes "<<mes<<" del anno "<<an<<" tiene "<<dias<<" dias"; getche(); } Salida

3.-Estructuras Repetitivas
Permiten realizar instrucciones ms de una vez, formando bucles. A cada

repeticin se le llama tambin iteracin, por lo cual las estructuras repetitivas se denominan tambin iterativas. Para las estructuras repetitivas se suelen utilizar dos tipos de variables especiales: Contadores: los cuales incrementan o decrementan su valor en una cantidad constante. Deben inicializarse en un valor constante. sintaxis

Crdova Neri, T.

Borland C++ 5. 0.2 cont = cont + 1 inicialice : cont =1

Acumuladores: los cuales incrementan o decrementan su valor en una cantidad variable. Tambien deben incializarse sintaxis suma = suma + cont inicialice: suma=0

Cabe destacar que todas las estructuras repetitivas se pueden anidar.

Tipos de sentencias repetitivas: 3.1.- Sentencia while


Llamado tambin bucle con entrada controlada, es aquel que repite un grupo de acciones mientras que una expresin lgica sea verdadera (o distinta de cero). sintaxis: while (expresin) { <instrucciones>; } Hay que tener especial cuidado para conseguir, en algn momento, una forma de que la expresin a evaluar sea falsa. Es muy fcil escribir bucles que se repiten indefinidamente hasta agotar la memoria y hacer colapsar al sistema. Problema 1.- Escribir un programa que lea una cadena y determine en ella la frecuencia de aparicin de cada vocal
SOLUCIN:

// WHILE_VOCAL.CPP

#include <iostream.h> #include <stdio.h> #include <conio.h> #include <ctype.h> // Para toupper (convierte un carcter a mayscula) void main() { int fa=0,fe=0,fi=0,fo=0,fu=0; char c=' \ 0'; cout<<"Introduzca una cadena"<<endl;
Cordova Neri, T.

95

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

while (c!=' \ n') { c=toupper(getchar()); switch (c) { case 'A': fa++; break; case 'E': fe++; break; case 'I': fi++; break; case 'O': fo++; break; case 'U': fu++; break; } } cout<<endl<<"RESULTADOS"<<endl; cout<<"a se ley "<<fa<<" veces"<<endl; cout<<"e se ley "<<fe<<" veces"<<endl; cout<<"i se ley "<<fi<<" veces"<<endl; cout<<"o se ley "<<fo<<" veces"<<endl; cout<<"u se ley "<<fu<<" veces"<<endl; getch(); } Salida:

Problema 2.- Escribir un programa que lea un numero compuesto por mas de un digito y luego mostrar: Total de dgitos, total de dgitos pares e impares, numero invertido, total de suma de dgitos pares e impares respectivamente. El programa debe ser interactivo, es decir; despus de cada ejecucin, el sistema envia el mensaje Desea

Crdova Neri, T.

Borland C++ 5. 0.2 continuar..? (S / N). Si edita S continua ejecutando el programa, en otro caso finaliza. Solucin // while_digitos.cpp #include <iostream.h> #include <conio.h> void main() { int r,d,n,inv=0,par=0,impar=0, nd,sump=0,sumimpar=0; char resp='s'; while(resp=='s') { gotoxy(8,3);cout<<"Ingrese un numero con mas de 1 digito : "; cin>>n; r = n; nd=0;// inicializo contador de digitos

while(n>0) // descompongo el numero n ingresado { d=n%10; nd=nd+1;

If (d%2==0) { par++; sump+=d; } else { impar++; sumimpar+=d; } inv=inv*10+d; n=n/10; } gotoxy(8,5); cout<<" El numero "<<r<<" tiene :"; gotoxy(12,7); cout<<" "<< nd<< " digitos "; gotoxy(12,8); cout<<" Invertido es = "<<inv; gotoxy(12,9); cout<<" Tiene "<<par<<" digitos pares";
Cordova Neri, T.

97

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

gotoxy(12,10); cout<<" La suma de los numeros pares es = "<<sump; gotoxy(12,11); cout<<" Tiene "<<impar<<" digitos impares"; gotoxy(12,12); cout<<" La suma de los numeros impares es = "<<sumimpar; gotoxy(20,16); cout<<"Desea continuar..(s/n)";cin>>resp; } getche(); } Salida

Problema 3. Disear un programa que permita leer dos nmeros comprendidos entre 10 y 99. luego mostrar el producto respectivo. Si el usuario edita nmeros que no estn en el rango especificado, el sistema enva el mensaje: Sr. sus nmeros debe estar en el rango <10..99>". Asimismo, el programa debe ser interactivo, es decir; despus del error, el sistema enva el mensaje Desea continuar.......? ( s / n) . Solucion // while_producto.cpp #include <iostream.h> #include <conio.h> main() { int n,d,p,i=0,a,b;

Crdova Neri, T.

Borland C++ 5. 0.2 char resp; resp='s'; clrscr(); while(resp=='s') { gotoxy(10,3);cout<<" MULTIPLICACION DE NUMEROS "; gotoxy(14,6);cout<<"Ingrese multiplicando : ";cin>>a; gotoxy(14,7);cout<<"Ingrese multiplicador :"; cin>>b; if((a>9) &&(a<99)&& (b>9)&&(b<99)) { n=b; while(n>0) //para mensajes de productos parciales { d=n%10; p=d*a; i++; cout<<"\nEl "<<i<< " producto parcial es :"<<p<<endl; n=n/10; } p=a*b; gotoxy(14,13);cout<<" El producto de "<<a<< " * "<<b<<" es = "<<p; getche(); } else {clrscr(); gotoxy(20,12);cout<<"Sr. sus nmeros debe estar en el rango <10..99>"; getche(); } clrscr(); gotoxy(20,10);cout<<"Desea continuar..?(s/n)";cin>>resp; clrscr(); } getche(); }
Cordova Neri, T.

99

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Salida. Si el usuario ingreso los dgitos en el rango solicitado, el sistema calcula el producto, tal como se mustra en la siguiente grafica.

Problema 4. Disear un programa que permita validar datos de usuario usando solo un carcter para cdigo y uno para clave. Si los datos son correctos, el sistema solicita que ingrese dos elementos de la serie 1+2+3+4+.......+n. Los elementos son lado izquierdo (ladi) : indicando primer elemento y lado derecho ( ladd) indicando segundo elemento; es decir ;definimos un rango de elementos a sumar. Luego , generar reportes que permita saber la suma acumulada y el total de dgitos que tiene este resultado. Si los datos son incorrectos, el sistema enva el mensaje de error. Solucion //while_if.cpp #include<iostream.h> #include<conio.h> void main() {int acum=0,ladi,ladd,li; char codigo, clave; gotoxy(12,6);cout<<" Ingres codigo : ";cin>>codigo;
Crdova Neri, T.

Borland C++ 5. 0.2 gotoxy(12,7); cout<<" Ingres clave : ";cin>>clave; if((codigo=='a')&& (clave=='b')) {clrscr(); gotoxy(12,6); cout<<"Ingrese lado inzquierdo :" ;cin>>ladi; gotoxy(12,7); cout<<"Ingrese lado derecho clrscr(); li=ladi; while (ladi<=ladd) { acum+=ladi; ladi++; } gotoxy(6,6);cout<<" La suma desde "<<li<< " hasta "<<ladd<<" es= "<<acum; if ((acum>=0)&&(acum<10)) { } else { if ((acum>9)&&(acum< 100)) { gotoxy(6,8);cout<<" La suma tiene 2 digitos"; } else { if ((acum>99)&&(acum< 999)) { } } // fin del if else {clrscr();
Cordova Neri, T.

:" ;cin>>ladd;

gotoxy(6,7);cout<<" La suma tiene 1 digito ";

gotoxy(6,9);cout<<" La suma tiene 3 digitos"; } }

101

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

gotoxy(12,12); cout<<" Sus datos no se registraron, hasta luego :"; } getche(); } Salida

Problema 5.- Disear un programa que permita leer un numero n entero positivo, luego calcular su factorial e imprir su resultado. Solucion // WHILE_FACT.CPP #include<iostream.h> #include<conio.h> main() {double fact=1.0,n,minumero; gotoxy(8,4);cout<<" Ingrese un numero : ";cin>>n; minumero=n; while (n>0) { fact=fact*n; n--; } gotoxy(15,6);cout<<"El factorial de "<<minumero <<" es ="<<fact; getche();} Salida

Crdova Neri, T.

Borland C++ 5. 0.2

Problema 6.- Disear un programa que permita leer dos numeros a, b y luego hallar el mximo comun divisor. Solucion // WHILE_Maximo_divisor.CPPc #include<conio.h> main() {int a,b,temporal,mcd; gotoxy(6,2);cout<<" MAXIMO COMUN DIVISOR; gotoxy(8,4);cout<<" Ingrese primer numero : ";cin>>a; gotoxy(8,5);cout<<" Ingrese segundo numero : ";cin>>b; while((a%b)!=0) { temporal=a; a=b; b=temporal; } mcd=b; gotoxy(8,7);cout<<"El maximo comun divisor de "<<a <<" y "<<b <<"es ="<<mcd; getche(); } Salida

Cordova Neri, T.

103

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 7.- Disear un programa que permita leer dos numeros a, b y luego hallar el minimo comun mltiplo Solucion // WHILE_Minimo_co_mul.CPP #include<iostream.h> #include<conio.h> main() {int a,b,temporal,mcd,primero, segundo,resultado; gotoxy(6,2);cout<<" MAINIMO COMUN MULTIPLO"; gotoxy(8,4);cout<<" Ingrese primer numero : ";cin>>a; gotoxy(8,5);cout<<" Ingrese segundo numero: ";cin>>b; primero=a; segundo=b; while((a%b)!=0) { temporal=a; a=b; b=temporal%b; } mcd=b; resultado=(primero*segundo)/mcd; gotoxy(8,7); cout<<"El Minimo comun multiplo de "<<a <<" y "<<b <<" es = "<<resultado; getche(); }

Crdova Neri, T.

Borland C++ 5. 0.2 Salida

Problema 8.- Disear un programa que permita leer el numero de filas y columnas y luego generar un reporte que permita formar la tabla de multiplicar . Solucion //while_mult.cpp #include <iostream.h> #include <stdio.h> #include <conio.h> main() { int n,m,i=1,j=1; gotoxy(12,3);cout<<"TABLA DE MULTIPLICAR"; gotoxy(4,5);cout<<"ingrese numero de fila :";cin>>n; #include <stdlib.h>

gotoxy(4,6); cout<<"ingrese numero de columna :";cin>>m; while(i<=n ) { cout<<"Para fila :"<<i<<endl; while ( j <= m ) { cout<<"\ti= "<<i<<" y "<<"j="<<j<<" se tiene "<<i<<"*"<<j<<"="<<i*j<<endl; j++; } cout<<"\n"; // para nuevo bloque

Cordova Neri, T.

105

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

i++; j = 1; // iniciar j nuevamente

} system("pause"); }

Problema 9.-Disear un programa que permita calcular la suma acumulada de la

SERIE = 1+x+x*x/2 ! +.......+ x^n / n !


Para lo cual se debe ingresar el valor de x y el numero de terminos a sumar. Solucion //while_sum_fact.cpp #include<iostream.h> #include<conio.h> #include<stdio.h> #include<stdlib.h> void main() { int x,n,i=1; clrscr(); gotoxy(8,2);cout<<"SUMA DE SERIE = 1+X+X*X/2!+...+X^n/n!" ;
Crdova Neri, T.

float r=0.0;

Borland C++ 5. 0.2 gotoxy(8,4);cout<<"Ingrese el valor de x : ";cin>>x;

gotoxy(8,5);cout<<"Ingrese el valor de n : ";cin>>n; while(i<=n) { float fact=1,g=1;int j=1; while(j<=i) { g=x*g; fact=fact*j; j++; } r=r+g/fact; i++; }

gotoxy(8,7);cout<<"La suma Acumulada es = ";cout<<(r+1)<<endl<<endl; system("pause");} Salida

Cordova Neri, T.

107

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 10.-Disear un programa que permita leer n numeros enteros, para finalizar edite 0(cero). Asimismo el programa debe permitir : a.- La suma de numeros pares positivos. b.- La suma de numeros impares positivos. c.- Los resultados de a) y b), mostrarlos en forma concatenada. d.-Al resultado de c) y de derecha a izquierda, decir si el digito es par y su posicin que ocupa, si es impar y su posicin que ocupan respectivamente. e.-Segn los datos ingresados, genere reportes del :Total de digitos pares e impares postivos, digitos negativos pares e impares, al mayor digito par y el mayor digito inpar negativo. Solucion //while_if_uni.cpp #include <iostream.h> #include <conio.h> #include <math.h> main () {int i=0,n,pp=0,spp=0,mpp=0,ip=0,in=0,sin=0,sip=0,min=0,ud,o,num,s=0,y,x,p1=0; gotoxy(40,2);cout<<"Edite 0(cero) para finalizar:"; gotoxy(10,2);cout<<"Ingrese numero : ";cin>>num; while(num!=0) { if (num!=0) { if(num>0) { if (num%2==0) { pp++; spp+=num; } if(num>mpp)

Crdova Neri, T.

Borland C++ 5. 0.2 {mpp=num; } else { ip++; sip+=num; } else { if (num %2!=0) {in++; sin+=num; } if (num>>min) { min=num; } i++; } gotoxy(10,4+i+1); cout<<"ingrese numero:";cin>>num; } cout<<" \nSuma de pares positivos :"<<spp<<endl; cout<<" \nSuma de impares positivos:"<<sip<<endl; getche(); y=sip; while(y>0) {y=y/10; p1++; } x=(spp*pow(10,p1))+ sip;
Cordova Neri, T.

109

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

o= x; while (o>0) { o=o/10; s++; } o=x; cout<<"\n el resultado concatenado es "<<o<<endl; getche(); while (o>0) { ud= o%10; if (ud%2==0) {cout<<"\n "<<ud<<" es par, su posicion es "<<s<<endl; s--; else { cout<<"\n "<<ud<<" es impar,su posicion es "<<s<<endl; s--; o=o/10; } getche(); gotoxy(35,18);cout<<"el total de pares positivos es gotoxy(35,19);cout<<"el total de impares positivos es gotoxy(35,20);cout<<"el total de impares negativos es :"<<pp; :"<<ip; :"<<in; } } // i=0;

gotoxy(35,21);cout<<"el mayor de los pares positivos es :"<<mpp; gotoxy(35,22);cout<<"el mayor de los impares negativos es :" <<min;

Crdova Neri, T.

Borland C++ 5. 0.2 getche(); } Salida

3.2.- Sentencia do-while


Llamado bucle con salida controlada, ejecuta <instrucciones> lo mismo que la estructura while, con la diferencia que primero ejecuta una <instruccin> y luego verifica la <condicion>, a partir de esta ejecucin, se comprta como la estrucura while. por este motivo la estructura se repiten por lo menos una vez. Sintaxis do { <instrucciones> } while (expresion) ;

Este tipo de secuencias es muy utilizada en procesos de validacin de datos (cuando se quiere que el usuario del programa introduzca siempre datos correctos). Es decir, se repite un proceso de lectura hasta que la expresin (que indica su invalidez) sea falso.

Cordova Neri, T.

111

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 1.- Disear un programa que permita calcular la suma acumulada de la serie : 1+2+3+4+.+n. El usuario ingresa el numero de trminos a sumar. Solucion //do_sum.cpp # include < iostream.h > #include <conio.h> main() { int cont=1,suma=0,n; cout<<"Ingrese numero de trminos"; cin>>n; do { suma+=cont; cont++; } while (cont<=n); cout<<"la suma es :"<<suma; getche(); } Salida Problema 2.- Disear Disear un programa que permita calcular la suma acumulada de la serie : 1+2+3+4+.+n. El usuario ingresa el numero de trminos a sumar. Despus del resultado el sistema envia el mensaje Desea continuar..?(s/n) . Solucion // do_suma_rep.cpp // do_suma_rep.cpp #include<iostream.h> #include <stdlib.h> //para system() main() { int cont=1,suma=0,n; char resp; clrscr(); do //modulo para repetir el programa {clrscr(); gotoxy(12,4);cout<<" Benvenidos al sistema "; #include <conio.h> Do{ }while( ! (cont>n)) ; donde : ! = not Obs.- La condicin de prueba pude ser tambien

Crdova Neri, T.

Borland C++ 5. 0.2 gotoxy(12,6);cout<<"Ingrese numero de trminos : "; cin>>n; do { suma+=cont; cont++; } while (cont<=n); // observe, esta cond. es lo mimso que i<=n gotoxy(12,8); cout<<"la suma es :"<<suma; gotoxy(40,10); cout<<"Desea contninuar..?(s/n)";cin>>resp; } while(resp=='s'|| resp=='S'); clrscr(); //para limpiar resultados cuando edito resp='n' gotoxy(15,12);cout<<"Gracias por usar do while...., hasta luego..!!"; gotoxy(25,18);system("pause");//para recibir mensaje del sisema } salida

Si Ud. edita n, el sistema envia el mensaje mostrado en la siguiente figura

Cordova Neri, T.

113

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 2.- Disear un programa que calcule la suma de todo tipo de progresiones aritmticas: crecientes decrecientes y hasta de un solo trmino. El programa solicita que ingrese tanto el primer como el ltimo trmino y la razn de la progresin. Implementar una opcin para que se impriman todos los trminos de la sumatoria. Validar los datos ingresados. SOLUCIN : // do_while_suma.cpp #include <iostream.h> #include <conio.h> #include <ctype.h> main() { int n,i,r,resp,suma=0; clrscr(); cout<<"\n Primer trmino de la suma : "; cin>>i; cout<<"\n Ultimo trmino de la suma : "; cin>>n; if (n!=i) { do {cout<<"\nIngrese la razon de la suma : "; cin>>r; if (r==0) {cout<<"\nLa razon es = "<<r;

Crdova Neri, T.

Borland C++ 5. 0.2 cout<<"\nERROR, debe ser distinto de cero"<<endl; else if ((n-i)%r!=0) cout<<"\nError la razon "<<r<<" debe ser divisor de "<<(n-i)<<endl; else if ((n-i)/r<0) }

{cout<<"\nERROR r debe ser "; if (n-i>0) cout<<"positivo\n"; if (n-i<0) cout<<"negativo\n"; } } while ((r==0)||((n-i)/r<0)||(n-i)%r!=0); } //fin de if (n!=i) cout<<"\n Desea Imprimir todos los trminos de la serie...? (S/N): "; do resp=toupper(getch()); while ((resp!='S')&&(resp!='N')); cout<<char(resp)<<endl; if (i==n) cout<<"\nSuma = "<<i; //Ya no hay por qu hacer la suma else { cout<<"\nSuma= "; int j=i; do { suma+=j; if (resp=='S') { //Solo para imprimir los trminos if (j<0) gotoxy(wherex()-1,wherey());cout<<j<<"+";
Cordova Neri, T.

115

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

} j+=r; } while (j!=n+r); gotoxy(wherex()-1,wherey()); if (resp=='S') cout<<" = "; cout<<suma;} //fin del else ; getche(); } Salida:

Problema 3: Disear un programa que permita calcular al suma cumulada de la

SERIE = 1/(1+2^2+3^2 +4^2.......+ x^n)


Para un error de e =10 exp(-2) ingresado por el usuario. Solucion //do_whi_serie.cpp #include <iostream.h> #include <math.h> #include <conio.h> #include <iomanip.h>

# define linea "----------------------------------------------------" main ()


Crdova Neri, T.

Borland C++ 5. 0.2 { int n=1; float s=0.0,e; gotoxy(10,2);cout<<"Ingrese precision(error) :";cin>>e; cout<<linea; do { s=s+(1.0/(pow(n,2))); gotoxy(10,3+n);cout<<setw(10)<<setprecision(2)<<"valor iteracion "<<n<<endl; n++; }while(!(1.0/(n*n)<e)); // puede definer un rango deprueba:e<n_esimo termino<e gotoxy(10,n+7);cout<<"Valor aproximado final: ";cout<<setw(6)<<setprecision(3) <<s<<" en iteracion "<<n<<endl; gotoxy(10,n+9);cout<<"Sesatisface que:";cout<<setw(6)<<setprecision(3)<<p <<"<"<<e<<" en iteracion "<<n<<endl; getche(); } Salida de s="<<s<<"en

Problema 4: Disear un programa que permita validar practicas calificadas (pc1) definidas en el rango:0..20. El sistema solo acepta 3 intentos los cuales le va informando y superado este valor, finaliza el programa. Solucion // validar.cpp #include<iostream.h>
Cordova Neri, T.

117

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

#include <stdlib.h> #include<conio.h> main() { int i=0,pc1; clrscr(); gotoxy(10,4); cout<<" Sr. usuario, tiene Ud. solo 3 opciones"; do { i++; gotoxy(10,8); cout<<" Le quedan "<<(4-i)<<" intentos:";clreol();cin>>pc1; gotoxy(10,12);cout<<" La practiva pc1= "<< pc1<<" esta fuera de rango "; if(i>=3 ) {clrscr(); gotoxy(12,8);cout<<"Sr. se agotaron sus opciones, hasta luego: "; getche(); exit(1);} }while ((pc1<0)||(pc1>20)); clrscr(); gotoxy(12,8);cout<<"Sr. Bienvenidos al sistema: "; getche(); } Salida

Crdova Neri, T.

Borland C++ 5. 0.2

Problema 5. Problema que valida si desea o no salir del programa despus de mostrar los resultados de calcular el resto de 2 nmeros. Solucion //do_while_si.cpp #include<iostream.h> #include<conio.h> main() { int a,b; do { cout<<"ingresar el valor de a:";cin>>a; cout<<"ingresar el valor de b:";cin>>b; k=a%b; cout<<El resto de <<a<<entre <<b <<es : <<k<<endl; do { cout<<"Desea terminar...?(s/n)";cin>>resp; clrscr(); } while((resp=='s') && (resp=='n')); } while ( resp =='n'); getch(); } Salida:
Cordova Neri, T.

char resp;

float k;

119

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 6.- Disear un programa que permita ingresar una cantidad de dinero y luego el programa debe descompner el billete ingresado en cantidades menores es decir en: Billetes de 100, de 50, de 20 de 10 de 5 y de 1 sol Solucion // while_Billete.cpp #include<iostream.h> #include<conio.h> void main() { clrscr(); int s,b100,b50,b20,b10,b5,b1,r1,r2,r3,r4,r5; char op='y'; while(op=='y') { do { cout<<"\nIngrese la Cantidad de Soles, en el reango 0.. 1000"; cin>>s; } while (!(s>=1000)); b100=int(s/100);r1=s%100; b50=int(r1/50);r2=r1%50;

Crdova Neri, T.

Borland C++ 5. 0.2 b20=int(r2/20);r3=r2%20; b10=int(r3/10);r4=r3%10; b5=int(r4/5);r5=r4%5; b1=r5; cout<<"\nHay "<<b100<<" billetes de 100"; cout<<"\nHay "<<b50<<" billetes de 50"; cout<<"\nHay "<<b20<<" billetes de 20"; cout<<"\nHay "<<b10<<" billetes de 10"; cout<<"\nHay "<<b5<<" billetes de 5"; cout<<"\nHay "<<b1<<" billetes de 1"; cout<<"\n\n\t\tDESEA CONTINUAR (y/n): ";cin>>op; cout<<"\n"; clrscr(); } } getch();

Problema 7.- Disear un programa que permita leer n nmeros enteros y luego generar reportes para conocer:
Cordova Neri, T.

121

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Total de Nmeros PARES POSITIVOS Suma de Nmeros PARES POSITIVOS Total de Nmeros PARES NEGATIVOS Suma de Nmeros PARES NEGATIVOS Total de Nmeros IMPARES POSITIVOS Suma de Nmeros IMPARES POSITIVOS Total de Nmeros IMPARES NEGATIVOS Suma de Nmeros IMPARES NEGATIVOS El programa permite leer nmeros hasta que Ud. presiona 0(cero). Solucion //do_digitos_p_i.cpp #include<iostream.h> #include<conio.h> main() {int n,i=4,npp=0,npn=0,nip=0,nin=0,sumanpp=0,sumanpn=0,sumanip=0,sumanin=0; do { i++; gotoxy(15,i);cout<<"Ingrese un numero: ";cin>>n; if(n%2==0) { gotoxy(42,i);cout<<"numero par"; if (n>0) { gotoxy(42,i);cout<<"numero par positivo"; sumanpp+=n; npp++; else {gotoxy(42,i);cout<<"numero par negativo"; sumanpn+=n; }

Crdova Neri, T.

Borland C++ 5. 0.2 npn++; } else { gotoxy(42,i);cout<<"numero impar"; if (n>0) { gotoxy(42,i);cout<<"numero impar positivo"; sumanip+=n; nip++; else {gotoxy(42,i);cout<<"numero impar negativo"; sumanin+=n; nin++; } } while(n!=0); clrscr(); gotoxy(20,4);cout<<" ............... RESULTADOS................. "; gotoxy(10,9);cout<<" Total de Nmeros PARES POSITIVOS ="<<npp; gotoxy(10,13);cout<<"Suma de Nmeros PARES POSITIVOS ="<<sumanpp; gotoxy(10,10);cout<<"Total de Nmeros PARES NEGATIVOS ="<<npn-1; gotoxy(10,14);cout<<"Suma de Nmeros PARES NEGATIVOS ="<<sumanpn; gotoxy(10,11);cout<<"Total de Nmeros IMPARES POSITIVOS ="<<nip; gotoxy(10,15);cout<<"Suma de Nmeros IMPARES POSITIVOS ="<<sumanip; gotoxy(10,12);cout<<"Total de Nmeros IMPARES NEGATIVOS ="<<nin; gotoxy(10,16);cout<<"Suma de Nmeros IMPARES NEGATIVOS ="<<sumanin; getche();
Cordova Neri, T.

123

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

} Salida

Resultados de Salida:

Problema 8.- En la siguiente figura, se ilustra la funcionalidad del modulo de validacin y Numero de Intentos por parte del usuario . es decir, debe ingresar la cantidad de dgitos que se desea procesar, que para nuestro caso el rango es como mnimo 5 dgitos(Puede ser: 6, 7 ,8, etc.). Por cada error, el sistema enva el mensaje de error (ver figura) y asimismo el numero de intentos que le quedan. Si el numero de intentos supera los 3 , entonces el sistema Finaliza. Cuando se ingreso correctamente la cantidad de dgitos en el rango establecido,
Crdova Neri, T.

Borland C++ 5. 0.2 (en nuestro caso 5 ) entra a funcionar el Modulo de Validacin de Dgitos definidos como Cadenas, el cual solicita que Ud. ingrese digito por digito es

decir; si Ud. ingresa un digito y luego una letra, el sistema elimina en forma

Automtica la letra y presenta los dgitos anteriores para que continua ingresando mas datos hasta cumplir con la condicin inicial( 5 digitos). ( ejemplo, edito 43 U entonces el sistema elimina la letra(carcter U y devuelve solo el numero 43, donde Ud. continua ingresando nuevos datos(ver figura). Despus de completar de editar los 5 dgitos entra a funcionar el Modulo de reportes, para en cual adicionalmente Ud. debe contestar las siguientes pruguntas,
Cordova Neri, T.

125

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

a) Reporte para conocer la cadena expresada en nmeros enteros. ( Ud. ingreso la cadena: 43256 entonces cadena en enteros : 43256) b) Reporte de la cadena numrica en forma invertida. 65234 c) Reporte de los ltimos 2 dgitos : 34. d) Reporte del Factorial del ultimo digito, segn c) 4!=24. e) Reporte del total de dgitos pares, segn c). f) Reporte del total de dgitos impares, segn c). Salida.- En la siguiente figura, se ilustra resultados de compilacin.

Solucion // for_cadena_digitos1.cpp #include<conio.h> #include<iostream.h> #include<stdio.h> #include<ctype.h> #define max 100 main()
Crdova Neri, T.

#include<stdlib.h>

Borland C++ 5. 0.2 { char cad[max]; do {nrovec++; gotoxy(20,2);cout<<"MODULO DE VALIDACION: "; gotoxy(10,4);cout<<"Ingrese total de digitos(x>4): ";clreol(); cin>>x; cout<<"\nSr. el numero:"<<x<<" no esta en el rango solicitado, ingrese nuevo numero :"<<endl<<endl; if (nrovec>3) else cout<<"Le quedan "<<(3-nrovec)<<" oportunidades :"<<endl<<endl; } while(x<5); clrscr(); cout<<""<<endl; cout<<"\nGracias por la Verificar el modulo de Validacion,ahora validar SOLO DIGITOS "<<endl; cout<<"\nIngrese cadena de solo numeros, si edita letras estas se eliminan: "; for(i=0;i<x; i++) { cad[i]=getche(); while((cad[i]!='0') &&(cad[i]!='1')&&(cad[i]!='2')&&(cad[i]!='3')&&(cad[i]!='4')&&(cad[i]!='5')&&(cad[i]!='6 ')&&(cad[i]!='7')&&(cad[i]!='8')&&(cad[i]!='9')) { cout<<endl<<"Error!!!.Sr.debe ingresar solo digitos :"<<endl; cout<<"\nHe eliminado el caracter:"<<cad[i]<<endl; cout<<""; cout<<"\nFavor continue ingresando nuevo dato :"; for(j=0; j<i; j++) cout<<cad[j]; cad[i]=getche();
Cordova Neri, T.

int i,j,x,nrovec=0,dosd,fact=1,ndp=0,ndi=0;

exit(1);

127

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

} } cad[i]='\0'; //para que al final asigne todo blanco int p=atoi(cad); cout<<"\n La cadena convertida en numero es :"<<p<<endl; int inv=0,d,tt=p; while(p>0) {d=p%10; inv=inv*10+d; p=p/10; } cout<<"\nEl numero " <<tt << " invertido es : "<<inv<<endl; dosd=inv%100; cout<<"Los dos ultimos digitos del numero invertido "<<inv<<" es

"<<dosd<<endl; int uld=dosd%10; cout<<"\nEl ultimo digito de :"<<dosd<<" es "<<uld<<endl; for(i=1;i<=uld; i++) fact=fact*i; cout<<"\nEl factorial del ultimo digito es :"<<fact<<endl; int vi=fact; while(fact>0) { d=fact%10; if (d%2==0) {ndp++; } else

Crdova Neri, T.

Borland C++ 5. 0.2 {ndi++; }

fact=fact/10; } cout<<"\nEl total de digitos pares de "<<vi<<" es = "<<ndp; cout<<"\nEl total de digitos impares de "<<vi<<" es ="<<ndi; getche(); }

3.-3.-Sentencia for
Permite realizar instrucciones conociendo el numero de iteraciones. sintaxis: for (inicializacin; <condicion> ; contador) { <instrucciones>; } En donde 1.-inicializacin: indica las condiciones iniciales cuando se comienza el bucle. 2.-<condicion>: se evala antes de cada iteracin. Si es verdadera, se ejecuta el bloque de <instrs>, en caso contrario se termina la estructura y se salta a la instruccin siguiente. 3.-Contador: es la instruccin a ejecutarse cuando se termina cada iteracin Tradicionalmente esta sentencia es utilizada para hacer que un grupo de instrucciones se repita un nmero de veces conocido, utilizando un contador: for (i=valor_inicial; i<=valorfinal; i++) <intrucciones>;

Obs.-Se puede declarar una variable dentro de la inicializacin:

for (int i=valor_inicial; i<=valorfinal; i++) <instrucciones>;


Cordova Neri, T.

129

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Pero la potencia del bucle for radica en que pueden omitirse tanto la inicializacin como la expresin a evaluarse y/o el proceso de actualizacin, de tal manera que se pueden generar los for "infinitos" o los for solamente condicionados (no actualizados automticamente), de tal manera que pueden reemplazar a una secuencia while<cond> { } o do {...} while<cond>;

//for solamente condicionado for (;expresion;) { <instrucciones>; } //for infinito for (;;) { <instrucciones>; } Para salir de esta ltima estructura, en algn lugar dentro de ella debe figurar la instruccin break, vista anteriormente, sometida al valor de una determinada expresin. Si en un bucle for solamente condicionado, la instruccin break se ejecuta de todas maneras al final (no est sometida a ninguna condicin), entonces el for puede actuar como si fuera un if:

for (;expresin;) { <instrucciones>; break; }

Sin embargo, este uso reduce la legibilidad del cdigo y por lo tanto, no es recomendable.

Problema 1.-Disear un programa que permita leer el numero de terminos de la serie:


Crdova Neri, T.

Borland C++ 5. 0.2 1/1 ^2 +1/2 ^2 +1/3 ^2 +1/4 ^2 +............................+1/n ^2 y luego mostrar la suma acumulada.

Solucion //for_serie.cpp //for_serie.cpp #include<iostream.h> #include<conio.h> #include <math.h> # define linea "---------------------------------------------" main() { int i,n,u=1; float s=0; clrscr(); gotoxy(5,4);cout<<"Ingrese cantidad de terminos:";cin>>n; for(i=1;i<=n;i++) { s=s+(u/pow(i,2)); cout<<" } cout<<" "<<endl; gotoxy(5,9);cout<<linea; gotoxy(7,10);cout<<"La Suma de la Serie es ----> "<<s; gotoxy(5,11);cout<<linea; getche(); ";cout<<" 1/ "<<i<<" ^2 + "; cout<<"\n";

Cordova Neri, T.

131

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

}Salida

Problema 2 .- Escribir un programa que permita imprimir una espiral de asteriscos en la pantalla. El programa deber leer el ancho "n" de la espiral (n mltiplo de 4 ms 1)
SOLUCIN : ESPIRAL.CPP

#include <iostream.h> #include <conio.h> void main() { enum direccion {abajo=1,izquierda,arriba,derecha} mover; int i,j,k,n,x,y; clrscr(); cout<<"Ingrese n (multiplo de 4 + 1): "; cin>>n; clrscr(); gotoxy(n/2+1,n/2+1); cout<<"*"; gotoxy(n/2+1,n/2+1); mover=abajo; for (k=1; k<n; k+=2) { for (j=1; j<=2; j++) { x=wherex(); y=wherey(); switch (mover) {
Crdova Neri, T.

Borland C++ 5. 0.2 case abajo: for (i=1; i<=k+1; i++){ gotoxy(x,y+i); cout<<"*"; } mover=izquierda; break; case izquierda: for (i=1; i<=k+1; i++){ gotoxy(x-i,y); cout<<"*"; } mover=arriba; break; case arriba: for (i=1; i<=k+1; i++){ gotoxy(x,y-i); cout<<"*"; } mover=derecha; break; case derecha: for (i=1; i<=k+1; i++){ gotoxy(x+i,y); cout<<"*"; } mover=abajo; break; } //fin de switch gotoxy(wherex()-1,wherey()); } //fin de for j=1 } //fin de for k=1 x=wherex();
Cordova Neri, T.

133

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

y=wherey(); for (k=1;k<n;k++) { gotoxy(x,y+k); cout<<"*"; } } Salida (n=12): Problema 3.- Disear un programa que permita generar una tabla de multiplicar de orden 12 *12 y luego : a) Dar un reporte del total de nmeros dentro de la tabla con 1 digito b) Dar un reporte del total de nmeros dentro de la tabla con 2 digito c) Dar un reporte del total de nmeros dentro de la tabla con 3 digito d) Calcular el numero mayor y mostrarlo en forma invertida ( 144 441) e) Usando respuesta en d), calcular el total de dgitos pares y mostrar su suma acumulada f) Usando respuesta en d), calcular el total de dgitos impares y mostrar su suma acumulada. Solucion : for_tabla_Mult.cpp #include<iostream.h> #include<conio.h> main() { int i,j, mult, und=0, dosd=0, tresd=0, may=0, u, inv=0, dp=0, di=0, sdp=0, getch();

sdi=0; for (i=1;i<=12;i++) for (j=1;j<=12;j++) { mult=i*j;

gotoxy(15+4*i,j);cout<<mult; if (mult<10)

Crdova Neri, T.

Borland C++ 5. 0.2 und++; else if ((mult<100)&(mult>=10)) dosd++; else { if (mult>may) may=mult; tresd++; } } gotoxy(19,16);cout<<"En la tabla hay : "<<und<<" nmeros de 1 digito. "; gotoxy(19,17);cout<<"En la tabla hay: "<<dosd<<" nmeros de 2 digitos."; gotoxy(19,18);cout<<"En la tabla hay: "<<tresd<<" nmeros de 3 digitos."; gotoxy(19,19);cout<<"El mayor numero de 3 dgitos es: "<<may; do {u=may%10; if (u%2==0) { dp++; sdp+=u; } else { di++; sdi+=u; } inv=inv*10+u;
Cordova Neri, T.

135

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

may=may/10; } while(may/10!=0); inv=inv*10+may; if (may%2==0) {dp++; sdp+=may; } else { di++; sdi+=may; } gotoxy(19,21);cout<<"El inverso del mayor numero de tres cifras es: "<<inv; gotoxy(19,22);cout<<"El numero de dgitos pares es :"<<dp; gotoxy(19,23);cout<<"El numero de dgitos impares es : "<<di; gotoxy(19,24);cout<<"La suma de los dgitos pares es :"<<sdp; gotoxy(19,25);cout<<"La suma de los dgitos impares es: "<<sdi; getch();} Salida

Crdova Neri, T.

Borland C++ 5. 0.2

Problema 4.- Disear un programa que permita primero Validar sus datos de usuario por c_pasword=tcn100 y clave=****Si los datos son correcto el sistema solicita que ingrese el numero de trabajadores por : nombre, cdigo, sueldo bsico, bonificacin, descuento, categora y Estado civil.. Para categora existen 3: Profesional, Tcnico o Auxiliar y para Estado civil: Soltero, casado, viudo o divorciado. El sueldo neto se calcula usando: s_n=(s_basico+bonif)-dscto; Los reportes consisten en: a).- Promedio general de sueldo de trabajadores. b).- Promedio por categoras: Profesional, Tcnico y Auxiliar. c).- Promedio por estado civil. d).- Reporte por nombre y sueldo de cada trabajador Si sus datos de validacin son incorrectos, el sistema enva el mensaje: " Sr. usuario, sus Datos son incorrectos, hasta pronto"; SOLUCION // sue_gen.cpp #include<conio.h>
Cordova Neri, T.

137

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

#include<iostream.h> #include<stdio.h> # define linea "-----------------------------------------------------------" main() { float pp,i,n,s_basico,bonif,dscto,acu_pg=0,p_sn,s_neto,s_n1,a_pgp=0,a_p=0,s_n2,a_p gt=0,a_t,pt,s_n3,a_pga=0,a_a=0,pa, s_n4,a_pgs=0,a_s=0,ps,s_n5,a_pgc=0,a_c=0,pc,s_n6,a_pgv=0,a_v=0,pv,s_n7,a_ pgd=0,a_d=0,pd; char nomb[30],cod[10],r,cat,est_civ, c_pasw[10],clave[10]; clrscr(); gotoxy(14,4); cout<<" BIENVENIDOS AL SISTEMA DE VALIDACION DE DATOS"; gotoxy(7,5); cout<<linea; gotoxy(24,8);cout<<"Ingrese pasword :";gets(c_pasw); gotoxy(24,9);cout<<"Ingrese clave :";gets(clave); if (strcmp(c_pasw,"tcn100")==0 && strcmp(clave,"****")==0) {clrscr();gotoxy(24,1),cout<<" SISTEMA DE PLANILLAS "; gotoxy(5,3),cout<<"# de Trabajadores: ";cin>>n; for (i=0;i<n;i++) {gotoxy(23,4);clreol();gotoxy(5,4),cout<<"Nombre Trabajador:";cin>>nomb; gotoxy(23,5);clreol();gotoxy(5,5),cout<<"Codigo Trabajador:";cin>>cod; gotoxy(23,6);clreol();gotoxy(5,6),cout<<"Sueldo Basico gotoxy(23,7);clreol();gotoxy(5,7),cout<<"Bonificacion gotoxy(23,8);clreol();gotoxy(5,8),cout<<"Descuento gotoxy(30,9), cout<<"[P] Profesional"; gotoxy(30,10),cout<<"[T] Tecnico";
Crdova Neri, T.

:";cin>>s_basico; :";cin>>bonif; :";cin>>dscto;

Borland C++ 5. 0.2 gotoxy(30,11),cout<<"[A] Auxiliar"; gotoxy(5,9),cout<<"Categoria if (cat=='P') { s_n1=(s_basico+bonif)-dscto; a_pgp=a_pgp+s_n1; a_p=a_p+1; if (a_p >0) pp=a_pgp/a_p; else pp=0; } if (a_p >0) pp=a_pgp/a_p; else pp=0; if (cat=='T') { s_n2=(s_basico+bonif)-dscto; a_pgt=a_pgt+s_n2; a_t=a_t+1; if (a_t >0) pt=a_pgt/a_t; else pt=0; } else if (a_t >0) pt=a_pgt/a_t;
Cordova Neri, T.

:";cin>>cat;

139

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

else pt=0; if (cat=='A') {s_n3=(s_basico+bonif)-dscto; a_pga=a_pga+s_n3; a_a=a_a+1; if (a_a >0) pa=a_pga/a_a; else pa=0; } else if (a_a >0) pa=a_pga/a_a; else pa=0; gotoxy(30,13),cout<<"[S] Soltero"; gotoxy(30,14),cout<<"[C] Casado"; gotoxy(30,15),cout<<"[V] Viudo"; gotoxy(30,16),cout<<"[D] Divorciado"; gotoxy(5,11),cout<<"Estado Civil if (est_civ=='S') { s_n4=(s_basico+bonif)-dscto; a_pgs=a_pgs+s_n4; if (a_s >0) ps=a_pgs/a_s; a_s=a_s+1; :";cin>>est_civ;

Crdova Neri, T.

Borland C++ 5. 0.2 else ps=0; }

if (a_s >0) ps=a_pgs/a_s; else ps=0; {s_n5=(s_basico+bonif)-dscto;

if (est_civ=='C')

a_pgc=a_pgc+s_n5; a_c=a_c+1; if (a_c >0) pc=a_pgc/a_c; else pc=0; } if (a_c >0) pc=a_pgc/a_c; else pc=0;

if (est_civ=='V') {s_n6=(s_basico+bonif)-dscto; a_pgv=a_pgv+s_n6; a_v=a_v+1; if (a_v >0) pv=a_pgv/a_v; else pv=0; } if (a_v >0) pv=a_pgv/a_v; else pv=0; if (est_civ=='D') {s_n7=(s_basico+bonif)-dscto; a_pgd=a_pgd+s_n7;
Cordova Neri, T.

141

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

a_d=a_d+1; if (a_d >0) pd=a_pgd/a_d; else pd=0; } if (a_d >0) else pd=0; s_neto=(s_basico+bonif)-dscto; gotoxy(44,20+i);cout<<"Sueldo Neto del Trab. "<<nomb<<" es: "<<s_neto; acu_pg=acu_pg+s_neto; p_sn=acu_pg/n; gotoxy(10,17),cout<<"ESTADISITCAS DE SUELDOS "; gotoxy(3,18),cout<<"Promedio General :"<<p_sn; } pd=a_pgd/a_d;

gotoxy(3,19),cout<<"Promedio Categoria Profesional:"<<pp; gotoxy(3,20),cout<<"Promedio Categoria Tecnico :"<<pt;

gotoxy(3,21),cout<<"Promedio Categoria Auxiliar :"<<pa; gotoxy(3,22),cout<<"Promedio Soltero gotoxy(3,23),cout<<"Promedio Casado gotoxy(3,24),cout<<"Promedio Viudo gotoxy(3,25),cout<<"Promedio Divorciado } else { clrscr(); :"<<ps; :"<<pc; :"<<pv; :"<<pd;

gotoxy(20,12);cout<<"Sr. sus datos son incorrectos, hasta luego"; } } getche();

Crdova Neri, T.

Borland C++ 5. 0.2

Salida Primero: El usuario ingresa sus datos de acceso al sistema

Si los datos son correctos, el sistema presenta el siguiente menu. Debe iniciar ingresando el numero de trabajadores luego sus datos solicitados por cada trabajador.

Segundo .- Ingreso de datos por cada trabajador:

Cordova Neri, T.

143

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 5.- Disear un programa que permita leer un numero n de alumnos por cdigo, edad, peso, sexo( Masculino:M / Femenino : F) luego generar reportes que permita conocer: Promedio de alumnos por sexo y de acuerdo a: Talla, Edad y Peso Solucion //pro_sexo.cpp #include<conio.h> #include<iostream.h> main() { int a_m=0,a_f=0,n,i,edad; float peso,talla,p_talla_m,p_edad_m,p_peso_m,p_talla_f,p_edad_f,p_peso_f, a_talla_m=0,a_peso_m=0,a_edad_m=0,a_talla_f=0,a_peso_f=0,a_edad_f=0; char sexo[10],codigo[10]; clrscr(); gotoxy(24,1),cout<<"Calculo de Promedios"; gotoxy(23,2),cout<<"====================="; #include<stdio.h>

Crdova Neri, T.

Borland C++ 5. 0.2 gotoxy(23,3);clreol();cout<<" Ingrese numero de Alumnos : "; cin>>n; for (i=1;i<=n;i++) { gotoxy(23,4);cout<<"Alumno #:"<<i; gotoxy(5,5),cout<<"Codigo del alumno:";gets(codigo); gotoxy(5,6),cout<<"Edad del alumno :";cin>>edad; gotoxy(5,7),cout<<"Peso del alumno :";cin>>peso; gotoxy(5,8),cout<<"Talla del alumno :";cin>>talla; gotoxy(5,9),cout<<"Sexo [M/F] :";gets(sexo);

if (strcmp(sexo,"M")==0 ||strcmp(sexo,"m")==0) {a_m = a_m+1; a_edad_m =a_edad_m+edad; a_talla_m =a_talla_m+talla; a_peso_m =a_peso_m+peso; } else {a_f=a_f+1; a_edad_f=a_edad_f+edad; a_talla_f=a_talla_f+talla; a_peso_f=a_peso_f+peso; } clrscr(); }

//Calculando promedio de alumnos de sexo masculino p_edad_m=a_edad_m/a_m; p_talla_m=a_talla_m/a_m; p_peso_m=a_peso_m/a_m; //calculando promedios de alumnos de sexo femenino p_edad_f=a_edad_f/a_f;
Cordova Neri, T.

145

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

p_talla_f=a_talla_f/a_f; p_peso_f=a_peso_f/a_f; // Generando reportes clrscr(); gotoxy(14,2);cout<<"REPORTES ESTADISTICOS"; for(i=1;i<=n;i++) {gotoxy(12,3);cout<<"Total de alumnos "<<n; gotoxy(15,5);cout<<"Promedio de Talla [M]: "<<p_talla_m; gotoxy(15,6);cout<<"Promedio de Talla [F]: "<<p_talla_f; gotoxy(15,7);cout<<"Promedio de Edad [M]: "<<p_edad_m; gotoxy(15,8);cout<<"Promedio de Edad [F]: "<<p_edad_f; gotoxy(15,9);cout<<"Promedio de Peso [M]: "<<p_peso_m; gotoxy(15,10);cout<<"Promedio de Peso [F]: "<<p_peso_f;

} getche(); }Salida Problema 6.- Disear un programa que permita encontrar todasl las soluciones de:

SEND + MORE = MONEY


Solucion //for_send_more.cpp #include<iostream.h>
Crdova Neri, T.

Borland C++ 5. 0.2 #include<conio.h> void main() { int d,e,y,n,r,o,s,a=0; clrscr(); cout<<"\tPrograma que busca todas las soluciones de:SEND+MORE=MONEY: \n"; s=9; for(d=1;d<=9;d++){ for(e=1;e<=9;e++){ for(y=1;y<=9;y++){ for(n=1;n<=9;n++){ for(r=1;r<=9;r++){ for(o=0;o<=1;o++){ if(d+e==y){ if(n+r==e){ if(e+o==n){ if(s+1==10+o){ cout<<"SEND = "<<"9"<<e<<n<<d<<" ";

cout<<"MORE = "<<"1"<<o<<r<<e<<"\n"; a=a+1; }break; } else{ if(e+o==10+n){ if(s+1+1==10+o){ cout<<"SEND = "<<"9"<<e<<n<<d<<"


Cordova Neri, T.

"; 147

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

cout<<"MORE = "<<"1"<<o<<r<<e<<"\n"; a=a+1; }break; } } } else{ if(n+r==10+e){ if(e+o+1==n){ if(s+1==10+o){ cout<<"SEND = "<<"9"<<e<<n<<d<<" ";

cout<<"MORE = "<<"1"<<o<<r<<e<<"\n"; a=a+1; }break; } else{ if(e+o+1==10+n){ if(s+1+1==10+o){ cout<<"SEND = "<<"9"<<e<<n<<d<<" ";

cout<<"MORE = "<<"1"<<o<<r<<e<<"\n"; a=a+1; }break; } } } }

Crdova Neri, T.

Borland C++ 5. 0.2 } else{ if(d+e==10+y){ if(n+r+1==e){ if(e+o==n){ if(s+1==10+o){ cout<<"SEND = "<<"9"<<e<<n<<d<<" ";

cout<<"MORE = "<<"1"<<o<<r<<e<<"\n"; a=a+1; }break; } else{ if(e+o==10+n){ if(s+1+1==10+o){ cout<<"SEND = "<<"9"<<e<<n<<d<<" cout<<"MORE = "<<"1"<<o<<r<<e<<"\n"; a=a+1; }break; } } } else{ if(n+r+1==10+e){ if(e+o+1==n){ if(s+1==10+o){ cout<<"SEND = "<<"9"<<e<<n<<d<<"
Cordova Neri, T.

";

"; 149

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

cout<<"MORE = "<<"1"<<o<<r<<e<<"\n"; a=a+1; }break; } else{ if(e+o+1==10+n){ if(s+1+1==10+o){ cout<<"SEND = "<<"9"<<e<<n<<d<<" ";

cout<<"MORE = "<<"1"<<o<<r<<e<<"\n"; a=a+1; }break; } } } } } } } } } } } }

cout<<"----------------------------------";

Crdova Neri, T.

Borland C++ 5. 0.2 cout<<"\nTodas las soluciones son : "<<a; getch();} Salida

Problema 7.- Disear un programa que permita leer un numero n positivo y luego mostrar su factorial. Solucion // factoria.cpp #include<iostream.h> #include<conio.h> void main() { int n, factorial=1,i; clrscr(); gotoxy(10,4);cout<<" CALCULANDO FACTORIAL"; gotoxy(12,6);cout<<" Ingrese un numero :" ;cin>>n; for(i=1;i<=n;i++) factorial=factorial*i; gotoxy(12,8);cout<<"el factorial de "<<n<<" es = "<<factorial;
Cordova Neri, T.

151

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

getche();

} Problema 8.-Disear un programa que permita leer un numero entero( numero de filas) comprendido en el rango:1..9 y luego mostrar la formacin de una pirmide tal como se ilustra en la figura adjunta. El programa debe solictar confirmacin si desea continuar impriendo nuevas pirmides y dependiendo del numero de filas

Solucion //for_piramide.cpp #include <iostream.h> #include <conio.h> #include <ctype.h> main() {int i,j,k; char opcion; do {int n=2; do {if (n!=2) {cout<<"Error";getch();}; clrscr();

Crdova Neri, T.

Borland C++ 5. 0.2 cout<<"CONSTRUCCION DE UNA PIRAMIDE\n\nIngrese el numero de filas de la piramide: "; cin>>n;} while (!((n<=9)&&(n>=1))); clrscr(); for(i=1;i<=n;i++) {gotoxy(n-i+1,i); for (j=1;j<=i;j++) {cout<<j;}; for (k=j-2;k>=1;k--) {cout<<k;}; }; cout<<"\n\nDesea seguir?...<s/n>"; do {opcion=toupper(getch());} while ((opcion!='S')&&(opcion!='N')); } while (opcion=='S'); }Salida

Cordova Neri, T.

153

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 9.- Una persona invierte 1000.0 soles en una cuenta de ahorros, la cuenta da como interes el 10% anual. Suponiendo que todos los interes se quedan depositados en la cuenta . Calcular e imprimir la cantidad que tendra la cuenta al final de cada ao y durante 10 aos.

Usar a = p*( 1 + r ) ^ n
Donde p : cantidad invertida inicialmente r : tasa de interes n : cantidad de aos a : Cantidad en deposito al final de cada ao. Solucion // FOR_BANCO.CPP #include<iostream.h> #include <stdlib.h> #include<conio.h> #include<math.h> # define linea "--------------------------------------------" main() {float principal=1000.0,interes=0.1,cantdep; gotoxy(20,3);cout<<" CUENTA BANCARIA"; gotoxy(15,5);cout<<" ANNOS gotoxy(10,6);cout<<linea; for(int anno=1;anno<=10;anno++) { cantdep=principal*pow(1.0+interes,anno); gotoxy(17,6+anno);cout<<anno; gotoxy(30,6+anno); cout<<"S/. "<<cantdep; } getche(); CANTIDAD";

Crdova Neri, T.

Borland C++ 5. 0.2 } Salida

Problema 10.- Disear un programa que permita leer un numero entero( numero de filas) y luego mostrar la formacin de una pirmide tal como se ilustra en la figura adjunta.

Solucion //for_piramide.cpp #include <iostream.h> #include <conio.h> #include <stdlib.h> void main() { int nl,lt,i; clrscr(); gotoxy(3,2);cout<<"Ingrese numero de lineas:"; cin>>nl; for (lt=1;lt<=nl;lt++) { for (i=1;i<=(nl-lt);i++) cout<<" "; for (i=lt;i<=2*lt-1;i++) cout<<i%10; for (i=i-2;i>lt-1;i--) cout<<i%10; cout<<"\n"; } cout<<endl;
Cordova Neri, T.

155

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

system("pause"); } Sentencia continue Se utiliza con las instrucciones for, while y dowhile para avanzar a la siguiente iteracin del bucle, abandonando la actual. Por ejemplo, el segmento de cdigo siguiente imprimir slo los valores enteros mltiplos de 5 en el intervalo 1100: for(int i=1;i<=100;i++) { if (i%5) continue; cout<<i<<" es mltiplo de 5"<<endl; } NOTA: Existe otro tipo de sentencia de control llamada incondicional, la cual, como dice su nombre, bifurca a un lugar especfico del programa marcado por una etiqueta (label) incondicionalmente. En C++ esta estructura est representada por la palabra reservada goto, que tiene la siguiente sintaxis: etiqueta: ................. goto etiqueta;

Cuando el programa llega a la lnea que contiene la instruccin goto, el flujo del programa se bifurca a la lnea marcada por etiqueta, sin condicin alguna. La instruccin goto, para evitar bucles infinitos, deber estar colocada dentro de una estructura condicional, o en todo caso debe haber una instruccin de salida exit o return entre la etiqueta y goto.

Problema 11.- Disear un programa que permita leer un numero entero positivo comprendido entre 99 y 999999. Si el ingreso es correcto el programa solicita que ingrese un digito a buscar dentro del numero ingresado, si existe genera el reporte del numero de veces que se repite. Si el numero ingresado no esta en el rango, el sistema envia el mensaje:Numero no esta en rango

Crdova Neri, T.

Borland C++ 5. 0.2 Solucion //do_if_uni.cpp /#include<iostream.h> #include<conio.h> main(){ int cont=0, digito,num,busca_dig; cout<<"\n Ingrese un numero :";cin>>num; if ((num>99) && (num<999999)) { cout<<"ingrese el digito a buscar:";cin>>busca_dig; do { digito=num%10; num=num/10; if (digito==busca_dig) {cont++; }while(num>0); cout<<" El numero de veces es: "<<cont; } //fin del if else cout<<"numero fuera de rango"<<endl; getche(); } Salida }

Cordova Neri, T.

157

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 12.- Disear un programa que permita crear un MARCO(cuadro), donde el usuario lee un numero comrendido en el rango 0..20. Si el numero no esta en ese rango el sistema avisara que le quedan j iteraciones, teniendo como maximo 3 oportunidades. Si se execede, el sistema sale. Si el numero esta dentro del rango, el programa debe sumar solo los numeros pares, ademas mostrar la cantidad depares respcetivamente. Solucion //for_par_valida.cpp */

#include<iostream.h> #include<conio.h> #include<stdlib.h> //para system() main() { int i,n,j=0,s=0,np=0; gotoxy(10,4);cout<<""; gotoxy(10,20);cout<<""; for(i=11;i<=69;i++){ gotoxy(i,4);cout<<""; gotoxy(i,20);cout<<""; } gotoxy(70,4);cout<<""; gotoxy(70,20);cout<<""; for(i=5;i<=19;i++){ gotoxy(10,i);cout<<""; gotoxy(70,i);cout<<""; } gotoxy(12,6); cout<<" Sr. usuario, tiene Ud. solo 3 opciones"; do {j++;

Crdova Neri, T.

Borland C++ 5. 0.2 gotoxy(12,8); cout<<" Le quedan "<<(3-j+1)<<" intentos:";clreol();cin>>n; gotoxy(12,9);cout<<" El numero "<<n<<" esta fuera de rango "; if(j>=3) {clrscr(); gotoxy(12,6);cout<<"Sr. se agotaron sus opciones, hasta luego: "; exit(1); } else {clrscr(); gotoxy(12,12);clreol();cout<<"vuelva a ingresar practica"; } } while((n<0)||(n>20)); //permite ingreso solo numeros en rango:0..20 clrscr(); gotoxy(10,4);cout<<""; gotoxy(10,20);cout<<""; for(i=11;i<=69;i++){ gotoxy(i,4);cout<<""; gotoxy(i,20);cout<<""; } gotoxy(70,4);cout<<""; gotoxy(70,20);cout<<""; for(i=5;i<=19;i++){ gotoxy(10,i);cout<<""; gotoxy(70,i);cout<<""; } gotoxy(30,6); cout<<"Bienvenidos a mi sistema "<<endl; for(i=1;i<=n;i++) { if ( i%2==0)
Cordova Neri, T.

159

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

{ s=s+i; np++; gotoxy(12,i+6);cout<<" El numero "<<i<<" es par y el total de pares es= "<<np<<endl; } } gotoxy(12,17); cout<<"La suma de los "<< np <<" pares es="<<s<<endl<<endl; gotoxy(20,20); cout<<" Gracias por su preferencia "<<endl<<endl<<endl; system( "pause"); getche(); }

Salida.- Verificacin del numero n, el cual debe estar en el rango : 0..20

Al ingresar n=10, se obtiene el siguiente reporte:

Crdova Neri, T.

Borland C++ 5. 0.2

Aplicaciones diversas

Problema 1 Escribir un programa que lea 5 nmeros enteros, 2 de ellos por lo menos negativos. Luego, el programa deber ordenar en forma ascendente los nmeros positivos, siempre y cuando existan por lo menos 2.
SOLUCIN: POSNEG.CPP

#include <iostream.h> #include <iomanip.h> #include <conio.h> void main() { int num,pos,neg,max,min,med; clrscr(); do { pos=0, neg=0; cout<<"Ingrese 5 nmeros enteros no nulos"<<endl; for (int i=1;i<=5;i++) { do { cout<<i<<" nmero: "; cin>>num; if (!num) cout<<"\aError. ";
Cordova Neri, T.

161

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

} while (!num); if (num>0) { pos++; if (pos==1) max=min=med=num; else if (num>max) max=num; else if (num<min) min=num; else med=num; } else neg++; } //for i=1 if (neg<2) cout<<"\nError, debe haber por lo menos 2 nmeros negativos"<<endl; } while (neg<2); if (pos>1) { cout<<"Los nmeros positivos ordenados son: "<<endl; cout<<setw(8)<<min; if (pos==3) cout<<setw(8)<<med; cout<<setw(8)<<max; } } Salida: getch();

Crdova Neri, T.

Borland C++ 5. 0.2

Problema 2.- Escribir un programa que permita calcular la raz ensima de un nmero a (a y n son ledos desde el teclado). Use el mtodo de Newton para un coeficiente error de 1e-8. Considerar que no existe la operacin potencia.
SOLUCIN:

// RAIZ.CPP

#include <iostream.h> #include <iomanip.h> #include <conio.h> #include <math.h> //Para usar fabs (valor absoluto de un float) main() { const float err=1e-8; //Coeficiente de error int a,n; float aprox=1, antaprox, aux; clrscr(); cout<<"Numero: "; cin>>a; cout<<"Indice de la raiz : "; cin>>n; do { antaprox=aprox; aux=1; //antaprox a la n-1 for (int i=1;i<=n-1;i++) { aux=antaprox; } aprox=(a/aux+(n-1)*antaprox)/n; } while (fabs(aprox-antaprox)>=err); cout<<"La raiz "<<n<<" de "<<a<<" es: "; cout<<setiosflags(ios::showpoint+ios::fixed); cout<<setw(10)<<setprecision(4)<<aprox; getch(); } Salida:

Cordova Neri, T.

163

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Problema 3.- Se tienen n elementos (llmense cartas, dados, etc.), cada uno de los cuales puede tomar un valor aleatorio entre 1 y k. Supongamos que se obtiene la suma de los valores que todos estos elementos obtienen en un mismo evento (llmese tirar los n dados, repartir las n cartas, etc.). Disear un programa que obtenga la probabilidad (aproximada) de que se obtenga una suma dada. Sugerencia: Utilice las funciones random() y randomize(), random() toma un parmetro entero y devuelve como resultado un nmero al azar entre 0 y ese entero. randomize() no toma parmetros, slo sirve para generar nmeros "ms" aleatorios. SOLUCIN: PROB.CPP //Generaremos nmeros aleatorios para los valores de cada elemento //Este programa no obtiene la probabilidad exacta, sino una aproximacin //que depende del tiempo (a mayor tiempo mayor precisin). #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <math.h> main() { int n,k,s,suma; int SW=0; float cf,cp,prob=0; clrscr(); randomize(); cout<<"Nmero de elementos: "; cin>>n; cout<<"Mximo valor de un elemento: "; cin>>k;

Crdova Neri, T.

Borland C++ 5. 0.2 cout<<"Suma a obtener: "; cin>>suma; cout<<endl<<"Probabilidad obtenida: "; cp=pow(k,n); do { cf=0; for (int i=1;i<=cp;i++) { s=0; for (int j=1; j<=n; j++) s+=random(k)+1; if (s==suma) cf++; } prob+=(cf/cp); if (!SW) SW++; else prob/=2; } while (!kbhit()); //kbhit() espera que se pulse una tecla cout<<prob; } Salida (espera de 2 minutos):

Problema 4.-Se tienen dos relojes defectuosos, cada uno de los cuales sufre un cierto adelanto u atraso por hora (en minutos). Si en un determinado momento sus agujas marcan la misma hora (la correcta), determinar el da y la hora correctos en que los dos relojes volvern a marcar esa misma hora. Considerar que el programa lee el adelanto o atraso de cada reloj y la fecha, hora y minutos en los cuales los tres relojes estn sincronizados. SOLUCIN: RELOJES.CPP
Cordova Neri, T.

165

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

#include <iostream.h> #include <conio.h> #include <math.h> main() { int aa,mm,dd, h,m, a1,a2, correcto; clrscr(); cout<<"Hora y Fecha de sincronizacin"; //Lectura con verificacin de fecha y hora correctas do { correcto=1; cout<<endl<<"Fecha (dd mm aa) "; cin>>dd>>mm>>aa; if (mm>12||mm<1) correcto=0; else { switch (mm) { case 4: case 6: case 9: case 11: if (dd>30) {correcto=0;} break; case 2: if (aa%4==0 && aa%100!=0 || aa%400!=0){ if (dd>29) correcto=0; } else if (dd>28) correcto=0; break; default: if (dd>31) correcto=0; break; } } while (!correcto); } if (!correcto) cout<<"\aFecha incorrecta\n";

Crdova Neri, T.

Borland C++ 5. 0.2 do { correcto=1; cout<<"Hora exacta (hh min) "; cin>>h>>m; if (h<0||h>23||m<0||m>59) { correcto=0; } } while (!correcto); cout<<"Adelantos/atrasos de los relojes en minutos por hora"; do { correcto=1; cout<<endl<<"\tReloj 1: "; cin>>a1; cout<<"\tReloj 2: "; cin>>a2; if (abs(a1)>59||abs(a2)>59||a1*a1==0) { correcto=0; cout<<"\aUno de los adelantos es incorrecto\n"; } } while (!correcto); float m1=m, m2=m, mi=m; for (;;) { m++; m1+=(60.0+a1)/60.0; m2+=(60.0+a2)/60.0; if (int(m1)==60) {m1=0.0; h1++;} if (int(m2)==60) {m2=0.0; h2++;} if (h1==24) h1=0; if (h2==24) h2=0; if (m==60) {m=0; h++;} if (h==24) {h=0; dd++;} switch (mm) { case 4: case 6: case 9: case 11: if (dd==31) {dd=1; mm++;} break; case 2:
Cordova Neri, T.

cout<<"\aHora incorrecta\n";

int h1=h, h2=h, hi=h;

167

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

if (aa%4==0 && aa%100!=0 || aa%400!=0) { if (dd==30) {dd=1; mm++;} } else if (dd==29) {dd=1; mm++;} break; default: if (dd==32) {dd=1; mm++;} break; } if (mm==13) {mm=1; aa++;} if ((h1==h2)&&(h1==hi)) if ((int(m1)==int(m2))&&(int(m1)==int(mi))) break; } cout<<endl<<"Los relojes volvern a sincronizarse el "; cout<<dd<<"/"<<mm<<"/"<<aa<<endl; cout<<"A la hora exacta: "<<h<<":"<<m; getch(); } Salida:

Problema 5.-Disear un programa que solicite el ingreso de datos del usuario por codigo y clave. El codigo esta formado por tres numeros, y la clave de cada usuario se calcula por clave=a*13+b*12+c*11. Si los datos son correctos el

Crdova Neri, T.

Borland C++ 5. 0.2 programa solicita que ingrese el centro(h,k) y sus parametros a y b.luego debe mostrar los puntos y el total que son interiores a la elipse. Al usuario se le da 2 alternativas para ingreso de datos. Si en el primero realiza 3 intentos y falla, el sistema le da una segunda oportunidad y si en esta falla el sistema abandona. Analisis: Para realizar lo anterior, el programa debe solicitar primero sus datos del usuario por cdigo y nombre.El cdigo esta formado por tres nmeros, y la clave de cada usuario ser generada por la misma maquina basndonos en la siguiente formula: sea el cdigo: cod=abc,entonces la clave para ese cdigo ser: clave=a*13+b*12+c*11 de este modo nos aseguramos que cada usuario tendra una clave distinta Supuestamente los usuarios a los cuales se les permita ingresar a nuestro sistema un administrador le dar su clave correspondiente. De este modo no necesitamos de muchas opciones de usuario lo que permite utilizar menos lneas de cdigo y hacerlo mas eficiente. Para comenzar solo tenemos tres usuarios pero podran ser ms. Adems aca podemos manejar a mas de 3 usuarios, pero por ahora solo estamos tratando con 3 digitos; usamos este tipo de generador basndonos en la idea de los carnets universitarios de la UNi, los cuales generan una letra de verificacin basndose en el cdigo del alumno. Solucion //lab1_elipse.cpp #include<iostream.h> #include<conio.h> int main (void) { int cod, clave, c, r, key=0, h, k, a, b, i, j, np; float radio; char opc='s'; c=1;

cout<<"Ingrese cdigo: ";cin>>cod; /*se verifica q cdigo tiene solo 3 dgitos */


Cordova Neri, T.

169

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

while ((cod<=99)||(cod >=1000)) {cout<<"Favor, ingrese cdigo con 3 cifras y el correcto<<<endl; cin>>cod; } cout<<"\nIngrese clave: "; cin>>clave; /*generando la clave para dicho cdigo */ / * la clave se generara asi */ r=cod%10; key=key+r*11; r=cod%10; cod=cod/10; key=key+r*13; cod=cod/10; key=key+r*12; r=cod%10; cod=cod/10;

while((c<=3)&&(clave!=key)) { cout<<endl; cout<<"Su clave es incorrecta, por favor verifique su clave:"<<endl; cin>>clave; c++; } if(c<=3) { while(opc=='s') { cout<<"Ingresa los datos de la elipse:"<<endl; cout<<"ingresa las coordenadas del centro de la elipse:"<<endl; cout<<"h=";cin>>h; cout<<"k=";cin>>k; cout<<"Ingresa los parametros a y b de la elipse:"<<endl; cout<<"a=";cin>>a; cout<<"b=";cin>>b; np=0;

Crdova Neri, T.

Borland C++ 5. 0.2 for(i=h-a;i<=h+a;i++) { for(j=k-b;j<=k+b;j++) { radio=((i*i)/(a*a)+(j*j)/(b*b)); if((i>=0)&&(j>=0)&&(radio<1)) { np++; cout<<"x="<<i<<" }} } cout<<"En total se encontraron "<<np<<" dentro de nuestra elipse"<<endl; cout<<"Deseas hacer otra consulta? (s=si;n=no)"<<endl; cin>>opc; while ((opc!='s') && (opc!='n')) { cout<<"Solo debes digitar 's' o 'n'; digita nuevamente"<<endl; } } } cin>>opc; , y="<<j<<endl;

Else {cout<<" Ud. No puede ingresar al sistema sistema, pero le permito 3 oportunidades mas<<endl; cerrara"<<endl; cout<<"Ingrese su cdigo: "; dgitos cifras while ((cod<=99)||(cod >=1000)) { cout<<"El cdigo es de solo 3 cifras"<<endl; cout<<"Ingrese nuevamente su cdigo :"<<endl; cin>>cod; } cout<<endl<<"Ingrese clave: "; cin>>clave; //generando la clave nueva para el nuevo cdigo // la clave se generara asi key=0; key=key+r*11; r=cod%10;
Cordova Neri, T.

cout<<" pero si ahora falla, el programa se

cin>>cod; //verificando que el cdigo sea de 3

c=1;

r=cod%10; cod=cod/10; key=key+r*12; 171

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

cod=cod/10;

r=cod%10;

key=key+r*13; cod=cod/10; while((c<=3)&&(clave!=key)) { cout<<"Su clave es incorrecta"<<endl; cout<<"Por favor rectifique su clave:"<<endl; if(c<=3) { while(opc=='s') { cout<<"Ingresa los datos de la elipse:"<<endl; cout<<"ingresa las coordenadas del centro de la elipse:"<<endl; cout<<"h=";cin>>h; cout<<"k=";cin>>k; cin>>clave; c++; }

cout<<"Ingresa los parmetros a y b de la elipse:"<<endl; cout<<"a=";cin>>a; np=0; for(i=h-a;i<=h+a;i++) { for(j=k-b;j<=k+b;j++) { radio=((i*i)/(a*a)+(j*j)/(b*b)); if((i>=0)&&(j>=0)&&(radio<1)) { np++; cout<<"x="<<i<<" } }} cout<<"En total se encontraron "<<np<<" puntos dentro de nuestra elipse"<<endl; cout<<"Deseas hacer otra consulta? (s=si;n=no)"<<endl; while ((opc!='s') && (opc!='n')) { cout<<"solo debes digitar 's' o 'n', digita nuevamente"<<endl; cin>>opc; } }} cin>>opc; , y="<<j<<endl; cout<<"b=";cin>>b;

Crdova Neri, T.

Borland C++ 5. 0.2 else {cout<<" Lamento, Ud. ha fallado en sus intentos de entrar al sistema"<<endl; cout<<"El programa se cerrara instantneamente, hasta luego:"<<endl; } } getch(); return 0; } Salida

Si la clave es incorrecta y sigo editando, el sistema me da una advertencia.

Si los datos son correctos

Cordova Neri, T.

173

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

Con estos puntos no existen soluciones, pero vea en la siguiente grafica los puntos correctos y sus soluciones.

Problema 6.- Disear un programa que solicita el ingreso de un numero entre 999,999 y 999,999 a continuacin imprima el nombre en letras de dicho numero Solucion //Prg_1.cpp. #include<iostream.h> #include<conio.h>

Crdova Neri, T.

Borland C++ 5. 0.2 #include<string.h> #include<math.h> main() { int num,k,num1,r,valor,num2,num3,num4,num5,num6,num7,num8,num9,num10; char op; gotoxy(12,2),cout<<" CONVERSIONDE NUMEROS A LETRAS"<<endl; do{ do{ cout<<" \nIngrese un numero entre -999..999 : ";cin>>num; }while(num<-999999 || num>999999); k=0; num1=num; num3=num; num4=num; num5=num; num6=num; num7=num; do{ num=num/10 ; k++ ;} while(num!=0); valor=0; if(num1<0){ cout<<"Menos "; num1=num1*-1 ; } do {
Cordova Neri, T.

175

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

r=num1/pow10(k-1); if(valor==1) { r=r%10; } switch(r){ case 9: switch(k){ case 6: cout<<"Novecientos ";break; case 5:num9=num9%10000; if(num9==0) cout<<"Noventa "; else cout<<"Noventay "; break; case 4: num5=num5/10000; num5=num5%10; num6=num6/10000; if (num5==0 || num5!=1||num6==0){ cout<<"Nueve Mil ";}break; case 3: cout<<"Novecientos ";break; case 2: num8=num8%10; if(num8==0) cout<<"Noventa "; else cout<<"Noventay ";

Crdova Neri, T.

Borland C++ 5. 0.2 break; case 1:num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 && num1!=0||num3==0) { cout<<"Nueve ";} break; } break; case 8: switch(k) { case 6: cout<<"Ochocientos ";break; case 5:num9=num9%10000; if(num9==0) cout<<"Ochenta "; else cout<<"Ochentay "; break; case 4: num5=num5/10000; num5=num5%10; num6=num6/10000; if (num5==0 || num5!=1||num6==0){ cout<<"Ocho Mil ";}break; case 3: cout<<"Ochocientos ";break; case 2: num8=num8%10; if(num8==0)
Cordova Neri, T.

177

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

cout<<"Ochenta "; else cout<<"Ochentay "; break; case 1: num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 && num1!=0||num3==0){ cout<<"Ocho ";} break; } break; case 7: switch(k){ case 6: cout<<"Setecientos ";break; case 5:num9=num9%10000; if(num9==0) cout<<"Setenta "; else cout<<"Setentay "; break; case 4: num5=num5/10000; num5=num5%10; num6=num6/10000; if (num5==0 || num5!=1||num6==0){ cout<<"Siete Mil ";}break;

Crdova Neri, T.

Borland C++ 5. 0.2 case 3: cout<<"Setecientos ";break; case 2: num8=num8%10; if(num8==0) cout<<"Setenta "; else cout<<"Setentay "; break; case 1: num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 && num1!=0||num3==0){ cout<<"Siete ";} break; } break; case 6: switch(k){ case 6: cout<<"Seiscientos ";break; case 5:num9=num9%10000; if(num9==0) cout<<"Sesenta "; else cout<<"Sesentay "; break; case 4: num5=num5/10000; num5=num5%10; num6=num6/10000;
Cordova Neri, T.

179

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

if (num5==0 || num5!=1||num6==0){ cout<<"Seis Mil ";}break; case 3: cout<<"Seiscientos ";break; case 2: num8=num8%10; if(num8==0) cout<<"Sesenta "; else cout<<"Sesentay "; break; case 1:num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 && num1!=0||num3==0){ cout<<"Seis ";} break; } break; case 5: switch(k) { case 6: cout<<"Quinientos ";break; case 5:num9=num9%10000; if(num9==0) cout<<"Cincuenta "; else cout<<"Cincuentay "; break; case 4: num5=num5/10000;

Crdova Neri, T.

Borland C++ 5. 0.2 num5=num5%10; num6=num6/10000; if (num5==0 || num5!=1||num6==0){ cout<<"Cinco Mil ";}break; case 3: cout<<"Quinientos ";break; case 2: num8=num8%10; if(num8==0) cout<<"Cincuenta "; else cout<<"Cincuentay "; break; case 1: num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 && num1!=0||num3==0){ cout<<"Cinco ";} break; } break; case 4: switch(k) { case 6: cout<<"Cuatrocientos ";break; case 5:num9=num9%10000; if(num9==0) cout<<"Cuarenta "; else cout<<"cuarentay ";
Cordova Neri, T.

181

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

break; case 4: num5=num5/10000; num5=num5%10; num6=num6/10000; if (num5==0 || num5!=1||num6==0){ cout<<"Cuatro Mil ";}break; case 3: cout<<"Cuatrocientos ";break; case 2: num8=num8%10; if(num8==0) cout<<"Cuarenta "; else cout<<"cuarentay "; break; case 1:num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 || num1!=0||num3==0){ cout<<"Cuatro ";} break; } break; case 3: switch(k) { case 6: cout<<"Trecientos ";break; case 5:num9=num9%10000; if(num9==0) cout<<"Treinta ";

Crdova Neri, T.

Borland C++ 5. 0.2 else cout<<"Treintay "; break; case 4: num5=num5/10000; num5=num5%10; num6=num6/10000; if (num5==0 || num5!=1||num6==0){ cout<<"Tres Mil ";}break; case 3: cout<<"Trecientos ";break; case 2: num8=num8%10; if(num8==0) cout<<"Treinta "; else cout<<"Treintay "; break; case 1:num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 && num1!=0||num3==0){ cout<<"Tres ";} break; } break; case 2: switch(k) { case 6: cout<<"Doscientos ";break; case 5:num9=num9%10000;
Cordova Neri, T.

183

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

if(num9==0) cout<<"Veinte "; else cout<<"Veinty "; break; case 4: num5=num5/10000; num5=num5%10; num6=num6/10000; if (num5==0 || num5!=1||num6==0){ cout<<"Dos Mil ";}break; case 3: cout<<"Doscientos ";break; case 2: num8=num8%10; if(num8==0) cout<<"Veinte "; else cout<<"Veinty "; break; case 1: num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 && num1!=0||num3==0){ cout<<"Dos";} break; } break; case 1: switch(k) {

Crdova Neri, T.

Borland C++ 5. 0.2 case 6: num10=num10%100000; if(num10==0) cout<<"Cien "; else cout<<"Ciento "; break; case 5: num4=num4/1000; num4=num4%10; switch(num4){ case 9:cout<<"Diecinueve Mil "; break; case 8:cout<<"Dieciocho Mil "; break; case 7:cout<<"Diecisiete Mil ";break; case 6:cout<<"Dieciseis Mil "; break; case 5:cout<<"Quince Mil "; break; case 4:cout<<"Catorce Mil ";break; case 3:cout<<"Trece Mil "; break; case 2:cout<<"Doce Mil "; break; case 1:cout<<"Once Mil "; break; case 0:cout<<"Diez Mil "; break; }

break; case 4: num5=num5/10000; num5=num5%10; num6=num6/10000; if (num5==0 || num5!=1||num6==0){


Cordova Neri, T.

185

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

cout<<"Un Mil ";}break; case 3: num7=num7%100; if(num7==0) cout<<"Cien "; else cout<<"Ciento "; break; case 2: num2=num1%10; switch(num2){ case 9:cout<<"Diecinueve "; break; case 8:cout<<"Dieciocho "; break; case 7:cout<<"Diecisiete ";break; case 6:cout<<"Dieciseis "; break; case 5:cout<<"Quince "; break; case 4:cout<<"Catorce ";break; case 3:cout<<"Trece "; break; case 2:cout<<"Doce "; break; case 1:cout<<"Once "; break; case 0:cout<<"Diez "; break; } break; case 1:num1=num1%100; num1=num1/10; num3=num3/10; if(num1!=1 && num1!=0||num3==0){ cout<<"Uno ";} break;

Crdova Neri, T.

Borland C++ 5. 0.2 } break; case 0: switch(k) { case 6: break; case 5:break; case 4: break; case 3: break; case 2: num2=num1%10; switch(num2){ case 9 : cout<<"Nueve ";break; case 8 : cout<<"Ocho ";break; case 7 : cout<<"Siete ";break; case 6 : cout<<"Seis ";break; case 5 : cout<<"Cinco ";break; case 4 : cout<<"Cuatro ";break; case 3 : cout<<"Tres ";break; case 2 : cout<<"Dos ";break; case 1 : cout<<"Uno ";break; case 0 : break; } case 1: num3=num3*num3; if(num3==0){ cout<<"Cero ";} break; }
Cordova Neri, T.

187

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

break; } k--; valor=1 ; } while(k>0); gotoxy(20,8);cout<<"\nQuiere seguir en el programa(s/n): "; cin>>op; clrscr(); } while(op=='s'); getche(); }

Problema 7.- Negociar un prstamo de consumidor no siempre es sencillo. Una forma de prstamo es el prstamo a plazos con documento, que funciona de la siguiente manera: Supongamos que un prstamo tiene un valor nominal de S/.1000, que la tasa de inters es de 15% anual y que la duracin es de 18 meses. Los intereses se calcula multiplicando el valor nominal de S/.1000 por 0.15, para dar S/.150. Luego esta cifra se multiplica por el periodo de prstamo de 1.5 aos para dar un

Crdova Neri, T.

Borland C++ 5. 0.2 inters total a pagar de S/.225 esa cantidad de inmediato se resta el valor nominal, de modo que al consumidor solo le queda S/.775, la restitucin del prstamo se efecta con pagos mensuales iguales basados en el valor nominal. As pues, el pago mensual del prstamo ser de S/.1000 dividido, entre 18 lo que queda S/.55.56. En este mtodo de calculo podra no ser tan malo si el consumidor necesita S/.775, pero el calculo es mas complicado si el consumidor necesita S/.1000. Escribir el programa que lea la cantidad que el consumidor necesita recibir, la tasa de inters y la duracin del prstamo en meses. El programa deber calcular entonces el valor nominal requerido para que el consumidor reciba la cantidad que necesita. Tambin se deber calcular el pago mensual. El programa debe permitir que el usuario repita este calculo cuantas veces lo desee Solucion / /do_pc1_prg02_.cpp #include<iostream.h> #include<conio> #include<math.h> main() {int t; float pm, ti, vn, cnr; char resp;

clrscr(); do { clrscr(); gotoxy(10,4);cout<<"Ingresar la cantidad que necesita recibir : "; cin>>cnr; gotoxy(10,5);cout<<"Ingrese la tasa de interes :" ; cin>>ti; gotoxy(10,6); cout<<"Ingrese el tiempo en meses de duracion del prestamo :";cin>>t; vn=cnr/(1-(ti*t)/12); pm=vn/t;

gotoxy(10,8);cout<<"El valor nominal es : "<<vn; gotoxy(10,9);cout<<"El pago mensual es : "<< pm; gotoxy (10, 10); cout<<"Desea continuar...? (S/N) "; cin>>resp;
Cordova Neri, T.

189

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

} while( (resp == 'S')||(resp =='s')); Salida

getch(); }

Problema 8.- Suponiendo que un par de conejos tiene un par de cras cada mes y cada nueva pareja se hace frtil a la edad de un mes. Si se dispone de una pareja frtil y ninguno de los conejos muertos. Cuntas parejas habr despus de un ao?. Mejorar el problema calculando l nmero de meses necesarios para producir un nmero dado de parejas de conejos. Solucion // while_conejos.cpp main() {int mes1,mes2,mes_tot,meses,numero_parejas; mes1=1; mes_tot=2; mes2=2; meses=1;

while (meses<12) {mes_tot=mes1+mes2; mes1=mes2; mes2=mes_tot; meses=meses+1; }


Crdova Neri, T.

Borland C++ 5. 0.2 gotoxy(5,1);cout<<"CRIA DE CONEJOS; gotoxy(5,2);cout<<"Total de perejas despues de un ao :"<<mes_tot; gotoxy(5,4);cout<<"ingrese numero de parejas=";cin>>numero_parejas; mes1=1; mes_tot=2; mes2=2; meses=1;

while (mes_tot<numero_parejas) {mes_tot=mes1+mes2; mes1=mes2; meses+=1; } mes2=mes_tot;

gotoxy(5,6);cout<<"el numero de meses necesarios es="<<meses; getche();}

Problema 9.- Disear un programa que permita calcular e imprimir la suma de los 7 primeros terminos de la serie de fibonaci: programa debe ir mostrando las sumas parciales Solucion.- //while_fibo.cpp #include<iostream.h> #include<conio.h> main() { int anterior=1,nuevonum,actual=1,i=3,total=2;
Cordova Neri, T.

1,1,2,3,5,8,13. Asimismo, el

191

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

gotoxy(6,i+1);cout<<anterior<<"+"<<actual<<endl; while(i<8) { nuevonum=anterior+actual; total=total+nuevonum; i++; anterior=actual; actual=nuevonum;

gotoxy(6,i+1);cout<<anterior<<"+"<<actual<<endl; } gotoxy(6,i+4);cout<<"El total es: "<<total; getche(); } Salida

Problema 10.- En el siguiente problema se ilustra para n =1, la serie y suma de Fibonacci. #include<iostream.h> #include<conio.h> main() { int n=10; t1,t2,t3,suma; i=1; //fibonacci con suma

Crdova Neri, T.

Borland C++ 5. 0.2 t1=0; t2=1; t3=t1+t2; suma=t1+t2; cout<<"La serie fibonacci es: "<<endl; while(i<=n) { cout<<" "<<t1<<endl; t1=t2; t2=t3; t3=t1+t2; I++; suma=suma+t3; } cout<<"la suma es :"<<suma; getche(); } Salida

Problema 11.- Disear un programa que permita calcular la suma acumulada de la serie:
Cordova Neri, T.

193

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

1 1 1 1 1 + + + + ........ + 12 2 2 3 2 4 4 n2
para un error (precisin) de 10-2. ( Sr. Lector, puede generalizar para lectura de cualquier grado de error) Solucion //do_whi_serie.cpp #include <iostream.h> #include <conio.h> #include <math.h> #include <iomanip.h> # define linea "----------------------------------------------------" main () { int n=1; float s=0.0,e; gotoxy(10,2);cout<<"Ingrese precision(error) :";cin>>e; cout<<linea; do { s=s+(1.0/(pow(n,2))); gotoxy(10,3+n);cout<<setw(10)<<setprecision(2)<<"valor de s = "<<s<< " en iteracion "<<n<<endl; n++; } while(!(1.0/(n*n)<e)) ; double p=1.0/(n*n); gotoxy(10,n+7);cout<<"Valor aproximado final : "; cout<<setw(6)<<setprecision(3)<<s<<" en iteracion "<<n<<endl; gotoxy(10,n+9); cout<<"Se satisface que:";

Crdova Neri, T.

Borland C++ 5. 0.2 cout<<setw(6)<<setprecision(3)<<p<<"<"<<e<<" en iteracion "<<n<<endl; getche();

} Problema 12.- -El Calendario Gregoriano, el cual utilizamos actualmente, fue una correccin hecha al Calendario Romano (de 365 das y 6 horas) por el Papa Gregorio XIII, debido a que un ao astronmico realmente se compona de 365 das, 5 horas, 49 minutos y 12 segundos. Dicha correccin consisti en adelantar la fecha del 05/10/1582 al 14/10/1582 y establecer que los aos bisiestos sean aquellos que son mltiplos de 4, pero no de 100, a menos que lo sean tambin de 400 (1900 no fue bisiesto, 1800 s lo fue). Ms tarde, un monje estableci que el primer da en este calendario correspondi al Lunes 1/1/4713 a.C., fecha en la cual se crey que Dios cre al mundo. Con estos datos, implementar un programa que lea una fecha determinada y determine su da correspondiente (lunes, martes, ...) segn el calendario gregoriano. Solucion //do_while_gregoriano.cpp #include<iostream.h>
Cordova Neri, T.

195

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

#include<conio.h> main(){ int a,m,d,p,r,b=0,xxx,g; int i,j; cout<<" Dia segun calendario Gregoriano:"<<endl;

cout<<"Ingrese ano(D.C): ";cin>>a; cout<<"Ingrese mes cout<<"Ingrese dia g=a; r=a*365; do {if ( ( (a%4==0) && (a%100!=0) ) || (a%400==0) ) r++; a--; } while(a!=0); switch(m){ case 1:{break;} case 2:{r=r+31;break;} case 3:{r=r+31+28;break;} case 4:{r=r+31+28+31;break; } case 5:{r=r+31+28+31+30;break; } case 6:{r=r+31+28+31+30+31;break; } case 7:{r=r+31+28+31+30+31+30;break; } case 8:{r=r+31+28+31+30+31+30+31;break; } case 9:{r=r+31+28+31+30+31+30+31+31;break; } case 10:{r=r+31+28+31+30+31+30+31+31+30;break; } : ";cin>>m; : ";cin>>d;

Crdova Neri, T.

Borland C++ 5. 0.2 case 11:{r=r+31+28+31+30+31+30+31+31+30+31;break; } case 12:{r=r+31+28+31+30+31+30+31+31+30+31+30;break; } } r=r+d; xxx=r; r=4713*365; a=4713; do { if( ( (a%4==0) && (a%100!=0) ) || (a%400==0) ) r++; a--; } while(a!=0); r++; xxx=xxx+r; xxx++; if( ( (g%4==0) && (g%100!=0) ) || (g%400==0) ) if(m<=2) xxx--; clrscr(); cout<<"Corresponde al dia: "; xxx=(xxx%7); switch(xxx){ case 1:{cout<<"Martes";break;} case 2:{cout<<"Miercoles";break;} case 3:{cout<<"Jueves";break;} case 4:{cout<<"Viernes";break;} case 5:{cout<<"Sabado";break;}
Cordova Neri, T.

197

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

case 6:{cout<<"Domingo";break;} case 7:{cout<<"Lunes";break;} case 0:{cout<<"Lunes";break;} } getch();

Tambien, puede ver la siguiente solucion, usando metodologa de objetos.

// do_gregoriano.cpp #include <math.h> #include <iostream.h> #include <conio.h>

const long IGREG=(15+31*(10+12*1582)); //15/10/1582, fecha de creacin del calendario Gregoriano

class CFecha { int mon, day, year;


Crdova Neri, T.

Borland C++ 5. 0.2 long numdias(); //Numdias es la diferencia de das entre el Lunes 1/1/4713 a.C. //y la fecha dada por day/mon/year public: void leefecha(); void escribefecha(); long CFecha::numdias() {

long jul; int ja,jy = year,jm; if (jy == 0) return(0); if (jy < 0) jy++; if (mon > 2) jm = mon + 1; else { jy--; jm = mon + 13; } jul=(long)(floor(365.25*jy)+floor(30.6001*jm)+day+1720995); //jul es conocido como nmero de Julin, y representa el nmero //de das entre el 1/1/4713 a.C. y una fecha determinada if (day + 31 * (mon + 12 * year) >= IGREG) { ja = (int)(0.01 * jy); jul += 2 - ja + (int) (0.25 * ja); //Esta fue la correccin del Papa Gregorio XIII }
Cordova Neri, T.

199

Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas

return(jul); void CFecha::leefecha() { clrscr(); cout<<"Dame Fecha (dd/mm/aaaa) "; cin>>day>>mon>>year; } void CFecha::escribefecha() { long num=numdias(); long fecha=num%7+1; switch (fecha) { case 1: cout<<"Lunes "; break; case 2: cout<<"Martes "; break; case 3: cout<<"Miercoles "; break; case 4: cout<<"Jueves "; break; case 5: cout<<"Viernes "; break; case 6: cout<<"Sabado "; break; case 7: cout<<"Domingo "; break; } getch(); } // Definicion de objetos y programa principal void main() { CFecha mifecha; mifecha.leefecha(); mifecha.escribefecha(); }

Crdova Neri, T.

Borland C++ 5. 0.2 Problema 13.- - Un virus desconocido aumenta su poblacin de acuerdo a la siguiente ley: n = ni*t/(ni+t*exp(t)) en donde ni es el nmero inicial de unidades virales, t es el tiempo en minutos. Escribir un programa que lea la cantidad inicial del virus y determine cuantos minutos sern necesarios para que ste alcance su poblacin mxima. Indicar dicha cantidad. Solucion //while_virus.cpp #include<iostream.h> #include<conio.h>

Cordova Neri, T.

201

Potrebbero piacerti anche