|
741
|
Programación / Programación C/C++ / Re: Slots QT
|
en: 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 #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 #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
|
Programación / Programación C/C++ / Re: Preguntas sobre la herencias.
|
en: 10 Julio 2012, 16:11 pm
|
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
|
Programación / Programación C/C++ / Re: Preguntas sobre la herencias.
|
en: 10 Julio 2012, 15:39 pm
|
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 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: 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: 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
|
Programación / Programación C/C++ / Re: [Source] Calculadora Calc Don 1.0
|
en: 10 Julio 2012, 14:05 pm
|
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 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 / Programación C/C++ / Re: Slots QT
|
en: 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!
|
|
|
748
|
Programación / Programación C/C++ / Re: Aprende C conmigo I
|
en: 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
|
Programación / Programación C/C++ / Re: [Source] Calculadora Calc Don 1.0
|
en: 10 Julio 2012, 01:22 am
|
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. 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",÷ndo); 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",¥); 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
|
Programación / Programación C/C++ / Re: [Source] Calculadora Calc Don 1.0
|
en: 10 Julio 2012, 00:07 am
|
¡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");
- 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
- 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!
|
|
|
|
|
|
|