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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con los punteros C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con los punteros C++  (Leído 6,376 veces)
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Problema con los punteros C++
« Respuesta #20 en: 28 Agosto 2019, 03:45 am »

Te pongo un caso más útil para que veas cómo se podrían usar los punteros a funciones. Imagina que vas a hacer un programa que ordene un array y quieres dar la posibilidad de ordenarlo ascendente y descendentemente. La primera opción que le vendría a cualquiera a la cabeza es esta:
Código
  1. void ordenarAscendente(int *numeros, int size){
  2.    for(size_t i = 1; i < size; ++i)
  3.        for(size_t j = 0; j < size-i; ++j)
  4.            if(numeros[j] > numeros[j+1]){
  5.                numeros[j] += numeros[j+1];
  6.                numeros[j+1] = numeros[j] - numeros[j+1];
  7.                numeros[j] -= numeros[j+1];
  8.            }
  9. }
  10.  
  11. void ordenarDescendente(int *numeros, int size){
  12.    for(size_t i = 1; i < size; ++i)
  13.        for(size_t j = 0; j < size-i; ++j)
  14.            if(numeros[j] < numeros[j+1]){
  15.                numeros[j] += numeros[j+1];
  16.                numeros[j+1] = numeros[j] - numeros[j+1];
  17.                numeros[j] -= numeros[j+1];
  18.            }
  19. }
Tenemos dos funciones que si ves siguen el mismo tipo de ordenamiento (un bubblesort muy simple :xD) pero una de forma ascendente y otra de forma descendente. Tampoco es demasiado trabajo pero imagina que queremos ordenar un array de 50 formas distintas, tendríamos que hacer 50 funciones iguales cambiando únicamente la condición de ordenamiento. Entonces podríamos hacer algo así:
Código
  1. bool mayor(int a, int b){
  2.    return a > b;
  3. }
  4.  
  5. bool menor(int a, int b){
  6.    return a < b;
  7. }
  8.  
  9. void ordenar(int *numeros, int size, bool (*orden)(int,int)){
  10.    for(size_t i = 1; i < size; ++i)
  11.        for(size_t j = 0; j < size-i; ++j)
  12.            if(!orden(numeros[j], numeros[j+1])){
  13.                numeros[j] += numeros[j+1];
  14.                numeros[j+1] = numeros[j] - numeros[j+1];
  15.                numeros[j] -= numeros[j+1];
  16.            }
  17. }
Y esto mismo lo podríamos hacer con otros tipos de ordenamiento. Es decir, hacemos una simple función que determine el tipo de orden a seguir y reutilizamos la función que tiene el algoritmo de ordenamiento.
Luego ya si nos venimos arriba le ponemos unos <template> a ese programa y ya podemos ordenar cualquier tipo de dato (primitivos/objetos) que tengan claro está los operadores que usemos sobrecargados (en este caso < y >). Tampoco quiero adelantarte contenidos, ya lo verás más adelante pero para que veas que conocer los recursos disponibles ayuda a ahorrar muchas líneas de código al programador.

PD: Ahí te he dejado también como curiosidad cómo intercambiar el valor de dos variables sin usar ninguna variable auxiliar.


En línea

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

Desconectado Desconectado

Mensajes: 35


Ver Perfil
Re: Problema con los punteros C++
« Respuesta #21 en: 28 Agosto 2019, 18:55 pm »

Hay algunas nomenclaturas que no entiendo como size_t, es de la libreria iostream?, yo de normal le pondría:
Código
  1. for(int i=0;i<size;i++){
  2. for(int j=0;j<size;j++){
  3.        //Aqui el ordenamineto burbuja
  4.        }
  5. }

O lo de ayer tambien con el sizeof, lo unico que se me ocurre es que sean clases por lo poco que he visto java, puede ser?.

PD: Estoy viendo las pilas y ya tengo la primera duda xD. No creo que sea un post tan largo como este pero estaría bien si le echas un vistazo  :xD :xD :xD.


« Última modificación: 28 Agosto 2019, 21:21 pm por 98Fran » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema con los punteros C++
« Respuesta #22 en: 28 Agosto 2019, 21:34 pm »

size_t y sizeof son muy básicos: google te los encuentra enseguida. Los buscadores también son una buena herramienta.

Pero te lo respondo aquí:
size_t es un typedef de un entero largo sin signo. Depende de la plataforma.
sizeof es un operador que devuelve los bytes de un tipo o de un objeto.
En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Punteros en C
Programación C/C++
aaronas 8 3,786 Último mensaje 2 Abril 2012, 00:12 am
por david_BS
Problema con punteros.
Programación C/C++
vazquinhos 4 2,530 Último mensaje 20 Septiembre 2012, 18:35 pm
por do-while
Problema con punteros
Programación C/C++
NEGRO_PABLO 3 2,690 Último mensaje 30 Noviembre 2012, 18:41 pm
por twins
Problema con punteros.
Programación C/C++
maxim_o 2 1,555 Último mensaje 24 Junio 2016, 23:29 pm
por class_OpenGL
Representación visual de punteros y punteros a punteros.. « 1 2 »
Programación C/C++
digimikeh 13 4,188 Último mensaje 4 Mayo 2019, 01:54 am
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines