borla cap ii etruct control

Upload: cristhian-j-esperta

Post on 18-Oct-2015

77 views

Category:

Documents


0 download

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