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