borla cap ii etruct control
TRANSCRIPT
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
Structuras de ontrol
CECapitulo II
-
Borland C++ 5. 0.2
Cordova Neri, T.
61
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 ()
3.2 . do while()
3.3.- for(inicializacion;cond_prueba;contador)
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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 _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
#include //para setiosflags
#include
#include
#include // para system()
int main() {
-
Borland C++ 5. 0.2
Cordova Neri, T.
63
float a,b,c,p,area;
clrscr();
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
#include
#include
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
65
gotoxy(2,4),cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
gotoxy(59,9),cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
67
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
#include
#include
void main()
{ int a,b,aux;
clrscr();
gotoxy(2,1);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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:
-
Borland C++ 5. 0.2
Cordova Neri, T.
69
if (exp1 ) {
;
If (exp2)
;
}
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
#include
void main() {
float num;
int numr;
clrscr();
gotoxy(1,1);coutnum;
numr = int(num); //Moldeado de tipos
if (num-numr>0.5)
numr++;
if ((num-numr==.5)&&(numr%2))
numr++;
gotoxy()1,2);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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 //para usar funciones cout, cin
#include //Para usar funcion Clrs(), getche()
main()
{int cod, clave,p;
clrscr();
coutcod;
coutclave;
if((cod==10) && (clave==12))
{ coutp;
if (p % 2==0)
-
Borland C++ 5. 0.2
Cordova Neri, T.
71
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
Problema 1.- Disear un programa que permita leer un numero y luego averiguar
si es capica.
Solucion // if_capicua.cpp
#include
#include
#include
void main()
{ int num,c,r1,d,u,inv; clrscr();
gotoxy(10,4);coutnum;
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
73
} 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
#include
#include
#include
main()
{ double a, b, c, d, x1, x2,dd;
gotoxy(6,2);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
{ gotoxy(8,12); cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
75
{ double a, b, c, d
double re, im; // parte real e imaginaria de la raz
gotoxy(6,2);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
} }
getche();}
Salida
Cuando las instrucciones a ejecutarse son anidadas:
if (expresion==valor1)
else
if (expresin==valor2)
< instruccion_1;>
...
else
if (expresin==valorn)
-
Borland C++ 5. 0.2
Cordova Neri, T.
77
< instruccion_1;>
else
Aqu el programa realiza una sola para un 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 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
#include
void main(void) {
int a,b,c;
clrscr();
couta;
coutb;
coutc;
if (a==b+c) cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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: ;
break;
case valor2: < instruccines_2>;
break;
....
case valor_n: < instruccines_n>;
break;
default: < 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
-
Borland C++ 5. 0.2
Cordova Neri, T.
79
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
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
81
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 // para exit(1)
#include //para pow() ,sqrt()
#include //para cin,cout
#include // para clrscr()
# define linea "----------------------------------------------------"
void main()
{ int opc,n,raiz,pot,poten,base;
clrscr();
gotoxy(15,3);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
gotoxy(15,5);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
83
clrscr();
gotoxy(2,8);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
#include
#include
#include
#include
# 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
-
Borland C++ 5. 0.2
Cordova Neri, T.
85
gotoxy(4,2);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
break;
case 'c':case 'C':
{clrscr();
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
87
case 'i':case 'I':// Opcion de case principal :I : Impresoras
clrscr();
gotoxy(15,2); cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
}// fin de alternativas de Impresoras :I: Impresoras
break;
case 'l':case 'L':// Opcion de case principal :L : Lectaras
clrscr();
gotoxy(15,2); cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
89
}
break;
case 's':case 'S': cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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 (..)
-
Borland C++ 5. 0.2
Cordova Neri, T.
91
//case_if_anidados.cpp
#include
#include
main()
{ char mes; clrscr();
gotoxy(24,1),cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
else
if(strcmp(mes,"F")==0||strcmp(mes,"f")==0)
{gotoxy(20,6);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
93
#include
#include
#include
main()
{ int dias=0, mes=0, an=0;
gotoxy(12,4);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
// 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
-
Borland C++ 5. 0.2
Cordova Neri, T.
95
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)
{
;
}
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
#include
#include
#include // Para toupper (convierte un carcter a mayscula)
void main() {
int fa=0,fe=0,fi=0,fo=0,fu=0;
char c=' \ 0';
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
97
continuar..? (S / N). Si edita S continua ejecutando el programa, en otro caso
finaliza.
Solucin // while_digitos.cpp
#include
#include
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);coutn;
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
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
gotoxy(12,10); cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
99
char resp; resp='s'; clrscr();
while(resp=='s')
{ gotoxy(10,3);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
void main()
{int acum=0,ladi,ladd,li;
char codigo, clave;
gotoxy(12,6);coutcodigo;
-
Borland C++ 5. 0.2
Cordova Neri, T.
101
gotoxy(12,7); coutclave;
if((codigo=='a')&& (clave=='b'))
{clrscr();
gotoxy(12,6); coutladi;
gotoxy(12,7); coutladd;
clrscr();
li=ladi;
while (ladi
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
gotoxy(12,12); cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
103
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
main()
{int a,b,temporal,mcd;
gotoxy(6,2);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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 #include main() {int a,b,temporal,mcd,primero, segundo,resultado; gotoxy(6,2);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
105
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 #include
#include #include
main()
{ int n,m,i=1,j=1;
gotoxy(12,3);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
#include
#include
void main()
{ int x,n,i=1; float r=0.0;
clrscr();
gotoxy(8,2);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
107
gotoxy(8,4);coutx;
gotoxy(8,5);coutn;
while(i
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
#include
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);coutmpp)
-
Borland C++ 5. 0.2
Cordova Neri, T.
109
{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); coutnum;
}
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
o= x;
while (o>0)
{ o=o/10;
s++; }
o=x;
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
111
getche(); } Salida
3.2.- Sentencia do-while
Llamado bucle con salida controlada, ejecuta lo mismo que la
estructura while, con la diferencia que primero ejecuta una y luego
verifica la , 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 {
} 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.
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
main()
{ int cont=1,suma=0,n;
coutn;
do
{ suma+=cont;
cont++;
} while (cont
-
Borland C++ 5. 0.2
Cordova Neri, T.
113
gotoxy(12,6);coutn;
do { suma+=cont;
cont++;
} while (cont
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
#include
main() {
int n,i,r,resp,suma=0;
clrscr();
couti;
coutn;
if (n!=i)
{ do
{coutr;
if (r==0) {cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
115
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
} j+=r;
} while (j!=n+r);
gotoxy(wherex()-1,wherey());
if (resp=='S') cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
117
{ int n=1; float s=0.0,e;
gotoxy(10,2);coute; cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
#include
#include
main()
{ int i=0,pc1;
clrscr(); gotoxy(10,4); cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
119
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
#include
main()
{ int a,b; char resp; float k;
do
{ couta;
coutb;
k=a%b;
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
void main()
{ clrscr();
int s,b100,b50,b20,b10,b5,b1,r1,r2,r3,r4,r5;
char op='y';
while(op=='y')
{ do
{ couts;
}
while (!(s>=1000));
b100=int(s/100);r1=s%100;
b50=int(r1/50);r2=r1%50;
-
Borland C++ 5. 0.2
Cordova Neri, T.
121
b20=int(r2/20);r3=r2%20;
b10=int(r3/10);r4=r3%10;
b5=int(r4/5);r5=r4%5;
b1=r5;
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
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);coutn;
if(n%2==0)
{ gotoxy(42,i);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
123
npn++;
} }
else
{ gotoxy(42,i);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
} 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,
-
Borland C++ 5. 0.2
Cordova Neri, T.
125
(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,
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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 #include
#include #include
#include
#define max 100
main()
-
Borland C++ 5. 0.2
Cordova Neri, T.
127
{ char cad[max]; int i,j,x,nrovec=0,dosd,fact=1,ndp=0,ndi=0;
do {nrovec++;
gotoxy(20,2);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
} }
cad[i]='\0'; //para que al final asigne todo blanco
int p=atoi(cad);
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
129
{ndi++; }
fact=fact/10;
}
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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 { } o do {...} while;
//for solamente condicionado
for (;expresion;) {
;
}
//for infinito
for (;;) {
;
}
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;) {
;
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:
-
Borland C++ 5. 0.2
Cordova Neri, T.
131
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
#include
#include
# define linea "---------------------------------------------"
main()
{ int i,n,u=1;
float s=0;
clrscr();
gotoxy(5,4);coutn; cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
}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
#include
void main() {
enum direccion {abajo=1,izquierda,arriba,derecha} mover;
int i,j,k,n,x,y;
clrscr();
coutn;
clrscr();
gotoxy(n/2+1,n/2+1); cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
133
case abajo:
for (i=1; i
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
y=wherey();
for (k=1;k
-
Borland C++ 5. 0.2
Cordova Neri, T.
135
und++;
else
if ((mult=10))
dosd++;
else
{
if (mult>may)
may=mult;
tresd++;
}
}
gotoxy(19,16);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
137
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
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
#include
#include
# 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
-
Borland C++ 5. 0.2
Cordova Neri, T.
139
gotoxy(30,11),cout0)
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;
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
141
else
ps=0; }
if (a_s >0) ps=a_pgs/a_s;
else ps=0;
if (est_civ=='C') {s_n5=(s_basico+bonif)-dscto;
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;
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
a_d=a_d+1;
if (a_d >0)
pd=a_pgd/a_d;
else
pd=0;
}
if (a_d >0) pd=a_pgd/a_d;
else
pd=0;
s_neto=(s_basico+bonif)-dscto;
gotoxy(44,20+i);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
143
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:
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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 #include #include
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
145
gotoxy(23,3);clreol();coutn;
for (i=1;i
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
p_talla_f=a_talla_f/a_f;
p_peso_f=a_peso_f/a_f;
// Generando reportes
clrscr();
gotoxy(14,2);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
147
#include
void main()
{ int d,e,y,n,r,o,s,a=0;
clrscr();
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
149
}
else{
if(d+e==10+y){
if(n+r+1==e){
if(e+o==n){
if(s+1==10+o){
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
151
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
#include
main()
{int i,j,k;
char opcion;
do
{int n=2;
do
{if (n!=2)
{cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
153
cout>n;}
while (!((n=1)));
clrscr();
for(i=1;i
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
#include
#include
# define linea "--------------------------------------------"
main()
{float principal=1000.0,interes=0.1,cantdep;
gotoxy(20,3);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
155
}
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
#include
#include
void main()
{ int nl,lt,i; clrscr();
gotoxy(3,2);coutnl;
for (lt=1;lt
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
157
Solucion //do_if_uni.cpp
/#include
#include
main(){
int cont=0, digito,num,busca_dig;
coutnum;
if ((num>99) && (num0);
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
#include //para system()
main()
{ int i,n,j=0,s=0,np=0;
gotoxy(10,4);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
159
gotoxy(12,8); cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
{ s=s+i;
np++;
gotoxy(12,i+6);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
161
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
#include
#include
void main() {
int num,pos,neg,max,min,med;
clrscr();
do {
pos=0, neg=0;
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
} while (!num);
if (num>0) {
pos++;
if (pos==1) max=min=med=num;
else if (num>max) max=num;
else if (num
-
Borland C++ 5. 0.2
Cordova Neri, T.
163
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
#include
#include
#include //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();
couta;
coutn;
do {
antaprox=aprox;
aux=1; //antaprox a la n-1
for (int i=1;i=err);
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
#include
#include
main() {
int n,k,s,suma;
int SW=0;
float cf,cp,prob=0;
clrscr();
randomize();
coutn;
coutk;
-
Borland C++ 5. 0.2
Cordova Neri, T.
165
coutsuma;
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
#include
#include
#include
main() {
int aa,mm,dd, h,m, a1,a2, correcto;
clrscr();
coutaa;
if (mm>12||mm30) {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;
} }
if (!correcto) cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
167
do {
correcto=1; couth>>m;
if (h23||m59) {
correcto=0; cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
169
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
#include
int main (void)
{ int cod, clave, c, r, key=0, h, k, a, b, i, j, np;
float radio;
char opc='s'; c=1;
coutcod; /*se verifica q cdigo tiene solo 3 dgitos */
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
while ((cod=1000))
{cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
171
for(i=h-a;i=0)&&(radio
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
cod=cod/10; r=cod%10;
key=key+r*13; cod=cod/10;
while((c
-
Borland C++ 5. 0.2
Cordova Neri, T.
173
else
{cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
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
#include
-
Borland C++ 5. 0.2
Cordova Neri, T.
175
#include
#include
main()
{ int num,k,num1,r,valor,num2,num3,num4,num5,num6,num7,num8,num9,num10;
char op;
gotoxy(12,2),cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
r=num1/pow10(k-1);
if(valor==1)
{
r=r%10;
}
switch(r){
case 9:
switch(k){
case 6: cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
177
break;
case 1:num1=num1%100;
num1=num1/10;
num3=num3/10;
if(num1!=1 && num1!=0||num3==0)
{
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
179
case 3: cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
if (num5==0 || num5!=1||num6==0){
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
181
num5=num5%10;
num6=num6/10000;
if (num5==0 || num5!=1||num6==0){
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
break;
case 4: num5=num5/10000;
num5=num5%10;
num6=num6/10000;
if (num5==0 || num5!=1||num6==0){
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
183
else
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
if(num9==0)
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
185
case 6: num10=num10%100000;
if(num10==0)
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
187
}
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
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
break;
}
k--;
valor=1 ;
}
while(k>0);
gotoxy(20,8);coutop;
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
-
Borland C++ 5. 0.2
Cordova Neri, T.
189
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
#include
#include
main()
{int t; float pm, ti, vn, cnr; char resp;
clrscr();
do { clrscr();
gotoxy(10,4);coutcnr;
gotoxy(10,5);coutti; gotoxy(10,6);
coutt;
vn=cnr/(1-(ti*t)/12); pm=vn/t;
gotoxy(10,8);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
} while( (resp == 'S')||(resp =='s')); getch(); }
Salida
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; mes2=2;
mes_tot=2; meses=1;
while (meses
-
Borland C++ 5. 0.2
Cordova Neri, T.
191
gotoxy(5,1);cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
gotoxy(6,i+1);cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
193
t1=0;
t2=1;
t3=t1+t2;
suma=t1+t2;
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
24222
1........41
31
21
11
n+++++
para un error (precisin) de 10-2. ( Sr. Lector, puede generalizar para lectura de
cualquier grado de error)
Solucion //do_whi_serie.cpp
#include
#include
#include
#include
# define linea "----------------------------------------------------"
main ()
{ int n=1;
float s=0.0,e;
gotoxy(10,2);coute;
cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
195
cout
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
#include
main(){
int a,m,d,p,r,b=0,xxx,g;
int i,j; cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
197
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
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
case 6:{cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
199
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
}
-
Universidad Nacional de Ingeniera Fac. Ingeniera Industrial y de Sistemas
Crdova Neri, T.
return(jul);
void CFecha::leefecha() {
clrscr();
coutday>>mon>>year;
}
void CFecha::escribefecha() {
long num=numdias();
long fecha=num%7+1;
switch (fecha) {
case 1: cout
-
Borland C++ 5. 0.2
Cordova Neri, T.
201
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
#include