sábado, 21 de fevereiro de 2015

Matriz não dimensionada

Informando ao compilador uma dimensão, a da direita para ser mais preciso,
 numa matriz não-dimensionada, a dimensão da esquerda pode ficar vazia
ficando por conta do compilador indexar a matriz de forma correta.
É perfeitamente possível alterar os valores da dimensão da direita
sem que prejudique as dimensões da matriz.
Neste exemplo trago um excelente exemplo de manipulação de matriz
não dimensionada, o programa imprime a matriz e em seguida pede
que se escolha uma linha e uma coluna, dentro de restrições que foram
aplicadas por mim mesmo.Feito tudo certo, o programa pede que se escolha um número para introduzir na posição escolhida em linhas x colunas, más se engana o usuário que tentar repetir o mesmo número que se encontra na posição, o programa não aceita.

Veja abaixo imagens do programa em execução:






Veja abaixo o código do programa:


#include <stdio.h>
#include <conio.h>
void Janela5 ( ) {
     int lin, col;
     col = 0;
     for ( lin = 2; lin <= 24 ; lin++ )
         for ( col = 2; col <= 78 ; col++ ) {
              gotoxy ( col , lin );
              textattr ( 70 );
              printf ( " " );
         }
}
#define tam 10
int main ( ) {
     system ( "title MATRIZ NÃO DIMENSIONADA" );
     int Y [ ] [ 10 ] = {
          { 1, 9 }, { 2, 1 }, { 3, 8 },
               { 4, 7 }, { 5, 3 }, { 6, 5 },
               { 7, 2 }, { 8, 4 }, { 9, 6 }, { 0, 0 } };
              int i, j, n;
     do {
         Janela5 ( );
         textcolor ( LIGHTRED );
         gotoxy ( 32 , 3 );
         printf ( "MATRIZ NÃO DIMENSIONADA" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 10 , 5 );
         printf ( "Abaixo a matriz original" );
         textcolor ( LIGHTGREEN );
         for ( i = 0; i < 10 ; i++ ) {
              gotoxy ( 15 , i + 7 );
              for ( j = 0; j < 2 ; j++ ) {
                   printf ( " %d " , Y [ i ] [ j ] );
              }
         }
         getche ( );
         textcolor ( LIGHTBLUE );
         gotoxy ( 10 , 18 );
         printf ( "Escolha uma linha " );
         textcolor ( LIGHTRED );
         scanf ( "%d" , &i );
         fflush ( stdin );
         if ( i < 0 || i > tam - 1 ) {
              textcolor ( LIGHTBLUE );
              gotoxy ( 10 , 20 );
              printf ( "\aO Número da linha não Pode Ser Negativo" );
              textcolor ( LIGHTBLUE );
              gotoxy ( 10 , 21 );
              printf ( "Nem Maior que %d" , tam - 1 );
              Sleep ( 1000 );
              gotoxy ( 10 , 23 );
              textcolor ( YELLOW );
              printf ( "PRESSIONE QUALQUER TECLA" );
              getche ( );
              gotoxy ( 10 , 20 );
              clreol ( );
              gotoxy ( 10 , 21 );
              clreol ( );
              gotoxy ( 10 , 23 );
              clreol ( );
              gotoxy ( 28 , 18 );
              clreol ( );
         }
     } while ( ( i < 0 ) || ( i > tam - 1 ) );
     do {
         textcolor ( LIGHTBLUE );
         gotoxy ( 10 , 19 );
         printf ( "Escolha uma Coluna " );
         textcolor ( LIGHTRED );
         scanf ( "%d" , &j );
         fflush ( stdin );
         if ( j < 0 || j > 1 ) {
              textcolor ( LIGHTBLUE );
              gotoxy ( 10 , 21 );
              printf ( "\aO Número da coluna não Pode Ser Negativo" );
              textcolor ( LIGHTBLUE );
              gotoxy ( 10 , 22 );
              printf ( "Nem Maior que %d" , 1 );
              Sleep ( 1000 );
              gotoxy ( 10 , 23 );
              textcolor ( YELLOW );
              printf ( "PRESSIONE QUALQUER TECLA" );
              getche ( );
              gotoxy ( 10 , 21 );
              clreol ( );
              gotoxy ( 10 , 22 );
              clreol ( );
              gotoxy ( 10 , 23 );
              clreol ( );
              gotoxy ( 28 , 19 );
              clreol ( );
         }
     } while ( ( j < 0 ) || ( j > 1 ) );
     n = Y [ i ] [ j ];
     do {
         textcolor ( LIGHTBLUE );
         gotoxy ( 10 , 20 );
         printf ( "Digite o valor a ser inserido " );
         textcolor ( LIGHTRED );
         scanf ( "%d" , &Y [ i ] [ j ] );
         fflush ( stdin );
         if ( Y [ i ] [ j ] == n ) {
              textcolor ( LIGHTBLUE );
              gotoxy ( 10 , 22 );
              printf ( "Tente outro ! o número" );
              textcolor ( LIGHTRED );
              printf ( " %d" , n );
              textcolor ( LIGHTBLUE );
              printf ( " já está nesta posição " );
              getche ( );
              gotoxy ( 10 , 22 );
              clreol ( );
              gotoxy ( 40 , 20 );
              clreol ( );
         }
     } while ( Y [ i ] [ j ] == n );
     textcolor ( LIGHTBLUE );
     gotoxy ( 47 , 5 );
     printf ( "Veja abaixo a matriz alterada" );
     textcolor ( WHITE );
     for ( i = 0; i < 10 ; i++ ) {
         gotoxy ( 60 , i + 7 );
         for ( j = 0; j < 2 ; j++ ) {
              printf ( " %d " , Y [ i ] [ j ] );
         }
     }
     textcolor ( LIGHTBLUE );
     gotoxy ( 48 , 20 );
     printf ( "Matriz alterada com sucesso" );
     Sleep ( 1800 );
     textcolor ( LIGHTRED );
     gotoxy ( 36 , 23 );
     printf ( "MUITO OBRIGADO" );
     getche ( );
     exit ( 0 );
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.