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.
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:
- Declarar um vetor
float aux[16];
- Percorrer
mat1
com dois laçosfor
aninhados e copiar cada elemento emaux
, mantendo um índice que vai de 0 a 15. - Ordenar
aux
em ordem crescente com, por exemplo, o método de seleção ou bubble sort. - Percorrer novamente
mat2
(com dois laçosfor
aninhados) e, usando um índice que reinicia em zero, atribuir a cada posição demat2
o valoraux[indice++]
.
Passo 3
No
main
, faremos:- Declaração de
float mat1[4][4], mat2[4][4];
- Dois laços
for
aninhados para ler, viascanf
, os 16 valores demat1
. - Chamar
ordenacao(mat1, mat2);
- Dois laços
for
aninhados para exibirmat2
(formatando comprintf("%6.2f ", ...)
e
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;
}