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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 ... 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 [77] 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 ... 102
761  Programación / Programación C/C++ / Re: ayuda con este tema en: 1 Marzo 2019, 04:32 am
Si no veo el resto del código no sé muy bien dónde tienes el problema.
Aparte te recomiendo que la variable sea de tipo <bool>, no <string>. Te dejo aquí un ejemplo para que lo ejecutes y veas como quedaría. Luego siempre puedes añadir o quitar cosas para dejarlo como quieras. :-X
Código
  1. int main(){
  2.    int piso_actual = 0;
  3.    int piso_destino = 4;
  4.    bool puertas_abiertas = false;
  5.    // mientras las puertas esten cerradas y estemos por debajo del destino, subimos
  6.    while(!puertas_abiertas && piso_actual < piso_destino){
  7.        cout << "Piso: " << piso_actual << " Subiendo..." << endl;
  8.        Sleep(2000); // 2 segundos para subir cada piso
  9.        piso_actual++;
  10.    }
  11.    if(piso_actual == piso_destino){
  12.        cout << "Ha llegado al piso " << piso_actual << endl;
  13.        cout << "Abriendo puertas..." << endl;
  14.        Sleep(1000); // tiempo que tardan en abrirse las puertas
  15.        puertas_abiertas = true;
  16.        cout << "Puertas abiertas" << endl;
  17.        Sleep(2000); // esperamos 2 segundos para volver a cerrar las puertas
  18.        cout << "Cerrando puertas..." << endl;
  19.        Sleep(1000); // tiempo que tardan en cerrarse
  20.        puertas_abiertas = false;
  21.        cout << "Puertas cerradas" << endl;
  22.    }
  23. }
762  Programación / Programación C/C++ / Re: ayuda con este tema en: 1 Marzo 2019, 04:08 am
Jajaja que maldad  :-( no entiendo como pseudocodigo?
El pseudocódigo se emplea para representar algoritmos (fragmentos de código) de forma fácil de entender para las personas, con un lenguaje más natural y que luego ya puedes transformarlo en código para el lenguaje que tú quieras.
Como puedes ver, ese fragmento que te he dejado si lo copias tal cual en el programa no va a funcionar. Eso es porque ahora tienes que adaptar esa idea a la sintaxis del lenguaje de programación que sea, C++ en este caso.
Más que nada porque si te lo hago en C++ pues ya te estoy dando la solución hecha para copiar y pegar... :-X
763  Programación / Programación C/C++ / Re: ayuda con este tema en: 1 Marzo 2019, 03:51 am
Para hacer eso lo mejor es controlar el estado de las puertas con una variable booleana <bool> cuyos posibles valores son true(1) y false(0). Como ya has visto como se usa la función <Sleep()> y cómo funcionan los condicionales, te dejo la respuesta en pseudocódigo para que tú te encargues de pasarlo a C++. :-X
Código:
bool puerta_abierta = true
si puerta_abierta
    esperar(2 segundos)
    puerta_abierta = false
764  Programación / Programación C/C++ / Re: ayuda con este tema en: 1 Marzo 2019, 03:27 am
Te muestro un pequeño fragmento para darte una idea y que tú puedas adaptarlo a tus necesidades.
(Supongo que estás compilando desde Windows no?)
Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.    int piso_actual = 0;
  8.    int piso_final = 4;
  9.    while(piso_actual < piso_final){ // tambien funciona con piso_actual != piso_final
  10.        if(piso_actual == 0)
  11.            cout << "Piso: PB" << endl;
  12.        else
  13.            cout << "Piso: " << piso_actual << endl;
  14.        piso_actual++; // incremento en 1 de la variable piso_actual
  15.        Sleep(2000); // retardo de 2 segundos entre piso y piso
  16.    }
  17. }

Como estás empezando te comento un par de cosas:
  • El <if else> no tiene llaves {} por lo que sólo incluye una instrucción cada uno.
Código
  1. // Opcion 1 usando llaves
  2. if(var == 0){
  3.    cout << var << endl;
  4. }
  5. cout << var+1 << endl;
  6.  
  7. // Opcion 2 sin usar llaves, equivalente a la opcion 1
  8. if(var == 0)
  9.    cout << var << endl;
  10. cout << var+1 << endl;

  • Si el programa lo vas a compilar en Linux tienes que cambiar <windows.h> por <unistd.h> y la función <Sleep(milisegundos)> por <usleep(microsegundos)>.
  • Hay más formas de mostrar el número de planta, pero esta es una de ellas. Si quieres ver cómo se haría de alguna otra forma, coméntamelo.

Espero que esto te sirva y si tienes alguna duda más, siempre puedes preguntar. Suerte :-X
765  Programación / Programación C/C++ / Re: Ayuda para pasar ESTE código hecho en JAVA A C++ en: 1 Marzo 2019, 03:00 am
Siguiendo los pasos que mencionaste, el código funciona similar a Java, desde ya muchísimas gracias por haberme ayudado , hay alguna manera para recompensarte ,es decir, hay algún modo para colocar puntajes o algo parecido, en forma de agradecimiento ?
No, no hay ningún sistema de valoración. Pero para eso es el foro, para prestar ayuda voluntariamente. :-X
766  Programación / Programación C/C++ / Re: Funciones Friends y Namespaces.. en: 1 Marzo 2019, 01:44 am
No, he probado a crear una función simple para probar y te dejaré por aquí el código y las salidas que genera.

Código
  1. #include <iostream>
  2.  
  3. namespace Agenda{
  4. class Persona{
  5. public:
  6. int a;
  7. Persona():a(5){}
  8. };
  9. int f(const Persona&);
  10. }
  11.  
  12. using namespace Agenda;
  13.  
  14. int main(){
  15. Persona p1;
  16. std::cout << f(p1) << std::endl;
  17. }
  18.  
  19. int f(const Persona &p){
  20. return p.a;
  21. }

La salida para este caso es un error de compilación:
Código:
En la función `main':
test.cpp:(.text+0x2b): referencia a `Agenda::f(Agenda::Persona const&)' sin definir
collect2: error: ld returned 1 exit status

Este error se puede solucionar añadiendo el <namespace Agenda> a la implementación de la función tal que:
Código
  1. int Agenda::f(const Agenda::Persona &p){
  2.    return p.a;
  3. }



En cambio, si ponemos la función dentro del <namespace>...
Código
  1. #include <iostream>
  2.  
  3. namespace Agenda{
  4. class Persona{
  5. public:
  6. int a;
  7. Persona():a(5){}
  8. };
  9.  
  10. int f(const Persona &p){
  11. return p.a;
  12. }
  13. }
  14.  
  15. using namespace Agenda;
  16.  
  17. int main(){
  18. Persona p1;
  19. std::cout << f(p1) << std::endl;
  20. }

La salida en este caso sí es la correcta:
Código:
Salida: 5 
767  Programación / Programación C/C++ / Re: Ayuda para pasar ESTE código hecho en JAVA A C++ en: 1 Marzo 2019, 01:21 am
Vale, a ver, los errores son varios y te los voy dejando por aquí:
  • Antes de nada no está incluido <iostream> para poder hacer las entradas/salidas de pantalla <cin> y <cout>.
  • Si inicializas <distMasCorta = 0> y luego buscas dos puntos cuya distancia sea menor a eso, no creo que los encuentres nunca... :silbar:
  • Los dos bucles <for> anidados están al revés. El exterior es el que tiene que acabar antes y el interior el que tiene que llegar hasta el final.

Y ahora unos consejos que nunca están de más :-X:
  • No utilices <conio.h>. No es estándar por lo que algunos compiladores no lo admiten.
  • El <getch()> que usas de <conio.h> sustitúyelo por <cin.get()> que está en <iostream>.
  • Las librerías que acaban en ".h" (versión C) tienen su versión de C++ sin el ".h" y empezando por "c" <cmath>.
  • El bucle <for> interno en vez de inicializar <m = i> y después usar siempre <m+1>; inicialízalo en <m = i+1> y así sólo tendrás que usar <m> luego.
768  Programación / Programación C/C++ / Re: Funciones Friends y Namespaces.. en: 1 Marzo 2019, 00:40 am
Esto es porque estás declarando el prototipo de la función <f_obtenerEdad()> dentro del <namespace Agenda> pero la implementación de la función lo estás haciendo fuera; lo que sea hace confuso.

Para que funcione correctamente debes hacer que tanto el prototipo como la implementación pertenezcan al <namespace Agenda>.
Código
  1. namespace Agenda{
  2.    class Persona{
  3.        int edad;
  4.        public:
  5.            friend int f_obtenerEdad(const Persona&);
  6.    };
  7.  
  8.    int f_obtenerEdad(const Persona &p){
  9.        return p.edad;
  10.    }
  11. }

Al hacerlo en ficheros separados debes especificar que la implementación también pertenece al <namespace Agenda> por eso que tienes que ponerlo para que funcione.
Puedes leer un poco más al respecto AQUÍ :-X
769  Programación / Programación C/C++ / Re: Ayuda para pasar ESTE código hecho en JAVA A C++ en: 1 Marzo 2019, 00:08 am
Si puedes especificar un poco más cuando dices que los resultados difieren o que no lo hace de forma completa... En principio estoy dando por supuesto que ambos compilan sin problemas. :-X
770  Programación / Programación C/C++ / Re: Problemas para rellenar la matriz en: 28 Febrero 2019, 21:46 pm
Ahora ya funciona pero si te has dado cuenta, pides los datos dos veces seguidas. Una vez en el <main> y otra vez en la función <matrizCuadrada()>...
Te comento las diferencias entre el filtro <do while> y el <while> ya que esto se puede hacer de ambas formas.

Un bloque de código dentro de un <do while> siempre se ejecuta al menos una vez aunque la condición sea falsa ya que primero está el <do> y luego el <while>. Es como "primero haces y luego compruebas". En cambio un <while> es justo lo contrario; "primero compruebas y luego ya si eso, haces".

Aquí te muestro un bloque infinito. ¿Por qué si la condición de primeras no se cumple? Pues porque primero mostramos el 0, luego lo incrementamos <iteracion = 1> y luego comprobamos si es mayor que 0. Y como sí que lo es pues ya se ejecuta de forma infinita.
Código
  1. int iteracion = 0;
  2. do{
  3.    cout << iteracion << endl;
  4.    iteracion++;
  5. }   while(iteracion > 0);

Lo mismo con un <while>. La parte interna del bucle nunca se ejecuta. Al principio iteracion vale 0, comprobamos si es mayor que 0 y como no lo es, se acabó.
Código
  1. int iteracion = 0;
  2. while(iteracion > 0){
  3.    cout << iteracion << endl;
  4.    iteracion++;
  5. }

Entonces ahora te muestro las opciones que tienes:
  • Alternativa 1: Pedir los datos únicamente dentro de <matrizCuadrada()>. Entonces sería con un <do while>.
Código
  1. void matrizCuadrada(int m[][TAM], int &nFil, int &nCol){
  2.    do{
  3.        pedirDatos(nFil, nCol);
  4.    }   while(nFil != nCol);
  5.    // el resto de la funcion
  6. }

  • Alternativa 2: Pedir los datos en el <main> y dentro de la función <matrizCuadrada()> comprobarlos para que si no son iguales los pida de nuevo.
Código
  1. void matrizCuadrada(int m[][TAM], int &nFil, int &nCol){
  2.    while(nFil != nCol)
  3.        pedirDatos(nFil, nCol);
  4.    // el resto de la funcion
  5. }

  • Alternativa 3: La más correcta creo yo. Para no tener que ir pasando siempre las dimensiones por referencia, que podrías acabar modificándolas sin querer; haz el filtro dentro de <pedirDatos()> y así te aseguras que cuando acaba esa función la matriz ya es cuadrada.
Código
  1. void pedirDatos(int &nFil, int &nCol){
  2.    do{
  3.        cout << "Introduce las dimensiones de la matriz (NxN): ";
  4.        cin >> nFil >> nCol;
  5.    }   while(nFil != nCol);
  6. }
Con esta última opción ya no tienes que usar siempre el paso por referencia y así evitar errores mayores.

Es más, yo dejaría el esquema general del programa en algo así :-X:
Código
  1. void pedirDatos(int&, int&);
  2. void generarMatriz(int [][TAM], const int, const int);
  3. void mostrarMatriz(const int [][TAM], const int, const int);
  4. bool esSimetrica(const int [][TAM], const int, const int);
En el caso de <esSimetrica()>. Cuando se usa una función para comprobar algo es mejor que devuelva <true/false> y luego tú ya verás lo que haces con ello. Imagina un programa muy grande donde tienes que comprobar si 100 matrices son simétricas y vas mostrando por pantalla el resultado de cada una, cuando no es necesario.
Entonces es mejor hacer que devuelva un <bool> de si es simétrica o no y ya en el <main> haces lo que quieras. Algo así:
Código
  1. bool esSimetrica(const int matriz[][TAM], const int nFil, const int nCol){
  2.    bool simetrica = true;
  3.    for(size_t i = 0; i < nFil && simetrica; i++)
  4.        for(size_t j = 0; j < nCol && simetrica; j++)
  5.            simetrica = matriz[i][j] == matriz[j][i];
  6.    return simetrica;
  7. }
  8.  
  9. int main(){
  10.    // todo el programa
  11.    if(esSimetrica(matriz, nFil, nCol))
  12.        cout << "La matriz es simetrica" << endl;
  13.    else
  14.        cout << "La matriz no es simetrica" << endl;
  15. }
Páginas: 1 ... 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 [77] 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines