quarta-feira, 18 de janeiro de 2017

Tabuada em C - Janela gráfica

Esta tabuada criada em linguagem C, usa como saída uma janela
gráfica da biblioteca graphics.h.
Não há nada de complicado neste exemplo, na verdade só tive
mais trabalho para fazer a impressão na tela.
Com certeza alguns vão se assustar com o tamanho do código,
e outros até dirão: Porque duas funções para criar a tabuada
sendo que só uma bem arranjada já funcionaria?
Tudo isto foi tomado como solução para uma boa impressão
das saídas na tela.
Então não se preocupem com estes montes de ifs cobrindo
a função moveto(); isto foi necessário para
posicionamento das saídas formatadas onde foram copiadas em matriz
de char dentro da função sprintf();

Veja abaixo uma imagem do programa em execução:




#include <stdio.h>
#include <graphics.h>
#define tam 10
void imp_jan ( int x, int y, int lin, int col, int n ) {
     for ( int i = 0; i <= n; i++ ) {
         line ( x + i, y, x + i, y + lin );
         line ( x + col + i, y, x + col + i, y + lin );
         line ( x, y + i, x + col, y + i );
         line ( x, y + i + lin, x + col + n, y + i + lin );
     }
}
int Tabuada_1 ( int n, int num [ tam ] [ tam ] ) {
     char buf [ 50 ];
     char buf_1 [ 50 ];
     int a = 0, i;
     n = 0;
     while ( n < 5 ) {
         setcolor ( 14 );
         n++;
         settextstyle ( DEFAULT_FONT, HORIZ_DIR, 0 );
         setcolor ( 0 );
         if ( n == 1 )
              a = 60;
         if ( n == 2 )
              a = 200;
         if ( n == 3 )
              a = 340;
         if ( n == 4 )
              a = 480;
         if ( n == 5 )
              a = 620;
         for ( i = 1; i <= 10; i++ ) {
              if ( i == 1 )
                   moveto ( a, 70 );
              if ( i == 2 )
                   moveto ( a, 90 );
              if ( i == 3 )
                   moveto ( a, 110 );
              if ( i == 4 )
                   moveto ( a, 130 );
              if ( i == 5 )
                   moveto ( a, 150 );
              if ( i == 6 )
                   moveto ( a, 170 );
              if ( i == 7 )
                   moveto ( a, 190 );
              if ( i == 8 )
                   moveto ( a, 210 );
              if ( i == 9 )
                   moveto ( a, 230 );
              if ( i == 10 )
                   moveto ( a, 250 );
              sprintf ( buf, "%d x %d = ", n, i );
              setcolor ( 9 );
              outtext ( buf );
              sprintf ( buf_1, "%d", num [ n ] [ i ] );
              setcolor ( 15 );
              outtext ( buf_1 );
              Sleep ( 80 );
         }
     }
     return 0;
}
int Tabuada_2 ( int n, int num [ tam ] [ tam ] ) {
     char buf [ 50 ];
     char buf_1 [ 50 ];
     int a = 0, i;
     n = 5;
     while ( n < 10 ) {
         setcolor ( 14 );
         n++;
         settextstyle ( DEFAULT_FONT, HORIZ_DIR, 0 );
         if ( n == 6 )
              a = 60;
         if ( n == 7 )
              a = 200;
         if ( n == 8 )
              a = 340;
         if ( n == 9 )
              a = 480;
         if ( n == 10 )
              a = 620;
         for ( i = 1; i <= 10; i++ ) {
              if ( i == 1 )
                   moveto ( a, 290 );
              if ( i == 2 )
                   moveto ( a, 310 );
              if ( i == 3 )
                   moveto ( a, 330 );
              if ( i == 4 )
                   moveto ( a, 350 );
              if ( i == 5 )
                   moveto ( a, 370 );
              if ( i == 6 )
                   moveto ( a, 390 );
              if ( i == 7 )
                   moveto ( a, 410 );
              if ( i == 8 )
                   moveto ( a, 430 );
              if ( i == 9 )
                   moveto ( a, 450 );
              if ( i == 10 )
                   moveto ( a, 470 );
              sprintf ( buf, "%d x %d = ", n, i );
              setcolor ( 9 );
              outtext ( buf );
              sprintf ( buf_1, "%d", num [ n ] [ i ] );
              setcolor ( 15 );
              outtext ( buf_1 );
              Sleep ( 80 );
         }
         if ( n == 10 ) {
              settextstyle ( TRIPLEX_FONT, 0, 2 );
              setcolor ( 10 );
              outtextxy ( 260, 510, "MUITO OBRIGADO" );
              getch ( );
              exit ( 0 );
         }
     }
     return 0;
}
int main ( ) {
     int i_ = 1;
     int n, i, num [ tam ] [ tam ];
     for ( n = 1; n <= tam; n++ ) {
         for ( i = 1; i <= tam; i++ ) {
              num [ n ] [ i ] = ( n * i );
         }
     }
     initwindow ( 780, 563, "TABUADA EM C" );
     setcolor ( 14 );
     imp_jan ( 1, 96 * i_ - 97, 545, 760, 20 );
     settextstyle ( TRIPLEX_FONT, HORIZ_DIR, 2 );
     setcolor ( 12 );
     outtextxy ( 260, 40, "TABUADA EM C" );
     Tabuada_1 ( n, num );
     Tabuada_2 ( n, num );
     closegraph ( );
     return 0;
}