Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: w_walter en 2 Diciembre 2016, 22:20 pm



Título: Crear parejas de letras en C
Publicado por: w_walter en 2 Diciembre 2016, 22:20 pm
Buenas soy nuevo en el foro y tenia una duda para un trabajo de clase. El tema es que tengo que crear 10 parejas de letras separadas por un espacio y que éstas letras no se repitan. No consigo hacer que no se repitan algunas.

Mi codigo es el siguiente:
Código
  1. #include<stdlib.h>
  2. #include<time.h>
  3. #include<stdio.h>
  4. #include <windows.h>
  5. int main()
  6. {
  7.    int i, m, num;
  8.    int b=0;
  9.    int j=0;
  10.    int aux=0;
  11.    char auxiliar[21];
  12.    char vector[26];
  13.    char LETRA ='A';
  14.    srand((unsigned)time(NULL));
  15.  
  16.  
  17.    for(i=0; i<=26; i++)
  18.    {
  19.        vector[i]=LETRA;
  20.        LETRA++;
  21.    }
  22.  
  23.    for(i=0; i<=26; i++)
  24.    {
  25.        num=65+rand()%26;
  26.  
  27.        vector[i]=num;
  28.  
  29.        for(m=0; m<i; m++)
  30.        {
  31.            while(vector[m]==vector[i])
  32.            {
  33.                vector[i]=65+rand()%26;
  34.            }
  35.        }
  36.    }
  37.  
  38.    for(i=0; i<=26; i++)
  39.    {
  40.        if(vector[i]!=65+i)
  41.        {
  42.            while(j<21 && aux==0)
  43.            {
  44.            if(vector[i]==auxiliar[j])
  45.                {
  46.                    aux=1;
  47.                }
  48.                j++;
  49.            }
  50.  
  51.            if(aux==0)
  52.            {
  53.                auxiliar[b]=65+i;
  54.                auxiliar[b+1]=vector[i];
  55.                b=b+2;
  56.            }
  57.        }
  58.  
  59.        j=0;
  60.        aux=0;
  61.    }
  62.    j=0;
  63.  
  64.    for(i=0; i<10; i++)
  65.    {
  66.        printf("%c%c ",vector[j],vector[j+1]);
  67.        j=j+2;
  68.    }
  69.  
  70.  
  71.    return 0;
  72.  
  73. }


Título: Re: Crear parejas de letras en C
Publicado por: 0xFer en 2 Diciembre 2016, 23:22 pm
Son 20 letras:

Código
  1. char letras[20];

Ahora para generar las letras de forma aleatoria y que ninguna se repita, la parte de tu código donde intentas hacer lo anterior sólo comprueba que la letra en i no sea igual a la letra en i - 1, una solución podría ser:

Código
  1. for(i=0; i<20; i++)
  2.    {
  3.     bool seRepite = true;
  4.  
  5.     while( seRepite ){
  6.  
  7.     letras[i] = 65+rand()%26;
  8.     seRepite = false;
  9.  
  10.     for( m = 0; m < i; m++)
  11.     if( letras[m]==letras[i] ){
  12.     seRepite = true;
  13.     break;
  14. }
  15. }
  16.    }

Bien, ahora tienes un arreglo letras que solo tienes que imprimir de 2 en 2.



Título: Re: Crear parejas de letras en C
Publicado por: w_walter en 2 Diciembre 2016, 23:55 pm
Muchas gracias por la respuesta!! funciona bien pero al intentar ponerle la condición de que las primeras letras de las 10 parejas tienen que estar en orden alfabético  vuelve a repetirlas. No sé si me he explicado. La idea es que las letras aparezcan "AH BE DK". No pueden aparecer de la manera "EH AB".


Título: Re: Crear parejas de letras en C
Publicado por: lfgmespino en 29 Diciembre 2016, 18:13 pm
Código
  1. #include<stdlib.h>
  2. #include<time.h>
  3. #include<stdio.h>
  4.  
  5.  
  6. int usado(char, char*);
  7.  
  8. int main()
  9. {
  10.    int i;
  11.    char vector[26]={0};
  12.    char newChar;
  13.  
  14.  
  15.    srand((unsigned)time(NULL));
  16.  
  17.  
  18.    for(i=0; i<26; i++)
  19.    {
  20.        do {
  21.        newChar = 'A'+rand()%26;
  22.         } while(usado(newChar, vector));
  23.        vector[i] = newChar;
  24. }
  25.  
  26.    for(i=0; i<10; i++)
  27.    {
  28.        if (vector[i*2] < vector[i*2+1]) {
  29.        printf("%c%c ",vector[i*2],vector[i*2+1]);
  30.        } else printf("%c%c ",vector[i*2+1],vector[i*2]);
  31.    }
  32.  
  33.  
  34.    return 0;
  35.  
  36. }
  37.  
  38. int usado(char ch, char* array)
  39. {
  40. int i;
  41.  
  42. while (*(array+i) && ch != *(array+i) ) i++;
  43.  
  44. if (*(array+i)) return 1;
  45. return 0;
  46. }
  47.  


Título: Re: Crear parejas de letras en C
Publicado por: do-while en 29 Diciembre 2016, 19:09 pm
Repetir un bucle en el que se generan datos aleatorios sobre una lista mientras haya una repetición es extremadamente ineficiente.

Lo que deberías de hacer es:
Código:
alfabeto="A...Z";

para i desde 0 hasta 19
  indice_aleatorio=aleatorio_entre_0_y_longitud_alfabeto

  si i != indice_aleatorio
    intercambiar(alfabeto[i], alfabeto[indice_aleatorio]
  fin si
fin para

ordenar los indices pares(desde 0 hasta 19) en orden ascendente

para i desde cero hasta 9
  mostrar alfabeto[2 * i] y alfabeto[2 * i + 1]
fin para