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

Declaracion de arrays

Estas en el tema de Declaracion de arrays en el foro de C/C++ en Foros del Web. Hola! estoy intentando declarar un array, el pproblema es que no quiero un array fijo del estilo int array[5], sino que pido un valor por ...
  #1 (permalink)  
Antiguo 28/07/2010, 15:15
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Declaracion de arrays

Hola! estoy intentando declarar un array, el pproblema es que no quiero un array fijo del estilo int array[5], sino que pido un valor por pantalla y creo el array del tamaño de ese valor.

Intento int mivector[tamaño] pero me da el error "constant expresion requiered".

Ayuda xfavor xD
  #2 (permalink)  
Antiguo 28/07/2010, 15:36
 
Fecha de Ingreso: julio-2010
Mensajes: 29
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Declaracion de arrays

bueno podrias hacer esto (espero me entiendas)

creas un vector, lo declaras y luego para llenar el vector con la cantidad que quieres le pones asi

cout<<"Ingrese cantidad de elementos del vector: "
cin>> n
luego le pones
for (i=0;i<n;i++)
haces aca en el vector lo ke kiera que haga
y listo.
recuerda que si dentro de tu FOR hay mas de 1 linea necesitas poner llaves.
  #3 (permalink)  
Antiguo 28/07/2010, 15:45
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Declaracion de arrays

kieres decir ke cree un vector con mas posiciones de las necesarias y utilizar sólo las necesarias¿?

no es del todo óptimo esa solucion no? xD
  #4 (permalink)  
Antiguo 28/07/2010, 16:08
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Declaracion de arrays

Lo que puedes hacer aqui es usar memoria dinamica:

En C:

int * mivector = malloc(n * sizeof(int));

En C++:

int * mivector = new Int[n];

Ten encuenta que debes liberara la memoria cuando no la uses mas.
Con free(mivector) o delete mivecotr respectivamente para cada codigo.
  #5 (permalink)  
Antiguo 28/07/2010, 16:40
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 10 meses
Puntos: 95
Respuesta: Declaracion de arrays

Cita:
Iniciado por sam90 Ver Mensaje
Lo que puedes hacer aqui es usar memoria dinamica:

En C:

int * mivector = malloc(n * sizeof(int));

En C++:

int * mivector = new Int[n];

Ten encuenta que debes liberara la memoria cuando no la uses mas.
Con free(mivector) o delete mivecotr respectivamente para cada codigo.
Nadamas como un agregado
donde el valor de n, es el valor pedido al usuario.
  #6 (permalink)  
Antiguo 29/07/2010, 07:14
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Declaracion de arrays

Entonces yo hago un scanf del entero "n" y luego pongo la sentencia que has puesto? ke es eso de sizeof(int)?

int * mivector = malloc(n * sizeof(int));

entre int y mi vector el asterisco lleva espacios a ambos lados, eso es correcto? o debe ir pegado al nombre de la variable?

Cita:
Iniciado por sam90 Ver Mensaje
Lo que puedes hacer aqui es usar memoria dinamica:

En C:

int * mivector = malloc(n * sizeof(int));

En C++:

int * mivector = new Int[n];

Ten encuenta que debes liberara la memoria cuando no la uses mas.
Con free(mivector) o delete mivecotr respectivamente para cada codigo.

Última edición por Zunri; 29/07/2010 a las 07:15 Razón: duda
  #7 (permalink)  
Antiguo 29/07/2010, 08:11
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Declaracion de arrays

Puede ir de un lado o del otro o en el medio es lo mismo....lo que si no pongas todo pegado...

los de sizeof(int), esa funcion devuelve el tamaña que ocupa un entero(en la mayoria de los casos son 4 bytes). Por eso multiplico ese valor por la cantidad de enteros que queremos guardar.

Por ejemplo si quisiera un array de double haria:

double * mivector = malloc(n * sizeof(double));
  #8 (permalink)  
Antiguo 29/07/2010, 08:17
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Declaracion de arrays

Si fuese de 2 dimensiones el array se puede poner:

int * mivector = malloc(n * sizeof(int))(m * sizeof(int)); ¿?¿?¿

y arrays de bool se puede hacer esto? me suena raro sizeof(bool) :P
  #9 (permalink)  
Antiguo 29/07/2010, 08:32
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Declaracion de arrays

Para la dos dimensiones tienes que usar la logica....
Un array de dos dimensiones trata de un doble puntero.. Osea
int **matriz;

El primer puntero apunta a un array de punteros a entero, y en ese array apunta a n enteros...

Entonces la declaracion quedara algo asi:

int **matriz = malloc(n * sizeof(*int));
for(i=0;i<n;i++)
matriz[i] = malloc(n * sizeof(int));

La idea es que primero reservas espacio para n punteros a enteros. Y luego por cada puntero reservas espacio para n enteros.... Lo bueno de estos, es que si no necesitas que sea perfectamente cuadrada la matriz puedes ir variando la cantidad de memoria guardada.

Te recomendaria que busques en internet, hay muchos dibujos explicativos para reservar memoria.

Y sobre lo de bool, en C no existe el tipo bool! Existe en C++.
  #10 (permalink)  
Antiguo 29/07/2010, 08:34
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Declaracion de arrays

en c el bool es un int valor 0 fallo, 1 acierto verdad?

gracias sam
  #11 (permalink)  
Antiguo 29/07/2010, 08:42
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Declaracion de arrays

Estas en lo correcto!! Todo numero distinto de cero es Verdadero..
  #12 (permalink)  
Antiguo 29/07/2010, 15:22
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Declaracion de arrays

He probado como hemos dicho a crear los arrays mediante punteros pero me ocurren los siguientes errores:

-Cannot convert int to *int
-Function malloc should have a prototype

int *sistema_reparacion = malloc(tamanio_sistema_reparacion *sizeof(int));

Ke pez estoy todavia en c ;(
  #13 (permalink)  
Antiguo 29/07/2010, 15:45
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Declaracion de arrays

tenes incluida la libreria estandar??

agrega #include <stdlib.h>
  #14 (permalink)  
Antiguo 29/07/2010, 15:49
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Declaracion de arrays

exacto, eso arregla el error del prototype, pero no el de cannot convert int to *int

la libreria para el getch, sabes cual es sam?
  #15 (permalink)  
Antiguo 29/07/2010, 15:53
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Declaracion de arrays

He puesto esto y ya no da errores :)

int *sistema_reparacion = (int *)malloc(tamanio_sistema_reparacion *sizeof(int));

esta bien escrito??
  #16 (permalink)  
Antiguo 29/07/2010, 15:56
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Declaracion de arrays

Prueba con esto asi:

int *sistema_reparacion = (int *) malloc(tamanio_sistema_reparacion *sizeof(int));

Sino el error debe ser en otro lado.

La libreria para el getch debe ser la "conio.h" pero esa esta disponible para Turbo c++ nomas.

EDITO: Justo contestaste!!

Etiquetas: arrays, declaracion
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 09:49.