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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 ... 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
871  Programación / Programación C/C++ / Re: Dudas sobre el ordenamiento burbuja en listas simples en: 12 Diciembre 2018, 05:24 am
Creo que el segundo código no funciona en una lista vacía porque si esta está vacía la inicialización del <for> sería <i = NULL> y en la condición del <for> (i->sig != NULL) te daría un problema ya que no existe un puntero a siguiente.
En cambio en el primer código con el <if> haces una excepción para cuando esto ocurra. :-X
872  Programación / Programación C/C++ / Re: Cómo eliminar un elemento de un array dinámico - CONSULTA en: 11 Diciembre 2018, 21:32 pm
Si tienes el vector ordenado es más fácil. Piensa que al estar ordenado sólo tienes que comprobar que el nuevo valor que vas a meter no es igual al último elemento del array final.
Si no estuviese ordenado tendrías que revisar todo el array final para ver que el valor que vas a introducir no está ya en el array.
Si el array es dinámico tendrás que hacer algún cálculo para saber el nuevo tamaño.

Entonces recorres el array que tienes con los valores repetidos y para cada elemento, si el array final está vacío o este elemento es distinto al último que has introducido en el array final, entonces lo introduces, sino, pasas al siguiente elemento. Suerte :-X

Ver el código que tienes puede ayudar...
873  Programación / Programación C/C++ / Re: Error al compilar en: 11 Diciembre 2018, 20:46 pm
Primero que tienes que cambiar todas las variables de <int> a <double> como ya te han comentado. Sino vas a perder los decimales de los cálculos.

El problema de compilación que te da puede ser por pasar ese tipo de dato así. Es una cosa que no te puedo decir seguro ya que nunca lo he usado.

Y el primer <for> tiene que empezar desde 0, la diferencia entre "variable" y "variable2" es que una tiene que tener el número de cartas de cada tipo por su valor y la otra tiene que acumular el número de cartas sólo. Por lo que lo puedes hacer todo en un mismo <for>.

Y por último, un código que sea:
Código
  1. bool variable;
  2. if(condicion)
  3.    variable = true;
  4. else
  5.    variable = false;
Es mejor suponer un valor inicial y solo lo cambias una vez:
Código
  1. bool variable = false;
  2. if(condicion)
  3.    variable = true;
Pero esto último es simplemente como recomendación, de la otra forma funciona igual. Suerte. :-X
PD: No cites un mensaje para responder, dale arriba del todo o abajo del todo donde pone "responder" y no agregues citas a no ser que sea para comentar algo específico de lo que ha dicho otra persona.
874  Programación / Programación C/C++ / Re: Error lógico cuando compilo ejercicio - CONSULTA en: 11 Diciembre 2018, 00:50 am
Línea 8: Declaras un puntero. Un puntero simplemente apunta, no es más.
Línea 11: Reservas memoria dinámica para n elementos del array. Ese espacio de memoria está apuntado por x. Cuando tienes memoria dinámica siempre tienes que tener un puntero apuntando ahí. Si el puntero apunta a otro sitio, pierdes esa memoria.
Línea 12-14: Guardas n valores aleatorios [0,199] en el array.

La función <Redimensionar()> coge el puntero que tenías reserva memoria adicional y añade 0 a ese espacio adicional. Antes de eso copias los valores de <x> (<p> en la función) en <aux> (el nuevo puntero) esto se hace en líneas 35-37. Si antes de llamar a la función borras la memoria de <x> cuando llegas a la función, <p> apunta a basura porque has borrado a lo que apuntaba originalmente.

Sin embargo aunque el programa ya funciona no estás liberando la memoria. Tienes que liberar la memoria en dos ocasiones:
- Primero, en la función. <x> apunta a un espacio de memoria pero después de llamar a la función va a apuntar a otro, va a apuntar al mismo sitio que <aux>. Entonces donde apuntaba <x> tienes que liberarlo antes de que acabe la función, pero después de que se ejecuten las líneas 35-37 para que no se copie basura.
- Segundo, al finalizar el programa. En la función has reservado memoria para <aux>. Luego has hecho que <x> apunte a ese espacio de memoria. Pero antes de que acabe el programa tienes que liberar el espacio a donde apunta <x>.

PD: Un array unidimensional se libera sin bucle <for>:
Código
  1. delete [] array;

875  Programación / Programación C/C++ / Re: Ayuda con programa en: 10 Diciembre 2018, 21:25 pm
Primero si no es para citar algo concreto de otro mensaje no incluyas una cita a cada respuesta porque cada mensaje se hace larguísimo. Además de eso un tema se crea para resolver una duda específica, no para hacer un programa entero. Ya sé que es mucho más cómodo abrir un tema y que esté activo hasta que tu programa funcione completamente pero no es así. Ese programa cada vez es más largo y no vamos a estar revisándolo entero. Cuando tengas una duda, específica la duda y manda el código necesario para resolverla, a veces será el programa entero, otras veces sólo será necesario mandar una función o un bloque. Si hace falta más código ya te lo diremos.

Segundo tu función de generar un número aleatorio en un sitio tiene una definición y en otro sitio otra. Te recomiendo que si la función se encarga de generar números aleatorios, tenga dos parámetros que indiquen el mínimo y el máximo para determinar el rango.Así la función será más polivalente que si simplemente cogemos un trozo del <main> lo metemos en una función y lo dejamos igual, hay que aprovechar las ventajas de las funciones.

Un prototipo que yo creo que estaría bastante bien para generar números aleatorios puede ser:
Código
  1. int generarNumeroAleatorio(int minimo, int maximo);
Si no quieres que tu función sea así y tenga otra definición, es tu decisión pero fíjate en lo que le pasas como parámetros ya que primero has puesto un código donde le pasas un entero y luego en el programa entero tiene otro prototipo sin parámetros.

Precisamente ahí si te da un problema al usar la función eso es lo que tienes que mandar para que te ayudemos, la función y explicar el error que te da, no decir que te da algún error y soltar 357 líneas de código.
Hay que tener un poco de consideración en lo que se pide, no estamos aquí para salvarte de cada problema que tengas. Aquí el que más tiene que poner de su parte eres tú, no nosotros.

En otro tema posterior a este he comentado como usar <typedef>, me había confundido así que ahora voy a modificar ese mensaje y de momento te dejo la respuesta correcta por aquí:
Código
  1. typedef int array10[10];
  2. int main(){
  3.    array10 miArray;
  4.    for(int i = 0; i < 10; i++)
  5.        miArray[i] = i;
  6. }
Ahí tienes como se usa el <typedef> para lo que tú querías hacer y un ejemplo de uso para que veas como se usan los índices, no tiene mucha complicación eso.

Por mi parte si tienes una duda concreta en un trozo de código concreto igual puedo ayudarte, revisar 357 líneas de código para solucionar todos tus problemas es algo que no voy a hacer. Suerte. :-X

PD: Tampoco recortes el programa y mandes lo mismo con menos código. Dudas concretas es preguntar por qué te sale un error o cómo puedes hacer tal cosa y te podremos dar una idea ya sea un ejemplo de código o una explicación en pseudocódigo para que tú después te encargues de implementarlo.
876  Programación / Programación C/C++ / Re: Como hacer array en: 10 Diciembre 2018, 20:14 pm
Nunca lo he probado con un array pero por similitud diría que es así:
Código
  1. typedef int[5] array5;
  2. int main(){
  3.    array5 miArray;
  4. }



Me he dado cuenta de que ese código no es correcto. Dejo de momento los dos códigos para que se vea la diferencia por si alguien se ha quedado con el primero que he puesto. Mañana si eso lo modifico para dejar sólo el correcto :-X El código correcto es este:
Código
  1. typedef int array5[5];
  2. int main(){
  3.    array5 miArray;
  4. }
Para indexar se hace normal, es decir, miArray[num] con num = {0,1,2,3,4}. Suerte :-X
877  Programación / Programación C/C++ / Re: restricción de fecha enc++ en: 10 Diciembre 2018, 18:44 pm
Exacto, además me estaba dando cuenta también de que usar dos arrays para solo cambiar un valor de podía cambiar ese valor en la condición, pero veo que te has adelantado  :xD
878  Programación / Programación C/C++ / Re: restricción de fecha enc++ en: 10 Diciembre 2018, 18:30 pm
Bastante más sencillo al usar los arrays para los días, es cierto. Lo único como he comentado antes, cambiando la condición de que sea bisiesto, ya que ese código no es cierto.
879  Programación / Programación C/C++ / Re: restricción de fecha enc++ en: 10 Diciembre 2018, 18:14 pm
Citar
case 2: if(fecha.anyo%4==0)
Un año no es bisiesto porque sea divisible por 4 únicamente.

Citar
Desde un enfoque algorítmico, se consideran las proposiciones o enunciados lógicos siguientes:

p: Es divisible entre 4
q: Es divisible entre 100
r: Es divisible entre 400
Entonces se utiliza la fórmula lógica <p && (!q || r)> para establecer si un año dado es bisiesto: es bisiesto si es divisible entre cuatro y (no es divisible entre 100 ó es divisible entre 400).
880  Programación / Programación C/C++ / Re: restricción de fecha enc++ en: 10 Diciembre 2018, 18:10 pm
Te recomiendo encapsular todas esas comprobaciones en una o varias funciones para tener un código más legible.
Código
  1. bool fechaValida(const int day, const int month, const int year){
  2.    bool valido = true;
  3.    int limiteFebrero = diasFebrero(year); // devuelve 29 si es bisiesto, 28 si no lo es
  4.    if(month < 1 || month > 12 || day < 1 || day > 31) // condiciones que no dependen de nada, se salen de los limites
  5.        valido = false;
  6.    else if(month == 2 && day > limiteFebrero) // condiciones que dependen de que que sea bisiesto
  7.        valido = false;
  8.    else if(mes30Dias(month) && day == 31) //condiciones para los meses de 30 dias
  9.        valido = false;
  10.    return valido;
  11. }

Usando <if else> que es más recomendable que usar <break> no tienes que comprobar una condición que ya se ha evaluado antes ya que si entra en un <else if> es porque no ha entrado en un <if> anterior.

Te he dejado un ejemplo de como podría quedar mejor encapsulado. Yo creo que así es más legible. Además esa es una función que puedes usar siempre que trabajes con fechas por lo que viene bien tenerlo en una función. Ahora te queda completar las funciones que he usado ahí y que no están implementadas.

Creo que no me he dejado ninguna comprobación. De ser así podéis comentármelo.  :-X
Páginas: 1 ... 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