Transpor Matriz em Vetor
Autor: Bolívar Arthur Butzke | Publicado: 2009-03-20T23:11:00-03:00

Olá galera do ICC!!

Hoje vou postar um programinha feito por mim durante uma aula de revisão, ele é muito simples, possui basicamente uma matriz de ordem 10 e um vetor de 100 elementos.

Segue abaixo o código-fonte.
/*
Data: 09/03/2009
Autor: Bolívar Arthur Butzke

E-mail: bolivarbutzke@gmail.com
Blog: bolivarbutzke.blogspot.com

1) Considerando uma matriz “M”, com a seguinte definição: 

              [ M(I,J), (I = 1..10), (J = 1..10) ] e um vetor

              V(I), (I = 1..100), escreva os seguintes procedimentos:

i) Um procedimento que mostre a diagonal principal da matriz
ii) Um procedimento de consulta e um de atribuição para os elementos da matriz “M”
iii) Um procedimento que transponha a matriz “M” para o vetor “V”
*/

#include stdio.h
#include time.h

/* Prototipação das Funções */
void DiagonalPrincipal(void);
void Consultar(void);
void Atribuir(void);
void Trasnpor(void);
void ExibirVetor(void);
void ExibirMatriz(void);

/* Declaração das variáveis Globais */
int M[10][10], i, j, V[100], n; 

int main()
{
 /* Preenche a matriz com números aleatórios */ 
 for (i=0;i&lt;10;i++)
  for (j=0;j&lt;10;j++)
  {
   srand(time(NULL)+i*j);   
   M[i][j] = rand() % 100;
  }
 /* Chama função que exibe a matriz */
 ExibirMatriz();
 /* Chama função que exibe a diagonal principal */
 DiagonalPrincipal();
 /* Chama função que consulta na matriz */
 Consultar();
 /* Chama função que cadastra valor na matriz */ 
 Atribuir();
 /* Chama função que transpoe a matriz em vetor */
 Trasnpor();
 /* Chama função que exibe o vetor */
 ExibirVetor();
 /* Encerra a função main retornando um inteiro -&gt; 0 */
 return 0;
}

void DiagonalPrincipal(void)
{
 /* Procedimento que Exibe a diagonal principal da matriz */
 printf("\n\n--------------------------------------------------\n");
 printf(" Diagonal Principal da Matriz");
 printf("\n--------------------------------------------------\n");
 for (i=0;i&lt;10;i++)
  for (j=0;j&lt;10;j++)
   if (i==j)    
    printf("%d ",M[i][j]); 
}

void Consultar(void)
{
 /* Procedimento de Consulta na Matriz M */ 
 printf("\n\n--------------------------------------------------\n");
 printf(" Consulta dos Elementos da Matriz");
 printf("\n--------------------------------------------------\n");
 printf("\n Informe a linha do elemento: ");
 scanf("%d",&amp;i);
 printf("\n Informe a coluna do elemento: ");
 scanf("%d",&amp;j);
 printf("\n Valor armazenado Matriz[%d][%d]: %d\n",i,j,M[i][j]);
}

void Atribuir(void)
{
 /* Procedimento de Atribuição de Valor para um elemento da Matriz M */
 printf("\n\n--------------------------------------------------\n");
 printf(" Atribuição de Valor para um elemento da Matriz");
 printf("\n--------------------------------------------------\n");
 printf("\n Informe a linha do elemento: ");
 scanf("%d",&amp;i);
 printf("\n Informe a coluna do elemento: ");
 scanf("%d",&amp;j);
 printf("\n Informe o valor para armazenar: ");
 scanf("%d",&amp;M[i][j]);
 printf("\n Valor armazenado Matriz[%d][%d]: %d\n\n",i,j,M[i][j]); 
}

void Trasnpor(void)
{
 /* Procedimento para transpor a Matriz M para o Vetor V */
 printf("\n\n--------------------------------------------------\n");
 printf(" Transposição da Matriz M para o Vetor V");
 printf("\n--------------------------------------------------\n");
 n = 0;
 for (i=0;i&lt;10;i++)
  for (j=0;j&lt;10;j++)
  {    
   V[n] = M[i][j];
   n++;
  }
}

void ExibirVetor(void)
{
 /* Exibe dados no vetor */
 printf("\n\n--------------------------------------------------\n");
 printf(" Dados do Vetor");
 printf("\n--------------------------------------------------\n");
 for (n=0;n&lt;100;n++)
  printf("Vetor[%d] = %d\n",n,V[n]);
}

void ExibirMatriz(void)
{
 /* Exibe dados da matriz */
 printf("\n\n--------------------------------------------------\n");
 printf(" Dados armazenados na Matriz");
 printf("\n--------------------------------------------------\n");
 for (i=0;i&lt;10;i++)
 {
  for (j=0;j&lt;10;j++)
  {
   printf("%d ",M[i][j]);
  }
 printf("\n");
 }
}


Bem, no início do programa eu precisei incluir o arquivo de cabeçalho (header) stdio.h (Standart Input/Output) para poder executar os comandos de entrada e saída como printf e scanf, sendo que o printf serve para imprimir uma mensagem na tela e o scanf serve para ler algum valor formatado, por isso precisa passar um parametro dizendo qual o tipo de dados que vai receber e em qual variável vai armazenar, neste caso as variáveis eram todas do tipo integer (valores inteiros) então a máscara é %d. Também precisei incluir o time.h para usar a função time e poder atribuir valores aleatórios conforme hora do sistema nos elementos da matriz.

Quando copiar este código para testar lembre-se de que precisa ter o sinal de "menor que" antes do nome dos arquivos de cabeçalho e o sinal de "maior que" no final para que o seu compilador preferido busque estes arquivos.header na pasta padrão do compilador, se por acaso você tiver estes arquivos cole-os no mesmo diretório/pasta do arquivo com código-fonte.c e então coloque os nomes dos arquivos de cabeçalho dentro de "aspas duplas".

A função que passa os valores armazenados na matriz para o vetor é muito simples, primeiramente inicializamos a variável n com o valor zero, que corresponde ao primeiro elemento do vetor (lembre-se que sempre começamos a contar do zero). Depois fizemos dois for , que chamamos de laços aninhados para acessar os elementos da matriz, no primeiro laço dizemos qual linha estamos e no segundo a coluna, assim podemos percorrer todos os elementos da matriz. 

Dentro deste laços aninhados, atribuimos o valor da matriz para o vetor e somamos 1 na variável n, assim quando o laço se repetir a segunda vez passaremos o valor armazenada na linha 0 e coluna 1 para a posição 1 do vetor, na terceira vez ainda será o valor da linha zero mas coluna dois e n valerá 2, e assim por diante até passarmos os 100 valores armazenados na matriz para o vetor.

A função "DiagonalPrincipal" serve para exibir os elementos que se encontram na Diagonal Principal, ou seja, os elementos onde o número da linha é igual ao número da coluna. Outras funções mais simples são para atribuir um valor para um determinado elemento da matriz e consultar o valor de um elemento da matriz, em nenhuma das funções eu precisei passar valores por parametros ou ponteiros porque neste programa específico estamos utilizando variáveis globais que ficam visíveis em todo o programa. 

Por enquanto é isso, em breve artigo sobre listas encadeadas.