Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gold oscar en 2 Noviembre 2016, 18:49 pm



Título: Ayuda con esta funcion
Publicado por: gold oscar en 2 Noviembre 2016, 18:49 pm
Hola gente, soy muy nuevo en programar y necesito que me ayuden para poder entender esta parte de la materia. Si bien hasta ahora entendí todo lo visto en la materia, esto de funciones me esta dando trabajo, mas específicamente en el pasaje por valor y parámetros. Mi duda es sobre un ejercicio, que no puedo interpretar y no se como hacer, y creo que si puedo entender como se hace este, puedo sacar los demás también.

El ejercicio en cuestión es este:
Implementar una función que devuelva la cantidad de bits en 1 que tiene un char que se le pasa como parámetro por valor y por referencia. Invocarla desde el main y verificar imprimiendo varios casos(hexadecimal y al lado cant de unos).

Alguien podría darme una mano! Es que si bien entiendo la "lógica" del pasaje de parámetros, no se como hacerlo en el programa.

Saludos y disculpen mi ignorancia!!  :-(


Título: Re: Ayuda con esta funcion
Publicado por: engel lex en 2 Noviembre 2016, 19:13 pm
las funciones tienden a ser en general bastante simples

ejemplo de una función cualquiera...

Código
  1. int nombreDeLaFuncion(int parametro){
  2.    //contenido
  3.    return algo;
  4. }

en general son

Código:
tipoRetorno nombreFuncion(tipoParametro nombreParametro){
    //contenido
    return variableDeTipoRetorno;
}

el tipo tanto de funcion como de parametros son int,char, etc...
el return debe ser un valor del mismo tipo que la función

así que si haces por ejemplo una funcion de división que acepte enteros pero retorne float

Código
  1. float division(int dividendo, int divisor){
  2.    float resultado = (float)dividendo/(float)divisor;
  3.    return resultado;
  4. }

(los float entre parentesis es para obligar a que se comporten como y que retornen decimales)

espero resuelva tu duda, si no, explica con más detalle cual fue


Título: Re: Ayuda con esta funcion
Publicado por: gold oscar en 2 Noviembre 2016, 20:24 pm
Si eso lo entiendo, pero no entiendo como plantear ese ejercicio que puse ahi


Título: Re: Ayuda con esta funcion
Publicado por: engel lex en 2 Noviembre 2016, 20:31 pm
El char sabemos que tiene 8 bits, la forma más simple es cuando & y >> para ir leyendo bit a bit en un for


Título: Re: Ayuda con esta funcion
Publicado por: gold oscar en 3 Noviembre 2016, 00:54 am
Sigo sin entender como comenzarlo, :-(


Título: Re: Ayuda con esta funcion
Publicado por: engel lex en 3 Noviembre 2016, 01:06 am
Recomiendo e estudiar operadores de bits

Es algo básico de c que te puede ayudar mucho más adelante

Aquí hay información básica
http://www.zator.com/Cpp/E4_9_3.htm


Título: Re: Ayuda con esta funcion
Publicado por: gold oscar en 3 Noviembre 2016, 01:37 am
Ya se todo lo de operadores de bits, lo que no se es como hacer el ejercicio que postee, si alguien aunque sea me ayuda a comenzarlo......


Título: Re: Ayuda con esta funcion
Publicado por: engel lex en 3 Noviembre 2016, 02:10 am
sabes convertir un char a binario? (obtener los bits)

que no sabes exactamente?


Título: Re: Ayuda con esta funcion
Publicado por: gold oscar en 3 Noviembre 2016, 07:05 am
No entiendo como hacer el ejercicio en si. >:(


Título: Re: Ayuda con esta funcion
Publicado por: gold oscar en 3 Noviembre 2016, 08:30 am
Hola, disculpen que sea tan pesado, pero esto es lo que se me ocurrio hasta ahora
Código:
int cant(char a[30])
        {
            int i=0;

            while(a[i]!=0)
            {
                if(a[i]>='0' && a[i]<='2')
                {
                    i++;
                }
            }
            return(i);
        }


int main()
        {
           char a[30]="11111";
           int j;
           j=cant(a);


            printf("cantidad de bits en 1=%d",j);

            return(0);
        }



se imprime: la cantidad de bits en 1 es=5


estara bien eso?  :(


Título: Re: Ayuda con esta funcion
Publicado por: engel lex en 3 Noviembre 2016, 13:54 pm
No se están imprimiendo los bits en 1... se están imprimiendo los char que contienen el número 1

Si por ejemplo le pasas 'A' debería retornar 1, ya que esa letra en ascii es 64 (01000000) , los char pueden ser tratados como números , por eso todo lo que te dije de las operaciones binarias


Título: Re: Ayuda con esta funcion
Publicado por: gold oscar en 3 Noviembre 2016, 20:41 pm
entonces como debo hacerlo, porque la verdad es que se me ocurrio eso solo.


Título: Re: Ayuda con esta funcion
Publicado por: engel lex en 3 Noviembre 2016, 20:50 pm
El char sabemos que tiene 8 bits, la forma más simple es usando & y >> para ir leyendo bit a bit en un for



Título: Re: Ayuda con esta funcion
Publicado por: gold oscar en 3 Noviembre 2016, 20:56 pm
pero no se como plantear eso en el programa


Título: Re: Ayuda con esta funcion
Publicado por: engel lex en 3 Noviembre 2016, 21:04 pm
un ejemplo de conversión a binario

Código
  1. #include <stdio.h>
  2. void PrintInBinary( unsigned int decNum )
  3. {
  4.  
  5.    unsigned int bit;
  6.  
  7.    for( bit = 0; bit < 8; bit ++) {
  8.  
  9.        printf( "%c", decNum & bit ? '1' : '0' );
  10.        decNum >> 1;
  11.    }
  12.    printf("\n");
  13.  
  14. }
  15. int main(void) {
  16. PrintInBinary(126);
  17. return 0;
  18. }


Título: Re: Ayuda con esta funcion
Publicado por: gold oscar en 3 Noviembre 2016, 21:21 pm
Pero ahi me pide que indique la cantidad de unos que hay


Título: Re: Ayuda con esta funcion
Publicado por: engel lex en 3 Noviembre 2016, 21:30 pm
ya te mostré como convertir a binario... piensa que hay que cambiar y has tu funcion


Ya se todo lo de operadores de bits, lo que no se es como hacer el ejercicio que postee, si alguien aunque sea me ayuda a comenzarlo......

me indicas que sabes todo de operadores de bit... es simple