martes, 13 de agosto de 2013

dev c++: Calcula y muestra tablas de 1 a n, valores de x a y, forma horizontal version 2

/*
   Programa: Mostrar tablas de 1 a n, y numeros a ser multiplicados, (tablas se muestran de forma horizontal), los valores se solicitan al usuario
   13.08.2013
   Claudio enrique alpizar Romero
   compilador: dev c++ portable
   Se usa color, ubicacion de texto y marco.
  
*/

#include <stdio.h>
#include <windows.h>

void ir_cr(int c, int r)                  
{
    /*
       funcion: ubica printf en coordenadas epecificas de la pantalla
    autor:   Claudio enrique alpizar romero
    por lo esta funcion emula ir_cr para posicionar texto en coordenadas especificas (x-columna,y-renglon)
    se tiene que declarar <windows.h>
    */
    COORD coord;
    coord.X=c;
    coord.Y=r;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}


void Set_Mrc(int c1,int r1,int c2,int r2)  // construye marco
{
    /*   
    funcion: crea marco con codigo ascii
    autor:   Claudio enrique alpizar romero
    fecha:   24.07.2013
    */
   int i;
   ir_cr(c1,r1); printf("%c",201);      // esquinas
   ir_cr(c1,r2); printf("%c",200);
   ir_cr(c2,r1); printf("%c",187);
   ir_cr(c2,r2); printf("%c",188);
   for(i=c1+1;i<c2;i++)                 // controla columna
   {
         ir_cr(i,r1);printf("%c",205);  // LINEA ARRIBA HORIZONTAL
         ir_cr(i,r2);printf("%c",205);  // LINEA ABAJO HORIZONTAL
   }
   for(i=r1+1;i<r2;i++)                 // controla renglon
   {
         ir_cr(c1,i);printf("%c",186);  // LINEA IZQUIERDA VERTICAL
         ir_cr(c2,i);printf("%c",186);  // LINEA DERECHA VERTICAL
   }
}


void tablas(int i,int p1,int n1,int p2)           // calcula y muestra tablas
{
     int numr,rep,r=7,cuenta=0,producto;
     int ncol[5]={2,17,32,47,62};       // columna para cada tabla
     int p3=4,p4=13;
     // p3-columnas en pantalla, p4-renglones de espacio entre bloque de tablas
     for(rep=i;rep<=p1;rep++)
     {
              for(numr=n1; numr<=p2;numr++)
               {              
                   producto = rep * numr;             
                   ir_cr(ncol[cuenta],r+numr);printf("%d * %d = %d", rep, numr, producto); 
                             
               }
               if (cuenta<p3)
               {
                 
                  cuenta++;
              
               }   
               else
               {
                 r+=p4;
                 cuenta=0;
               }
      }
}


main()
{
    char respuesta = 'n';
    int n=0,p=0,c=0,d=0;
       
    do{
        system("color 71");
        system("CLS"); 
        ir_cr(25,2);printf("TABLAS DE MULTIPLICACION");
        ir_cr(25,4);printf("Introduzca el valor de la primera tabla p = ");scanf("%d", &p);
        getchar();
        ir_cr(25,5);printf("Introduzca el valor de la ultima tabla  n = ");scanf("%d", &n);
        getchar();
        ir_cr(25,7);printf("Introduzca primer valor a multiplicar   vi = ");scanf("%d", &c);
        getchar();
        ir_cr(25,8);printf("Introduzca ultimo valor a multiplicar   vf = ");scanf("%d", &d);
        getchar();
       
        if(p>n)
        {
               p=n-2;     
        }
        if(c>d)
        {
               c=d-2;    
        }
       
        if (n>0 && n<=100 || d>0 && d<=100)
        {
                if (n<=5)
                {
                  Set_Mrc(1,1,78,23);       
                }
                tablas(p,n,c,d);
                 
                if (n<=5)
                {
                  ir_cr(25,22);      
                } 
                else
                {
                  printf("\n\n"); 
                }           
                printf("Continuar <s/n> ? ");
                respuesta = getch();      
        }
        else
        {
                system("color 47");
                system("CLS");
                Set_Mrc(1,1,78,23);
                ir_cr(20,11);printf("El valor debe ser mayor a 0 y menor a 100!!!!");
                beep(500,1000);
                ir_cr(25,22);printf("Continuar <s/n> ? ");
                respuesta = getch();
        }  
    }while(respuesta == 's'|| respuesta == 'S');
    system("color 17");
    system("CLS");
    Set_Mrc(1,1,78,23);
    ir_cr(20,10);printf("Gracias por su visita, hasta luego!!!");
    ir_cr(18,22);printf("Presione cualquier tecla para continuar... ");
    getch();
}

No hay comentarios:

Publicar un comentario