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

problema declaracion array

Estas en el tema de problema declaracion array en el foro de C/C++ en Foros del Web. Hola, tengo un problema con un array y no se como solucionarlo. El error lo da al declarar y se por que es. el problema ...
  #1 (permalink)  
Antiguo 30/10/2010, 17:07
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 4
problema declaracion array

Hola, tengo un problema con un array y no se como solucionarlo. El error lo da al declarar y se por que es.

el problema es que no se como puedo introducir el valor de n antes de declarar el array de n elementos.

el programa consiste en introducir una cantidad de numeros (n), y sus valores en un array (numeros) y ordenarlos por el metodo burbuja.

saludos y gracias

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3.  
  4. void introducir(int *, double numeros[]);
  5. void ordenar(int n, double numeros[]);
  6. void buscar();
  7.  
  8. int main()
  9. {
  10.     int n=0;
  11.     double numeros[n];    // <==== ERROR  se esperaba una expresión
  12. //constante.   no se puede asignar una matriz de tamaño constante 0.  'numeros'
  13. //: tamaño desconocido
  14.  
  15.     introducir(&n, numeros);
  16.     ordenar(n, numeros);
  17.     buscar();
  18. }
  19.  
  20.  
  21. void introducir(int *pn, double numeros[])
  22. {
  23.     int i = 0;
  24.     numeros[*pn];
  25.     printf("cantidad de numeros: ");
  26.     scanf("%d", pn);
  27.     printf("\nIntroducir numeros: ");
  28.     for(i; i<*pn; i++)
  29.     {
  30.         scanf("%lf", &numeros[i]);
  31.     }
  32. }
  33.  
  34. void ordenar(int n, double numeros[])
  35. {
  36.     int i = 0, j = 0;
  37.     double bf = 0;
  38.     for(j;j<n-1;j++)
  39.     {
  40.         for(i=0; i<n; i++)
  41.         {
  42.             if(numeros[i] < numeros[i+1])
  43.             {
  44.                 numeros[i] = bf;
  45.                 numeros[i] = numeros[i+1];
  46.                 numeros[i+1] = bf;
  47.             }
  48.         }
  49.     }
  50. }
  51.  
  52. void buscar()
  53. {
  54. }
  #2 (permalink)  
Antiguo 31/10/2010, 01:01
Avatar de gvite666  
Fecha de Ingreso: abril-2010
Mensajes: 65
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: problema declaracion array

mira pues tienes dos opciones:
1. poner un numero muy grande para el array, y al momento de ordenarlo solo le pones el limite en donde quieres.
2. Utilizar Memoria dinamica que es lo mas viable, pero al mismo tiempo algo un poco complicado de programar, y no lo digo por la programacion, sino por el cuidado que debes tener, ya que puedes reservar toda la memoria que quieras, sin olvidarte de liberarla, asi podrias asignar el tamaño que tu quieras del array.
aqui un link
http://computacion.cs.cinvestav.mx/~...PP/node46.html
__________________
No pienses si no vas a actuar.
  #3 (permalink)  
Antiguo 31/10/2010, 06:42
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 15 años, 3 meses
Puntos: 13
Respuesta: problema declaracion array

Hola Munire, que tal si pruebas con esto:
Código C:
Ver original
  1. int n=0;
  2.     double numeros['n']; // no debe salir error
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #4 (permalink)  
Antiguo 31/10/2010, 07:31
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: problema declaracion array

Cita:
Iniciado por gvite666 Ver Mensaje
mira pues tienes dos opciones:
1. poner un numero muy grande para el array, y al momento de ordenarlo solo le pones el limite en donde quieres.
2. Utilizar Memoria dinamica que es lo mas viable, pero al mismo tiempo algo un poco complicado de programar, y no lo digo por la programacion, sino por el cuidado que debes tener, ya que puedes reservar toda la memoria que quieras, sin olvidarte de liberarla, asi podrias asignar el tamaño que tu quieras del array.
aqui un link
[url]http://computacion.cs.cinvestav.mx/~acaceres/courses/estDatosCPP/node46.html[/url]
es justo lo primero que has dicho. ademas venia en el enunciado del problema (no hay nada como leer bien los enunciados xD)
lo de la memoria dinamica seria lo ideal pero no tengo nivel suficiente.

Cita:
Iniciado por mhax Ver Mensaje
Hola Munire, que tal si pruebas con esto:
Código C:
Ver original
  1. int n=0;
  2.     double numeros['n']; // no debe salir error
no sale error pero el programa no funciona
  #5 (permalink)  
Antiguo 31/10/2010, 08:27
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 15 años, 3 meses
Puntos: 13
Respuesta: problema declaracion array

Hola de nuevo, la opcion que deseas adoptar no es tan buena, pues desperdiciarias recursos, y la opcion que te propuse si funciona, el error lo tenias en el ordenamiento.
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. void introducir(int *, double numeros[]);
  6. void ordenar(int n, double numeros[]);
  7. void buscar();
  8.  
  9. int main()
  10. {
  11.     int n=0;
  12.     double numeros['n'];    
  13.     introducir(&n, numeros);
  14.     ordenar(n, numeros);
  15.     buscar();    
  16.     system("pause");
  17. }
  18.  
  19.  
  20. void introducir(int *pn, double numeros[])
  21. {
  22.     int i = 0;
  23.     //numeros[*pn];
  24.     printf("cantidad de numeros: ");
  25.     scanf("%d", pn);
  26.     printf("\nIntroducir numeros: ");
  27.     for(i; i<*pn; i++)
  28.     {
  29.         scanf("%lf", &numeros[i]);
  30.     }
  31.    
  32. }
  33.  
  34. void ordenar(int n, double numeros[])
  35. {    
  36.     double bf = 0;
  37.     for (int i = 0; i < n - 1; i++) {
  38.          for (int j = i + 1; j < n; j++) {
  39.              if (numeros[i] < numeros[j]) {
  40.                 bf = numeros[i];
  41.                 numeros[i] = numeros[j];
  42.                 numeros[j] = bf;
  43.             }
  44.          }   
  45.      }
  46.    
  47. }
  48.  
  49. void buscar()
  50. {
  51.      
  52. }
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #6 (permalink)  
Antiguo 31/10/2010, 10:17
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: problema declaracion array

mhax me podrias explicar por que lo que dices esta bien hecho?

es que no entiendo esta linea:

double numeros['n'];

esta creando una matriz de 'n' numeros pero n de letra, no de numero...

saludos
  #7 (permalink)  
Antiguo 31/10/2010, 12:25
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 15 años, 3 meses
Puntos: 13
Respuesta: problema declaracion array

pues es otra forma de darle la longitud al vector,
la explicacion "cientifica" no la tengo, pero te aseguro que sirve para lo que necesitas hacer, el codigo que postie lo demuestra.
'n' hace referencia a el entero n.
Código C:
Ver original
  1. int N;
  2. int vector['N'];  //N es el mismo entero declarado arriba
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #8 (permalink)  
Antiguo 31/10/2010, 17:12
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: problema declaracion array

En mi vida escuche eso... para mi que no funciona. Va en verdad que si funcion pero es lo mismo que la primera opcion, esa de declarar un numero grande en el array. un caracter entre comillas simples denota una variable char. Pero estas simplementes son un numero de 8bytes por lo que el compilador supongo que debe estar pensando en hacer un array del numero que indican.
  #9 (permalink)  
Antiguo 31/10/2010, 19:29
Avatar de gvite666  
Fecha de Ingreso: abril-2010
Mensajes: 65
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: problema declaracion array

Pues estoy de acuerdo con sam90.
__________________
No pienses si no vas a actuar.
  #10 (permalink)  
Antiguo 01/11/2010, 08:08
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 15 años, 3 meses
Puntos: 13
Respuesta: problema declaracion array

no es lo mismo que la primera opcion, ya que en esta el vector va a tener el numero exacto de posiciones que necesitas( debido a que el valor de n sera ingresado por el usuario)
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main(){
  5.      int n;
  6.      int x['n'];
  7.      printf("Ingrese n: ");
  8.      scanf("%d",&n);
  9.      //LEER VECTOR
  10.      for(int i=0;i<n;i++){
  11.              scanf("%d",&x[i]);
  12.      }
  13.      
  14.      //MOSTRAR VECTOR
  15.      for(int i=0;i<n;i++){
  16.              printf("%d ",x[i]);
  17.      }
  18.      
  19.      getch();
  20.      return 0;
  21. }
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #11 (permalink)  
Antiguo 01/11/2010, 09:40
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: problema declaracion array

No se quien te dijo eso. Pero es completamente mentira eso.
  #12 (permalink)  
Antiguo 01/11/2010, 10:22
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 15 años, 3 meses
Puntos: 13
Respuesta: problema declaracion array

prueba el código que postie y luego comenta..

Saludos!
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #13 (permalink)  
Antiguo 01/11/2010, 10:28
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: problema declaracion array

Si, pero no funcioa de la forma que vos decis!
'n' eso significa un valor el caracter n, no es una referencia a una variable.

Ademas si haces esto:

sizeof(x)/sizeof(int)

eso es una forma clasica de averiguar el tamaño del array. Si lo haces en tu ejemplo te da para 'n' 110. Y da la casualidad que corresponde con el codigo ascii del caracter. Es mas si cambio el nombre de la la constante entre comillas me aparece el codigo ascii de la variable.

Asi que para comcluir tenes dos formas. Un numero fijo o memoria dinamica.
  #14 (permalink)  
Antiguo 01/11/2010, 10:32
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 15 años, 3 meses
Puntos: 13
Respuesta: problema declaracion array

Tienes razón disculpen!
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #15 (permalink)  
Antiguo 02/11/2010, 07:59
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 14 años, 2 meses
Puntos: 9
Respuesta: problema declaracion array

Para poder declarar este tipo de arreglos en tiempo de ejecucion, necesitas auxiliarte de las funciones malloc, calloc y realloc. Y utilizar punteros, en este caso un puntero a un entero, entonces esto deberia de ser algo asi.

Código c:
Ver original
  1. int *miArreglo;
  2. int n = 10;    //los elementos que necesites
  3. miArreglo = malloc(n * sizeof(int));

Como sabes el puntero o apuntador simplemente apunta a una localidad de memoria, pero al ser de tipo int cada incremento que le hagas en realidad cambiara el puntero sizeof(int) posiciones.

Digamos que tienes un apuntador "miApuntador" a la localidad de memoria 6000, y si un int (en la mayoria de los ordenadores) utiliza 4 bytes en memoria, entonces al aumentar uno a tu apuntador (esta operacion muchos la hacen asi: miApuntador[1]), te estaras posicionando en la localidad de memoria 6004, que es donde puedes almacenar tu siguiente entero, y asi consecutivamente.

Por lo que puedes utilizar esto como si fuera un arreglo de enteros.

Espero haberte sido de ayuda

Saludos++
  #16 (permalink)  
Antiguo 02/11/2010, 11:26
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: problema declaracion array

te falto algo importante Trovaz, que cuando ya no se va a utilizar la memoria asignada por malloc es necesario utilizar free para liberar la memoria asignada. Ademas si se esta programando en C++, es mas recomendable utilizar new y delete que malloc y free
  #17 (permalink)  
Antiguo 02/11/2010, 16:31
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 14 años, 2 meses
Puntos: 9
Respuesta: problema declaracion array

cierto, es importante liberar la memoria que asignas con malloc mediante free, gracias por mencionarlo.

Etiquetas: 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 05:30.