|
511
|
Programación / Programación C/C++ / Re: funcion strcmpi()
|
en: 31 Diciembre 2013, 10:59 am
|
................................................... tengo que comparar dos cadenas pero sin diferenciar mayúsculas de minúsculas no se si hacerlo con esta función o hacerlo yo todo el procedimiento
de antemano gracias, y felices fiestas
Yo soy más partidario de hacerlo "a pelo", sin usar las librerías string y ctype:#include <stdio.h> int longitud_cadena(char *cadena);/*calcula lo que indica el nombre*/ int main () { char a[]="aSdfgh",b[]="AsdfGh"; int i=0,la=0,lb=0; la=longitud_cadena(a); lb=longitud_cadena(b); if (la!=lb) /*si no tienen la misma longitud no son iguales*/ printf ("NO son iguales\n"); else { /*si tienen la misma longitud comparo los caracteres*/ for (;a[i] && (a[i]==b[i] || a[i]==b[i]-32 ||a[i]==b[i]+32 );i++); if (i!=la) /*si no coinciden TODOS los caracteres*/ printf ("NO son equivalentes\n"); else /* si coinciden TODOS*/ printf ("SI son equivalentes\n"); } return 0; } int longitud_cadena(char *cadena){ int i=0; for (;cadena[i];i++); return i; }
Claro que podemos prescindir de la función "longitud_cadena" usando sizeof:#include <stdio.h> int main () { char a[]="aSdfgh",b[]="AsdfGp"; int i=0,na=0,nb=0; na=sizeof(a)/sizeof(a[0])-1; nb=sizeof(b)/sizeof(b[0])-1; if (na!=nb) //si no tienen la misma longitud no son iguales printf ("NO son iguales\n"); else { //si tienen la misma longitud comparo los caracteres for (;a[i] && (a[i]==b[i] || a[i]==b[i]-32 ||a[i]==b[i]+32 );i++); if (i!=na) printf ("NO son equivalentes\n"); else printf ("SI son equivalentes\n"); } return 0; }
O bien podemos hacer la transformación en minúsculas, como sugirió amchacon, con la consiguiente penalización de tener que usar dos librerías más, string para strlen y ctype para tolower, y aún así conviene el uso de la función "convierto_minusculas" para no repetir código:#include <stdio.h> #include <string.h> #include <ctype.h> void convierto_minusculas (char *cadena); int main () { char a[]="aSdfgh",b[]="AsdfGh"; int i=0,na=0,nb=0; na=strlen(a); nb=strlen(b); if (na!=nb) //si no tienen la misma longitud no son iguales printf ("NO son iguales\n"); else { //si tienen la misma longitud comparo los caracteres convierto_minusculas (a); convierto_minusculas (b); if (strcmp(a,b)!=0 ) printf ("NO son equivalentes\n"); else printf ("SI son equivalentes\n"); } return 0; } void convierto_minusculas (char *cadena){ int i=0; for (i=0;cadena[i];i++) cadena[i]=tolower (cadena[i]); }
Claro que otra opción es pasar de strcmp y comparar directamente en un bucle los caracteres de las cadenas: #include <stdio.h> #include <string.h> #include <ctype.h> int main () { char a[]="aSdfgh",b[]="AsdfGH"; int i=0,na=0,nb=0; na=strlen(a); nb=strlen(b); if (na!=nb) //si no tienen la misma longitud no son iguales printf ("NO son iguales\n"); else { //si tienen la misma longitud comparo los caracteres for (;a[i] && (tolower (a[i])==tolower (b[i])) ;i++); if (i!=na) printf ("NO son equivalentes\n"); else printf ("SI son equivalentes\n"); } return 0; }
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
513
|
Programación / Programación C/C++ / Re: Problema con formula para generar permutaciones
|
en: 30 Diciembre 2013, 19:43 pm
|
Siento contradecirte, amigo ivancea96 pero tienes un error de concepto básico. Si tienes tres elementos y los vas a tomar de 2 en 2, sin repetir e importando el orden -si no importara serían combinaciones- son variaciones y su fórmula es:Y aplicada al ejemplo que propones es:Curioso, justo lo que te sale a tí, como dicen sonó la flauta ¿Dónde está tu error?. Es conceptual, en las permutaciones se tienen n elementos y se tomen n a n.Como ejemplo las permutaciones del conjunto {1,2,3] son: En un array de 3 elementos {a, b, c}. Cuantas formas hay de coger elementos de 2 en 2?
a,b / a,c / b,c / b,a / c,a / c,b
(3*2)/(3-2)! = 6 -----------------------------------
¿Te das cuenta?. No estas tomando los tres elementos por tanto no son permutaciones, sino variaciones y la fórmula que aplicas es la de variaciones.Resumiendo, y a lo simple:
* permutaciones de n elementos: se toman n a n e importa el orden.
* variaciones de n elementos tomados r a r e importa el orden.
*combinaciones de n elementos tomados r a r y no importa el orden.
Aunque hay mucha información en la red esta referencia no está mal.
Luego estan con repetición, pero eso no viene al caso ahora mismo.
Espero que este rollito ta aclare las ideas. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
516
|
Programación / Programación C/C++ / Re: Programar en C quiniela.
|
en: 30 Diciembre 2013, 14:01 pm
|
Perdón por si te ha molestado , soy nuevo en esto , esque lo hice y me daba error, entonces cuando lo haga si me sale error podriais ustedes buscarme el fallo ? .......................
Cuelga el código que dices te da error, indicando donde lo da, y ya se verá.Saluditos! ..... !!!!
|
|
|
517
|
Programación / Programación C/C++ / Re: Ayuda con programa urgente!
|
en: 30 Diciembre 2013, 12:19 pm
|
.............................. Ademas pega el código aquí que fotos no quiero ver XDD Saludos!^^
Pero si ya lo había puesto. Ahí va otra vez el código del laberinto con color:#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> void mostrar(char a[][28],char *msg); void color (int n); int main (){ char a[24][28]={ "000000000000000000000000000", "012222222222222222222222220", "022020200020002000000000020", "022202022020202000000000020", "020000000020202000000000020", "020222220020220200022222220", "022000000000000200020000020", "022222222222200200020000020", "022200000000200222222222000", "022222222200200000020002020", "022200000020222222222222220", "022222222200200000000000020", "020000000000222222222222220", "022000022200200000000000020", "020000000000200222222222220", "022222222222222200000000020", "020000000000000222222202020", "020000000000000200000202020", "022222222222222200000202020", "000002000000000200002222220", "020222222222222222222200000", "020000000000000000000222220", "022222222222222222222220010", "000000000000000000000000000" }; mostrar(a,"LABERINTO"); return 0; } void mostrar(char a[][28],char *msg){ system ("cls"); int i,j; for( i=0;i<24;i++) { for( j=0;j<27;j++) { if ((i==22 && j==25) ||(i==1 && j==1)) color(215); else if (a[i][j]=='X') color(125); else if (a[i][j]=='0') color(175); else color(7); printf("%c ",a[i][j]); fflush(stdout); } putchar('\n'); } color(7); printf ("\n\t\t%s\n\n",msg); system ("pause"); } void color (int n) { SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n ); }
Ya me contaras que te parece.
Y el tuyo ni en .cpp me tira. ¡¡¡¡ Saluditos! ..... !!!! P.D:Me has liado con eso de que no había puesto el código. O estoy muy espeso, que también.Saluditos! ..... !!!!
|
|
|
518
|
Programación / Programación C/C++ / Re: Programar en C quiniela.
|
en: 30 Diciembre 2013, 12:08 pm
|
¿Y un cafetito también no se te apetece? Perdona, igual no lo sabes por no haberte leído las reglas del foro: no se hacen tareas desde cero, sólo se resuelven dudas sobre un código que previamente has tenido que hacer tú. ¿Lo pillas?. Y para cuando postees el código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.¡¡¡¡ Saluditos! ..... !!!!
|
|
|
519
|
Programación / Programación C/C++ / Re: problema asm
|
en: 30 Diciembre 2013, 06:13 am
|
Perdona que te moleste, pero ¿me puedes indicar que programa usas para escribir en asm?. O lo haces directamente en un editor o en tu IDE de C++?:
Gracias de antemano y:¡¡¡¡ Saluditos! ..... !!!!
|
|
|
520
|
Programación / Programación C/C++ / Re: Ayuda con programa urgente!
|
en: 30 Diciembre 2013, 06:08 am
|
Muy buena , promesa es deuda. jeje Ya tendrás noticias mías ............................................................................... A ver que me dices XDD en la foto se ve bien LO he intentado compilar en DevC aver que tal y casi me da un sofocón: 36 C:\Dev-Cpp\SinNombre1.cpp initializer-string for array of chars is too long ....................................................................
Y así un motón de líneas. Pero claro, no me fije que por defecto el "programilla" lo guarda con extensión .cpp por defecto. Así que volví a guardarlo con extensión .c y ¡boommmm!, corre sin pronlemas ni advertencias:Ya sabía que te daría problemas por el dichosito Dev.C++. Te reitero mi sugerencia de trabajar mejor con Code::Blocks
Elige la de 96.8 MB, la codeblocks-13.12mingw-setup-TDM-GCC-481.exe. Mira mi salida en Code::Blocks, y eso con el compilador en modo pedantic o Wall que canta a la más mínima::............................................................... Process terminated with status 0 (0 minutes, 0 seconds) 0 errors, 0 warnings (0 minutes, 0 seconds) .....................................
Ya me cuentas como te ha ido.¡¡¡¡ Saluditos! ..... !!!!
|
|
|
|
|
|
|