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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 ... 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 [86] 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
851  Programación / Programación C/C++ / Re: Qué error tengo en mi programa ? en: 22 Diciembre 2018, 02:56 am
El código del programa ponlo entre etiquetas de código GeSHi, encima del cuadro de texto.

El <while> divide cada número hasta que los dos son 0. Entonces el resultado es 0 * 0 = 0. Además usas un contador <i> que no tiene ninguna utilidad.Si el número tiene que tener dos cifras obligatoriamente, sólo necesitas dividir el número entre 10 una vez.
En un caso general con cualquier número de cifras tienes que hacer un bucle como el que tienes pero fíjate que la primera cifra de cada número se guarda en r1 y r2 respectivamente, no en n1 y n2 (estos valdrán 0). Suerte :-X

PD: Los problemas relacionados con este tipo de ejercicios se solucionan cogiendo un papel y un boli o pensando lo que estás haciendo, no poniendo código sin pensar...
852  Programación / Programación C/C++ / Re: Sumar los elementos de un vector con DyV en: 17 Diciembre 2018, 06:06 am
Para que funcione tienes que distinguir 3 casos (te falta 1):
- Si inicio y fin son iguales -> return v[inicio]
- Si la diferencia entre inicio y fin es 1 -> return sumaDyV(v, inicio, inicio) + sumaDyV(v, fin, fin)
- Si la diferencia es mayor que 1 -> return sumaDyV(v, inicio, fin/2) + return sumaDyV(v, fin/2+1, fin)
Suerte. :-X
853  Programación / Programación C/C++ / Re: Ayuda con un programa en borland c++ en: 16 Diciembre 2018, 23:20 pm
Si te manda errores, la pregunta correcta no es "qué le falta?" sino "qué le falla". Si tienes un error especifica cual es el problema que tienes, puedes copiar el mensaje de error que te sale o si el programa compila decir en que momento el programa falla.
Sino dudo que alguien vaya a mirar todo ese código para buscar un fallo que no sabemos ni de qué tipo es.  :-X

Y para que podamos ver mejor el programa, modifica el primer mensaje y añade las etiquetas de código GeSHi.
854  Programación / Programación C/C++ / Re: Ayuda con un programa en borland c++ en: 16 Diciembre 2018, 22:55 pm
Citar

esto es lo que he avanzado pero no se que mas le falta

Si tienes que hacer un programa que haga una serie de cosas que has comentado y tienes un código hecho simplemente mira que ese código haga todo lo que tiene que hacer tu programa. Si hay una cosa que no hace, eso es lo que te falta... :rolleyes:
Y el código de los programas entre etiquetas de Código GeSHi. Suerte. :-X
855  Programación / Programación C/C++ / Usar varios templates en una misma función en: 14 Diciembre 2018, 21:44 pm
Mi pregunta es si es posible definir una función con varios <templates>. Para que se entienda mejor os pongo un ejemplo sencillo, imaginad tener una función que devuelve el tamaño de una pila <stack> de cualquier tipo (sí, ya se que eso ya existe pero para hacer sencillo el ejemplo):
Código
  1. template <class T>
  2. size_t stackSize(const stack<T> &s){
  3.    return s.size();
  4. }

Hasta aquí todo bien pero si queremos hacer una función que reciba dos pilas de distinto tipo y devuelva el tamaño de la más grande... La idea es algo así, pero tendríamos errores de compilación por un conflicto entre el tipo de la primera pila y el de la segunda si no son iguales.
Código
  1. template <class T>
  2. size_t biggestStackSize(const stack<T> &st1, const stack<T> &st2){
  3.    size_t size = st1.size();
  4.    if(st2.size() > size)
  5.        size = st2.size();
  6.    return size;
  7. }
Ya sé que en este caso podría hacerse sin tanta función ni <template> pero es posible hacerlo así definiendo dos <template> distintos?? :huh:
856  Programación / Programación C/C++ / Re: validacion de puntos geograficos, grados, minutos, segundos y comparacion en: 14 Diciembre 2018, 03:21 am
Lo único que los dos primeros condicionales son el mismo...   :rolleyes:
Me he dado cuenta después y aunque lo he añadido al mensaje anterior igual lo he puesto demasiado tarde
857  Programación / Programación C/C++ / Re: validacion de puntos geograficos, grados, minutos, segundos y comparacion en: 14 Diciembre 2018, 03:11 am
se que esto esta mal porque al encontrar la primer condicion que no se cumple ya deberia retornar un false y dejar de verificar las siguientes condiciones

Para dejar de verificar condiciones lo que se suele hacer es incluir que <igual> sea <true> en cada <if>.
Código
  1. bool iguales(punto_geografico p, punto_geografico q){
  2. bool igual=true;
  3. if(igual && (p.latitud.direccion!=q.latitud.direccion || p.longitud.direccion!=q.longitud.direccion))
  4. igual=false;
  5. if(igual && (p.latitud.direccion!=q.latitud.direccion || p.longitud.direccion!=q.longitud.direccion))
  6. igual=false;
  7. // asi con todos
  8. return igual;
  9. }

Sin embargo esto se hace más cuando en vez de <if> tienes un <while> o un <for>. Para un <if> es mejor usando <else>. Así en cuanto se cumpla un <if> el resto se los va a saltar.
Código
  1. bool iguales(punto_geografico p, punto_geografico q){
  2. bool igual=true;
  3. if(p.latitud.direccion!=q.latitud.direccion || p.longitud.direccion!=q.longitud.direccion)
  4. igual=false;
  5. else if(p.latitud.direccion!=q.latitud.direccion || p.longitud.direccion!=q.longitud.direccion)
  6. igual=false;
  7.        else if(p.latitud.grados!=q.latitud.grados || p.longitud.grados!=q.longitud.grados)
  8.                igual=false;
  9. // asi con todos
  10. return igual;
  11. }

Y otra opcion es asignar cada condición dentro de cada <if> a la propia variable <igual> ya que es booleana. En este caso tendrías que hacerlo negándolas, algo así:
Código
  1. bool iguales(punto_geografico p, punto_geografico q){
  2. bool igual=true;
  3. if(igual)
  4. igual= !(p.latitud.direccion!=q.latitud.direccion || p.longitud.direccion!=q.longitud.direccion)
  5.        if(igual)
  6. igual= !(p.latitud.direccion!=q.latitud.direccion || p.longitud.direccion!=q.longitud.direccion)
  7.        if(igual)
  8.                igual= !(p.latitud.grados!=q.latitud.grados || p.longitud.grados!=q.longitud.grados)
  9. // asi con todos
  10. return igual;
  11. }
Un poco raro pero se puede hacer. Puedes elegir la que mejor veas. :-X
PD: Me acabo de dar cuenta de que los dos primeros condicionales son el mismo. :rolleyes:
858  Programación / Programación C/C++ / Re: Problema ejercicio de class - CONSULTA en: 13 Diciembre 2018, 23:10 pm
Hay varios problemas:
- Cuando indicas grado 3, tienes que meter los coeficientes {0,1,2,3}, es decir, 4 coeficientes.
Código
  1. for(int i = 0; i < 3; i++)
Ese bucle se repite 3 veces, no 4. Te faltaría añadir el igual en la comparación, es decir, "i <= 3".
- Cuando introduces coeficientes, introduces el primero y lo guardas. Pero el <while> va en el siguiente orden: primero cambias coeficiente, después pides coeficiente. Entonces el último que ingreses no se va a guardar.
- En el método de sumar tienes que crear un polinomio nuevo de tamaño igual al mayor de los dos polinomios que sumas. En tu método, modificas el primero y la suma solo se hace hasta el grado más alto del primer polinomio, si el segundo es mayor, se pierden esos coeficientes. Debes retornar el nuevo polinomio que has creado que es donde has ido almacenando la suma.

No he mirado más código. Personalmente creo que es mejor guardarlo al revés. En la posición 0, el coeficiente de grado 0, en la posición 1, el coeficiente de grado 1, etc... Es más fácil de imaginar y si quieres añadir un grado más grande, puedes hacerlo sin mover todos los elementos que ya tienes dentro.
Para mostrar un polinomio añade el signo si el coeficiente es negativo, nada y si es positivo añade un "+". Es muy complicado ver bien el polinomio cuando se muestra, si de momento no quieres gastar tiempo en eso añade al menos un espacio entre monomios. Suerte :-X
859  Programación / Programación C/C++ / Re: Consulta - Punteros en: 13 Diciembre 2018, 20:51 pm
Si tienes que buscar el mayor de un array de enteros, es simple:
Código
  1. int BuscaMayor(int *array, int size){
  2.    int mayor = array[0];
  3.    for(int i = 1; i < size; i++)
  4.        if(array[i] > mayor)
  5.            mayor = array[i]
  6.    return mayor;
  7. }
Pero esto es porque para saber si un número es mayor que otro basta con el operador ">". Sin embargo cuando comparas estructuras tú decides que campo indica que objeto es mayor que otro. Entonces ya no sirve usar el operador ">", tienes que usar una función que haga lo mismo que ese operador, es decir, que de dos objetos te diga cual es mayor.
Imagina un stuct de persona, con nombre y edad:
Código
  1. struct Persona{
  2.    string nombre;
  3.    int edad;
  4.    int dni;
  5. };
Nosotros decidimos cuando una persona es mayor que otra, lo más lógico es con la edad, entonces hacemos una función que reciba dos personas y devuelva un entero positivo (1) si el primero es mayor, un entero negativo (-1) si el primero es menor y un 0 si son iguales...
Código
  1. int compararPorEdad(Persona p1, Persona p2){
  2.    int comparacion = 0;
  3.    if(p1.edad > p2.edad)
  4.        comparacion = 1;
  5.    else if(p1.edad < p2.edad)
  6.        comparacion = -1;
  7.    return comparacion;
  8. }

Entonces ahora para buscar el mayor de un array de personas sería algo así:
Código
  1. Persona mayorPersona(Persona *personas, int size){
  2.    Persona mayor = personas[0];
  3.    for(int i = 1; i < size; i++)
  4.        if(compararPersonas(personas[i], mayor) == 1)
  5.            mayor = personas[i];
  6.    return mayor;
  7. }
Aquí en vez de usar el operador ">" hemos tenido que usar la función que hemos creado porque si usas el operador ">" con dos estructuras, el programa no sabe cual es mayor (a no ser que sobrecargues ese operador, que eso lo estudiarás más adelante).

Entonces si tienes más de un criterio de ordenación, por ejemplo quieres que el mayor sea e que tiene el DNI más alto. Entonces tendrías una función como <int compararPorEdad(Persona p1, Persona p2)> pero que será <int compararPorDni(Persona p1, Persona p2)>.

El objetivo es que puedas usar la función <Persona personaMayor(Persona *personas, int size)> con el criterio que quieras. Entonces ese criterio lo pasas como tercer parámetro, pasas la función que compara.
Código
  1. Persona personaMayor(Persona *personas, int size, int (*comparacion)(Persona p1, Persona p2));
Y usas la función <int comparacion(Persona p1, Persona p2)> para comparar cada dos personas del array. Suerte :-X
860  Programación / Programación C/C++ / Re: ordenamieno burbuja en: 13 Diciembre 2018, 00:12 am
El código entre etiquetas GeSHi. Se seleccionan encima del cuadro de texto que aparece cuando escribes un mensaje, donde pone "Código GeSHi".
Después igual podemos ayudarte... :-X
Páginas: 1 ... 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 [86] 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines