Foros del Web » Programación para mayores de 30 ;) » Programación General »

C++. Crear Matriz en Tiempo de Ejecucion.

Estas en el tema de C++. Crear Matriz en Tiempo de Ejecucion. en el foro de Programación General en Foros del Web. Bunas, estoy estudiando C++ desde 0, y he entrado en la parte de las matrices, mi pregunta es la siguiente: ¿Como puedo crear una Matriz ...
  #1 (permalink)  
Antiguo 19/12/2003, 07:43
 
Fecha de Ingreso: abril-2002
Mensajes: 116
Antigüedad: 22 años
Puntos: 0
C++. Crear Matriz en Tiempo de Ejecucion.

Bunas, estoy estudiando C++ desde 0, y he entrado en la parte de las matrices, mi pregunta es la siguiente:

¿Como puedo crear una Matriz en tiempo de ejecucion? es decir, dependiendo de la longitud de una palabra, pues una matriz tendra una logitud u otra.

He estudiado VB y me parecia super sencillo, pero en C++ me da errores.

Muchas gracias a los interesados.

ARRIBA LOS PROGRAMADORES...(y en general todos los Informaticos)
  #2 (permalink)  
Antiguo 19/12/2003, 09:09
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

El truco son los punteros. Defines tu variable como puntero al tipo del que va a ser el array (int, char, ...) y luego creas el array con new[]:
Código:
int * matriz;
int elementos;

elementos=25; // o lo obtienes de un parametro en una funcion
matriz=new int[elementos];
Puedes revisar http://www.parashift.com/c++-faq-lit...html#faq-16.19

Suerte.

PD: OJO, mi C/C++ esta muy oxidado.

PD2: Creo que en C++ es mejor usar las clases tipo vector y demas (creo que vienen en la STL???)
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 19/12/2003, 14:16
Avatar de pabli  
Fecha de Ingreso: octubre-2003
Mensajes: 381
Antigüedad: 20 años, 5 meses
Puntos: 0
Josemi,

una de las diferencias de VB con C++ es que una vez declarada la matriz en ambos leguajes, aunque sea en tiempo de ejecución es que con VB se puede redimensionar con:

Redim Preserve

y con C++ no, pues esto le brinda al lenguaje seguridad de no "pisar" otras zonas de memoria y gestionarla mejor, por algo es C++
(de esto no estoy totalmente seguro pues mi C++ también está oxidado) Si no fuera así ruego me corrijan...

KKenen, si estuviera en lo cierto, podrías crearlas en tiempo de ejecución pero no redimensionarlas.

Saludos a todos
Pablo
  #4 (permalink)  
Antiguo 19/12/2003, 14:39
 
Fecha de Ingreso: abril-2002
Mensajes: 116
Antigüedad: 22 años
Puntos: 0
* * * Gracias * * *

Muchas Gracias por tu intenres, ya lo probare y me guardare para mis estudios. Es que aun no habia visto punteros.

Es verdad que con visual basic se puede redimensionar guardando los datos que tenia en la matriz. Por ahora me gusta mucho mas visual basic que C ++.

Gracias de nuevo por tus molestias, si descubro algo, te lo notificare majete.
  #5 (permalink)  
Antiguo 20/12/2003, 01:11
 
Fecha de Ingreso: diciembre-2003
Ubicación: En la luna
Mensajes: 29
Antigüedad: 20 años, 4 meses
Puntos: 0
Algo simple....

Hola:

-=[kene]=-

Mira amigo, si estas desde 0, seria bueno especifiques que tan NOVATO eres en la materia, osea, mas o menos va asi:

-Apendiendo y Conociendo C++
-Como imprimir y capturar
-Sentencias en C++ (if, else-if, else, while, do-while, for )
-Arrayz y Matrices
-Acercamiento a Funciones
-Punteros
- Funciones y Punteros
- Clases
- Constructor y Destructor
- Clases Derivadas
- el comand "inline" para funciones

etc, etc, etc......

Si vas en la parte de Arrays, Arreglos o Matrizes....pues creo que lo mas simple y para que tengas un BUEN AVANCE, sin meterte tanto en lios de PUNTEROS, ya que TU mismo lo diceS: "aun NO se punteros" y pues claro, por logica, NO has de saber CLASES (o talves si :D xD)...... Lo mas curioso es que dijiste: "dependiendo de la longitud de una palabra, pues una matriz tendra una logitud u otra".... aqui como que CONTRADISES lo anterior dicho, ya que para saber la longitus de una CADENA es:

strlen ( s1 ); <---- asi se usa en C pero debes tene rla libreria stringh

while( *s ) <--- el while y un PUNTERO nos ayudarian a saber la longitud de una cadena :D.....

Bueno, de todos modos te pongo un codigo que hice, segun a como entendi:

Lo entendi asi: Que el usuario de una CADENA, y dependiendo la cantidad de palabras que nos de, es el tamaño de la MATRIZ...:S :S....bueno aqui esta:

Código:
#include <iostream.h>
#include <stdlib.h>
#include <ctype.h>

#define N  100

main()
	{
	char op='S';
	char s[N];
	char *p;
	int longitud=0, espacios=0;
	int matriz[N][N];
	int c, r;

	while( op=='S' )
		{
		system( "cls" );
		cout<<"Da una Oracion para saber de cuanto sera nuestra matriz.";
		cout<<"\n\nEscribe: ";
		cin>>s;
		cout<<"\n\nCalculando Palabras \(No incluye espacios\.";
		cout<<"\n\n";
		p= s;
		while( *p )
			{
			if( *p==' ' ) espacios++;
			longitud++;
			p++;
			}
		cout<<"Listo...";
		cin.get();
		cout<<"\n\nTu Oracion tiene "<<longitud <<" Letras y "<<espacios <<" espacios";
		cout<<"Por lo tanto nuestras matriz sera de: "<<longitud <<" x "<<longitud <<".";
		cout<<"\n\nInsertale datos a nuestra matriz...";
		system( "cls" );
		for( c=0; c<longitud; c++ )
			{
			for( r=0; r<longitud; r++ )
				{
				system( "cls" );
				cout<<" Posicion "<<c <<" "<<r <<": ";
				cin>>matriz[c][r];
				}
			}
		cout<<"\n\nListo, ya llenamos nuestra MATRIZ";
		cout<<"\n\nPulsa una tecla para verla.";
		cin.get();
		for( c=0; c<longitud; c++ )
			{
			cout<<"\n\n";
			for( r=0; r<longitud; r++ )
				{
				cout<<matriz[c][r];
				}
			}
		cout<<"\n\nTerminamos....";
		cout<<"\n\nOtra ves\?: ";
		cin>>op;
		}
	cout<<"\n\nPulsa para salir...";
	cin.get();
	return 0;
   }

byeeeeeeeee
  #6 (permalink)  
Antiguo 27/01/2011, 10:58
 
Fecha de Ingreso: enero-2011
Mensajes: 1
Antigüedad: 13 años, 3 meses
Puntos: 0
Consulta

Aprovechando este foro muchachos quiero hacer una consulta:

Alguien sabe como crear vectores en tiempos de ejecución, me explico; que se le consulte al usuario cuantos vectores desea utilizar ejemplo el ingresa 5 y deberian crearse int A1[] int A2[] int A3[] int A4[] int A5[] ojo que no es lo miso a que el usuario ingrese 5 y se cree un verctor con un largo de 5 ejemplo A[5] solo para que no se entienda mal (sin ofender ) por favor si alguien lo sabe que me ayude, necesito saberlo con urgencia.

saludos
  #7 (permalink)  
Antiguo 27/01/2011, 11:28
 
Fecha de Ingreso: diciembre-2003
Ubicación: En la luna
Mensajes: 29
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Consulta

Cita:
Iniciado por huesolitiko Ver Mensaje
Aprovechando este foro muchachos quiero hacer una consulta:

Alguien sabe como crear vectores en tiempos de ejecución, me explico; que se le consulte al usuario cuantos vectores desea utilizar ejemplo el ingresa 5 y deberian crearse int A1[] int A2[] int A3[] int A4[] int A5[] ojo que no es lo miso a que el usuario ingrese 5 y se cree un verctor con un largo de 5 ejemplo A[5] solo para que no se entienda mal (sin ofender ) por favor si alguien lo sabe que me ayude, necesito saberlo con urgencia.

saludos
En primera no deberias publcar aqui, ya que estas mezclando dudas y ademas es un tema del 2003.

Pero te contestare porque me hiciste recordar viejos tiempos jejejeje, quien pensaria, han pasado 8 a~os y aun sigo aqui :D...

Mira para crear arreglos en ejecucion esto simplemente no es posible, claro, asumiendo que quieres crearlos directamente, la unica forma de lograrlo es utilizar estructuras, crear una estructura que contenga un array, de esta forma si quieres crear 5 arreglos entonces crearias 5 nodos de estructura, y asi, en cada estructura inicializar tu array con la dimencion que quieras (usando malloc o new int[elementos).

Ahora me pregunto, sabes estructuras de datos ?, ya que debes conocer el tema y especificamente lo que es: Pilas o Listas Enlazadas.

Código C:
Ver original
  1. struct pila
  2.      {
  3.      // datos del arreglos
  4.      struct pila *next;
  5.      }*head;

Saludos !
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 06:28.