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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Algoritmo existente?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Algoritmo existente?  (Leído 5,768 veces)
goto C

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: ¿Algoritmo existente?
« Respuesta #10 en: 28 Julio 2013, 22:39 pm »

error C2143: error de sintaxis : falta ';' delante de 'tipo'

error C2065: 'hasta' : identificador no declarado

error C2065: 'hasta' : identificador no declarado

error C2065: 'hasta' : identificador no declarado

EDITO: he quitado el const, pero da exactamente los mismos errores.

EDITO 2: amchacon, muy chula tu foto, es lo menos que podemos hacer por recordar a un genio al que nunca se le ha reconocido lo suficiente su trabajo y a quien no conoce esta sociedad en que vivimos, pero sí conoce a Steve Jobs, por ejemplo.


« Última modificación: 28 Julio 2013, 23:09 pm por goto C » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Algoritmo existente?
« Respuesta #11 en: 28 Julio 2013, 23:12 pm »

error C2143: error de sintaxis : falta ';' delante de 'tipo'

error C2065: 'hasta' : identificador no declarado

error C2065: 'hasta' : identificador no declarado

error C2065: 'hasta' : identificador no declarado

EDITO: he quitado el const, pero da exactamente los mismos errores.
¿Has probado el código literalmente o has hecho algun cambio?

EDITO 2: amchacon, muy chula tu foto, es lo menos que podemos hacer por recordar a un genio al que nunca se le ha reconocido lo suficiente su trabajo y a quien no conoce esta sociedad en que vivimos, pero sí conoce a Steve Jobs, por ejemplo.
;)


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: ¿Algoritmo existente?
« Respuesta #12 en: 29 Julio 2013, 09:57 am »

¡Buenas!

Aquí te dejo otro código. Trabaja las combinaciones sobre un vector de enteros, ya que es lo único que te hace falta. Hacer combinaciones sobre un vector de cualquier cosa es hacer combinaciones sobre los indices del vector...

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct t_combinatoria
  6. {
  7.    unsigned long **lista;
  8.    unsigned long n_elementos;
  9.    unsigned long longitud_elemento;
  10. };
  11. typedef struct t_combinatoria t_combinatoria;
  12.  
  13. void inicializar_combinatoria(t_combinatoria *c)
  14. {
  15.    c->lista = NULL;
  16.    c->n_elementos = 0;
  17.    c->longitud_elemento = 0;
  18. }
  19.  
  20. void finalizar_combinatoria(t_combinatoria *c)
  21. {
  22.    unsigned long i;
  23.  
  24.    for(i = 0 ; i < c->n_elementos ; i++)
  25.        free(c->lista[i]);
  26.  
  27.    free(c->lista);
  28.  
  29.    c->lista = NULL;
  30.    c->n_elementos = 0;
  31.    c->longitud_elemento = 0;
  32. }
  33.  
  34. unsigned long factorial(unsigned long n)
  35. {
  36.    unsigned long ret = 1;
  37.  
  38.    while(n)
  39.        ret *= (n--);
  40.  
  41.    return ret;
  42. }
  43.  
  44. unsigned long n_sobre_k(unsigned long n, unsigned long k)
  45. {
  46.    return (factorial(n) / factorial(k)) / factorial(n - k);
  47. }
  48.  
  49. int combinaciones(t_combinatoria *datos,unsigned long elementos_conjunto, unsigned long elementos_combinacion)
  50. {
  51.    static unsigned long indice = 0;
  52.    static unsigned long elementos_fijados = 0;
  53.    static unsigned long *aux = NULL;
  54.    unsigned long i;
  55.  
  56.    if(!elementos_combinacion)
  57.        return 0;
  58.  
  59.    if(indice == elementos_combinacion)
  60.    {
  61.        memcpy(*(datos->lista + elementos_fijados), aux, elementos_combinacion * sizeof(unsigned long));
  62.  
  63.        elementos_fijados++;
  64.  
  65.        return 1;
  66.    }
  67.  
  68.    /* si es la primera vez que llamamos a la funcion, reservamos memoria para la tabla de combinaciones */
  69.    if(!indice)
  70.    {
  71.        if(!(aux = (unsigned long *) malloc(elementos_combinacion * sizeof(unsigned long))))
  72.            return 0;
  73.  
  74.        datos->n_elementos = n_sobre_k(elementos_conjunto,elementos_combinacion);
  75.        datos->longitud_elemento = elementos_combinacion;
  76.  
  77.        if(!(datos->lista = (unsigned long **) malloc(datos->n_elementos * sizeof(unsigned long *))))
  78.        {
  79.            datos->n_elementos = 0;
  80.            datos->longitud_elemento = 0;
  81.  
  82.            return 0;
  83.        }
  84.  
  85.        for(i = 0 ; i < datos->n_elementos ; i++)
  86.        {
  87.            if(!(datos->lista[i] = (unsigned long *) malloc(datos->longitud_elemento * sizeof(unsigned long))))
  88.            {
  89.                int j;
  90.  
  91.                for(j = 0 ; j < i ; j++)
  92.                    free(datos->lista[i]);
  93.  
  94.                free(datos->lista);
  95.                datos->lista = NULL;
  96.  
  97.                datos->n_elementos = 0;
  98.                datos->longitud_elemento = 0;
  99.  
  100.                return 0;
  101.            }
  102.        }
  103.  
  104.        for(i = 0 ; i < elementos_conjunto - elementos_combinacion + indice + 1; i++)
  105.        {
  106.            aux[indice] = i;
  107.  
  108.            indice++;
  109.  
  110.            combinaciones(datos, elementos_conjunto, elementos_combinacion);
  111.  
  112.            indice--;
  113.        }
  114.  
  115.        free(aux);
  116.        aux = NULL;
  117.        elementos_fijados = 0;
  118.        indice = 0;
  119.    }
  120.    else
  121.    {
  122.        for(i = aux[indice - 1] + 1 ; i < elementos_conjunto - elementos_combinacion + indice + 1; i++)
  123.        {
  124.            aux[indice] = i;
  125.  
  126.            indice++;
  127.  
  128.            combinaciones(datos, elementos_conjunto, elementos_combinacion);
  129.  
  130.            indice--;
  131.        }
  132.    }
  133.  
  134.    return 1;
  135. }
  136.  
  137. int main(int argc, char *argv[])
  138. {
  139.    unsigned long i,j,k;
  140.    t_combinatoria comb;
  141.    char *vocales = "aeiou";
  142.  
  143.    for(i = 1 ; i <= 5 ; i++)
  144.    {
  145.        inicializar_combinatoria(&comb);
  146.  
  147.        combinaciones(&comb, 5 , i);
  148.  
  149.        for(j = 0 ; j < comb.n_elementos ; j++)
  150.        {
  151.            for(k = 0 ; k < comb.longitud_elemento ; k++)
  152.                printf("%c",vocales[comb.lista[j][k]]);
  153.            printf("\n");
  154.        }
  155.  
  156.        finalizar_combinatoria(&comb);
  157.    }
  158.  
  159.    return 0;
  160. }
  161.  

Había visto un error que no existia...  :P

¡Saludos!
« Última modificación: 29 Julio 2013, 12:29 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
goto C

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: ¿Algoritmo existente?
« Respuesta #13 en: 29 Julio 2013, 17:02 pm »

Amchacon, lo he compilado sin modificar absolutamente nada. Do-while, ya sé que lo único que me hace falta es "jugar" con las posiciones de los elementos del array, pero  lo que no encuentro es el cómo combinarlos, es decir, un algoritmo que haga esas combinaciones sea cual sea el número de caracteres, y ahí es donde os pido ayuda.

Os pongo aquí parte del código que es donde tengo los problemas, este código es, de todos los que he probado hasta la fecha, el que mejor funciona posiblemente y el que es más sencillo de comprender porque es el más corto.

Código:
#include<stdio.h> 
#include<stdlib.h>

int main()
{
    int numcarac, auxnumcarac, i, j, k, l=0, contador=1; //numcarac es el numero de caracteres del array carac y auxnumcarac el de caraccomb
    char carac[26], caraccomb[26]; //carac es el array con todos los caracteres, y caraccomb el array en el que iremos guardando las diferentes combinaciones de los caracteres de carac

//... pedimos datos por teclado, los guardamos y los mostramos para asegurarnos, esto funciona bien, comprobado, no lo pongo para no liar mas

//AQUI ESTA EL PROBLEMA:
auxnumcarac=2;

   for(i=0; i<numcarac; i++)
   {
      for(j=i; j<numcarac; j++)
      {
         for(k=0; k<auxnumcarac; k++)
         {
            caraccomb[l] = carac[j+k];
            l++;
         }

         //aqui mostramos caraccomb:
         printf("%s\n", caraccomb);

      }
      auxnumcarac++;
      l=0;
   }

Gracias y saludos. :D
A ver si podéis orientarme un poco en el código este.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Detener sonido de un flash ya existente
Diseño Gráfico
SeniorX 2 5,453 Último mensaje 17 Abril 2007, 17:05 pm
por eagle17
Eliminar algo ya existente en html?
Desarrollo Web
Cergath 3 3,616 Último mensaje 2 Diciembre 2010, 14:57 pm
por Cergath
dime el algoritmo que más te gusta... ejm:algoritmo del avestruz
Programación General
jhonatanAsm 0 4,708 Último mensaje 13 Mayo 2011, 01:30 am
por jhonatanAsm
Instalar W7 Conservando información ya existente en el pc.
Windows
Gea99 3 3,341 Último mensaje 26 Febrero 2012, 16:04 pm
por dato000
append , . a un string existente
Programación C/C++
bash 1 2,136 Último mensaje 12 Junio 2015, 04:29 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines