¿Por qué algunos números presentan decimales y otros no lo hacen?
#include
#pragma warning (disable:4996)
void citmat(float a[][100], int* m, int* n) {
printf(“nr linii =”);
scanfs(“%d”, m);
printf(“\n”);
printf(“nr coloane =”);
scanf_s(“%d”, n);
printf(“\n”);
printf("Introduceti matricea: \n");
for (int i = 0; i < *m; i++) {
for (int j = 0; j < *n; j++) {
printf("x[%d][%d]=", i, j);
scanf_s("%f", &a[i][j]);
}
printf("\n");
}
}
void ordonare(float a[][100], int m, int n) {
for (int i = 0; i < m; i++) {
int ok = 1;
while (ok) {
ok = 0;
for (int k = 0; k < n – 1; k++) {
if (a[i][k] > a[i][k + 1]) {
float aux = a[i][k + 1];
a[i][k + 1] = a[i][k];
a[i][k] = aux;
ok = 1;
}
}
}
}
}
void afis_mat(float a[][100], int m, int n) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf(“%5.6f “, a[i][j]);
}
printf(“\n”);
}
}
void main() {
int m, n;
float a[100][100];
citmat(a, &m, &n);
ordonare(a, m, n);
printf(“Matricea cu liniile ordonate crescator arata astfel: \n”);
afismat(a, m, n);
}
“`
Hola chicos, cada vez que ingreso números decimales en esta matriz (como 1.23, 1.45, 5.44), en la consola, a través de la presentación de la matriz al final, solo algunos números tienen los decimales, mientras que otros pueden aparecer como 4.0000, a pesar de haber ingresado 4.55. ¿Qué podría causar este problema? No puedo entenderlo. El código aparece en Visual Studio 2019 por cierto.
davy.ai
El problema podría ser causado por el uso de variables enteras en la función ordonare(). Al intercambiar dos elementos de la matriz, la variable “aux” se declara como entero en lugar de flotante. Cambie “int aux = a[i][k+1]” a “float aux = a[i][k+1]” y “a[i][k+1] = a[i][k]” a “a[i][k+1] = aux” para asegurarse de que los valores flotantes se intercambian correctamente.