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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 ... 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 54 55 56 57 58 ... 102
421  Programación / Programación C/C++ / Re: Ayuda imprimir solo una vez la repeticiones de un arreglo en: 16 Marzo 2020, 20:17 pm
La idea más sencilla como te he respondido en el mensaje es la siguiente:
Código:
palabras := array de struct (palabra, repeticiones)
palabrasGuardadas := 0

MIENTRAS !finArchivo HACER
  palabra = leerSiguientePalabra()
 
  // Recorres las palabras que ya has guardado a ver si coincide alguna:
  i := 0
  MIENTRAS i < palabrasGuardadas AND palabra != palabras[i].palabra HACER
    i := i + 1
  FIN MIENTRAS

  // Sales cuando llegas al final (y entonces es nueva) o cuando encuentras la palabra guardada en i:
  SI i == palabrasGuardadas ENTONCES
    palabras[palabrasGuardadas].palabra = palabra
    palabras[palabrasGuardadas].repeticiones = 1
    palabrasGuardadas := palabrasGuardadas + 1
  SINO ENTONCES
    palabras[i].repeticiones := palabras[i].repeticiones + 1
  FIN SI
FIN MIENTRAS

Es mejorable teniendo las palabras ordenadas para hacer las búsquedas más eficientes o usando otras estructuras de datos pero para empezar basta con que consigas implementar este pseudocódigo.
422  Programación / Programación C/C++ / Re: Ayuda imprimir solo una vez la repeticiones de un arreglo en: 16 Marzo 2020, 19:51 pm
Cuando pongas código utiliza etiquetas de Código GeSHi. Las puedes seleccionar encima del cuadro de texto, en el desplegable que dice exactamente eso: Código GeSHi. Usa las del lenguaje apropiado.

No he revisado si tu código encuentra las ocurrencias correctamente, confiaré en tus dotes de programador.  :xD
Pero vamos que si tienes un array de una struct que almacena (palabra, repeticiones) es muy sencillo mostrarlas:
Código
  1. for(size_t i = 0; i < longitudArray; i++)
  2.    cout << "La palabra: " << estructura.palabra << " aparece: " << estructura.repeticiones << " veces" << endl;
Tendrás que cambiar el nombre de las variables que he utilizado por las que estás utilizando tú.

Un problema puede ser saber cuántas posiciones del array de struct estás utilizando realmente. Tendrás que llevar un contador que se incremente con cada nueva inserción.
Si estás haciendo esto por mérito propio o es algún ejercicio en el que nadie te limita a lo que puedes o no puedes usar, siempre puedes utilizar algún contenedor de la STL para no tener que manejar directamente la memoria (será más fácil pero por tanto menos gratificante).
423  Programación / Programación General / Re: ¿Alguien tiene el libro "Thinking Functionally with Haskell" de R Bird en PDF? en: 14 Marzo 2020, 01:38 am
Buscando "Thinking Functionally with Haskell pdf" este ha sido el tercer resultado:
https://pdfs.semanticscholar.org/c7e4/e082a1f681a320fd568d2a3ba2edec64a086.pdf

Creo que es lo que estás buscando... :rolleyes:
424  Programación / Programación C/C++ / Re: Rotar n veces un arreglo con n digitos en: 6 Marzo 2020, 05:26 am
Para rotar las posiciones de un array necesitas guardar uno de los valores en una variable auxiliar para empezar a guardar los nuevos valores en la posición que has guardado fuera y al final restaurar ese valor que tiene la variable auxiliar. Ahora bien, hay muchas formas de hacerlo.

Una forma visual es hacer una función que rote el array a la derecha 1 vez y hacer un bucle for que llame a dicha funciones n veces siendo n el número de posiciones que se quiere rotar el array a la derecha. No es lo más eficiente pero como te digo es visual.
Código
  1. void rotarDerecha(int *numeros, int size){
  2.  int aux = numeros[size-1];
  3.  for(size_t i = size - 1; i > 0; --i)
  4.    numeros[i] = numeros[i-1];
  5.  numeros[0] = aux;
  6. }
  7.  
  8. int main(){
  9.  //...
  10.  for(size_t i = 0; i < rotaciones; ++i)
  11.    rotarDerecha(numeros, size);
  12.  //...
  13. }

Para mejorar un poco la eficiencia del código, en vez de repetir el for tantas veces como el valor de rotaciones, podemos hacerlo (rotaciones % size) veces. Así aunque el número de rotaciones sea muy grande, siempre daremos menos de una vuelta completa al array.

Si lo quieres hacer más eficiente puedes trabajar sobre esta versión y utilizar un poco las matemáticas para sacar alguna relación entre las posiciones del array el número de rotaciones. Esta parte te la dejo a ti que te va a ser más satisfactorio que si te lo encuentras hecho.

Y recuerda que si te atascas en alguna parte puedes volver a dejar tu código para que te echemos una mano. Y te recomendaría usar nombres de variables más significativos; sobre todo si el código lo van a tener que leer terceras personas como es el caso... :rolleyes:   Suerte.  :-X
425  Programación / Programación C/C++ / Re: Leer cadena y contar cantidad de días que se encuentran en esta. en: 6 Marzo 2020, 02:46 am
En un principio el programa estaría limitado ya que tendrías que crear algún tipo de directriz para indicar qué son días y qué no. Las dos opciones más rápidas que se me ocurren serían:
  • Buscar números. Esto se podría hacer más complejo localizando también el mes y buscando números que estén entre 1 el último día de dicho mes. Sin embargo esta opción, como puedes ver en tu ejemplo, no es muy eficaz ya que cogería también el 02.
  • Buscar la palabra "día/s" y guardar todos los números que vayan seguidos de dicha palabra.

Para empezar deberías mirar si la cadena la quieres obtener de la entrada estándar (teclado) o desde un fichero u otra entrada. Cuando tengas clara la entrada, busca cómo trabajar con dicha entrada: si es por teclado, busca cómo almacenar una cadena introducida por teclado; si es desde fichero, busca cómo abrir y recorrer un fichero... Comprueba también el lenguaje que quieres usar ya que C y C++ no son el mismo lenguaje aunque a veces se puedan mezclar funciones de ambos.

Cuando tengas eso intenta implementar alguna de las opciones anteriores o alguna que se te ocurra a ti. De las opciones anteriores, como es obvio, te recomendaría la segunda aunque puedes empezar por intentar implementar la primera para ir practicando.

Si llegas a un punto en el que no consigues avanzar es cuando puedes dejar tu código para que te ayudemos pero recuerda que el mayor esfuerzo tiene que salir de ti no de nosotros.
Suerte :-X
426  Programación / Programación General / Re: Ayuda Con Este ERROR, GRAFOS en: 29 Febrero 2020, 21:55 pm
Antes de nada decir que hay un foro propio para Programación C/C++ y que no es necesario que escribas el mensaje en mayúsculas...

Dicho esto y sin conocer en profundidad tu implementación diría que el error puede estar en la línea 23 de la función InsertarArista() ya que en el <while()> continúas avanzando hasta que <aux> es NULL y cuando es NULL, intentas asignar a <sig>, <nueva>. Creo que el bucle debería ser <while(aux->sig != NULL)>
427  Programación / Java / Re: Ayuda con programa en Java en: 29 Febrero 2020, 21:47 pm
Todo depende de cómo estructures el ejercicio ya que dependerá de las clases que estés usando y las restricciones que tenga que haber entre ellas. No es lo mismo tener por ejemplo usuarios y que cada uno almacene su número de asiento que tener únicamente los asientos.
En el segundo caso que es más sencillo, como te ha dicho @ryhuso, puedes tener un array de tipo boolean y longitud 21. La longitud tiene que ser 21 porque es el número de asientos que hay entre el 0 y el 20. Entonces a la hora de reservar un asiento, si ese índice del array vale true es que ya está ocupado, y si vale false es que está disponible y tendrás que ponerlo a true.

Pero como te digo, lo más importante es cómo tengas estructurado tu programa ya que cada implementación conllevará una solución diferente. Si quieres ayuda más concreta tendrás que dejar algo de tu código para que podamos verlo.
428  Programación / Programación C/C++ / Re: Pascua en lenguaje c en: 30 Enero 2020, 07:55 am
Al menos has intentado poner el código entre etiquetas (se valora) pero no te ha salido bien... Debes poner la parte de tu código entre las dos parejas de corchetes con la palabra code.
Además tienes un montón de cosas duplicadas que dificultan mucho la lectura del problema.

Corrige esos problemas para que podamos ayudarte...
429  Programación / Programación C/C++ / Re: Necesito ayuda con arrays en: 30 Enero 2020, 07:44 am
Bueno, lo primero informarte de que lo pides en C++ pero tu programa tiene una pinta de C que no puede con ello... :silbar:
Y lo segundo que para futuras consultas coloca tu código entre etiquetas de Código GeSHi porque sino se dificulta mucha la lectura de éste... Gracias.

Tu código digamos que hace lo siguiente:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. main(){
  5.    int numero[10],size,contador=0,i=0; // Declaras el array de 10 elementos y un par de variables mas... De momento no va mal aunque... La funcion es: int main() ya que devuelve un int
  6.    printf("Introduzca la cantidad de numeros(hasta un maximo de 10): "); // Pides el numero de elementos a guardar
  7.    scanf("%i",&size); // Y lo guardas en size... Bien
  8.    for (i=0;i<size;i++){ // Recorres el array hasta size y pides un valor para cada posicion
  9.        printf("Numero %i: ",i+1);
  10.        scanf("%i",&numero[i]); // AQUI SUPONGO QUE USAS EL INDICE i AUNQUE COMO PUEDES VER EN TU MENSAJE NO SE VE POR NO USAR ETIQUETAS DE CODIGO GESHI
  11.    }
  12.    // A partir de aqui es cuando ya tu programa pierde el sentido...
  13.    for (i=0;i<size;i++){
  14.        if (numero==size){
  15.           contador++;
  16.        }
  17.        printf("%i  %i\n",numero,contador);
  18.    }
  19.    // No te recomiendo usar system("pause")... Es una mala practica.
  20.    // Para C++ (el de verdad...) lo recomendable es usar cin.get() que pertenece al archivo de cabecera <iostream>
  21.    // Para tu C++ (que es practicamente C) lo recomendable es usar getchar() que pertenece a <stdio.h>
  22.    system("Pause");
  23.    return 0;
  24. }

Bueno pues te voy a dar una solución intentando que sea fácil de entender (ya habrá tiempo de hacerla más eficiente una vez entendido el procedimiento). Imagina que tienes un array con valores y te piden saber cuántas veces se repite un número concreto x... Fácil:
Código
  1. int contador = 0;
  2. for(int i = 0; i < size; ++i)
  3.    if(numeros[i] == x)
  4.        ++contador;
Y ya estaría. El problema en tu caso es que no sabes cuántos valores tienes que buscar de antemano por lo que una posible solución es crear un par de arrays auxiliares:
En uno de ellos guardarás cada uno de los valores introducidos pero sólo una vez. Es decir si se introduce {1,2,3,2,3,1,3,2,4,1,2,4,1} tu array auxiliar guardará {1,2,3,4} y así puedes saber qué valores tienes que buscar.
El otro guardará cuántas veces está cada uno. Para el ejemplo anterior quedaría {4,4,3,2}, es decir, 4 veces el 1, 4 veces el 2, 3 veces el 3 y 2 veces el 4.

Creo que una buena forma de hacerlo (simple pero sin tener que recorrer todos los arrays 50 veces sería):
Código:
numeros : array de longitud 10
valoresUnicos : array de longitud 10 // ya que en el peor de los casos habra 10 elementos diferentes
sizeValoresUnicos := 0 // Numero de elementos introducidos en valoresUnicos
indiceValoresUnicos := 0 // indice para recorrer el array de valoresUnicos y a veces utilizado para el array contadores. Lo puedes ver mas abajo
contadores : array de longitud 10 // igual que antes para el peor de los casos en el cual quedaria {1,1,1,1,1,1,1,1,1,1}. IMPORTANTE: debe estar inicializado a 0

PEDIR size
PARA i := 0 HASTA size-1 HACER
    PEDIR numeros[i]
    // Buscamos si ese valor ya esta en valoresUnicos y sino lo metemos
    indiceValoresUnicos := 0
    MIENTRAS indiceValoresUnicos < sizeValoresUnicos && valoresUnicos[indiceValoresUnicos] != numeros[i] HACER // IMPORTANTE: las condiciones en ese orden o te dara problemas
        indiceValoresUnicos := indiceValoresUnicos + 1
    FIN MIENTRAS
    // Cuando salimos de ese bucle tenemos que comprobar cual ha sido la condicion que ha hecho salir
    SI indiceValoresUnicos == sizeValoresUnicos ENTONCES // Si hemos llegado hasta el final significa que no lo hemos encontrado
        valoresUnicos[indiceValoresUnicos] := numeros[i] // Entonces lo metemos
        contadores[indiceValoresUnicos] = 1; // y guardamos que ya tenemos una vez ese valor
        sizeValoresUnicos := sizeValoresUnicos + 1 // y este array ya tiene 1 elemento mas
    SINO // En cambio si no hemos llegado hasta el final significa que si lo hemos encontrado. Entonces incrementamos en 1 el numero de veces que ha salido ese valor
        contadores[indiceValoresUnicos] := contadores[indiceValoresUnicos] + 1
    FIN SI
FIN PARA

Ahora tienes que entender el algoritmo y una vez lo hayas entendido tienes que pasarlo a C/C++ ya que como puedes ver no he usado la sintaxis de estos lenguajes. Si entiendes cómo funciona, traducirlo resulta muy sencillo.
Si tienes alguna duda o algo no te funciona, siempre puedes preguntar pero recuerda utilizar las etiquetas para facilitarnos la lectura de tu código.
430  Programación / Programación C/C++ / Re: retornar varios arreglos en: 11 Enero 2020, 18:01 pm
Coloca el código entre etiquetas de Código GeSHi... :rolleyes: :rolleyes:

Los arrays también puedes pasarlos como parámetros (exactamente lo que pasas es un puntero al array) y modificarlos en la función. Además no viene mal recalcar que no es necesario pasarlos por referencia a no ser que vayas a reservar/liberar memoria.

Código
  1. void f(int *numeros, int size){
  2.  for(int i = 0; i < size; ++i)
  3.    numeros[i] = i;
  4. }
  5.  
  6. int main(){
  7.  int numeros[10];
  8.  f(numeros, 10);
  9.  // Mostrar array numeros. Salida: 0 1 2 3 4 5 6 7 8 9
  10. }
Páginas: 1 ... 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 54 55 56 57 58 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines