Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - K-YreX

#691
Programación C/C++ / Re: sudoku en dev c++
3 Marzo 2019, 00:52 AM
El código entre etiquetas de código GeSHi, se seleccionan encima del cuadro de texto al escribir/modificar un mensaje...

He mirado el código muy por encima así que simplemente responderé a la pregunta:
  • Existe una librería <ctype.h> que tiene funciones como <isnum()>...
  • Puedes hacer un filtro que no termine hasta que lo introducido sea un número.
  • Si la entrada consta de más de un caracter, haz una función que reciba la entrada como un <char*> y compruebe si todos son números (o lo que necesites comprobar).

    PD: La librería <conio.h> no es estándar por lo que su uso no es recomendable. La función <getch()> de <conio.h> se puede sustituir en C por <getchar()> de <stdio.h>. Suerte :-X
#692
Primero: lo de usar <TAM> es para evitar "números mágicos" (magic numbers) que son números que aparecen por el código literalmente y que es difícil ver a qué están haciendo referencia. Siempre es mejor guardar esos valores en constantes y así en el caso de querer modificar el tamaño/alcance del programa, sólo tendrás que modificar el valor de la constante.
Te muestro un código muy sencillo donde guardamos un array y luego lo mostramos. Imagina el caso que queremos que el programa en vez de almacenar 10 valores, ahora queremos que almacene un máximo de 20... En el primer código tendríamos que cambiar cada 10 por 20; mientras que en el segundo bastaría con cambiar el valor de <TAM>
Código (cpp) [Seleccionar]

// version 1 usando numero magicos
int main(){
    int my_array[10];
    for(size_t i = 0; i < 10; i++){
        cout << "Elemento " << i+1 << ": ";
        cin >> my_array[i];
    }
    for(size_t i = 0; i < 10; i++)
        cout << my_array[i] << endl;
}

// version 2 usando constantes
const int TAM = 10;
int main(){
    int my_array[TAM];
    for(size_t i = 0; i < TAM; i++){
        cout << "Elemento " << i+1 << ": ";
        cin >> my_array[i];
    }
    for(size_t i = 0; i < TAM; i++)
        cout << my_array[i] << endl;
}

Otra buena utilidad es cuando todavía no sabemos usar memoria dinámica, es decir; que si queremos que el usuario introduzca n datos pero no sabemos cuánto va a valer n hasta el tiempo de ejecución, podemos crear un máximo para declarar el array y luego controlar la cantidad de valores que va a usar el usuario con otra variable. Se desperdicia memoria pero es la forma de hacerlo con memoria estática. Te dejo aquí un ejemplo:
Código (cpp) [Seleccionar]

const int TAM_MAX = 100;
int main(){
    int my_array[TAM_MAX];
    int tam_util;
    cout << "Numero de datos a almacenar: ";
    cin >> tam_util;
    for(size_t i = 0; i < tam_util; i++){ // no usamos TAM_MAX, sino tam_util
        // el resto del bloque
    }
}



Respecto al tema del aprendizaje, al final lo importante es que vayas practicando todo lo que vas viendo, si te limitas a ver códigos hechos nunca sabrás tratar con los errores que te van a surgir cuando seas tú quien los escriba. Siempre habrá temas más importantes que vas a usar en prácticamente todos los programas que hagas y otras cosas que no usarás casi nunca. Para empezar a programar tampoco necesitas haber memorizado TODO antes. Es suficiente con que sepas qué cosas se pueden hacer y cuando necesites usar algo poco común siempre podrás buscar por internet o en libros cómo se usaba eso que quieres implementar.
Normalmente los tutoriales que van por "capítulos" suelen ir bien estructurados para que la curva de aprendizaje no sea muy grande y te van metiendo conceptos poco a poco. Simplemente seguir aprendiendo e ir probando todo lo que vas viendo. Suerte :-X
#693
Exacto cuando se crea un array bidimensional en este caso, el primer campo son las filas y el segundo, las columnas.
Código (cpp) [Seleccionar]

int matriz[NUM_FILAS][NUM_COLUMNAS]

Además en C/C++ los índices de los arrays comienzan en 0, en vez de en 1, por lo que la última fila de la matriz sería la <NUM_FILAS-1> y la última columna, <NUM_COLUMNAS-1>.
Suerte :-X
#694
Tienes que comprobar que dispongas de la librería que te está dando el problema <FileCreator.h>
De ser así indica dónde tienes cada archivo y cómo estás compilando el programa :-X
#695
Programación C/C++ / Re: ayuda con este tema
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 (cpp) [Seleccionar]

int main(){
    int piso_actual = 0;
    int piso_destino = 4;
    bool puertas_abiertas = false;
    // mientras las puertas esten cerradas y estemos por debajo del destino, subimos
    while(!puertas_abiertas && piso_actual < piso_destino){
        cout << "Piso: " << piso_actual << " Subiendo..." << endl;
        Sleep(2000); // 2 segundos para subir cada piso
        piso_actual++;
    }
    if(piso_actual == piso_destino){
        cout << "Ha llegado al piso " << piso_actual << endl;
        cout << "Abriendo puertas..." << endl;
        Sleep(1000); // tiempo que tardan en abrirse las puertas
        puertas_abiertas = true;
        cout << "Puertas abiertas" << endl;
        Sleep(2000); // esperamos 2 segundos para volver a cerrar las puertas
        cout << "Cerrando puertas..." << endl;
        Sleep(1000); // tiempo que tardan en cerrarse
        puertas_abiertas = false;
        cout << "Puertas cerradas" << endl;
    }
}
#696
Programación C/C++ / Re: ayuda con este tema
1 Marzo 2019, 04:08 AM
Cita de: sofia555555 en  1 Marzo 2019, 04:00 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
#697
Programación C/C++ / Re: ayuda con este tema
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

bool puerta_abierta = true
si puerta_abierta
    esperar(2 segundos)
    puerta_abierta = false
#698
Programación C/C++ / Re: ayuda con este tema
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 (cpp) [Seleccionar]

#include <iostream>
#include <windows.h>

using namespace std;

int main(){
    int piso_actual = 0;
    int piso_final = 4;
    while(piso_actual < piso_final){ // tambien funciona con piso_actual != piso_final
        if(piso_actual == 0)
            cout << "Piso: PB" << endl;
        else
            cout << "Piso: " << piso_actual << endl;
        piso_actual++; // incremento en 1 de la variable piso_actual
        Sleep(2000); // retardo de 2 segundos entre piso y piso
    }
}


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 (cpp) [Seleccionar]

    // Opcion 1 usando llaves
    if(var == 0){
        cout << var << endl;
    }
    cout << var+1 << endl;

    // Opcion 2 sin usar llaves, equivalente a la opcion 1
    if(var == 0)
        cout << var << endl;
    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
#699
Cita de: Blazjker en  1 Marzo 2019, 02:01 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
#700
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 (cpp) [Seleccionar]

#include <iostream>

namespace Agenda{
class Persona{
public:
int a;
Persona():a(5){}
};
int f(const Persona&);
}

using namespace Agenda;

int main(){
Persona p1;
std::cout << f(p1) << std::endl;
}

int f(const Persona &p){
return p.a;
}


La salida para este caso es un error de compilación:

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 (cpp) [Seleccionar]

int Agenda::f(const Agenda::Persona &p){
    return p.a;
}





En cambio, si ponemos la función dentro del <namespace>...
Código (cpp) [Seleccionar]

#include <iostream>

namespace Agenda{
class Persona{
public:
int a;
Persona():a(5){}
};

int f(const Persona &p){
return p.a;
}
}

using namespace Agenda;

int main(){
Persona p1;
std::cout << f(p1) << std::endl;
}


La salida en este caso sí es la correcta:

Salida: 5