Problemas para mostrar un vector lineal dinámico

Iniciado por Cero++, 7 Diciembre 2018, 02:36 AM

0 Miembros y 1 Visitante están viendo este tema.

Cero++

Buenas, aquí le dejo el código que hice, tenía que generar un arreglo lineal dinámico de N elementos con valores al azar, mi problema es que no puedo:
1) Ver los valores generados al azar, no se qué esta mal.
2) Tampoco me funciona la función "Mayor_elemento", supongo porque el arreglo no se cargó.
Me ayudaría mucho si me resaltan dónde me estoy equivocando para entender el error.
Gracias.
Aquí el código:
Código (cpp) [Seleccionar]
[b]int Mayor_elemento(int *p,int _tamanio);
void Cargar_puntero(int *p, int _tamanio);
int main(int argc, char *argv[]) {
srand(time(0));
int *x,tamanio;
x=nullptr;
cout<<"Ingrese el tamanio del puntero"<<endl;
cin>>tamanio;
Cargar_puntero(x,tamanio);
for(int i=0;i<tamanio;i++) { //Para ver los valores ingresados al azar
cout<<x[i]<<" ";
}
cout<<endl;
cout<<Mayor_elemento(x,tamanio)<<endl;
for(int i=0;i<tamanio;i++) {
delete [] x;
}
return 0;
}

void Cargar_puntero(int *p, int _tamanio){
p=new int [_tamanio];
for(int i=0;i<_tamanio;++i) {
p[i]=rand()%1500;
}
}

int Mayor_elemento(int *p,int _tamanio){
int aux=0;
for(int i=0;i<_tamanio;i++) {
if(p[i]>aux){
aux=p[i];
}
}
return aux;
}
[/b]
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]

K-YreX

#1
Primero de todo cuando mandes un código entre etiquetas GeSHi, para que sea más fácil distinguirlo. :rolleyes:

Bueno, cuando mandas un puntero a una función para reservar memoria dentro de la función, ese puntero tiene que pasarse por referencia ya que sino al salir de la función es como que no has reservado memoria.
Código (cpp) [Seleccionar]

void cargarPuntero(int *&p, int size){
    p = new int[size];
    for(int i = 0; i < size; i++)
        *(p+i) = i; // guardamos {0, 1, 2, ..., size-1}
}


Además de eso, para mostrar el array tienes que recorrerlo, para ello tienes que desreferenciarlo, es decir, usar "*". Puedes hacerlo de varias formas, te dejo dos:
- Opción 1: Usar el contador para mostrar cada elemento:
Código (cpp) [Seleccionar]

void mostrarArray(int *p, int size){
    for(int i = 0; i < size; i++)
        cout << *(p+i) << "  ";
}


- Opción 2: Crear otro puntero e ir modificando este para que apunte al siguiente elemento:
Código (cpp) [Seleccionar]

void mostrarArray(int *p, int size){
    int *auxiliar = p;
    for(int i = 0; i < size; i++){
        cout << *auxiliar << "  ";
        auxiliar++;
    }
}

Es muy importante que si vas a modificar el puntero, tengas otro apuntando al comienzo (es decir, uno que no modifiques). Ya que si en el código anterior no creamos el puntero auxiliar y modificamos <p> si luego quieres hacer más cosas con el array, lo habrás perdido. Un objeto dinámico al que no apunta un puntero es un objeto perdido. Por eso uno apunta siempre al principio (p) y el otro se va moviendo por cada elemento (auxiliar).

Edit: En los ejemplos anteriores te he dejado también como se desreferencia un puntero, es decir, como usar "*". <p> contiene la dirección de memoria del elemento 0 del array, mientras que <*p> contiene el elemento 0 del array. Suerte.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

CalgaryCorpus

Para complementar la didáctica respuesta anterior:

Cada vez que se usa esto:
*(p+i) puede cambiarse por p[i] si te acomoda más la notación de arreglos.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

Cero++

Gracias YreX me fue de gran ayuda, cómo es eso de las etiquetas Geshi? y como dijo el compañero CalgaryCorpus, prefiero usar la sintaxis esa que la aritmética de punteros  ;D
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]

K-YreX

Citar
cómo es eso de las etiquetas Geshi?

Cuando escribes un mensaje encima del cuadro de texto hay un desplegable que pone "Código GeSHí". Ahí puedes elegir el lenguaje que quieras y te saldrán dos etiquetas en el cuadro de texto, cada una de ellas entre corchetes []. Tienes que poner tu código entre las dos etiquetas tal que: [ ] <tu código> [ ]. Puedes previsualizar el mensaje antes de publicarlo para ver si se ve dentro de un cuadro con diferente formato como este:
Código (cpp) [Seleccionar]

// asi se ve el codigo entre etiquetas GeSHi
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Cero++

Cita de: YreX-DwX en 10 Diciembre 2018, 01:04 AM
Cuando escribes un mensaje encima del cuadro de texto hay un desplegable que pone "Código GeSHí". Ahí puedes elegir el lenguaje que quieras y te saldrán dos etiquetas en el cuadro de texto, cada una de ellas entre corchetes []. Tienes que poner tu código entre las dos etiquetas tal que: [ ] <tu código> [ ]. Puedes previsualizar el mensaje antes de publicarlo para ver si se ve dentro de un cuadro con diferente formato como este:
Código (cpp) [Seleccionar]

// asi se ve el codigo entre etiquetas GeSHi


Ya, gracias por la ayuda  ;D
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]