Faça um programa principal que crie duas matrizes quadradas, com 4 linhas e 4 colunas, para armazenar valores reais. A primeira matriz deve ser preenchida com valores informados pelo usuário. Desenvolva as funções abaixo para armazenar na segunda matriz, o conteúdo solicitado relativo à primeira matriz.
g. ordenacao (float mat1[4][4], float mat2[4][4]): a segunda matriz recebe, posição a posição, os elementos da primeira matriz ordenados crescentemente.

Passo 1

O enunciado pede a criação de duas matrizes quadradas de ordem 4 para valores reais. A matriz mat1 será preenchida com dados informados pelo usuário e a matriz mat2 deve receber, posição a posição, todos os elementos de mat1 ordenados em ordem crescente. Para isso, vamos usar um vetor auxiliar de tamanho 16 para “achatar” mat1, ordenar esse vetor e então preencher mat2 no formato linha-a-linha.

Passo 2

Na função
void ordenacao(float mat1[4][4], float mat2[4][4]);
vamos proceder assim:
  1. Declarar um vetor float aux[16];
  2. Percorrer mat1 com dois laços for aninhados e copiar cada elemento em aux, mantendo um índice que vai de 0 a 15.
  3. Ordenar aux em ordem crescente com, por exemplo, o método de seleção ou bubble sort.
  4. Percorrer novamente mat2 (com dois laços for aninhados) e, usando um índice que reinicia em zero, atribuir a cada posição de mat2 o valor aux[indice++].

Passo 3

No main, faremos:
  1. Declaração de float mat1[4][4], mat2[4][4];
  2. Dois laços for aninhados para ler, via scanf, os 16 valores de mat1.
  3. Chamar ordenacao(mat1, mat2);
  4. Dois laços for aninhados para exibir mat2 (formatando com printf("%6.2f ", ...) e ao fim de cada linha).

Resposta

#include <stdio.h>

void ordenacao(float mat1[4][4], float mat2[4][4]) {
 float aux[16];
 int k \(=0\);
 // 1. Flatten mat1 em aux
 for (int i \(=0\); i < 4; i\(++\)) {
 for (int j \(=0\); j < 4; j\(++\)) {
 aux[k\(++\)] = mat1[i][j];
 }
 }
 // 2. Ordenação crescente (bubble sort simples)
 for (int i \(=0\); i < 16 - 1; i\(++\)) {
 for (int j = i \(+1\); j < 16; j\(++\)) {
 if (aux[i] > aux[j]) {
 float temp = aux[i];
 aux[i] = aux[j];
 aux[j] = temp;
 }
 }
 }
 // 3. Preencher mat2 com os valores ordenados
 k \(=0\);
 for (int i \(=0\); i < 4; i\(++\)) {
 for (int j \(=0\); j < 4; j\(++\)) {
 mat2[i][j] = aux[k\(++\)];
 }
 }
}

int main() {
 float mat1[4][4], mat2[4][4];
 // Leitura de mat1
 printf("Entre com 16 valores reais para a matriz 4x4:
");
 for (int i \(=0\); i < 4; i\(++\)) {
 for (int j \(=0\); j < 4; j\(++\)) {
 scanf("%f", &mat1[i][j]);
 }
 }
 // Chama a função de ordenação
 ordenacao(mat1, mat2);
 // Exibe mat2
 printf("Matriz ordenada (mat2):
");
 for (int i \(=0\); i < 4; i\(++\)) {
 for (int j \(=0\); j < 4; j\(++\)) {
 printf("%6.2f ", mat2[i][j]);
 }
 printf("
");
 }
 return 0;
}

Exercícios relacionados