[C con Clase] Problema vectores/array

Jorge Vega Sanchez memmaker650 en gmail.com
Dom Sep 5 12:14:11 CEST 2010


Cierto, es verdad no recordaba la reserva de memoria. Y su aplicación en estos casos. Realmente es bastante útil hacerlo de la forma que propones.
Ya decía yo que tenía que haber una forma lógica de hacer esto.

Gracias Maestro.

El 05/09/2010, a las 04:54, Steven Davidson escribió:

> Hola Jorge,
> 
> On 9/4/2010 1:40 PM, Jorge Vega Sanchez wrote:
>> Sigo rompiendome los cuernos con los dichosos vectores en C++. Pienso
>> que estan definidos de una forma muy muy rara.
>> 
>> Bueno la cosa es que intento definir una matriz de tamaño dinámico,
>> que el usuario introducirá por teclado y posteriormente esta matriz
>> la mando a un procedimiento para hacer unas operaciones sencillas.
>> Total un ejemplito sencillo para trabajar con vectores.
>> 
>> El problema es que me salen errores de compilación pero no consigo
>> solucionarlo. En el procedimiento me sale que las dimensiones del
>> vector no están definidas y esto es sobremanera lo que más me
>> intriga.
>> 
> 
> Veamos el código fuente. Te voy comentando mientras veo el prorama.
> 
>> Dejo el código de ejempllo:
>> #include<stdlib.h>
>> #include<stdio.h>
> 
> En C++, usa los nombres estándares de estos ficheros de cabecera. Esto es,
> 
> #include <cstdlib>
> #include <cstdio>
> 
>> #include<iostream>
>> 
>> using namespace std;
>> 
>> void visualiza(int a[n][m])
> 
> Esto es un error, ya que las dimensiones de un array deben ser conocidas por el compilador y por tanto deben ser constantes o expresiones constantes.
> 
>> {
>> 	a[0][1]=a[0][1]+7;
>> 	cout<<  a[0][1]<<  endl;
>> }
>> 
>> int main()
>> {
>> 	
>>   	int n,m;
>> 
>>   	cout<<  "Introducir las dimensiones de la matriz :"
>>   	
>>     n=getchar();
>>     m=getchar();
>>   	
> 
> Esto no es lógico. La función 'getchar()' extrae el siguiente carácter del búfer del teclado y lo retorna. Esto implica que 'n' contendrá el código ASCII que representa el carácter tecleado por el usuario. Esto supone que no hay interpretación alguna de tal carácter. Por ejemplo,
> 
> Introducir las dimensiones de la matriz :10 20[ENTER]
> 
> 'n' contendrá 49, que es el código ASCII de '1', y
> 'm' contendrá 48, que es el código ASCII de '0'.
> 
>> 	int vec[n][m];
>> 
> 
> Esto no es correcto. He dado mi explicación anteriormente: el compilador necesitas conocer los tamaños de los arrays.
> 
>> 	visualiza(vec);
>> 
>> cout<<  "valor una vez retornado el vector: "<<  vec[0][1]<<  endl;
>> 	
>> 	return 0;
>> }
>> 
> 
> Si quieres crear y manejar arrays dinámicos, entonces debes usar punteros y memoria dinámicamente adjudicada. Sugiero que eches un vistazo al capítulo 13 en nuestro curso de C++. Puedes ir directamente a: http://c.conclase.net/curso/index.php?cap=013b#OP2_NewDelete
> 
> Tendrías que hacer esto:
> 
> void visualiza( int **a, int n, int m );
> 
> int main()
> {
>  int n,m;
>  ...
>  int **vec;
>  ...
> }
> 
> 
> Espero haber aclarado las dudas.
> 
> Steven
> 
> 
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ





Más información sobre la lista de distribución Cconclase