sábado, 28 de janeiro de 2017

Preenchendo um vetor em modo gráfico

A função para entrada de dados em modo gráfico
que apresento agora, está mais evoluída em relação
a outra de outros programas.
Na outra função era permitido que se digitasse
qualquer coisa, depois tudo passava por um filtro
e só os dígitos passava.
Neste aqui, com uma simples rotina adicionada
na função Format, já foi suficiente para eliminarmos
o filtro e fazer com que tudo se repita se por acaso
for digitado algo que não seja um dígito de 0 a 9.
E para provar que tudo está funcionando, preencheremos
um vetor de inteiros que pode ser imprimido no modo texto na tela do Dos,
más que apresentaremos seus resultados na tela gráfica, por isto eis a necessidade
de usar um buffer de char que é exigido pela
função outtextxy da biblioteca graphics.

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


Veja abaixo o código do programa:



#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#define ENTER 13
#define tam 10
int main ( );
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 Format ( char vet [ 50 ] ) {
     int d = 0, i, i_ = 1, k = 0, t = 0;
     char letra = '\0';
     for ( i = 0; i < 50; i++ )
         vet [ i ] = ' ';
     do {
         setcolor ( 1 );
         imp_jan ( 1, 96 * i_ - 97, 285, 643, 20 );
         d++;
         letra = getch ( );
         if ( letra < '0' || letra > '9' ) {
              break;
         }
         if ( letra == ENTER ) {
              break;
         }
         vet [ k ] = letra;
         k++;
         t = *vet;
         settextstyle ( 10, 0, 2 );
         setcolor ( 0 );
         outtextxy ( 130, 100, vet );
     } while ( d < 50 );
     //printf ( "%d", t );
     if ( t == 0 ) {
         t = ' ';
         Format ( vet );
     }
     return 0;
}
int main ( ) {
     int i;
     initwindow ( 663, 303, "ENTRADA DE DADOS - DÍGITOS FINAL" );
     setbkcolor ( WHITE );
     int Vetor [ tam ];
     char *vet = { 0 };
     vet = ( char* ) malloc ( 50 );
     for ( i = 0; i < 50; i++ )
         vet [ i ] = ' ';
     do {
         cleardevice ( );
         settextstyle ( 10, 0, 2 );
         setcolor ( 12 );
         outtextxy ( 130, 40, "ENTRADA DE DADOS - DÍGITOS" );
         setcolor ( 9 );
         outtextxy ( 130, 70, "Vamos preencher o vetor" );
         setcolor ( 9 );
         outtextxy ( 130, 100, "Digite 10 números" );
         for ( i = 0; i < tam; i++ ) {
              //entrada de dados
              Format ( vet );
              sscanf ( vet, "%d", &Vetor [ i ] );
         }
         setcolor ( 9 );
         outtextxy ( 130, 130, "Abaixo o vetor preenchido" );
         setcolor ( 12 );
         moveto ( 130, 160 );
         for ( i = 0; i < tam; i++ ) {
              printf ( " %3d ", Vetor [ i ] );
              sprintf ( vet, " %3d ", Vetor [ i ] );
              outtext ( vet );
         }
         delay ( 1800 );
         settextstyle ( GOTHIC_FONT, 0, 2 );
         setcolor ( 12 );
         outtextxy ( 160, 190, "Por: " );
         setcolor ( 13 );
         outtextxy ( 240, 190, "Samuel Lima" );
         setcolor ( 0 );
         outtextxy ( 220, 240, "MUITO OBRIGADO" );
         getch ( );
         exit ( 0 );
     } while ( 1 );
     closegraph ( );
     return ( 0 );
}