• Domingo 22 de Diciembre de 2024, 19:14

Autor Tema:  Re: Arrays  (Leído 3815 veces)

dadevil_g

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Arrays
« en: Miércoles 12 de Noviembre de 2003, 06:16 »
0
Tengo el siguiente codigo:
#include <conio.h>
#include <iostream.h>
int main()
{
char array[4];  //Declaras el array
int i;
clrscr();
for(i=0;i<4;i++)
{
cout<<"Ingresa un numero a la matriz: ";
cin>>array;  //Guardas cada valor en una posición del array
}
for(i=4;i>=0;i--) //Vas en reversa
{
cout<<"n"<<array;  //Muestras los valores del array, uno por uno
}
getch();
}

Mi problema es que necesito que el usuario sea el que defina el numero de numeros a introducir, como máximo 15, pero no tengo mucha experiencia con los arrays, si alguien me puede ayudar se lo agardecería :hippi:
Salu2....  \"UN PROBLEMA A LA VEZ\"; empieza por lo sencillo, luego te verás haciendo lo imposible.

dadevil_g

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Arrays
« Respuesta #1 en: Miércoles 12 de Noviembre de 2003, 06:18 »
0
Se me olvidaba que el código me lo pasó el compañero Blag (no hay que olvidar dar los créditos a quien se lo merece) :suerte:
Salu2....  \"UN PROBLEMA A LA VEZ\"; empieza por lo sencillo, luego te verás haciendo lo imposible.

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Arrays
« Respuesta #2 en: Miércoles 12 de Noviembre de 2003, 09:21 »
0
Hola:

  Para crear un array de un tamaño definido por el usuario, es necesario jugar con los punteros y la asignación dinámica de memoria. Para ello, en vez de declarar la variable "array" como:
    char array[4];
debe declararse como char *array;

  Después, una vez que el usuario haya introducido el número de elementos, y lo hayas almacenado en la variable "tam", haces lo siguiente:

    array = (char *) malloc(tam*sizeof(char));

  Y después ya puedes acceder a los elementos del array de la forma habitual, es decir array[0], array[1]......array[tam-1]

Espero que te sea de ayuda.

Saludos.

dadevil_g

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Arrays
« Respuesta #3 en: Jueves 13 de Noviembre de 2003, 06:51 »
0
weno, no es por ofender pero me hablaste en ingles... entendí como hay que declarar el array para dimensionarlo a las necesidades del usuario, pero me fallo cuando utilize el "malloc" me dice que es una funcion no declarada, aparte no se como acceder a los elementos del array... soy muy nuevo para estas cosas disculpa si es algo sencillo pero apenas empiezo con los arrays, si me pudieras explicar como se llaman los arrays, como se accede a ellos o cualquier cosa que me ayude a resolver el programa te lo agradeceria.

:hippi:
Salu2....  \"UN PROBLEMA A LA VEZ\"; empieza por lo sencillo, luego te verás haciendo lo imposible.

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Arrays
« Respuesta #4 en: Jueves 13 de Noviembre de 2003, 12:44 »
0
Hola. Para poder usar la función malloc has de incluir las cabeceras stdlib.h y malloc.h. Para acceder a los elementos del vector se haría así: array[X], donde X es la posición a la que quieres acceder (acuerdate que las posiciones se empiezan a numerar en cero).

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Arrays
« Respuesta #5 en: Jueves 13 de Noviembre de 2003, 14:59 »
0
Hola de nuevo, es que me explico fatal. Con el malloc, el programa que pusiste al principio quedaría así:

#include<stdlib.h>
#include <conio.h>
#include <iostream.h>
int main()
{
char *array; //Declaras el array
int i;
int tam;
clrscr();

cout<<"Introduce el numero de elementos del array";
cin>>tam;  //Se lee el tamaño del array
    //Se le asigna al array la memoria necesaria
array=(char*)malloc(tam*sizeof(char));

for(i=0;i<tam;i++)
{
cout<<"Ingresa un numero a la matriz: ";
cin>>array; //Guardas cada valor en una posición del array
}
for(i=tam-1;i>=0;i--) //Vas en reversa
{
cout<<"n"<<array; //Muestras los valores del array, uno por uno
}
getch();
}

Espero que lo veas mejor ahora.

Saludos

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Arrays
« Respuesta #6 en: Jueves 13 de Noviembre de 2003, 16:54 »
0
Me he fijado en que usas cin y cout para leer e imprimir en pantalla, así que he pensado que es más correcto usar los operadores new y delete para reservar y liberar la memoria. Además, no estás usando los índices para acceder a las posiciones del array, así que lo que se modifica es su propia dirección de memoria. A ver qué te parece este código (he sustituido el tipo char por int, ya que cout interpreta char como un carácter):

#include <iostream>

using namespace std;

int main()
{
    int tam;   // Tamaño del array
    int n;      // Contador para bucles

    cout << "Introduce el numero de elementos del array: ";
    cin >> tam;

    int *array = new int[tam];   // Reserva de memoria

    for(n=0; n<tam; n++)   // Petición de números
    {
        cout << "Ingresa el numero en posicion " << n << ": ";
        cin >> array[n];
    }

    for(n=tam-n; n>=0; n--) //Vas en reversa
    {
        cout << endl << array[n]; //Muestras los valores del array, uno por uno
    }
   
    delete [] array;   // Se libera la memoria

    return 0;
}

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Arrays
« Respuesta #7 en: Jueves 13 de Noviembre de 2003, 17:13 »
0
Anda! Pues yo juraría que he puesto los índices al acceder al array.:question:
  Bueno, perdón por el despiste.

Saludos

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Arrays
« Respuesta #8 en: Viernes 14 de Noviembre de 2003, 07:33 »
0
Bueno Ruben3d, tu código tiene también un error....

 
Citar
for(n=tam-n; n>=0; n--) //Vas en reversa
{
cout << endl << array[n]; //Muestras los valores del array, uno por uno
}


En este caso, "n" tiene el valor del for anterior, por lo tanto solamente se va a mostrar un elemento. Además el Borland C++ 3.1, so acepta el STD.

Aquí está el código.

 
Código: Text
  1.  
  2. #include <iostream.h>
  3. #include <conio.h>
  4.  
  5. int main()
  6. {
  7. int tam,i;
  8.  
  9. clrscr();   ///Borramos la pantalla
  10.  
  11. cout<<"De que tamaño: ";
  12. cin>>tam;
  13. int *array = new int;  //Declaramos un puntero a un char
  14.              //y le asignamos un area en memoria
  15.  
  16. for(i=0;i<tam;i++)
  17. {
  18. cout<<"Ingresa elementos: ";
  19. cin>>array[i];
  20. }
  21.  
  22. for(i=tam-1;i>=0;i--)
  23. {
  24. cout<<"n"<<array[i];
  25. }
  26.  
  27. delete array;   //Eliminamos la asignacion en memoria de la variable
  28.  
  29. getch();  //Hace una copia de la pantalla
  30. }
  31.  
  32.  

:devil:

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Arrays
« Respuesta #9 en: Sábado 15 de Noviembre de 2003, 13:20 »
0
Tienes razón, Blag. Donde pone n = tam - n debería poner n = tam - 1. Espero no haber causado confusión a dadevil.

Por otro lado, me he fijado que el uso de new y delete que haces es diferente al que esperaría, ya que

int *array = new int;

le asignaría a array memoria para almacenar un solo int (4 bytes) y al intentar acceder a otras posiciones ocurriría un error de protección de memoria. Al menos en VC++ que es el que uso.  ¿new y delete varían con respecto al estándar en el Borland C++ ?

Un saludo.

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Arrays
« Respuesta #10 en: Sábado 15 de Noviembre de 2003, 15:36 »
0
Hola Ruben3d........bueno en realidad no estoy muy seguro sobre lo del error de protección de memoria  :angel:

Aunque creo que el Borland C++ 3.1, es un poco más liberal en cuanto a las cosas que se pueden hacer......:good:

De todos modos, gracias por tus comentarios......creo que voy a averiguar más sobre el tema.

:devil:

dadevil_g

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Arrays
« Respuesta #11 en: Sábado 15 de Noviembre de 2003, 22:14 »
0
:comp: Gracias a todos por ayudarme dejenme decirles que estoy facinao con la forma en que se entienden, liberar la memoria, librerias a mi me parce como si estubieran hablando en ingles o viendo el codigo de matrix :gracias: tal vez un dia yo pueda ser igual que ustedes y ayudar a gente amateur gracias por todo
Salu2....  \"UN PROBLEMA A LA VEZ\"; empieza por lo sencillo, luego te verás haciendo lo imposible.

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: Arrays
« Respuesta #12 en: Domingo 16 de Noviembre de 2003, 02:44 »
0
:angel:Jajaja....No hay ningún problema, estamos para ayudarte:angel:

Por supuesto que vas a enteder lo que hablamos cuando tengas un poco más de experiencia, y te vas a dar cuenta tu solo de que no es tan complicado como parece :yes:

Me parece excelente que quieras ayudar a los principiantes cuando alcances un mayor nivel como programador.....de verdad me alegro mucho que haya gente como tu y como todos los que participamos en este foro. :lightsabre:

Muchos saludos para todos y sigamos adelante!!! :bravo:

:devil:

Francisquito

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Arrays
« Respuesta #13 en: Sábado 22 de Noviembre de 2003, 23:04 »
0
Hola,
necesito crear un array de un tamaño definido por el usuario. El problema es que
el array es de una clase creada por mi.
y cuando qiuero hacerle el new al elemento me tira error. se entiende?

int n;
cin>>n;
proceso *nuevo;
nuevo=(proceso*)malloc(n* sizeof proceso));   
nuevo[0]=new proceso(10,10,10);// proceso es la clase y en la ultima linea es donde me tira error

la constructora esta bien, por eso no hay problema

desde ya muchas gracias

Francisquito

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Arrays
« Respuesta #14 en: Domingo 23 de Noviembre de 2003, 14:08 »
0
ya lo arreglé. el problema era que la constructora de la clase procesos requiere parametros. Cuando declaraba el arreglo de procesos, no podia ingresar los parametrs.Para solucionar esto hice otra constructora que no recibiera parametros y despues de declarar el arreglo  llamo a la constructora principal.
nos vemos