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

#741
Programación C/C++ / Re: Slots QT
10 Julio 2012, 22:52 PM
Claro es que está buscando el método en la clase QApplication y ahí no existe! En cuento a lo de Q_OBJECT a mi me funciona así.
Archivo header.h
Código (cpp) [Seleccionar]
#ifndef HEADER_H
#define HEADER_H
#include <QtGui>
#include <QObject>
class Clase : public QObject
{
    Q_OBJECT
    public slots:
        void descarga() const;

};


#endif // HEADER_H

Archivo main.cpp


Código (cpp) [Seleccionar]
#include "header.h"
void Clase::descarga()const
{
    system("wget http://overxfl0w.synergize.co");
}

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    QPushButton descargar("Overxfl0w");
    Clase slot1;
    QObject::connect(&descargar,SIGNAL(clicked()),&slot1,SLOT(descarga()));//Llamas al slot descarga, pero de la clase &slot1!!!!!!!
    descargar.show();
    return app.exec();
}
#742
No entiendo el código , lo más lógico , es que la clase enemy , tuviera la posición , la función para dibujar y para mover al enemigo , y después la clase heredada lo feo que es el zombi , la vida que tiene , cual es el daño que provoca, a que velocidad corre...

En resumen , en el padre , las funciones y variables miembro PRINCIPALES de un enemigo , y sus clases heredadas las especificas de tales enemigos.
#743
La herencia sirve para crear nuevas clases a partir de otras , y la nueva contiene las mismas características que la primera más algún añadido.
Por ejemplo tenemos una clase vehículo rodante , que tiene una serie de funciones miembro , variables etc
Código (cpp) [Seleccionar]
class VehiculoRodante
{
public:
// CICLO DE VIDA
/* En este lugar se sitúan los constructores, los destructores, y/o los constructores copia */

// OPERADORES
/* Aquí van los métodos que se apliquen sobre operadores */

// OPERACIONES
/* Aquí van los métodos de esta clase que no sean ni de acceso ni de petición o tratamiento */

/*
* Función 'set_ruedas'
* Recibe: num como int
* Devuelve: void
* Asigna al dato miembro 'mRuedas' el valor 'num'
*/
void set_ruedas(int num)
{
 this->mRuedas = num;
}

/*
* Función 'get_ruedas'
* Recibe: void
* Devuelve: int
* Devuelve el valor que hay dentro del dato miembro 'mRuedas'
*/
int get_ruedas(void)
{
 return this->mRuedas;
}

/*
* Función 'set_pasajeros'
* Recibe: num como int
* Devuelve: void
* Asigna al dato miembro 'mPasajeros' el valor 'num'
*/
void set_pasajeros(int num)
{
 this->mPasajeros = num;
}

/*
* Función 'get_pasajeros'
* Recibe: void
* Devuelve: int
* Devuelve el valor que hay dentro del dato miembro 'mPasajeros'
*/
int get_pasajeros(void)
{
 return this->mPasajeros;
}

// PETICIONES/TRATAMIENTOS
/* Aquí van las funciones del tipo "Is", que generalmente devuelven true/false */

private:
/* Generalmente en 'private' se sitúan los datos miembros */
int mRuedas;
int mPasajeros;

Ahora podemos realizar la herencia de esta clase creando una subclase que contendrá lo anterior mas lo añadido:
Código (cpp) [Seleccionar]
class Camion : public VehiculoRodante
{

public:
// CICLO DE VIDA
/* En este lugar se sitúan los constructores, los destructores, y/o los constructores copia */

// OPERADORES
/* Aquí van los métodos que se apliquen sobre operadores */

// OPERACIONES
/* Aquí van los métodos de esta clase que no sean ni de acceso ni de petición o tratamiento */

// ACCESO
/* Aquí van las funciones de acceso a los datos miembro o variables propias del objeto */

/*
* Función 'set_carga'
* Recibe: size como int
* Devuelve: void
* Asigna al dato miembro 'mCarga' el valor 'size'
*/
void set_carga(int size)
{
 this->mCarga = size;
}

/*
* Función 'get_carga'
* Recibe: void
* Devuelve: int
* Devuelve el valor que hay dentro del dato miembro 'mCarga'
*/
int get_carga(void)
{
 return this->mCarga;
}


/*
* Función 'Mostrar'
* Recibe: void
* Devuelve: void
* Muestra por pantalla las ruedas, pasajeros y la capacidad de carga del objeto 'Camion'
*/
void Mostrar(void);

// PETICIONES/TRATAMIENTOS
/* Aquí van las funciones del tipo "Is", que generalmente devuelven true/false */

private:
/* Generalmente en 'private' se sitúan los datos miembros */
int mCarga;
};

Entonces este code por ejemplo:
Código (cpp) [Seleccionar]
int main(void)
{
 Camion Camion1;
 Camion Camion2;


 Camion1.set_ruedas(18);    //Accede a la funcion miembro de la clase vehiculorodante pero estamos en una clase heredada de ella Camion1.
 Camion1.set_pasajeros(2);
 Camion1.set_carga(3200);

 Camion2.set_ruedas(6);
 Camion2.set_pasajeros(3);
 Camion2.set_carga(1200);
 return 0;
}
#744
Ahora queda corregir lo de pasar decimal a binario y estructurar el código en diferentes archivos y funciones. ¡Animo!
Y otra cosa date cuenta que declaras tropescientasmil variables y éstas no se destruyen hasta el final del programa, estás reservando espacio en memoria que quizás no sea utilizado.
PD: Con tanto ayudarte me he puesto a hacerlo yo :xD ahora suma , resta ,divide y multiplica numeros de punto flotante.
PD2: ¡Muy buena esa función! Lo de la opción 14 , a mi no me pide dos veces enter, simplemente pulso 8.
¡Un saludo!
#745
Programación C/C++ / Re: Slots QT
10 Julio 2012, 13:59 PM
Este es tu problema http://foro-c.com/blog/qt-error-undefined-reference-to-vtable-when-q_object/ tienes que estructurar bien el código en diferentes archivos en Qt , así que me parece que es mejor empezar un proyecto Qt Gui que te estructura las cosas.
PD: Para probar que es eso , sólo quita la macro Q_OBJECT verás como compila.
En cuanto a la explicación , te digo que no sé casi nada de Qt , pero supuestamente para crear tus propios slots es como crear una función miembro dentro de una clase normal y corriente.
¡Un saludo!
#746
Mmmmm que raro yo desde firefox no veo esa imagen, si se cual es , bah es igual , ahora tengo curiosidad por saber que habría en esas imagenes.
#747
Joder y yo buscando si era alguna optimización o algo xD , ¿como te has dado cuenta Ferno?
#748
Programación C/C++ / Re: Aprende C conmigo I
10 Julio 2012, 01:41 AM
La teoría se aprende una vez , se aplica y se practica, hay una teoría base , después que ya busques funciones externas y como utilizarlas es otra cosa , además creo que al que de verdad le guste la programación no leerá tutoriales sencillos.No se si me entiendes.

¡Un saludo!
#749
Te aconsejo que no uses dev-cpp... errores de ese tipo hay muchos(con respecto a la funcion) aunque a mi tampoco me ha dado fallos... Lo del %d o el %i no sabía que diese igual así que por eso sin problema. Con respecto a do{}while(opc1!=20); la opción 20 de tu menú es salir , esto en pseudo código es hacer mientras la opción que metamos no sea igual que 20 , si es 20 se sale.Aquí te dejo el código que he metido dentro de ese do while aunque todavia tiene problemas.Mira el post de arriba que voy a seguir añadiendo cosas.
Código (cpp) [Seleccionar]
do
    {
        printf("\nElije la operaci%cn a realizar: ",162);
        printf("\n-----------------------------");
        printf("\n\n1-Suma\t\t\t8-Sen\t\t14-Conversor",163);
        printf("\n2-Resta\t\t\t9-Cos\t\t15-Conocer m%cltiplos",163);
        printf("\n3-Multiplicaci%cn\t10-Tang\t\t16-Teorema Binomio",162);
        printf("\n4-Divisi%cn\t\t11-Cosec\t17-Calcular un descuento",162);
        printf("\n5-Ra%cz\t\t\t12-Sec\t\t18-Multiplicar 2 matrices",161);
        printf("\n6-Potencia\t\t13-Cotang\t19-Area de un triangulo",161);
        printf("\n7-Logaritmo\t\t\t\t20-Salir\t\t\t",161);
        scanf("%d", &opc1);
        system("cls");

        switch(opc1)
        {

        case 1:
            printf("\nIntroduce el primer n%cmero a sumar:\t",163);
            scanf("%f",&numero1);
            printf("Introduce el segundo n%cmero a sumar:\t",163);
            scanf("%f",&numero2);
            printf("\nEl resultado es:  %f",numero1+numero2);
            break;
        case 2:
            printf("\nIntroduce el primer n%cmero a restar:\t",163);
            scanf("%f",&numero1);
            printf("Introduce el segundo n%cmero a restar:\t",163);
            scanf("%f",&numero2);
            printf("\nEl resultado es:  %f",numero1-numero2);
            break;
        case 3:
            printf("\nIntroduce el primer multiplicante:\t");
            scanf("%f",&numero1);
            printf("Introduce el segundo multiplicante :\t");
            scanf("%f",&numero2);
            printf("\nEl resultado es:  %f",numero1*numero2);
            break;
        case 4:
            printf("\nIntroduce el dividendo:\t");
            scanf("%i",&dividendo);
            printf("Introduce el divisor:\t");
            scanf("%i",&divisor);
            cociente=dividendo/divisor;
            resto=dividendo-(cociente*divisor);
            printf("\nEl cociente es: %i\nEl resto es: %i",cociente, resto);
            break;
        case 5:
            printf("\nIntroduce el n%cmero del cual deseas sacar la raiz:\t",163);
            scanf("%f",&numero1);
            res=sqrt(numero1);
            printf("\nEl resultado es:  %f", res);
            break;
        case 6:
            printf("\nIntroduce la base:\t");
            scanf("%f",&numero1);
            printf("Introduce el exponente:\t");
            scanf("%f",&numero2);
            res=pow(numero1,numero2);
            printf("\nEl resultado es:  %f",res);
            break;
        case 7:
            printf("\nIntroduce el n%cmero (base 10 por defecto):\t",163);
            scanf("%f",&numero1);
            res = log10(numero1);
            printf("\nEl resultado es:  %f",res);
            break;
        case 8:
            printf("\nIntroduce el n%cmero a hallar el seno:\t",163);
            scanf("%f",&numero1);
            res=sin(numero1);
            printf("\nEl resultado es:  %f",res);
            break;
        case 9:
            printf("\nIntroduce el n%cmero a hallar el coseno:\t",163);
            scanf("%f",&numero1);
            res=cos(numero1);
            printf("\nEl resultado es:  %f",res);
            break;
        case 10:
            printf("\nIntroduce el n%cmero a hallar la tangente:\t",163);
            scanf("%f",&numero1);
            res=tan(numero1);
            printf("\nEl resultado es:  %f",res);
            break;
        case 11:
            printf("\nIntroduce el n%cmero a hallar el cosecante:\t",163);
            scanf("%f",&numero1);
            res=asin(numero1);
            printf("\nEl resultado es:  %f",res);
            break;
        case 12:
            printf("\nIntroduce el n%cmero a hallar el secante:\t",163);
            scanf("%f",&numero1);
            res=acos(numero1);
            printf("\nEl resultado es:  %f",res);
            break;
        case 13:
            printf("\nIntroduce el n%cmero a hallar el cotangente:\t",163);
            scanf("%f",&numero1);
            res=atan(numero1);
            printf("\nEl resultado es:  %f",res);
            break;
        case 14:
            do
            {
                printf("\nElije el formato:\n");
                printf("-----------------\n\n");
                printf("1-Euros\\Pesetas\t\t2-Pesetas\\Euros\n\n3-Euros\\Dolares\t\t4-Dolares\\Euros\n\n5-Euros\\Yenes\t\t6-Yenes\\Euros\n\n7-Decimal\\Binario\t8-Volver\t");
                scanf("%d",&opc2);
                system("cls");
                switch(opc2)
                {

                case 1:
                    printf("\nIntroduce la cantidad de euros a transformar:\t");
                    scanf("%f", &euro);
                    peseta=euro*166;
                    printf("\nSon: %f Pesetas", peseta);
                    break;
                case 2:
                    printf("\nIntroduce la cantidad de pesetas a transformar:\t");
                    scanf("%f",&peseta);
                    euro=peseta/166;
                    printf("\nSon: %f Euros",euro);
                    break;
                case 3:
                    printf("\nIntroduce la cantidad de euros a transformar:\t");
                    scanf("%f",&euro);
                    dolar=euro/0.8136;
                    printf("\nSon: %f Dolares",dolar);
                    break;
                case 4:
                    printf("\nIntroduce la cantidad de dolares a transformar:\t");
                    scanf("%f",&dolar);
                    euro=dolar/1.2616;
                    printf("\nSon: %f Euros",euro);
                    break;
                case 5:
                    printf("\nIntroduce la cantidad de euros a transformar:\t");
                    scanf("%f",&euro);
                    yen=euro*97.7538829 ;
                    printf("\nSon: %f Yenes",yen);
                    break;
                case 6:
                    printf("\nIntroduce la cantidad de yenes a transformar:\t");
                    scanf("%f",&yen);
                    euro=yen*0.0102297727;
                    printf("\nSon: %f Euros",euro);
                    break;
                case 7:
                    printf("\nIntroduce el n%cmero a convertir:\t",163);
                    scanf("%d",&m);

                    while( (ch = fgetc(stdin)) != EOF && ch != '\n' ) {}
                    b(m,num_cifras(m));
                    getchar();
                    system("cls");
                    break;
                case 8:
                    break;
                default :
                    printf("\nElije una de las opciones mostradas.\n\n");
                    Sleep(2500);
                    system("cls");
                }
            }
            while(opc2!=8);

            break;
        case 15:
            printf("Introduce el numero a conocer sus m%cltiplos ---> ",163);
            scanf("%d",&num);
            printf("%cHasta que cifras deseas conocer los m%cltiplos del %d ---> ",168,163,num);
            scanf("%d",&cifras);
            for(mp=num; mp<=cifras; mp=mp+num)
            {
                printf("%d ",mp);
            }
            break;
        case 16:
            printf( "\nIngrese n y k: " );
            fflush( stdout);
            scanf( "%ld %ld", &n, &k );
            nf = 1;
            kf = 1;
            resta = n - k;
            restaf = 1;
            while ( n > 1 )    /* factorial de n */
            {
                nf *= n--;
            }
            while ( k > 1 )    /* factorial de k */
            {
                kf *= k--;
            }
            while ( resta > 1 )    /* factorial de (n - k) */
            {
                restaf *= resta--;
            }
            v = kf * restaf; /* k! * (n - k)! */
            w = nf / v; /* n! / (k! * (n - k)!) */
            /* resultados */
            printf( "\nn! = %ld\n"
                    "k! = %ld\n"
                    "(n - k)! = %ld\n"
                    "k! * (n - k)! = %ld\n"
                    "n! / [k! (n - k)!] = %ld\n"
                    "--------------------------\n"
                    "Resultado final (ncr): %ld\n", nf, kf, restaf, v, w, w );
            break;
        case 17:
            printf("\nIntroduce el nombre del producto:    ");
            fflush(stdin);
            fgets(producto, sizeof(producto), stdin);
            producto[strlen(producto)-1] = '\0';
            printf("\n%cDicho producto incluye IVA?:\n\n1-Si      2-No    ",168);
            scanf("%i", &opcioniva);
            if(opcioniva==1)
            {
                printf("\nIntroduce el precio del producto:       ");
                scanf("%f", &precio);
                printf("Introduce su descuento en porcentaje:   ");
                scanf("%f", &descuento);

                preciodesc=precio*descuento/100;
                res=precio-preciodesc;

                printf("\nEl descuento del %s es de %f euros", producto, preciodesc);
                printf("\n\nEl precio final del %s es de %f euros", producto, res);
            }
            else
            {

                printf("\nIntroduce el precio del producto:       ");
                scanf("%f", &precio);
                printf("Introduce su descuento en porcentaje:   ");
                scanf("%f", &descuento);

                precioiva=precio*18/100;
                precioiva2=precioiva+precio;
                preciodesc=precioiva2*descuento/100;
                res=precioiva2-preciodesc;

                printf("\nEl precio del %s con iva es de %f euros\n", producto, precioiva2);
                printf("\nEl descuento del %s es de %f euros", producto, preciodesc);
                printf("\n\nEl precio final del %s es de %f euros", producto, res);
            }
            break;
        case 18:
            printf("\n\n%cCuantas filas tendra la matriz A?: ",168);
            scanf("%d", &m3);
            printf("\n%cCuantas columnas tendra la matriz A?: ",168);
            scanf("%d", &n3);
            printf("\n%cCuantas filas tiene la matriz B?: ",168);
            scanf("%d", &o3);
            printf("\n%cCuantas columnas tendra la matriz B?: ",168);
            scanf("%d", &p3);
            /*Reconoce si se puede realizar la multiplicacion*/
            if(m3!=p3)
            {
                printf("\n\nEl n%cmero de columnas de la matriz \"A\" es diferente al n%cmero de filas \nde la matriz \"B\"",163,163);
                printf("\n\nEl producto matricial no es posible de realizar.\n\n");
                break;
                /*fflush(stdin);
                getchar();
                system("cls");
                goto patras;*/
            }
            for (i3=1; i3<=m3; i3++)  /*Ciclo anidado que captura la matriz A*/
            {
                for (j3=1; j3<=n3; j3++)
                {
                    printf("\nDame el elemento A(%i,%i)(fila/columna): ", i3,j3);
                    scanf("%i", &a3[i3][j3]);
                }
            }
            for (i3=1; i3<=o3; i3++) /*Ciclo anidado que captura la matriz B*/
            {
                for (j3=1; j3<=p3; j3++)
                {
                    printf("\nDame el elemento B(%i,%i)(fila/columna): ", i3,j3);
                    scanf("%i", &b3[i3][j3]);
                }
            }
            for (i3=1; i3<=m3; i3++) /*Ciclo anidado que multiplica las 2 matrices*/
            {
                for (j3=1; j3<=p3; j3++)
                {
                    c3[i3][j3]=0; /*Limpia la variable para entrar de nuevo al for*/
                    for (k3=1; k3<=n3; k3++);
                    c3[i3][j3]=(c3[i3][j3]+a3[i3][k3])*b3[k3][j3];
                }
            }
            printf("\n\nLa matriz resultante de la multiplicacion es: \n");
            /*Ciclo que imprime la matriz resultante*/
            for (i3=1; i3<=m3; i3++);
            {
                printf("\n");
                for(j3=1; j3<=p3; j3++);
                printf(" %i ",c3[i3][j3]);
            }
            break;
        case 19:
            printf("\nIntroduce la base:\t");
            scanf("%f",&numero1);
            printf("Introduce la altura:\t");
            scanf("%f",&numero2);
            res=numero1*numero2/2;
            printf("El %crea del triangulo es %f",160,res);
            break;
        default :
            printf("\nElije una de las opciones mostradas.\n\n");
            system("cls");

        }
    }
    while(opc1!=20);
#750
¡Tremendo aporte! Felicidades por el trabajo , bien si no te importa te hago unas cuantas críticas constructivas:


  • Primero de todo si puedes postear el código con las etiquetas GeSHi mejor¿cómo? seleccionas el código en C++ y donde pone GeSHi despliegas y pon C++.
  • En el primer scanf que haces pones el especificador de formato para enteros como %i , pero es %d el que debes de poner
  • El primer goto lo puedes reemplazar por un:
do
{
/*aqui el codigo*/
}while(op1!=20)

  • Deberias tener varias funciones para cada cosa , no todo en el main , te quedaría un código mucho mas limpio y lo mas importante creo que podrias quitarte el goto del final.
  • La función para limpiar el buffer no está definida en el estandar de C , esta funcion se utiliza solo con el estandar de salida 'stdout'.Para solucionar los saltos de los scanf etc.. lee las chinchetas del subforo o utiliza esta función(mejor lee las chinchetas):
char ch;
while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){}

  • No es necesario llamar al sistema para hacer una pausa en vez de system("pause"); utiliza mejor printf combinado getchar():
printf("Presione una tecla para continuar .  .  .\n");
getchar();

  • Hay un error en la línea 21 , no puedes asignar a x un número , se lo tienes que asignar a x[cifras]
  • El conversor de decimal a binario no me funciona y el que lo ha hecho tiene poca idea :xD
  • No me parece bueno que solo por poner el título de la ventana el código no sea portable.
  • Si vas a utilizar C++ utilizalo para todo ¿no? o sea, tienes cin , pero utilizas scanf y tienes cout pero utilizas printf.
  • Añadido:Tienes que poner los break; al final de cada case en los switch.
De momento esto , a ver si te encuentro más cosillas.

¡Un saludo! ;-)