C/Visual C - Numero mayor de una matriz

 
Vista:
sin imagen de perfil

Numero mayor de una matriz

Publicado por Sebastián (31 intervenciones) el 07/12/2016 22:51:32
Hola saludos a todos, tengo un pequeño problema que se me ha presentado y la verdad me ayudarían mucho con su opinión y ayuda.

Tengo que hacer el siguiente ej :
Elaborar una función que reciba una matriz, el número de fila y el número de columna, para escribir el mayor número almacenado en la matriz, su posición dentro de la misma, el número de la fila y el número de la columna.

El programa debe leer el número de filas, el número de columnas y la matriz, luego escribir la matriz en forma matricial por filas, el número mayor y el lugar donde se encuentra dentro de la matriz.

Lo hice usando cin y cout y me funciono perfectamente , pero al trasladarlo a printf y scanf, el programa funciona mal lee las filas, y toca ingresar otro valor para que ingrese las columnas , almacena mal en la matriz.

¿A que se puede deber esto?

Muchas Gracias por su ayuda

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<windows.h>
#include<stdio.h>
 
//protitipo de la funciones 
void leerMatriz(float u[100][100], int *dim1, int *dim2, float mayor);
void validarMatriz(float u[100][100], float mayor, int fila, int columna, int *dim1, int *dim2);
 
int main()
{
	system("mode 60, 45");
	system("color 9F");
	float mayor = 0;
	float u[100][100];
	int fila = 0, columna = 0;
	int dim1 = 0, dim2 = 0;
	leerMatriz(u, &dim1, &dim2, mayor);
	validarMatriz(u, mayor, fila, columna, &dim1, &dim2);
	getch();
}
 
void leerMatriz(float u[][100], int *dim1, int *dim2, float mayor)
{
	int i, j;
	printf("Introduce las filas de la matriz: ");
	scanf("%d ", dim1);
	while ((*dim1 <= 0))
	{
		printf("Introduce las filas de la matriz: ");
		scanf("%d ", dim1);
 
	}
	printf("Introduce las columnas de la matriz: ");
	scanf("%d ", dim2);
	while ((*dim2 <= 0))
	{
		printf("Introduce las columnas de la matriz: ");
		scanf("%d ", dim2);
	}
	printf("\n");
	for (i = 0; i<*dim1; i++)
	{
		//cout << "Introduce los numeros de la fila " << i + 1 << ": \n";
		printf("Introduce los numeros de la fila: %d\n", i+1);
		for (j = 0; j<*dim2; j++)
		{
			scanf("%f", &u[i][j]);
		}
	}
}
 
void validarMatriz(float u[][100], float mayor, int fila, int columna, int *dim1, int *dim2)
{
	int i, j;
	for (i = 0; i<*dim1; i++)
	{
		for (j = 0; j<*dim2; j++)
		{
			if (mayor<u[i][j])
			{
				mayor = u[i][j];
				fila = i;
				columna = j;
			}
		}
	}
	printf("La matriz ingresada es la siguiente:\n");
	for (i = 0; i<*dim1; i++)
	{
		for (j = 0; j<*dim2; j++)
		{
			printf("\t%.2f\t", u[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	printf("El numero mayor es el: %.2f, ", mayor);
	printf("En la posicion %d, %d", fila+1, columna+1);
	printf("\n\n\n");
	getch();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Numero mayor de una matriz

Publicado por agustin (272 intervenciones) el 08/12/2016 01:07:23
El fallo es que tienes un espacio detrás de las máscaras de formateo de los scanf.
Además te sobran algunas líneas.
Te pongo un ejemplo.
Así lo tienes tu:
1
2
3
4
5
6
7
printf("Introduce las filas de la matriz: ");
scanf("%d ", dim1); //<<quita el espacio de despues de la mascara de formato
while ((*dim1 <= 0))
{
	printf("Introduce las filas de la matriz: ");
	scanf("%d ", dim1); //<<quita el espacio de despues de la mascara de formato
}
Así funciona mejor y te ahorras una linea:
1
2
3
4
do{
	printf("Introduce las filas de la matriz: ");
	scanf("%d", dim1); //<<quitado el espacio de despues de la mascara de formato
}while (*dim1 <= 0);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Numero mayor de una matriz

Publicado por Sebastián (31 intervenciones) el 08/12/2016 01:40:39
Gracias Agustín por tu ayuda, la verdad esque es la primera vez que me pasa, en otros programas he hecho de esa forma el ingreso y la validación y no he tenido ningún problema

Disculpa un poco la ignorancia, pero a que te refieres con el espacio detrás de la máscara del scanf?

Mil gracias de nuevo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Numero mayor de una matriz

Publicado por agustin (272 intervenciones) el 08/12/2016 09:14:35
Pues que scanf solo admite máscara de formato y tu le has puesto un espacio justo después de la d. Mira esto:
scanf ("%f ",&i);
scanf ("%f",&i);
La primera es errónea porque tiene caracteres no válidos en la mascara de formato, en este caso son espacios. La segunda es la correcta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Numero mayor de una matriz

Publicado por Sebastián (31 intervenciones) el 09/12/2016 04:10:30
Muchas gracias de nuevo!
La verdad no pensé que ese punto sería tan influyente dentro del programa.

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar