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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: 1 ... 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [49] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 ... 102
481  Programación / Programación C/C++ / Re: Clase pila estática en: 29 Octubre 2019, 17:41 pm
Lo que tú tienes es una función miembro de una clase, por lo tanto esa función se la aplicas a una pila que ya existe, no tienes que crear una Pila dentro de la función.
La Pila p1 es local a esa función. Tú tienes que trabajar con el objeto implícito que llama a la función <Copiar()>.
Además de eso si estás pasando como parámetro una Pila <p> por referencia y constante, no puedes desapilarla porque es constante.
Código
  1. void Pila::copiar(Pila p){
  2.    while(!p.vacia()){
  3.        apilar(p.cimaPila());
  4.        p.desapilar();
  5.    }
  6. }

EDIT: Además si lo haces de esa forma estás invirtiendo las pilas.
Si tienes una pila original: p = {1,2,3,4,5} y llamas a la función copiar con otra pila p2, el resultado sería: p2 = {5,4,3,2,1}
482  Programación / Programación C/C++ / Re: Clase pila estática en: 29 Octubre 2019, 14:52 pm
El compilador no sabe si sólo estás leyendo o estás modificando algo. Las funciones miembro de la clase que sólo "leen" y no van a modificar nada es recomendable declararlas como constantes (no constante el valor de retorno, sino constante la función). Haciendo esto permites que tanto los objetos constantes como los variables llamen a esa función pero si no lo pones entonces el compilador asume que esa función modifica algo y no te deja usarla con objetos constantes.

Te pongo un pequeño ejemplo para que veas como funciona:
Código
  1. class Persona{
  2.    private:
  3.        string nombre;
  4.        int edad;
  5.  
  6.    public:
  7.        Persona(){}
  8.  
  9.        Persona(string nombre, int edad){
  10.            this->nombre = nombre;
  11.            this->edad = edad;
  12.        }
  13.  
  14.        string getNombre()const{
  15.            return nombre;
  16.        }
  17.  
  18.        int getEdad()const{
  19.            return edad;
  20.        }
  21.  
  22.        const Persona& operator=(const Persona &original){
  23.            Persona *nuevaPersona = new Persona(original.getNombre(), original.getEdad());
  24.            return *nuevaPersona;
  25.        }
  26. };
Como ves en la sobrecarga del operator=, estamos pasando un objeto de tipo Persona constante y por referencia y después estamos llamando a las funciones <getNombre()> y <getEdad()>. Para poder llamar a esas funciones, éstas deben ser constantes. (Puedes probarlo y quitar los <const> de los <get> para que veas que da un error.



Para el tema de la recursividad tienes que pensar en que el/los parámetros que le pases a la función tienen que cambiar en algún momento. Entonces para tu caso que quieres calcular el tamaño de la pila puedes hacer lo siguiente:
1º Pensar en el problema sin usar recursividad.
Podrías hacer por ejemplo:
Código:
tam := 0
MIENTRAS !pila.vacia HACER
    pila.pop // quitar el elemento del tope
    tam := tam + 1 // sumar uno al tamaño de la pila
FIN MIENTRAS

2º Quitar el bucle.
Para ello tienes que pensar en que cada vez que llames a la función es como una iteración. Y en cada iteración lo que hacías antes era comprobar si estaba vacía y si no lo estaba, eliminabas el tope e incrementabas el tamaño en 1.
Código:
Funcion tamRecursivo(Pila pila):int
INICIO
    SI pila.vacia HACER // El caso base (el que termina la recursividad): si la pila esta vacia...
        return 0 // devuelve un 0
    // Si no esta vacia...
    SINO HACER // No hace falta este <else> ya que antes hay un return. Lo pongo para que lo entiendas mejor
        pila.pop // Quitamos un elemento a la pila
        return 1 + tamRecursivo(pila) // Y devolvemos un 1 + el tamaño de la pila al haber quitado un elemento
    FIN SI
FIN
Recuerda no pasar la pila constante ya que la estás modificando ni por referencia ya que entonces te cargarías la original.
483  Programación / Programación General / Re: ayuda urgente en codigo c++ en: 28 Octubre 2019, 17:22 pm
Para empezar hay un foro específico para C/C++ así que tu tema seguramente que sea movido.
Dejando eso a un lado, el código ponlo entre etiquetas de Código GeSHi especificando el lenguaje para facilitar la tarea de lectura a los demás.
Y para terminar, no das ningún dato de tu problema, error o lo que tengas. Será más fácil que alguien te ayude si pones el error que te da al compilar (si es que te da alguno) o la parte que no funciona bien (especificando lo que debería hacer y lo que hace, si puedes).
484  Programación / Programación C/C++ / Re: C++ en: 27 Octubre 2019, 02:28 am
Esto en C++ se realiza usando la programación orientada a objetos. Es decir, mediante una clase.
Código
  1. class Persona{
  2.    private:
  3.        string nombre;
  4.        int edad;
  5.  
  6.    public:
  7.        // funciones miembro
  8. };
  9.  
  10. const int NUM_PERSONAS = 5;
  11.  
  12. int main(){
  13.    Persona personas[NUM_PERSONAS];
  14.  
  15.    // dar valores a cada Persona del array
  16.  
  17.    // ordenar las personas segun su edad
  18. }
Si tienes dudas, consulta en internet sobre el uso de clases en C++ o deja tu código entre etiquetas de Código GeSHi para poder ayudarte.
485  Programación / Programación C/C++ / Re: C++ , duda con vectores en: 27 Octubre 2019, 01:41 am
Si estás empezando creo que te puede resultar un poco lioso pero te dejo un par de opciones:
Usar un array auxiliar.
Normalmente esto se hace creando un array auxiliar de punteros. Haciendo que cada puntero i del array auxiliar apunte al elemento i del array original y después ordenas uno de los dos arrays. De esta manera podrás usar el otro para saber cuál era cada elemento.
Código:
arrayOriginal  := {3,6,2,9,5}
arrayPunteros := {p0,p1,p2,p3,p4} // pi significa que apunta al elemento i
Entonces ordenas uno de ellos (el de punteros por ejemplo) para dejar el original intacto y quedaría algo así:
Código:
arrayOriginal := {3,6,2,9,5}
arrayPunteros := {p2,p0,p4,p1,p3}
Cuando quieras ver qué elemento era, recorres el arrayOriginal. Cuando quieras trabajar con los elementos ordenados, recorres el de punteros.

Para esto tienes que saber un poco sobre trabajar con punteros. Saber usar el operador para desreferenciarlos (*) y esas cosas.
Otra opción más sencilla es usar dos arrays de enteros. Uno que sea el original y el otro que guarde en la posición i, la nueva posición del elemento i original. Con un ejemplo se ve mejor:
Código:
arrayOriginal := {3,6,2,9,5}
arrayOrdenOriginal := {0,1,2,3,4}

arrayOrdenado := {2,3,5,6,9}
arrayOrden := {1,4,0,2,3}
Utilizas el array ordenado y cuando quieras saber cuál era el elemento que habías guardado el primero (posición 0: valor 3), lo recuperas porque su nueva posición la indica el arrayOrden (posición 0: valor 1 -> nuevaPosición: arrayOrdenado[1] = 3).
Lo malo de este método es que es más susceptible a errores humanos y que tienes que intercambiar las posiciones en ambos arrays mientras que en el de punteros sólo en uno. Lo bueno es que en este no tienes que trabajar con punteros.

Si no te sirven estas opciones o no entiendes algo. Deja tu código entre etiquetas de Código GeSHi para que podamos ayudarte mejor. :-X
486  Programación / Programación C/C++ / Re: Posibilidades en Tematica de dados en: 24 Octubre 2019, 00:10 am
El problema que tienes es matemático, no de programación. A tu consulta le falta información que hay que suponer como que se lanzan dos dados al mismo tiempo, no?
Si esperas que te den el programa terminado, suerte. No creo que lo consigas. Busca información de probabilidad en dados. Ese ejercicio es muy típico y lo encontrarás fácilmente. Cuando lo entiendas, intenta implementarlo en el lenguaje de programación (que tampoco sé si es C o C++) y si entonces tienes problemas es cuando tienes que pedir ayuda por aquí poniendo el código que tengas entre etiquetas de Código GeSHi.
487  Programación / Programación C/C++ / Re: Problema en c++ - Números k-emparejados en: 21 Octubre 2019, 20:56 pm
El modo de resolución a mí sí me parece que es iterativo. Si no es lo que buscas añade un poco más de código para ver qué es lo que quieres implementar.
488  Programación / Programación C/C++ / Re: Problema en c++ - Números k-emparejados en: 21 Octubre 2019, 17:49 pm
Te dejo este tema que es de hace muy poco tiempo y creo que se trató este mismo tema. Quizás pueda servirte.
https://foro.elhacker.net/programacion_cc/problema_kpaired_kemparejados_en_on-t499246.0.html
489  Programación / Programación C/C++ / Re: MATRICES: Rellenar con valores que ingresa el usuario en: 19 Octubre 2019, 00:04 am
Supongo que es en C y no en C++, no?
Bueno, te respondo para C.
Ese código tuyo lo que hace es asignar el valor que tienes guardado en la variable <un_numero> a cada posición de la matriz por lo que son todo 0.
Para que los valores los introduzca el usuario tienes que pedírselos.
Código
  1. #define MAX_SIZE 10
  2.  
  3. void tablero(int matriz[][MAX_SIZE]){ // la primera dimension no es necesario ponerla. Si se pone tampoco pasa nada
  4.    for(int i = 0; i < MAX_SIZE; ++i){
  5.        for(int j = 0; j < MAX_SIZE; ++j){
  6.            printf("Introduce el valor de matriz[%d][%d]: ", i, j); // muestras por pantalla este mensaje para que el usuario introduzca un valor
  7.            scanf("%d", &matriz[i][j]); // guardas el valor que introduce el usuario en la posicion correspondiente
  8.        }
  9.    }
  10. }
490  Programación / Programación C/C++ / Re: Suma de números complejos en: 18 Octubre 2019, 01:10 am
Los códigos ponlos entre etiquetas de Código GeSHi... y a ser posible bien tabulados

De lo que tienes: las funciones <suma()> y <leer_complejo()> están bien implementadas y la función <escribir_complejo()> tiene un error a la hora de mostrar los valores.
Código
  1. void escribirComplejo(Complejo numero){
  2.    printf("La parte real es: %f y la parte compleja es: %f", numero.x, numero.y);
  3. }
Se pone primero una cadena entre comillas con el texto que se quiera mostrar y el formato de las variables que se van a mostrar y finalizada la cadena entre comillas, se ponen las variables que se sustituirán en los %f de la cadena.
Al ser una función que no devuelve nada, es innecesario poner el <return> al final.

Veo que todavía te faltan algunas de las cosas que te piden así que te pongo por aquí cosillas aisladas que tendrás que ver cómo las usas para lo que te están pidiendo.
  • Crear número aleatorios: para crear un número entero aleatorio en el intervalo [minimo, maximo]:
Código
  1. #include <stdlib.h>
  2. #include <ctime> // se usa para la funcion time
  3.  
  4. int main(){
  5.    srand(time(NULL)); // semilla para generar numeros aleatorios. Si no se pone esta linea los numeros seran siempre los mismos
  6.    int numeroAleatorio = minimo + rand() % (maximo - minimo + 1);
  7. }

  • Rellenar un array con números:
Código
  1. #define SIZE 10 // definimos la longitud maxima del array
  2.  
  3. int main(){
  4.    int numeros[SIZE];
  5.    for(size_t i = 0; i < SIZE; ++i) // en vez de size_t se puede usar int tambien
  6.        numeros[i] = i; // se guardara {0,1,2,3,4,5,6,7,8,9}
  7. }

  • Obtener sumas de manera recursiva. Te pongo un ejemplo que continuaría con el código anterior. Sería sumar de manera recursiva los 10 valores que hemos guardado.
Código
  1. int sumarRecursiva(int numeros[], int size, int currentIndex){
  2.    if(currentIndex == size-1)
  3.        return numeros[currentIndex];
  4.    return numeros[currentIndex] + sumarRecursiva(numeros, SIZE, currentIndex + 1);
  5. }

Como creo que te estoy dando bastante hecho aunque tengas que adaptarlo a tu problema, te dejo la parte de mostrar el array de manera recursiva para que lo intentes tú antes de decirte también cómo se hace.
Páginas: 1 ... 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 [49] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines