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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  De minúscula a mayúscula a nivel de bits en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 Ir Abajo Respuesta Imprimir
Autor Tema: De minúscula a mayúscula a nivel de bits en lenguaje C.  (Leído 15,706 veces)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #20 en: 3 Enero 2014, 01:01 am »

Sí.


En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #21 en: 3 Enero 2014, 01:09 am »

Ok, lo voy a analizar más profundamente, lo necesito.-

Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #22 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: :rolleyes: :rolleyes: :rolleyes:

Código
  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void binarioConvertir(int, char[]);
  6.  
  7. int main(void){
  8.  
  9.    char cadena[] = "daniel", cad_binaria[8] = "";
  10.    int ascii=0, i=0, binarioMayuscula=0;
  11.  
  12.    while(i<6){
  13.        ascii = cadena[i];
  14.        binarioConvertir(ascii,cad_binaria);
  15.        convertir_a_decimal(cad_binaria);
  16.        printf("\n%c en decimal %3d en binario %s", cadena[i], ascii, cad_binaria);
  17.        if (cad_binaria[1] = '1')
  18.            cad_binaria[1] = '0';
  19.        printf(" -->mayuscula-->%c-->",convertir_a_decimal(cad_binaria) );
  20.        printf(" %s-->%d",cad_binaria,convertir_a_decimal(cad_binaria));
  21.        i++;
  22.    }
  23.    printf("\n\n");
  24.    return 0;
  25. }
  26.  
  27. void binarioConvertir(int num, char cad[]){
  28.    int i=0, izq=0, der=0, aux=0;
  29.    while(num>0){
  30.        if(num%2 == 0)
  31.            cad[i] = '0';
  32.        else
  33.            cad[i] = '1';
  34.        num = num/2;
  35.        i++;
  36.    }
  37.    der=6;
  38.    while(izq<3){
  39.        aux      = cad[izq];
  40.        cad[izq] = cad[der];
  41.        cad[der] = aux;
  42.        der--;
  43.        izq++;
  44.    }
  45.    cad[7] = '\0';
  46. }
  47.  
  48. int convertir_a_decimal (char cad[]){
  49.    int decimal=0,i;
  50.    for (i=6;i>=0;i--){
  51.        if (cad[6-i]!='0'){
  52.            decimal+=pow (2,i*((cad[6-i])-48));
  53.        }
  54.    }
  55.    return decimal;
  56.  
  57.  
  58. }
  59.  

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! ..... !!!!


« Última modificación: 3 Enero 2014, 21:58 pm por leosansan » En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #23 en: 3 Enero 2014, 18:58 pm »

Hola leosansan.
Citar
No me gusta ni pizca el código que te paso, pero no quería modificarte el tuyo de forma sustancial:
Te pido por favor que la próxima vez, si tenes que utilizar este tipo de aclaraciones prefiero que no me contestes o que me pidas que no efectúe nuevo post.-
Yo soy un autodidacta y dependo muchísimo de los foros, con tu aclaración me estás dando a entender que mi código está mal, perfecto lo acepto y acepto me falta mucho por aprender, no sería mejor que pusieras un programa como el que hiciste pero a tu manera y de esa forma me dieras la  posibilidad de aprender la forma correcta de hacerlo.-       

Muchas gracias por tu tiempo.-
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #24 en: 3 Enero 2014, 19:40 pm »

Bueno el caso es que ahora necesito que me digan cómo seguir,  ¿como paso el nuevo binario a la “d”  para que se transforme en “D”?
Si la intención es realizar las operaciones a nivel de bits entonces para pasar de:
A) Mayúsculas a minúsculas, debes activar el sexto bit mediante el operador "|" y una mascara (el valor 32).
B) Minúsculas a mayúsculas, debes desactivar el sexto bit mediante el operador "&" y una mascara (el valor opuesto al anterior, 223).

Un programa de ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char ch[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  7.   int i;
  8.  
  9.   puts("Mayusculas a minusculas:");
  10.   for (i = 0; i < 26; i++){
  11.      ch[i] |= 32;
  12.      printf("%c", ch[i]);
  13.   }
  14.   putchar('\n');
  15.  
  16.   puts("Minusculas a mayusculas:");
  17.   for (i = 0; i < 26; i++){
  18.      ch[i] &= 223;
  19.      printf("%c", ch[i]);
  20.   }
  21.   putchar('\n');
  22.  
  23.   return EXIT_SUCCESS;
  24. }

----

Por ultimo tal vez tu programa no tenga el comportamiento esperado debido a esta declaración:
Código
  1. char cadena[6] = "daniel";
Con ella se crea un array de seis elementos inicializados con los caracteres indicados pero falta el indicador de fin de cadena (el '\0'), para que este se agregue de forma automática debes eliminar el numero de elementos del array o bien indicar el numero correcto (siete).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #25 en: 3 Enero 2014, 19:46 pm »

Ten en cuenta Daniel, que el hecho de que te guste un código o no a veces es un poco subjetivo. Lo que le guste a Leo no tiene porque ser siempre lo que te guste a tí o a mí. Por ejemplo en las declaraciones de función:
Código
  1. void binarioConvertir(int num, char cad[]){
  2.  
  3. //...
  4.  
  5. }

Yo soy más partidario de poner las llaves así porque se ve mejor cuando empieza y cuando acaba:
Código
  1. void binarioConvertir(int num, char cad[])
  2. {
  3.  
  4. //...
  5.  
  6. }

Pero eso es cuestión de gustos.

Bueno y ya hablando del código, esta función:
Código
  1. int convertir_a_decimal (char cad[]){
  2.   int decimal=0,i;
  3.   for (i=6;i>=0;i--){
  4.       if (cad[6-i]!='0'){
  5.           decimal+=pow (2,i*((cad[6-i])-48));
  6.       }
  7.   }
  8.   return decimal;
  9. }

Esa función no es muy portable, puesto que para que funcione la cadena debe medir exactamente 6 caracteres.

Existe una función de la librería estándar que te calcula el tamaño de una cadena:
Código
  1. #include <string.h>
  2.  
  3. //...
  4.  
  5. strlen(cadena);

Podemos ayudarnos de ella para reescribir la función:

Código
  1. int convertir_a_decimal (char cad[]){
  2.   int decimal=0,i;
  3.  
  4.  int tam_cadena = strlen(cad);
  5.  
  6.  for (i = tam_cadena-1;i>=0;i--)
  7.  {
  8.       if (cad[tam_cadena-i]!='0')
  9.       {
  10.           decimal+=pow (2,i*((cad[tam_cadena-i])-48));
  11.       }
  12.  }
  13.  return decimal;
  14. }

De esa forma esta función te valdrá para cualquier tamaño de cadena, por lo que la podrás reutilizar siempre que quieras.

Y aunque no la pienses reutilizar, es una buena costumbre hacer las funciones lo más generales posibles, de lo contrario te podrías encontrar con errores extraños si modificas el código.

Y siguiendo otra vez con la función, ese pow no es necesario. Podemos definir la potencia aprovechando las iteraciones del for, lo que haremos es cambiar el sentido del for y añadir una variable más:

Código
  1. int convertir_a_decimal (char cad[])
  2. {
  3.   int decimal=0,i;
  4.  
  5.  int tam_cadena = strlen(cad);
  6.  int multiplicador = 1;
  7.  
  8.  for (i = 0; i < tam_cadena; i++)
  9.  {
  10.       if (cad[tam_cadena-i]!='0')
  11.       {
  12.           decimal += multiplicador * (cad[tam_cadena-i])-48);
  13.           multiplicador *= 2;
  14.       }
  15.  }
  16.  return decimal;
  17. }

Y por último, quitaría ese 48 por un '0':
Código
  1. int convertir_a_decimal (char cad[])
  2. {
  3.  int decimal=0,i;
  4.  
  5.  int tam_cadena = strlen(cad);
  6.  int multiplicador = 1;
  7.  
  8.  for (i = 0; i < tam_cadena; i++)
  9.  {
  10.       if (cad[tam_cadena-i] != '0')
  11.       {
  12.           decimal += multiplicador * (cad[tam_cadena-i]) - '0');
  13.           multiplicador *= 2;
  14.       }
  15.  }
  16.  return decimal;
  17. }
« Última modificación: 3 Enero 2014, 20:17 pm por amchacon » 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
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #26 en: 3 Enero 2014, 20:13 pm »

Otra forma es multiplicar el acumulado por la base y agregar el dígito:
Código
  1. int convertir_a_decimal(char cad[])
  2. {
  3.   int rv = 0;
  4.   int i;
  5.  
  6.   for (i = 0; cad[i] != '\0'; i++)
  7.      rv = rv * 2 + cad[i] - '0';
  8.  
  9.   return rv;
  10. }

Una opción mejor es la función strtol, parte de la biblioteca estándar de C y con soporte para las bases 2 a 36.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #27 en: 3 Enero 2014, 23:22 pm »

Hola a todos.
Muchas pero muchas gracias a todos, vaya que predisposición para ayudar, por favor sigan así, no se puede pedir más, realmente con todas estas respuesta se podría hacer un tutorial.-
Leosansan, con mis 61 años debo reconocer que siempre fui muy visceral extremadamente franco y en este caso te pido disculpas si fui muy duro pero es lo que sentí en el momento, y para que veas que me hago cargo de mis errores voy a dejar de postear el elhacker.net, de esta manera trato de no perjudicarte, es preferible que te quedes vos que podes ayudar a muchos y no yo que he dejado un triste antecedente.-

Saludo a todos los genios que ayudan y a todos los que vienen a buscar soluciones que seguramente la encontraran.-
Hasta siempre.
Roberto Daniel Virgili.-
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #28 en: 4 Enero 2014, 10:28 am »

Hola leosansan.Te pido por favor que la próxima vez, si tenes que utilizar este tipo de aclaraciones prefiero que no me contestes o que me pidas que no efectúe nuevo post.-
Yo soy un autodidacta y dependo muchísimo de los foros, con tu aclaración me estás dando a entender que mi código está mal, perfecto lo acepto y acepto me falta mucho por aprender, no sería mejor que pusieras un programa como el que hiciste pero a tu manera y de esa forma me dieras la  posibilidad de aprender la forma correcta de hacerlo.  



Estamos en el mismo barco, yo también soy autodidacta.

Respecto a lo segundo soy de la opinión de cuando alguien postea un código y tiene algún error procedo a la corrección pertinente respetando en lo posible su código, no a poner un código que a mí se me ocurra, ya que puede que el nivel no sea el mismo y no le sirva, y no es porque mi nivel sea alto, todo lo contrario.


..................................................................
Leosansan, con mis 61 años debo reconocer que siempre fui muy visceral extremadamente franco y en este caso te pido disculpas si fui muy duro pero es lo que sentí en el momento, y para que veas que me hago cargo de mis errores voy a dejar de postear el elhacker.net, de esta manera trato de no perjudicarte, es preferible que te quedes vos que podes ayudar a muchos y no yo que he dejado un triste antecedente.-
..........................................


Casi te pillo, yo tengo 59 años y como tu, además de autodidacta, soy muy crítico conmigo mismo, así que si te he ofendido en algo te pido humildemente disculpas. Pero sinceramente no sé que he podido decir que te haya ofendido ;).

No entiendo por qué quieres dejar de postear en este foro. Creo que se te ha ayudado de forma presta e intensa: ivancea96, rir3760, amchacon y yo mismo.

No entiendo por qué dices que lo haces por no perjudicarme, todo lo contrario, me has ayudado a refrescar cositas sobre números en binario y máscaras de bits.  :rolleyes:

Y para que veas que te respeto y admiro, como en mi caso, al meterte en este mundillo con tu edad y por ti solo, te dejo una nueva solución, esta vez partiendo de cero, usando las funciones que el C pone a nuestra disposición. Por no usar, no he usado ni strlen como sugirió amchacon:


Citar
Introduzca una  frase en minusculas:

rir amchacon leosansan

  r en decimal 114 en binario 1110010 -->mayuscula-->R--> 1010010-->82
  i en decimal 105 en binario 1101001 -->mayuscula-->I--> 1001001-->73
  r en decimal 114 en binario 1110010 -->mayuscula-->R--> 1010010-->82
    en decimal  32 en binario 100000 -->mayuscula--> --> 100000-->32

  a en decimal  97 en binario 1100001 -->mayuscula-->A--> 1000001-->65
  m en decimal 109 en binario 1101101 -->mayuscula-->M--> 1001101-->77
  c en decimal  99 en binario 1100011 -->mayuscula-->C--> 1000011-->67
  h en decimal 104 en binario 1101000 -->mayuscula-->H--> 1001000-->72
  a en decimal  97 en binario 1100001 -->mayuscula-->A--> 1000001-->65
  c en decimal  99 en binario 1100011 -->mayuscula-->C--> 1000011-->67
  o en decimal 111 en binario 1101111 -->mayuscula-->O--> 1001111-->79
  n en decimal 110 en binario 1101110 -->mayuscula-->N--> 1001110-->78
    en decimal  32 en binario 100000 -->mayuscula--> --> 100000-->32

  l en decimal 108 en binario 1101100 -->mayuscula-->L--> 1001100-->76
  e en decimal 101 en binario 1100101 -->mayuscula-->E--> 1000101-->69
  o en decimal 111 en binario 1101111 -->mayuscula-->O--> 1001111-->79
  s en decimal 115 en binario 1110011 -->mayuscula-->S--> 1010011-->83
  a en decimal  97 en binario 1100001 -->mayuscula-->A--> 1000001-->65
  n en decimal 110 en binario 1101110 -->mayuscula-->N--> 1001110-->78
  s en decimal 115 en binario 1110011 -->mayuscula-->S--> 1010011-->83
  a en decimal  97 en binario 1100001 -->mayuscula-->A--> 1000001-->65
  n en decimal 110 en binario 1101110 -->mayuscula-->N--> 1001110-->78



Código
  1. #include<stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void){
  5.    char cadena[100],binario[8] = "";
  6.    int i=0;
  7.    puts("Introduzca una  frase en minusculas:\n");
  8.    scanf ("%100[^\n]", cadena);
  9.    for (i=0;cadena[i] ;i++){
  10.        printf("\n  %c en decimal %3d en binario %s", cadena[i],(int)(cadena[i]), itoa((int) (cadena[i]),binario,2 ));
  11.        if (binario[1] = '1' )
  12.            binario[1] = '0';
  13.        if (!isalpha(cadena[i]))
  14.            cadena[i]+=32;
  15.        printf(" -->mayuscula-->%c-->",(int)(cadena[i])-32 );
  16.        printf(" %s-->%d",binario,((int)(cadena[i])-32));
  17.    }
  18.    puts("\n\n");
  19.    return 0;
  20. }
  21.  

¡¡¡¡ Saluditos! ..... !!!!

:rolleyes: ;) ;) ;) :rolleyes:
« Última modificación: 6 Enero 2014, 19:52 pm por leosansan » En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #29 en: 4 Enero 2014, 15:00 pm »

Hola a todos.
Si bien este es un foro de programación para que se me entienda mejor tengo que introducir un poco de teoría sobre lo que realmente vine a aprender en esta reencarnación (como en las anteriores) que es a evolucionar, tengo que observar mis errores y haciéndome cargo voy solucionando cosas paso a paso y este es uno de ellos, estoy muy consciente que viendo lo que está pasando humanamente voy a perder mucho sin la ayuda de todos Uds. pero priorizo lo espiritual, luego Dios (como siempre) me presentará a otros hermanos para que me enseñen (si el karma no está aprendido tal vez sean Uds. mismo, el padre me lo hará saber).-

Amigos, un gran abrazo a la distancia y que tengan un muy buen día.-

“Yo solo digo lo que vos necesitas escuchar”
Roberto Daniel Virgili.-
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
Páginas: 1 2 [3] 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
convertir txt a mayuscula minuscula mayuscuala...
Programación Visual Basic
4D1cTo 4 5,768 Último mensaje 18 Junio 2006, 15:10 pm
por Hadess_inf
Convertir cadena minuscula en mayuscula
Programación C/C++
delirio 3 13,446 Último mensaje 28 Noviembre 2010, 04:36 am
por delirio
[Python] - Ejercicio de Mayúscula y Minúscula
Scripting
ChicoMaravilla 2 12,514 Último mensaje 3 Diciembre 2010, 02:17 am
por ChicoMaravilla
convertir minúscula a mayúscula « 1 2 »
Programación C/C++
m@o_614 10 47,323 Último mensaje 24 Abril 2017, 12:31 pm
por NikNitro!
De minúscula a mayúscula a nivel de bits (lenguaje C.)
Programación C/C++
NOB2014 4 3,564 Último mensaje 21 Marzo 2014, 02:44 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines