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: #include<stdlib.h> #include<time.h> #include<stdio.h> #include <windows.h> int main() { int i, m, num; int b=0; int j=0; int aux=0; char auxiliar[21]; char vector[26]; char LETRA ='A'; for(i=0; i<=26; i++) { vector[i]=LETRA; LETRA++; } for(i=0; i<=26; i++) { vector[i]=num; for(m=0; m<i; m++) { while(vector[m]==vector[i]) { } } } for(i=0; i<=26; i++) { if(vector[i]!=65+i) { while(j<21 && aux==0) { if(vector[i]==auxiliar[j]) { aux=1; } j++; } if(aux==0) { auxiliar[b]=65+i; auxiliar[b+1]=vector[i]; b=b+2; } } j=0; aux=0; } j=0; for(i=0; i<10; i++) { printf("%c%c ",vector [j ],vector [j +1]); j=j+2; } return 0; }
Título: Re: Crear parejas de letras en C
Publicado por: 0xFer en 2 Diciembre 2016, 23:22 pm
Son 20 letras: 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: for(i=0; i<20; i++) { bool seRepite = true; while( seRepite ){ letras [i ] = 65+rand()%26; seRepite = false; for( m = 0; m < i; m++) if( letras[m]==letras[i] ){ seRepite = true; break; } } }
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
#include<stdlib.h> #include<time.h> #include<stdio.h> int usado(char, char*); int main() { int i; char vector[26]={0}; char newChar; for(i=0; i<26; i++) { do { } while(usado(newChar, vector)); vector[i] = newChar; } for(i=0; i<10; i++) { if (vector[i*2] < vector[i*2+1]) { printf("%c%c ",vector [i *2],vector [i *2+1]); } else printf("%c%c ",vector [i *2+1],vector [i *2]); } return 0; } int usado(char ch, char* array) { int i; while (*(array+i) && ch != *(array+i) ) i++; if (*(array+i)) return 1; return 0; }
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: 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
|