Matriz pode ser definida como uma variável capaz de guardar diversos valores
porém do mesmo tipo.Matrizes estáticas são sem dúvidas mais fácil de usar e de entender, más se você não especificar o tamanho correto, provavelmente haverá
desperdício de memória, e isto num computador de pouca memória pode ser um problema. Quando não sabemos o tamanho de que precisamos recorremos a uma alocação dinâmica, que recebe memória do computador em tempo de execução, ao contrário de variáveis globais que são alocadas na hora da compilação, ou locais que usam a pilha.
Quando alocamos memória dinamicamente usando as funções do C, ela é obtida de áreas de memórias livres que se encontra na armazenagem real do computador, e a pilha.
Neste código aloquei memória usando a função malloc(); e liberei com free();
ambas da biblioteca stdlib.h, más o C possui outras funções de alocação dinâmica, porém para a demonstração deste exemplo não se fez necessárias.
A matriz é preenchida por um contador com laço for(); e a finalidade destes vários ifs(); com
gotoxy(); é de organizar a saída no vídeo dentro da moldura.
Veja abaixo imagens do programa em execução:
Veja abaixo o código do programa:
porém do mesmo tipo.Matrizes estáticas são sem dúvidas mais fácil de usar e de entender, más se você não especificar o tamanho correto, provavelmente haverá
desperdício de memória, e isto num computador de pouca memória pode ser um problema. Quando não sabemos o tamanho de que precisamos recorremos a uma alocação dinâmica, que recebe memória do computador em tempo de execução, ao contrário de variáveis globais que são alocadas na hora da compilação, ou locais que usam a pilha.
Quando alocamos memória dinamicamente usando as funções do C, ela é obtida de áreas de memórias livres que se encontra na armazenagem real do computador, e a pilha.
Neste código aloquei memória usando a função malloc(); e liberei com free();
ambas da biblioteca stdlib.h, más o C possui outras funções de alocação dinâmica, porém para a demonstração deste exemplo não se fez necessárias.
A matriz é preenchida por um contador com laço for(); e a finalidade destes vários ifs(); com
gotoxy(); é de organizar a saída no vídeo dentro da moldura.
Veja abaixo imagens do programa em execução:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define tam 4
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 ( " " );
}
}
}
int Imp_Matr ( char *num ) {
unsigned int i;
for ( i = 0; i < strlen ( num ); i++ ) {
if ( num [ i ] < '0' || num [ i ] > '9' )
return 0;
}
return 1;
}
int main ( ) {
system ( "title MATRIZ TRIDIMENSIONAL DINÂMICA" );
do {
system ( "cls" );
Moldura ( 2, 28, 2, 79, 2, 3 );
int ***M, i, j, l, n, cont = 0;
char num [ 3 ];
M = ( int*** ) malloc ( tam * sizeof(int**) );
textcolor ( LIGHTRED );
gotoxy ( 36, 5 );
printf ( "MATRIZ
TRIDIMENSIONAL DINÂMICA" );
textcolor ( WHITE );
gotoxy ( 5, 5 );
int a = 15;
int b = 20;
int c = 25;
textcolor ( BLACK );
for ( i = 0; i < tam; i++ ) {
M [ i ] = ( int** ) malloc ( tam * sizeof(int*) );
for ( j = 0; j < tam; j++ ) {
M [ i ] [ j ] = ( int* ) malloc ( tam * sizeof(int) );
for ( l = 0; l < tam; l++ ) {
cont++;
M [ i ] [ j ] [ l ] = cont;
printf ( "%5d", M [ i ] [ j ] [ l ] );
if ( M [ i ] [ j ] [ l ] == 4 )
gotoxy ( 5, i + 6 );
if ( M [ i ] [ j ] [ l ] == 8 )
gotoxy ( 5, i + 7 );
if ( M [ i ] [ j ] [ l ] == 12 )
gotoxy ( 5, i + 8 );
if ( M [ i ] [ j ] [ l ] == 16 )
gotoxy ( 5, i + 10 );
if ( M [ i ] [ j ] [ l ] == 20 )
gotoxy ( 5, a - 4 );
if ( M [ i ] [ j ] [ l ] == 24 )
gotoxy ( 5, i + 11 );
if ( M [ i ] [ j ] [ l ] == 28 )
gotoxy ( 5, i + 12 );
if ( M [ i ] [ j ] [ l ] == 32 )
gotoxy ( 5, b - 5 );
if ( M [ i ] [ j ] [ l ] == 36 )
gotoxy ( 5, i + 14 );
if ( M [ i ] [ j ] [ l ] == 40 )
gotoxy ( 5, i + 15 );
if ( M [ i ] [ j ] [ l ] == 44 )
gotoxy ( 5, i + 16 );
if ( M [ i ] [ j ] [ l ] == 48 )
gotoxy ( 5, c - 5 );
if ( M [ i ] [ j ] [ l ] == 52 )
gotoxy ( 5, i + 18 );
if ( M [ i ] [ j ] [ l ] == 56 )
gotoxy ( 5, i + 19 );
if ( M [ i ] [ j ] [ l ] == 60 )
gotoxy ( 5, i + 20 );
}
}
}
textcolor ( LIGHTBLUE );
gotoxy ( 36, 8 );
printf ( "Digite um Número
" );
printf ( "para
pesquisar " );
gotoxy ( 36, 9 );
printf ( "ou [ -1 ]
para sair " );
textcolor ( LIGHTRED );
gets ( num );
fflush ( stdin );
n = atoi ( num );
if ( n == -1 ) {
textcolor ( LIGHTBLUE );
gotoxy ( 37, 22 );
printf ( "Por: " );
textcolor ( LIGHTMAGENTA );
printf ( "Samuel Lima" );
textcolor ( BLACK );
gotoxy ( 37, 23 );
printf ( "sa_sp10@hotmail.com" );
Sleep ( 1800 );
textcolor ( LIGHTRED );
gotoxy ( 37, 25 );
printf ( "MUITO
OBRIGADO" );
getche ( );
exit ( 0 );
}
if ( n < 0 ) {
textcolor ( LIGHTBLUE );
gotoxy ( 36, 10 );
printf ( "\aO único
negativo válido é o " );
textcolor ( LIGHTRED );
printf ( "-1" );
Sleep ( 1800 );
}
if ( n > 64 ) {
textcolor ( LIGHTBLUE );
gotoxy ( 36, 12 );
printf ( "\aO número
" );
textcolor ( LIGHTRED );
printf ( "%d", n );
textcolor ( LIGHTBLUE );
printf ( " não existe
na Matriz" );
Sleep ( 1800 );
system ( "cls" );
}
if ( Imp_Matr ( num ) == 0 || n == 0 ) {
textcolor ( LIGHTBLUE );
gotoxy ( 36, 12 );
printf ( "\aVocê digitou " );
textcolor ( LIGHTRED );
printf ( "%s", num );
Sleep ( 1800 );
textcolor ( LIGHTBLUE );
gotoxy ( 36, 13 );
printf ( "\aNão foi
aceito" );
Sleep ( 1800 );
} else {
textcolor ( LIGHTBLUE );
gotoxy ( 18, 9 );
for ( i = 0; i < tam; i++ ) {
for ( j = 0; j < tam; j++ ) {
for ( l = 0; l < tam; l++ ) {
if ( n == M [ i ] [ j ] [ l ] ) {
textcolor
( LIGHTBLUE );
textcolor
( LIGHTBLUE );
gotoxy
( 36, 12 );
printf
( "O valor " );
textcolor
( LIGHTRED );
printf
( "%d", n );
textcolor
( LIGHTBLUE );
printf ( " foi
encontrado na tabela " );
textcolor ( LIGHTRED );
printf ( "%d", i );
textcolor ( LIGHTBLUE );
gotoxy ( 36, 13 );
printf ( "e linha
" );
textcolor ( LIGHTRED );
printf ( "%d ", j );
textcolor
( LIGHTBLUE );
printf ( " e coluna
" );
textcolor ( LIGHTRED );
printf ( "%d ", l );
Sleep
( 1800 );
textcolor
( LIGHTRED );
gotoxy ( 33, 26 );
printf ( "PRESSIONE
QUALQUER TECLA" );
getche ( );
free
( M );
}
}
}
}
}
} while ( 1 );
return 0;
}