|
501
|
Programación / Programación C/C++ / Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
|
en: 3 Enero 2014, 18:10 pm
|
Creo que esta es la salida que buscas:No me gusta ni pizca el código que te paso, pero no quería modificarte el tuyo de forma sustancial: #include<stdio.h> #include <stdlib.h> #include <math.h> void binarioConvertir(int, char[]); int main(void){ char cadena[] = "daniel", cad_binaria[8] = ""; int ascii=0, i=0, binarioMayuscula=0; while(i<6){ ascii = cadena[i]; binarioConvertir(ascii,cad_binaria); convertir_a_decimal(cad_binaria); printf("\n%c en decimal %3d en binario %s", cadena[i], ascii, cad_binaria); if (cad_binaria[1] = '1') cad_binaria[1] = '0'; printf(" -->mayuscula-->%c-->",convertir_a_decimal(cad_binaria) ); printf(" %s-->%d",cad_binaria,convertir_a_decimal(cad_binaria)); i++; } printf("\n\n"); return 0; } void binarioConvertir(int num, char cad[]){ int i=0, izq=0, der=0, aux=0; while(num>0){ if(num%2 == 0) cad[i] = '0'; else cad[i] = '1'; num = num/2; i++; } der=6; while(izq<3){ aux = cad[izq]; cad[izq] = cad[der]; cad[der] = aux; der--; izq++; } cad[7] = '\0'; } int convertir_a_decimal (char cad[]){ int decimal=0,i; for (i=6;i>=0;i--){ if (cad[6-i]!='0'){ decimal+=pow (2,i*((cad[6-i])-48)); } } return decimal; }
Todo es jugar con el valor del caracter en la posición 1.
Te he añadido la conversión a decimal usando las potencias de 2. Lo he hecho con "pow" por ganseria xD. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
502
|
Programación / Programación C/C++ / Re: problema con el siguiente codigo [C]
|
en: 3 Enero 2014, 15:26 pm
|
Estoy intentado hacer un programa al cual se le introduce un texto por teclado y que vaya cambiando las vocales por su siguiente vocal:
Si lee una 'a' devuelve una 'e'.
Si lee una u devuelve una 'a'.
No se tienen en cuenta mayusculas ni vocales acentuadas. ................................................................... Una vez lo consiga hacer con la entrada por teclado y la salida por monitor el siguiente paso seria hacerlo con ficheros. salu2
Antes que nada procura indentar o sangrar el código para que sea más legible y elige las etiquetas de C++, aunque el código sea en C. Salen de esa forma coloreado y es más fácil leerlo.
Y en tema pon una breve descripción de lo que buscas, no aclara nada eso de "problema con el siguiente codigo [C]"
Te pongo el código con las correciones que me han parecido y que no se aparten de tu código original. Por cierto, ya veras cómo salir del bucle. . #include <stdio.h> int esVocal (char c); char sigVocal (char c); int main (){ char c; do{ puts ("Introduzca vocal:"); scanf("%c",&c); while (getchar ()!='\n'); if(esVocal(c)!=0) printf("%c\n", sigVocal(c)); }while(c!= EOF); return 0; } int esVocal (char c){ int si_o_no=0; if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') si_o_no=1; else si_o_no=0; return si_o_no; } char sigVocal (char c){ if(c=='a') c='e'; else if(c=='e') c='i'; else if(c=='i') c='o'; else if(c=='o') c='u'; else if(c=='u') c='a'; return c; }
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
503
|
Programación / Programación C/C++ / Re: Programar quiniela en C.
|
en: 3 Enero 2014, 15:06 pm
|
Y YO REPITO LO DE: ¿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! ..... !!!!
|
|
|
504
|
Programación / Programación C/C++ / Re: Error en programa en C
|
en: 3 Enero 2014, 15:00 pm
|
He provado de todo, y no hay manera estoy desesperao xD
¡¡¡Chacho!!!, tranquilito. No me convence del todo tu código así que lo he "variado" un poquitito.
Y ya que no usas para entrar las cadenas ninguna función -scanf, gets, fgets, etc-, da la sensación que no quieres usar las funciones más habituales. Eso me lleva a que en este caso tampoco tendría sentido usar strcpy, strlen, isupper, bool, isblank, strcmp , vamos "ná de ná" y mucho menos las correspondientes librerías <ctype.h>, <string.h> y<stdbool.h>.
Así que sólo uso la mísera librería <stdio.h> y su función asociada getchar. ¡¡¡Todo un reto!!!.
Y opara que veas que funciona, un pantallazo:#include <stdio.h> void pillo_cadena (char cad[600],int flag); int con_pal,con_frase,cont_l_on_palabras,lon_frase; void palabras_en_palabras (char palabras[],char frase[]); void ordenar (char cadena[10]); int comparar (char temp1[10],char temp2[10]); int longitud_cadena (char cadena[10]); char convertidor(char caracter); char palabras[10],n_palabras[10][51],temp [10],frase[600]; int main (){ char palabras[]="leon San noel."; char frase[]="NeoL aSN sAn Nas LeoN."; /* Acticva lo que sigue para introducir a mano los datos y desactiva entonces los dos anteriores */ /*int flag=0; char palabras[10],frase[600]; palabras[0]=frase[0]='\0'; flag=1; printf("Introduce un seguido de palabras (10 max) de 50 caracteres como mucho, terminando con un '.'\n"); pillo_cadena (palabras,flag); flag=2; printf("Introduce el texto, separando las palabras con especios i terminando con un '.', las palabras deben de ser de 50 letras max\n"); pillo_cadena (frase,flag);*/ palabras_en_palabras (palabras,frase); return 0; } void pillo_cadena (char cad[600],int flag){ int i=0; int pillo_cad; cad[0]='\0'; do{ pillo_cad=getchar(); cad[i]=pillo_cad; if (flag ==1) palabras[i]=cad[i]; if (flag ==2) frase[i]=cad[i]; i++; } while (pillo_cad != '\n'); cad[i-1]='\0'; if (flag ==1) palabras[i-1]=cad[i-1]; if (flag ==2) frase[i]=cad[i-1]; } void palabras_en_frase (char frase[],int con_pal,char temp[]){ int i,cont=0,cont2=0; char aux [10],ch; aux [0]='\0'; for (i=0;frase[i];i++){ aux[cont]=frase[i]; ch=frase[i]; aux[cont]=convertidor (ch); cont++; if (frase[i]==' ' || frase[i]=='.'){ aux[cont-1]='\0'; ordenar (n_palabras[con_pal]); ordenar (aux); if (comparar (aux,n_palabras[con_pal])==0) cont2++; cont=0; aux [0]='\0'; } } printf ("\nLa palabra %s tiene %d anagramas " ,temp,cont2); printf ("en: %s" ,frase); } void palabras_en_palabras (char palabras[],char frase[]){ int i,j,cont=0,con_pal=0; char aux1 [10],temp [10],ch ; aux1 [0]=temp [0]='\0'; for (i=0;palabras[i];i++){ temp[cont]=palabras[i]; ch=palabras[i]; aux1[cont]=convertidor (ch); cont++; if (palabras[i]==' ' || palabras[i]=='.'){ aux1[cont-1]=temp[cont-1]='\0'; for (j=0;aux1[j];j++) n_palabras[con_pal][j]=aux1[j]; n_palabras [con_pal][j]='\0'; palabras_en_frase (frase,con_pal,temp); cont=0,con_pal++; aux1 [0]='\0'; } } } void ordenar (char cadena[10]){ int i,j,lon; char temp1; lon=longitud_cadena (cadena); for (i = 1; i < lon; i++){ for (j = 0 ; j < lon-i; j++){ if (cadena[j] > cadena[j+1]){ temp1 = cadena[j]; cadena[j] = cadena[j+1]; cadena[j+1] = temp1; } } } } int comparar (char temp1[10],char temp2[10]){ int i,si_o_no=0; if (longitud_cadena(temp1) != longitud_cadena(temp2)) si_o_no=1; else { for(i=0;temp1[i];i++) if (temp1[i]!=temp2[i]) si_o_no=1; si_o_no=0; } return si_o_no; } int longitud_cadena (char cadena[10]){ int i; for (i=0;cadena[i];i++); return i; } char convertidor(char caracter){ if (caracter>96 && caracter<123) caracter-=32; return (caracter); }
Es muy mejorable usando las funciones que mencioné, como para que se puedan introducir números, más espacios entre palabras -como está sólo admite un espacio entre palabras- etc. Pero bueno, creo que lo que te pongo es lo que pedías. Al menos espero te sirva de orientación. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
505
|
Programación / Programación C/C++ / Re: Error en programa en C
|
en: 2 Enero 2014, 14:56 pm
|
(PD: los comentarios y enunciado estan en catalan)
¡¡¡Chacho!!!, afloja un punto. No cuesta tanto castellanizar un código simple y nos ahorras un esfuerzo adicional.
De entrada el código no furula, vamos no compila. Eso porque creo te falta la librería <stdbool.h>, además de un "return" al final de la función main.
Lo he mirado sólo por encima y me parece poco clara la explicación de lo que hay que introducir y muy rebuscada la solución que planteas.
Los diez nombres que hay que introducir, ¿seguro que pueden llevar espacios y además acabar con punto?. Me parece muy raro si lo que pretendes es buscar anagramas.
Me parece que lo más lógico es que los diez nombres sean simples palabras, sin espacios ni ná de ná, y que la cadena, que es la que parece que puede contener 50 caracteres como máximo, o sea que sí pueda tener espacios y acabar con un punto y ya luego buscar si alguna de las palabras posee anagrama o no en la cadena. ¿Me equivoco?. ¿Puedes sacarme de la duda?.¡¡¡¡ Saluditos! ..... !!!!
|
|
|
510
|
Programación / Programación C/C++ / Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
|
en: 31 Diciembre 2013, 22:30 pm
|
................................... Pensándolo un poco mejor también se podría hacer con máscaras y operaciones a nivel de bit. Felices fiestas. ......................................
Sólo le veo un pero a lo que haces: modificas la cadena. Y si tuviera que usarla a posteriori no le valdría, a no ser que haga una copia previa de la cadena. Es una chorrada, ¡¡pero!!, podría ser.
Lo que yo propongo es cuasi-igual, sólo que no modifico la cadena original tan solo la imprimo y paso de la variable "len" ya que se puede evitar su uso.
Salida:L -> mayuscula e -> minuscula o -> minuscula S -> mayuscula a -> minuscula n -> minuscula S -> mayuscula a -> minuscula n -> minuscula -> minuscula L -> mayuscula e -> minuscula o -> minuscula N -> mayuscula
En mayusculas: LEOSANSAN LEON
En minusculas: leosansan leon
#include <stdio.h> int main(){ char cadena[]="LeoSanSan LeoN"; int i; for (i=0; cadena[i]; i++) if( cadena[i] & 0x20 ) printf("%c -> minuscula\n", cadena[i]); else printf("%c -> mayuscula\n", cadena[i]); printf("\nEn mayusculas: "); for (i=0; cadena[i]; i++) printf("%c", cadena[i]& 0xDF); putchar ('\n'); printf("\nEn minusculas: "); for (i=0; cadena[i]; i++) printf("%c", cadena[i]| 0x20); putchar ('\n'); return 0; }
¡¡¡¡ Saluditos! ..... !!!! P.D: Por ciero, ¿Daniel, Roberto o Pino1952 ?
|
|
|
|
|
|
|