martes, 13 de agosto de 2013

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

/*
   programa: tabalas de multiplicación de 1 a n (donde n es le numero que da el usuario) y las ordena de forma horizontal aprovechando la pantalla
   Claudio enrique alpizar Romero
   13.08.2013
   utiliza color, ubicación de texto y pone marco si las tablas son de 1 a 5
   Compilador: dev c++ portable
*/

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

void ir_cr(int c, int r)                  
{
    /*
       funcion: ubica printf en coordenadas epecificas de la pantalla
    sirve 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
    */
   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 p1)                     // calcula y muestra tablas
{
     int numr,rep,r=5,cuenta=0,producto;
     int ncol[5]={2,17,32,47,62};       // columna para cada tabla
     int p2=10,p3=4,p4=13;
     // p2-del 1 al 10, p3-columnas en pantalla, p4-renglones de espacio entre bloque de tablas
     for(rep=1;rep<=p1;rep++)
     {
              for(numr=1; 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;
       
    do{
        system("color 71");
        system("CLS"); 
        ir_cr(25,2);printf("TABLAS DE MULTIPLICACION");
        ir_cr(25,4);printf("Introduzca el valor n = ");scanf("%d", &n);
        getchar();
        if (n>0 && n<=100)
        {
                if (n<=5)
                {
                  Set_Mrc(1,1,78,23);       
                }
                tablas(n);
                 
                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