domingo, 29 de novembro de 2015

Matriz - marcando e somando diagonal principal

O c é uma linguagem estruturada e cheia de recursos, matrizes por exemplo é uma estrutura de dados acima de duas dimensões, lembro
aos iniciantes que matrizes devem ser declaradas com o mesmo tipo de dado, e quando estão armazenadas na memória, são em formas de uma tabela, sendo assim, criei este programa, que imprime uma tabela
no qual é preenchida com valores inteiros já que a matriz é do tipo
int. No que vamos preenchendo a matriz, o c já vai marcando automaticamente a diagonal principal, com a cor vermelha para seus
valores, e os demais valores de outras posições são marcados em azul.
Porventura este não é um ótimo código indicado a iniciantes desta importante linguagem de programação?

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



Veja abaixo o código do programa:

#include <stdio.h>
#include <conio.h>
#define tam 3
void Moldura ( int a , int c , int b , int d , int e , int f ) {
     system ( "Color 10" );
     for ( a = e; a < c ; a++ ) {
         for ( b = f; b < d ; b++ ) {
              gotoxy ( b , a );
              textbackground ( WHITE );
              printf ( " " );
         }
     }
}
void Tabela ( ) {
     textbackground ( WHITE );
     int c, i = 0;
     textbackground ( BLACK );
     textcolor ( 12 );
     //Abaixo as rotinas pras colunas
     for ( i = 2; i <= 16 ; i++ ) {
         gotoxy ( 56 , i + 5 ); //colunaa da direita
         printf ( " " );
     }
     for ( i = 2; i <= 16 ; i++ ) {
         gotoxy ( 46 , i + 5 ); //coluna do meio mais a direita
         printf ( " " );
     }
     for ( i = 2; i <= 16 ; i++ ) {
         gotoxy ( 36 , i + 5 ); //coluna do meio ainda mais pro meio direita
         printf ( " " );
     }
     for ( i = 2; i <= 16 ; i++ ) {
         gotoxy ( 26 , i + 5 ); //coluna da esquerda
         printf ( " " );
     }
     //Abaixo as rotinas pras linhas
     gotoxy ( 26 , 7 );
     for ( c = 26; c < 56 ; c++ ) {
         printf ( " " );
     }
     gotoxy ( 26 , 12 );
     for ( c = 26; c < 56 ; c++ ) {
         printf ( " " );
     }
     gotoxy ( 26 , 17 );
     for ( c = 26; c < 56 ; c++ ) {
         printf ( " " );
     }
     gotoxy ( 26 , 22 );
     for ( c = 26; c <= 56 ; c++ ) {
         printf ( " " );
     }
}
int main ( ) {
     system ( "title MATRIZ - MARCANDO E SOMANDO DIAGONAL PRINCIPAL" );
     Moldura ( 2 , 28 , 2 , 79 , 2 , 3 );
     int l, c;
     int matriz [ tam ] [ tam ], dl = 0, dc = 0, adc = 0;
     textcolor ( LIGHTRED );
     gotoxy ( 20 , 3 );
     printf ( "MATRIZ - MARCANDO E SOMANDO DIAGONAL PRINCIPAL" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 21 , 5 );
     printf ( "Digite " );
     textcolor ( LIGHTRED );
     printf ( "9" );
     textcolor ( LIGHTBLUE );
     printf ( " valores para inserir na matriz" );
     Tabela ( );
     for ( l = 1; l <= tam ; l++ ) {
         dc = 0;
         for ( c = 1; c <= tam ; c++ ) {
              if ( l == c ) {
                   textcolor ( LIGHTRED );
                   textbackground ( WHITE );
              } else textbackground ( WHITE );
              gotoxy ( 31 + dc , 9 + dl );

              scanf ( "%d" , &matriz [ l ] [ c ] );
              textcolor ( LIGHTBLUE );
              dc = dc + 10;
         }
         dl = dl + 5;
     }
     for ( l = 1; l <= tam ; l++ ) {
         for ( c = 1; c <= tam ; c++ ) {
              if ( l == c )
                   adc = adc += matriz [ l ] [ c ];
         }
     }
     textcolor ( LIGHTBLUE );
     gotoxy ( 23 , 24 );
     printf ( "A soma da diagonal principal é ==> " );
     textcolor ( LIGHTRED );
     printf ( "%d" , adc );
     Sleep ( 1800 );
     textcolor ( LIGHTRED );
     gotoxy ( 35 , 26 );
     printf ( "MUITO OBRIGADO" );
     getche ( );
}