elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas para mostrar un vector lineal dinámico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas para mostrar un vector lineal dinámico  (Leído 517 veces)
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Problemas para mostrar un vector lineal dinámico
« en: 7 Diciembre 2018, 02:36 am »

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
  1. [b]int Mayor_elemento(int *p,int _tamanio);
  2. void Cargar_puntero(int *p, int _tamanio);
  3. int main(int argc, char *argv[]) {
  4. srand(time(0));
  5. int *x,tamanio;
  6. x=nullptr;
  7. cout<<"Ingrese el tamanio del puntero"<<endl;
  8. cin>>tamanio;
  9. Cargar_puntero(x,tamanio);
  10. for(int i=0;i<tamanio;i++) { //Para ver los valores ingresados al azar
  11. cout<<x[i]<<" ";
  12. }
  13. cout<<endl;
  14. cout<<Mayor_elemento(x,tamanio)<<endl;
  15. for(int i=0;i<tamanio;i++) {
  16. delete [] x;
  17. }
  18. return 0;
  19. }
  20.  
  21. void Cargar_puntero(int *p, int _tamanio){
  22. p=new int [_tamanio];
  23. for(int i=0;i<_tamanio;++i) {
  24. p[i]=rand()%1500;
  25. }
  26. }
  27.  
  28. int Mayor_elemento(int *p,int _tamanio){
  29. int aux=0;
  30. for(int i=0;i<_tamanio;i++) {
  31. if(p[i]>aux){
  32. aux=p[i];
  33. }
  34. }
  35. return aux;
  36. }
  37. [/b]


« Última modificación: 10 Diciembre 2018, 01:12 am por Cero++ » En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Problemas para mostrar un vector lineal dinámico
« Respuesta #1 en: 7 Diciembre 2018, 02:59 am »

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
  1. void cargarPuntero(int *&p, int size){
  2.    p = new int[size];
  3.    for(int i = 0; i < size; i++)
  4.        *(p+i) = i; // guardamos {0, 1, 2, ..., size-1}
  5. }

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
  1. void mostrarArray(int *p, int size){
  2.    for(int i = 0; i < size; i++)
  3.        cout << *(p+i) << "  ";
  4. }

- Opción 2: Crear otro puntero e ir modificando este para que apunte al siguiente elemento:
Código
  1. void mostrarArray(int *p, int size){
  2.    int *auxiliar = p;
  3.    for(int i = 0; i < size; i++){
  4.        cout << *auxiliar << "  ";
  5.        auxiliar++;
  6.    }
  7. }
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.


« Última modificación: 7 Diciembre 2018, 03:02 am por YreX-DwX » En línea

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


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Problemas para mostrar un vector lineal dinámico
« Respuesta #2 en: 7 Diciembre 2018, 03:30 am »

Para complementar la didáctica respuesta anterior:

Cada vez que se usa esto:
Código:
*(p+i)
puede cambiarse por
Código:
p[i]
si te acomoda más la notación de arreglos.
En línea

Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Problemas para mostrar un vector lineal dinámico
« Respuesta #3 en: 10 Diciembre 2018, 00:55 am »

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
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Problemas para mostrar un vector lineal dinámico
« Respuesta #4 en: 10 Diciembre 2018, 01:04 am »

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
  1. // asi se ve el codigo entre etiquetas GeSHi
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Problemas para mostrar un vector lineal dinámico
« Respuesta #5 en: 10 Diciembre 2018, 01:13 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
  1. // asi se ve el codigo entre etiquetas GeSHi

Ya, gracias por la ayuda  ;D
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
vector dinamico - herencia
Programación C/C++
littlero 2 2,366 Último mensaje 7 Diciembre 2010, 05:25 am
por littlero
[C++] Reordenar vector dinámico de objetos
Programación C/C++
Rockmore 2 4,466 Último mensaje 17 Marzo 2011, 19:05 pm
por Rockmore
Problemas para mostrar correctamente etiqueta <img> mediante PHP
PHP
irenuchi_04 6 1,629 Último mensaje 18 Agosto 2015, 18:58 pm
por MinusFour
Como hacer un vector dinámico?
Programación C/C++
Ivancamilo 1 944 Último mensaje 28 Septiembre 2016, 00:32 am
por JonaLamper
Cómo mostrar dos diagonales de dos matrices en un vector en Java
Java
megasaw 1 791 Último mensaje 10 Febrero 2017, 11:24 am
por MNicolas
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines