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 ... 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 ... 102
371  Programación / Programación C/C++ / Re: ¿Como guardar datos de pila en un archivo de texto? en: 3 Mayo 2020, 18:40 pm
Hay muchas formas de hacerlo y dependerán de las funciones, las estructuras,... que quieras usar. Básicamente dependerá de tu algoritmo.
También tendrás que tener en cuenta ciertas precondiciones como si conoces la cantidad de dígitos diferentes existentes o si todos los dígitos iguales aparecerán seguidos,...
Puedes usar una estructura para guardar un valor y sus repeticiones. Crear un array de esta estructura y guardar todos los valores, ordenar dicho array y después crear la nueva cadena a partir de esos resultados.
Puedes usar una cola con prioridad (puedes usar la de la STL de C++). Y es altamente recomendable no solo para esto sino para todos tus programas que tengas en claro tu lenguaje de programación. En C++ no se usa malloc/free sino new/delete. Tienes los strings para facilitarte el trabajo con cadenas y tienes las clases en vez de las estructuras.
372  Programación / Programación C/C++ / Re: ¿Como guardar datos de pila en un archivo de texto? en: 3 Mayo 2020, 02:45 am
Yo lo he probado y me ha guardado todo correctamente. El siguiente código debería funcionar:
Código
  1. Nodo *aux = superior;
  2. while(aux != NULL){
  3.  archivo << aux->indice.id << " | " << aux->indice.NumeroCompras << endl;
  4.  aux = aux->sigue;
  5. }
Cómo has sobrecargado el operador <<??
373  Programación / Programación C/C++ / Re: ¿Como guardar datos de pila en un archivo de texto? en: 3 Mayo 2020, 01:49 am
Primero comprueba que los datos se guardan correctamente en la pila. Si es así, ahora comprueba que no estés sobrescribiendo la primera línea de tu fichero ya que al ser una pila, se ve que solo muestra el primer valor insertado que es el último en salir.

PD: El código es bastante mejorable. Hay una mezcla de C con C++...
374  Programación / Programación C/C++ / Re: c++ ayuda porfa soy nuevo en progra... en: 3 Mayo 2020, 01:17 am
No se hacen tareas... Tienes que intentar hacer algo y ponerlo. El pseudocódigo es muy abierto por lo que cada quien lo escribe de una manera diferente. Al final no es más que poner los pasos que tiene que hacer tu algoritmo para obtener el resultado esperado.
Te pongo un ejemplo de pseudocódigo que muestra los números pares del 1 al 100:
Código:
INICIO
  PARA i := 1 HASTA 100 INCREMENTO 1 HACER
    SI i % 2 = 0 ENTONCES
      MOSTRAR i
    FIN SI
  FIN PARA
FIN
Como ya digo hay muchas formas de escribir pseudocódigo. Lo importante es que los pasos sean correctos.
Supongo que sabes cómo se sabe si un número es primo, por si acaso, un número primo es aquel número mayor que 1 que solo es divisible por sí mismo y la unidad (1). Otra forma de pensarlo y hacerlo un poco más fácil: un número n es primo si (n > 1) y solo es divisible por un elemento del conjunto {1, 2, ..., n-1}.

El tema del diagrama de flujo es más complejo para hacerlo aquí a no ser que uses algún programa y lo exportes como imagen para poner un link a la imagen... Te recomiendo que intentes el pseudocódigo de ambos y cuando tengas el pseudocódigo del segundo, te será muy fácil pasarlo a un diagrama de flujo.
Suerte.
375  Programación / Programación C/C++ / Re: [ALGEBRA DE MATRICES] Matriz triangular superior desdendiente en C. en: 3 Mayo 2020, 00:40 am
Chavalote! Este no te lo puedo bendecir... Tiene un sutil fallo. Te digo cual?
Prueba a evaluar la matriz de 1 fila y 1 columna...
El resultado es indeterminado... porque entonces accedes a una posicion tal como A[0][-1]  . Si acierta, dependera del compilador, o de la conjunci'on de los astros...
Que pasa? que las matrices de 1 fila y 1 columna no son matrices???  Prueba [[1]]!  :laugh: :laugh: :laugh:
Es cierto. No me di cuenta de eso en su momento. Habría que tratar las matrices de orden 1 como un caso aparte:
Código
  1. return (N == 1 || (i == N && !A[N-1][N-2]));
Aunque claramente no es la mejor solución... :laugh:

;-) ;-) ;-)  Bravo... Correcta... pero aun redundante... :rolleyes: ya que en
Código
  1. j=(j<i)||A[i][j-1]
es equivalente a
Código
  1. j=(j<i)
El problema fue que me centré en usar A(i, j-1) y entonces comprobé que no era condición suficiente y le añadí el (j < i) pero no vi que ésta sí era suficiente por sí sola...  :rolleyes:
Bueno, me quedo con que me he quedado cerca... Este era el de calentamiento, no? :xD
376  Programación / Java / Re: EJERCICIO POO en: 3 Mayo 2020, 00:02 am
De verdad piensas que llegando aquí y soltando un copia-pega de tu ejercicio, alguien te lo va a dar resuelto??
Empieza a hacer el ejercicio y saca todo lo que puedas por ti mismo. Cuando no sepas avanzar más, revisa tus apuntes u otros materiales (pdfs, vídeos,...) que puedes encontrar en Internet. Y cuando llegues a un problema que no puedas solucionar ni usando todos esos materiales de los que puedes disponer, coloca el/los fragmento/s de código necesarios (entre etiquetas de Código GeSHi) y entonces alguien te ayudará a resolver ese problema concreto; pero nadie te va a hacer el ejercicio entero...
Suerte.
377  Programación / Programación C/C++ / Re: ¿Como guardar datos de pila en un archivo de texto? en: 2 Mayo 2020, 17:44 pm
No he mirado todo tu código, solo la última parte pero... Deberías no cerrar el archivo dentro del while().
Saca el:
Código
  1. archivo.close();
fuera del while() de esta manera:
Código
  1. while(aux != NULL){
  2.  archivo << aux;
  3.  aux = aux->sigue;
  4. }
  5. archivo.close();
y dime si te funcionó.
378  Programación / Programación C/C++ / Re: [ALGEBRA DE MATRICES] Matriz triangular superior desdendiente en C. en: 2 Mayo 2020, 00:58 am
Hmmm.... Correcta!   ;-) ;-) ;-)

Una objección:
  •  La tecnica es estructurada, pero emplea 3 variables... trinangular_superior es redundante...

Se puede conseguir una solucion estructurada y con solo 2 variables locales?
Cuando tienes proyectos sin terminar pero @dijsktra te pica a darle más vueltas a un algoritmo aparentemente sencillo.  :laugh: :laugh:

Pues veamos. La primera opción que aparece es sustituir la variable por el valor de su expresión directamente que es:
Código:
A[i][j] == 0
dejando el resto del código lo más parecido posible. La solución en tal caso sería algo así:
Código
  1. int upperTriangleDesc(const int **A, const int N){
  2.    size_t i = 1; j = 0; // Declaramos e inicializamos j para poder usarlo en la condicion del bucle externo
  3.    while(i < N && !A[i][j]){
  4.        // El bucle interno no tiene ninguna complicacion
  5.        while(j < i && !A[i][j]){
  6.            ++j;
  7.        }
  8.        // Ahora al salir tenemos dos situaciones:
  9.        // - (j = i) y en tal caso la matriz todavia es triangular superior -> Incrementamos i y restablecemos j a 0 para recorrer otra fila
  10.        // - (A[i][j] != 0) y en tal caso la matriz ya no es triangular superior -> No podemos modificar i ni j para que el bucle de fuera tambien termine
  11.        if(j == i){
  12.            ++i;
  13.            j = 0;
  14.        }
  15.    }
  16.    // Los bucles acaban cuando:
  17.    // Un elemento no es nulo (A[i][j] != 0) -> !triangular
  18.    // Llegamos al final (i == N) -> SI A[N-1][N-2] == 0 ENTONCES triangular SINO !triangular
  19.    return (i == N && !A[N-1][N-2]);
  20. }

Podemos ver que esto se complica mucho y solo para quitar una variable local. Así que tenía que haber otra solución. Existe otro patrón. Cada vez que salimos del bucle interno:
  • Todos los elementos de la fila son nulos -> j = i -> triangular (de momento)
  • El último elemento comprobado no era nulo -> j < i
En vez de restablecer j a 0, podemos darle a j el valor del último elemento evaluado. Y en el bucle externo bastará comprobar si (j == 0). Esto tiene un problema: si todos los elementos evaluados en una fila son nulos -> j = i -> A(i,j) pertenece a la diagonal principal. Solución:
Código
  1. int upperTriangleDesc(const int **A, const int N){
  2.    size_t i = 1, j = 0;
  3.    while(i < N && !j){
  4.        while(j < i && !A[i][j]){
  5.            ++j;
  6.        }
  7.        // Al salir: SI j < i ENTONCES A[i][j] != 0 SINO SI A[i][j-1] == 0 ENTONCES triangular (de momento) SINO !triangular
  8.        j = (j < i) || A[i][j-1];
  9.        ++i;
  10.    }
  11.    // Triangular <-> j = 0
  12.    return !j;
  13. }

A ver qué tal esta vez.  :silbar: :silbar:
379  Programación / Programación C/C++ / Re: [ALGEBRA DE MATRICES] Matriz triangular superior desdendiente en C. en: 1 Mayo 2020, 21:02 pm
Como ya se ha explicado en el enunciado, una matriz es triangular superior descendiente si todos los elementos por debajo de la diagonal principal son nulos, es decir, 0. Por lo tanto el algoritmo debe recorrer única y exclusivamente esta parte de la matriz. El patrón es el siguiente:
  • Se empieza en la fila 1
  • Para cada fila i se recorren las columnas desde 0 hasta i-1.

Por lo tanto la solución más sencilla parece un par de bucles que recorran esta parte de la matriz. Usaremos una variable entera como flag que empezará valiendo 1 (suponemos que la matriz es triangular superior) y cuando encontremos un elemento distinto de 0, dejará de ser triangular superior (cambiaremos el valor a 0) y no será necesario seguir.
Código
  1. int upperTriangleDesc(const int **A, const int N){
  2. int triangular_superior = 1;
  3. for(size_t i = 1; i < N && triangular_superior; ++i)
  4. for(size_t j = 0; j < i && triangular_superior; ++j)
  5. triangular_superior = (A[i][j] == 0);
  6. return triangular_superior;
  7. }
Usamos directamente la comparación de que el elemento (i,j) sea igual a 0. Si dicha comparación es cierta (true) se traducirá como un 1 y en caso de que sea falsa (false), se traducirá como 0.
Como echo de menos estas cosas de C/C++ desde que trabajo con Java :rolleyes:
380  Programación / Programación C/C++ / Re: Pasar este código Java a C en: 1 Mayo 2020, 15:13 pm
Ya que eres nuevo en el foro, te avisaré de que no se hacen tareas. Esto no va de que tu pones tus códigos o tus ejercicios y nosotros te los hacemos. El foro sirve para cuando tienes una duda concreta y a ser posible tienes que poner tus avances para que podamos orientarte mejor.
Java como ya sabrás o deberías saber está totalmente orientado a objetos por lo que es obligatorio crear una clase para tu programa. C, en cambio, no está orientado a objetos (no tiene clases) aunque tiene un "apaño" que son la estructuras (struct). No conviertas cada clase de Java en un struct de C porque no tiene sentido, vas a tener que pensar un poco si deberías crearla o no.
PD: Otra característica de un struct es que todos sus campos son públicos por defecto. No se pueden establecer como privados.

Y para crear un número aleatorio en C se utiliza el siguiente código:
Código
  1. #include <stdlib.h> // Para las funciones rand() y srand()
  2. #include <time.h> // Para la funcion time()
  3.  
  4. int main(){
  5.  // Se establece una semilla que es como un generador de numeros aleatorios.
  6.  // Una semilla con un valor x siempre genera los mismos numeros aleatorios en cada ejecucion.
  7.  // Para que sea mas aleatorio se usa time(NULL) para usar la hora del sistema y que cambie con cada ejecucion.
  8.  srand(time(NULL));
  9.  
  10.  int numeroAleatorio = rand();
  11.  // El numero aleatorio esta entre 0 y la constante RAND_MAX.
  12.  printf("Numero aleatorio entre %d y %d: %d", 0, RAND_MAX, numeroAleatorio);
  13.  
  14.  // Para obtener un numero entre [a, b):
  15.  numeroAleatorio = a + rand() % (b-a);
  16.  
  17.  // Para obtener un numero entre [a, b]:
  18.  numeroAleatorio = a + rand() % (b-a+1);
  19. }

Dicho esto que creo que es lo más diferente entre Java y C, el resto son bucles y operaciones aritméticas básicas que tienes que poder hacerlo tú solo.
Suerte.
Páginas: 1 ... 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines