Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Detencion de peticion de datos

Estas en el tema de Detencion de peticion de datos en el foro de C/C++ en Foros del Web. Hola! Tengo un problemilla con un programa; os incluyo el enunciado: dada una matriz de enteros, construye un vector en el que cada posicion contenga ...
  #1 (permalink)  
Antiguo 09/11/2008, 06:53
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 16 años, 1 mes
Puntos: 3
Detencion de peticion de datos

Hola! Tengo un problemilla con un programa; os incluyo el enunciado:

dada una matriz de enteros, construye un vector en el que cada posicion contenga el maximo de todos los valores de la fila correspondiente de la matriz

En principio he conseguido que me funcionara el programa para una matriz de orden determinado por mi: en este caso, orden 5x5. Adjunto codigo:

Código:
#include <stdio.h>
#include <stdlib.h>

#define ORDEN 5		/*He determinado que el orden de la matriz sea 5x5 para que no sea excesivamente larga*/

int main()
{
	int matriz[ORDEN][ORDEN];
	int i, j;
	int maxval[ORDEN];
	int cont=0;

	i=0;
	j=0;

	printf("\n\tMatriz de orden %dx%d", ORDEN, ORDEN);
	/*El usuario introduce los numeros que formaran la matriz cuadrada*/
	while(i<ORDEN)
	{
		do{
			printf("\n\tNumero en la posicion (%d,%d) de la matriz: ",i,j);
			scanf("%d", &matriz[i][j]);
			j++;
		}while(j<ORDEN);
		i++;
		j=0;
	}

	/*Una vez introducidos los valores de la matriz por posiciones, 
	el programa analizará cada fila en busca del mayor numero que se aloje en ella*/
	i=0;
	j=0;
	while(i<ORDEN)
	{
		do{
				if(cont==0)
				{
					maxval[i]=matriz[i][j];
					cont++;
				}
				if(matriz[i][j]>maxval[i])
				{
					maxval[i]=matriz[i][j];
				}
				else
				{
					j++;
				}
		}while(j<ORDEN);
		printf("\n\n\tEl mayor numero de la fila %d es %d", i, maxval[i]);
		i++;
		j=0;
	}

	printf("\n\n\n");

	system("Pause");

}
Sin embargo, ahora quiero que esto me funcione para una matriz general de orden como máximo 30x30, pero que no tenga que ser obligatoriamente de ese orden, que pueda ser menor (4x4, 10x10...) e incluso que no tenga po qué ser cuadrada (que pueda ser de orden 4x9 o 6x3...); a eleccion del usuario cuando introduce los valores por teclado.

Había pensado en detener la peticion de datos de cada fila cuando el usuario introdujera un caracter, por ejemplo, pero no consigo encontrar la forma de hacerlo!!

Gracias de antemano! Un saludo!
  #2 (permalink)  
Antiguo 09/11/2008, 08:20
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Detencion de peticion de datos

En primer lugar, aparte de tu pregunta, creo que deberías eliminar el condicional que incluye el contador (y suprimir también el contador), y colocar maxval[i]=matriz[i][0]; antes del ciclo DO.

Con respecto a tu pregunta:
1. No es necesario incluir #define ORDEN 5 (puedes quitarlo)
2. Cambia las constantes ORDEN por dos variables correspondientes a lineas y columnas Ej. int lin, col;.
3. Defines estas variables al comienzo del programa y mediante scanf, le pides al usuario que las inicie.
  #3 (permalink)  
Antiguo 09/11/2008, 09:03
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 8 meses
Puntos: 7
Respuesta: Detencion de peticion de datos

No puedes crear un array en tiempo de ejecución con variables de la forma "normal".

Para hacer lo que tu quieres, tienes que aprender la creación de memoria dinámica. Si aún no sabes, la única opción es crear una matriz lo suficientemente grande como para contener el rango de matrices que quieras controlar y en un doble for leer/escribir sólo el rango que quieras usar.
  #4 (permalink)  
Antiguo 09/11/2008, 09:25
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Detencion de peticion de datos

Según entiendo, lo que se necesita es definir las dimensiones de la matriz a partir del usuario, pero no se pretende modificar estas dimensiones durante la ejecucion del programa. De no ser así, se aplica lo dicho por Xinef.
  #5 (permalink)  
Antiguo 09/11/2008, 10:04
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Detencion de peticion de datos

buff no se si me he enterado muy bien...

si, lo que kiero es q el usuario decida cuando dejar de introducir valores en la matriz, q decida el orden de esta, vamos...

no he aprendido todavia a usar una memoria dinamica, aunque si que podría emplearla...

de todas formas no me aclaro de como me decis que lo puedo hacer...
Código:
int filas, colum;

printf("\n\tIntroduzca el numero de filas que quiere que tenga la matriz: ");
scanf("%d", &filas);
printf("\n\tIntroduzca el numero de columnas que quiere que tenga la matriz: ");
scanf("%d", &colum);

int matriz[filas][colum];
int maxval[filas];
algo asi?? y desde ahi continuar el programa??
  #6 (permalink)  
Antiguo 09/11/2008, 10:20
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Detencion de peticion de datos

:S no funciona...no m deja hacer eso...ni declarandolo antes ni declarandolo despues...si lo declaro despues m da 51 errores en el compilador...y si lo declaro antes m da 9 errores en el compilador, todos ellos porque dice que no puedo declararlas con una variable...
  #7 (permalink)  
Antiguo 09/11/2008, 10:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Detencion de peticion de datos

Si estamos hablando de C++, tu codigo funciona con las modificaciones sugeridas.
Incluí tu ultimo mensaje en este código y trabaja bien.
NOTA: encerré las partes modificadas como comentarios para eliminar

Código:
#include <stdio.h>
#include <stdlib.h>

// #define ORDEN 5		/*He determinado que el orden de la matriz sea 5x5 para que no sea excesivamente larga*/

int main()
{
    int filas, colum, i, j;
    printf("\n\tIntroduzca el numero de filas que quiere que tenga la matriz: ");
    scanf("%d", &filas);
    printf("\n\tIntroduzca el numero de columnas que quiere que tenga la matriz: ");
    scanf("%d", &colum);

   int matriz[filas][colum];
   int maxval[filas];
   
/*	int matriz[ORDEN][ORDEN];
	int i, j;
	int maxval[ORDEN];
	int cont=0;
*/

	i=0; 
	j=0;

	printf("\n\tMatriz de orden %dx%d", filas, colum);
	/*El usuario introduce los numeros que formaran la matriz cuadrada*/
	while(i<filas)
	{
		do{
			printf("\n\tNumero en la posicion (%d,%d) de la matriz: ",i,j);
			scanf("%d", &matriz[i][j]);
			j++;
		}while(j<colum);
		i++;
		j=0;
	}

	/*Una vez introducidos los valores de la matriz por posiciones, 
	el programa analizará cada fila en busca del mayor numero que se aloje en ella*/
	i=0;
	j=0;
	while(i<filas)
	{
		maxval[i]=matriz[i][j];    
		do{
/*				if(cont==0)
				{
					maxval[i]=matriz[i][j];
					cont++;
				}
*/
				if(matriz[i][j]>maxval[i])
				{
					maxval[i]=matriz[i][j];
				}
				else
				{
					j++;
				}
		}while(j<colum);
		printf("\n\n\tEl mayor numero de la fila %d es %d", i, maxval[i]);
		i++;
		j=0;
	}

	printf("\n\n\n");

	system("Pause");
}
  #8 (permalink)  
Antiguo 09/11/2008, 11:02
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Detencion de peticion de datos

es lenguaje C y a mi al compilar eso me da 18 errores...si lo compilo como C++ salen 9 errores...

¿Tiene algo que ver el compilador que se use? Tengo el Visual C++ 2008 Express Edition

Última edición por calathea; 09/11/2008 a las 11:09
  #9 (permalink)  
Antiguo 09/11/2008, 11:13
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Detencion de peticion de datos

Cita:
Iniciado por calathea Ver Mensaje
es lenguaje C y a mi al compilar eso me da 18 errores...si lo compilo como C++ salen 9 errores...

¿Tiene algo que ver el compilador que se use? Tengo el Visual C++ 2008 Express Edition
Bien, yo compilé con Dev C++. Ese puede ser el detalle.
Esperemos otro aporte.
  #10 (permalink)  
Antiguo 09/11/2008, 11:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Detencion de peticion de datos

Ante el impase, te queda la opción de hacer un híbrido entre el ultimo codigo y lo que sugiere Xinef.

1. Vuelve a la constante ORDEN y haces el #include con un valor razonablemente alto. Ej. #include ORDEN 50. Esto unicamente para definir la matriz.


2. Lo demás lo haces como está en el programa modificado, pidiendo al usuario entradas de lineas y colum no mayores a ORDEN.
  #11 (permalink)  
Antiguo 09/11/2008, 11:51
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Detencion de peticion de datos

perfecto!!! asi si que funciona!!! muchisimas gracias!!!!

me queda asi el código:

Código:
#include <stdio.h>
#include <stdlib.h>

#define ORDEN 50

int main()
{
	int filas, colum;
	int i, j;
	
	int matriz[ORDEN][ORDEN];
	int maxval[ORDEN];
	
	printf("\n\tIntroduzca el numero de filas que quiere que tenga la matriz (<50): ");
	scanf("%d", &filas);
	printf("\n\tIntroduzca el numero de columnas que quiere que tenga la matriz (<50): ");
	scanf("%d", &colum);

	i=0;
	j=0;
	printf("\n\tMatriz de orden %dx%d", filas, colum);
	while(i<filas)
	{
		do{
			printf("\n\tNumero en la posicion (%d,%d) de la matriz: ",i,j);
			scanf("%d", &matriz[i][j]);
			j++;
		}while(j<colum);
		i++;
		j=0;
	}

	/*Una vez introducidos los valores de la matriz por posiciones, 
	el programa analizará cada fila en busca del mayor numero que se aloje en ella*/
	i=0;
	j=0;
	while(i<filas)
	{
		maxval[i]=matriz[i][j];
		do{
				if(matriz[i][j]>maxval[i])
				{
					maxval[i]=matriz[i][j];
				}
				else
				{
					j++;
				}
		}while(j<colum);
		printf("\n\n\tEl mayor numero de la fila %d es %d", i, maxval[i]);
		i++;
		j=0;
	}

	printf("\n\n\n");

	system("Pause");

}
  #12 (permalink)  
Antiguo 09/11/2008, 19:13
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Detencion de peticion de datos

Finalmente, también puedes ensayar declarando FILES y COLUM como constantes asignándoles el valor entrado por el usuario, y aplicarlas a la definición de la matriz.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:22.