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 - avesudra

#21
Hola DadReX, bienvenido al foro.

Lo primero de todo Dev C++ no es un compilador, es un entorno de desarrollo. Lo segundo NO copies código de internet, así NO se aprende. Lo tercero si quieres un entorno de desarrollo decente deja Dev C++ y usa Codeblocks, aunque la mejor manera de aprender es que uses un editor de texto plano con algunos complementos como Emacs, Vim o similares.

Por último si te hubieses detenido a leer los errores del compilador, que no lo has hecho, sino no estarías preguntando (o al menos sabrías dónde falla) , habrías visto que:

error: 'prinf' was not declared in this scope|
error: 'sytem' was not declared in this scope|


Pues tú me dirás, más claro agua, prinf no está declarado en este ámbito y sytem tampoco. ¿Quizás es porque no se llaman así? Además si hubieses leído el código línea por línea te habrías dado cuenta de que los primeros printf están bien y luego ya no, y que sytem no es una función. Evidentemente una vez lo pongas todo bien te va a decir lo mismo de system, porque está declarada en stdlib.h, fichero de cabecera que no has incluido, pero me parece que te estoy hablando en chino. Tienes que poner:
Código (cpp) [Seleccionar]
#include <stdlib.h>

Te aconsejo que no vuelvas a copiar, te pilles un libro y aprendas bien, porque si sigues copiando y pegando lo único que vas a aprender es a eso precisamente, a copiar y pegar.

PD: Y cuando vayas a publicar código hazlo entre las etiquetas GeSHi, que están para que se coloree, tal que así:
Código (cpp) [Seleccionar]
int main(int argc, char **argv)
{

}


Un saludo.
#22
Programación C/C++ / Re: Opinad
18 Junio 2016, 17:57 PM
Cita de: cNoob en 18 Junio 2016, 17:50 PM
A que os referís con que use la clase vector?

vector es un tipo de objeto de la biblioteca estándar de plantillas que te permite trabajar fácilmente con un array dinámico.En conjunto con otras funciones proporcionadas por la STL(standard template library) te permite hacer una gran variedad de cosas.

Por otra parte, sinceramente primero debes aprender lo básico(evidentemente es lo del principio):

         - Estructuras de control, if - else, do - while, while, for, switch.
         - Funciones. (paso por referencia y valor).
         - Punteros (y entenderlos bien).
         - Objetos (clases y estructuras).
         - Herencia.
         - Polimorfismo y RTTI.
         - Programación Genérica.

Tienes que ir dando pasitos.

Un saludo.
#23
Lo que me descuadra es lo de una multiplicación y una suma. Si conoces la fórmula de la suma de una progresión aritmética sabrás que:

[latex]\displaystyle\sum _{i=1}^{N} \left(i\right) = \frac{N(N+1)}{2}[/latex]
Pero claro la única forma de poner eso como una sola multiplicación y una suma es sustituir N por 1000:

[latex]500\cdot(1000+1)[/latex]

Aunque sigue sin cuadrarme lo del vector.


Por otra parte en el código que expones no sé que quieres hacer cuando pones

Código (cpp) [Seleccionar]
i=ve[1000];

Debes saber que esa posición no existe, tus posiciones disponibles son de 0 a 999 , es decir 1000 posiciones.

PD: Pon tu codigo con las etiquetas GeSHi, sino cada vez que pongas unos corchetes con una i, te sale en cursiva lo demás.

La clave de todo está en que los números son consecutivos.

Un saludo.
#24
Programación C/C++ / Re: Opinad
18 Junio 2016, 14:28 PM
Hola, así por encima:
         1. Pon comentarios porque a priori no sé que es x ni y ni i.
         2. Esto solo se permite en un estándar con extensiones. Para hacerlo en ISO C++ tienes tres opciones:
Código (cpp) [Seleccionar]
int posiciones[i]
                   a. Poner directamente un 0 porque i vale 0 en ese momento.
                  b. Hacerlo con memoria dinámica.
                  c. Usar la clase vector.
            Pero definitivamente en ISO C++ no puedes declarar un array con una variable en los corchetes.
         3. La función Errores devuelve un entero, y tu devuelves un booleano, es bueno que respetes los tipos. Si vas a devolver un bool el tipo de retorno debe ser bool. ¿Por qué el compilador no da fallo? Pues porque realiza conversiones implícitas, primero de bool a int y                 luego de int a bool para que no haya problemas.
#25
Hola, la ayuda se realiza sobre algo, sino no es ayuda, se llama hacerte el problema. Dos cosas:

    1. ¿Qué llevas hecho?
    2. ¿Dónde te atascas?

Un saludo.
#26
Cita de: cNoob en 18 Junio 2016, 00:10 AM
Okey, muchas gracias hahaha
No se si la pregunta sera algo tonta, pero... que es Qt y GTK?  :huh: :xD

Qt y GTK son frameworks, es decir, conjuntos de herramientas que te permiten hacer interfaces gráficas. Son las más faciles de usar en mi opinión, sobre todo Qt por su integración con C++ y la orientación a objetos. Es normal que no lo entiendas estás intentando comprender como se hacen integrales sin saber sumar.

Para hacer un uso de ellos no chapucero, debes comprender el lenguaje y el paradigma de orientación a objetos.

Un saludo.
#27
Para parar el bucle puedes mirar lo que devuelve cin.get():

http://www.cplusplus.com/reference/istream/istream/get/

te devuelve la tecla que hayas pulsado así que si pones un bucle tal que así

Código (cpp) [Seleccionar]
while(cin.get() != '\r')
{
  // tu codigo aqui...
}


Lo malo es que te tiene que ir pidiendo una tecla o sea que no es lo que quieres. (y ademas tienes que ir pulsando intro cada vez que pongas una letra, la unica forma de pararlo es pulsar intro solamente).

Por otra parte para programar GUIs (Graphical User Interfaces) necesitas primero entender todo esto, no se construyen los edificios por el tejado. Aun así si te interesa el tema puedes mirar Qt o GTK.

Un saludo.
#28
EDITADO: Digo esto porque si ese es el plugin de MathJax que comentaba kuB0x, no se parece ni de lejos (va acabo de comprobar que no es compatible con la version de este foro ese plugin, así que no es ese seguro). MathJax se ve como en esta página https://www.mathjax.org donde quiera que se incluya, no solo en esa.


Hola, ya que habéis decidido incluir [latex]\LaTeX[/latex] por fin, como sugerencia os digo que uséis MathJax. ¿Por qué? Pues porque se ejecuta del lado del cliente y descarga al servidor de trabajo innecesario y a SMF de plugins. Ya lo comenté hace tiempo en un post, pero dada la negativa a cambiarlo seguí investigando por mi cuenta y pude comprobar como cambiando el código de los Themes del foro se puede incluir un:

<script> </script>

En el head de cada Theme, con el script de MathJax necesario (sin tener que cambiar el código de uno de los .php de SMF que dije en post anteriores).

¿Qué se gana con esto? Gráficos vectoriales, descarga del servidor de trabajo, funciona en todos los navegadores (incluyendo los de los móviles) y además sobre fondo negro MathJax detecta automáticamente que es oscuro y pone las letras blancas, y al contrario si el fondo es claro. He de decir que tengo el Dark Theme, y el latex se ve fatal.

No voy a comisión con MathJax, simplemente es una tecnología novedosa(que tiró por tierra hace tiempo ya a todos los plugins que hay para LateX en la web que se basan en renderizar el LateX a una imagen) que no es difícil de incorporar y que sería mejor para el foro.

Aun así es un gran avance que se haya incluido.

PD: No lo toméis a mal, lo hago con ánimo de mejorar el foro.

Un saludo.
#29
Programación C/C++ / Re: [DUDA] Polimorfismo.
11 Junio 2016, 17:37 PM
Hola, el polimorfismo es un pelín complicado, tu problema es tu noción de que cuando haces un moldeado a Persona*, el objeto ya es de tipo persona cuando esto es falso o verdadero dependiendo del método al que se llame.

Bien, cuando tu tienes tu objeto Estudiante y haces que un puntero de tipo Persona apunte a ese objeto, no quiere decir que el Estudiante ahora sea una Persona (de hecho siempre lo ha sido). Entonces al hacer:

Código (cpp) [Seleccionar]
Gente[0] = Carlos->clonar();

Estás llamando al método Empleado::Clonar() por ser el método virtual(si no fuese virtual llamaría a Persona::Clonar() y el *this sería de tipo Persona) y estar definido de nuevo en la clase Empleado. De hecho en el return de dicha función, es decir aquí:

Código (cpp) [Seleccionar]
virtual Persona* Clonar() { return new Empleado(*this); }

Se llama al constructor de copia de Empleado, y *this por supuesto no es una Persona, es un Empleado (porque el método al que se llama está en la clase empleado). Ahora el problema es que en el constructor de copia de Empleado tenemos esto:
Código (cpp) [Seleccionar]
Empleado::Empleado(const Empleado &e) : Persona(e) {
   cout << "Emp: constructor copia." << endl;
}


Pero claro primero tenemos que llamar al constructor de copia de Persona, pero le estamos pasando un Empleado, ¿por qué el compilador no nos da error aquí? Pues porque es una conversión hacia arriba en la jerarquía de clases y esta conversión implícitaes legal.

Es decir que en este pedazo de código lo que nos saldría sería:

Per: constructor copia.
Emp: constructor copia.


Si todavía no me crees puedes probar a compilar y ejecutar este código modificado y simplificado que te lo muestra (también te muestra de qué tipo es *this en cada caso):

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>
#include <typeinfo>

/** Si a los metodos les quitas los virtual, veras que se llama a A::Clonar **/

using namespace std;

struct A
{
    A() {}
    A(const A& a);
    virtual A* Clonar()
    {
        cout << "A::Clonar " << typeid(*this).name() << endl;
        return new A(*this);
    }
};

A::A(const A &a)
{
    cout << "A: constructor copia." << endl;
}

struct B : public A
{
    B() : A() {}
    B(const B &e);
   
    virtual A* Clonar()
    {
        cout << "B::Clonar " << typeid(*this).name() << endl;
        return new B(*this);
    }

};

B::B(const B& b) : A(b)
{
    cout << "B: constructor copia." << endl;
}

int main()
{
    A *a = new B;

    a->Clonar();

    delete a;

    return 0;
}


#30
Java / Re: Cuestión de hilos/concurrencia
1 Febrero 2016, 20:12 PM
Hola kur79 si te vas a la API de Java del método interrupt() verás que:

If this thread is blocked in an invocation of the wait(), wait(long), or wait(long, int) methods of the Object class, or of the join(), join(long), join(long, int), sleep(long), or sleep(long, int), methods of this class, then its interrupt status will be cleared and it will receive an InterruptedException.

Es decir que al estar el hilo bloqueado por una llamada a sleep, lo que haces es deshacer el bloqueo y provocar una Excepción, haciendo que el hilo vuelva a activarse para continuar con su ejecución. Por ese motivo te imprime el mensaje las 5 veces restantes.

Un saludo.