Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anonimo12121 en 14 Mayo 2010, 12:27 pm



Título: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 14 Mayo 2010, 12:27 pm
hola necesito ayuda por que no se si seria posible de alguna forma pasarle a 1 parametro de funcion algo como esto
int a,b;
int func(int parametro){
}

func(a || b);

o

fun (a && b);

saludos


Título: Re: [AYUDA]Funcion avanzada
Publicado por: h0oke en 14 Mayo 2010, 13:25 pm
Supongo que podrías hacerlo, pero en el parámetro deberías indicar un tipo booleano, ya que "a&&b" o "a || b" devuelven un tipo de dato booleano.

(Ahora lo intento)

EDITADO
Espero que te refieras a esto:

Código
  1. #include <iostream>
  2.  
  3. #define TRUE 1
  4. #define FALSE 0
  5.  
  6. int funcion(bool z)
  7. {
  8.  if(z)
  9.    return 4;
  10.  else
  11.    return 0;
  12. }
  13.  
  14. int main()
  15. {
  16.  int a;
  17.  bool b = TRUE;
  18.  bool c = FALSE;
  19.  a = funcion(b && c);
  20.  std::cout<<"Valor funcion: "<<a<<std::endl;
  21.  return 0;
  22. }


Título: Re: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 14 Mayo 2010, 13:33 pm
si creo que si. ahora lo probare y te aviso.

EDITO: pero tiene que ser BOOL o podria ser por ejemplo un int ?.


Título: Re: [AYUDA]Funcion avanzada
Publicado por: Gallu en 14 Mayo 2010, 13:37 pm
Puede ser perfectamente un int , solo recuerda que en C y C++ 0 es false y cualquier valor distinto de 0 es true

prueba esto ...

Código
  1. #include <stdio.h>
  2.  
  3. void my_funci(int valor);
  4. int main(){
  5. int a = 1 , b = 0;
  6. my_funci(a&&b);
  7. my_funci(a||b);
  8. my_funci(a&b);
  9. my_funci(a|b);
  10. }
  11.  
  12. void my_funci(int valor){
  13. printf("\n%d", valor);
  14. }
  15.  


Título: Re: [AYUDA]Funcion avanzada
Publicado por: h0oke en 14 Mayo 2010, 13:39 pm
Puede ser un int, ya que teóricamente en C/C++ el TRUE y FALSE, corresponden a un 1 lógico y un 0 lógico.

(EDIT: Me ganaron la respuesta)

EDIT2:

Creo que lo más conveniente, es declarar un tipo bool ya que precisamente se está evaluando una operación booleana, que en el fondo debería devolver un "tipo boolean", sólo es cuestión de gustos en esta parte... yo eligiría el bool pero no sabría fundamentar BIEN por qué razón...


Título: Re: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 14 Mayo 2010, 13:47 pm
Hola miren esto es lo que quiero, pero no me sale.

si algun de las 2 variables puesta en el parametro x es = x devuelve x valor.

Código
  1. #include <iostream>
  2. using namespace std;
  3. int a1=6;
  4. int a2=5;
  5. int a3;
  6. int funcion(int v1){
  7.    if(v1==6)return 1;
  8. }
  9. int main(int argc,char *argv[]){
  10.    a3=funcion(a1 && a2);
  11.    cout << a3;
  12.    cin.get();
  13. }

pero me devuelve 16364.


Título: Re: [AYUDA]Funcion avanzada
Publicado por: Gallu en 14 Mayo 2010, 13:50 pm
Hombre , al hacer esto  a3=funcion(a1 && a2);  dentro de la función  v1 = 1 y no a 6 , el valor  16364. es basura simplemente


Título: Re: [AYUDA]Funcion avanzada
Publicado por: h0oke en 14 Mayo 2010, 13:55 pm
Código
  1. v1 = 6 &&5 /*Esto es 1, no 0*/

Nunca podrá ser un valor distinto de 0 o 1 ya que la operación regresa esos 2 valores.


Título: Re: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 14 Mayo 2010, 17:26 pm
ok gracias


Título: Re: [AYUDA]Funcion avanzada
Publicado por: biribau en 14 Mayo 2010, 19:30 pm
Tu quieres una especie de función superescalar o vectorial(creo que no es lo mismo), eso en C no se puede, habrás de pasarle un array de enteros y procesarlos con un bucle, también te hará falta un límite para el array.
Código
  1. int funcion(int *valores, int numero_de_valores) {
  2.       for(int i =0; i < numero_de_valores; i++)
  3.             if(valores[i] == 6) return 1;
  4.       return 0;
  5. }
Y para aprovechar las instrcciones SIMD del procesador pues ya no sé, con funciones de alguna librería.


Título: Re: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 14 Mayo 2010, 20:22 pm
Ya me di cuenta de que no se puede, tendre que buscar otro metodo.

gracias. saludos


Título: Re: [AYUDA]Funcion avanzada
Publicado por: O-LLOS-O en 14 Mayo 2010, 20:41 pm
azla bit a bit, con un solo &


Título: Re: [AYUDA]Funcion avanzada
Publicado por: h0oke en 15 Mayo 2010, 01:11 am
No entendí muy bien... Qué es lo que necesita?


Título: Re: [AYUDA]Funcion avanzada
Publicado por: biribau en 15 Mayo 2010, 01:55 am
No entendí muy bien... Qué es lo que necesita?
Yo deduzco que con f(a&&b) quería conseguir f(a) && f(b) ?


Título: Re: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 15 Mayo 2010, 10:30 am
NO.

por ejemplo inserto 3 variables en el parametro y en la funcion hay un if, si algun de las 3 variables insertada en el parametro...



Título: Re: [AYUDA]Funcion avanzada
Publicado por: h0oke en 15 Mayo 2010, 13:20 pm
Pero entonces ¿por qué razón no creas una función con 3 parámetros? :huh:


Título: Re: [AYUDA]Funcion avanzada
Publicado por: Gallu en 15 Mayo 2010, 13:20 pm
Pienso que lo que escribio biribau es lo que necesitas ... ::)


Título: Re: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 15 Mayo 2010, 16:21 pm
Pero entonces ¿por qué razón no creas una función con 3 parámetros? :huh:
pues por que tendria que hacer 1 if para  cada parametro.
Pienso que lo que escribio biribau es lo que necesitas ... ::)
Si creo que tambien lo probare .

Gracias por ayudarme tanto, saludos.


Título: Re: [AYUDA]Funcion avanzada
Publicado por: Foxy Rider en 15 Mayo 2010, 17:29 pm
Me parece que lo que querés es operaciones con bits, ¿ no ? para empezar no es avanzado ....
el tema es .. cuantos flags querés on y off (mientras menos, mejor), y en base a eso elegís un tipo de dato que logre acaparar esa cantidad de bits, la cantidad de bits es igual o lo más próximo (contando desde arriba) a la cantidad de opciones

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* que sería en binario -> 0000 0000 0000 0000 0000 0000 0000 0001 */
  5. #define BIT_HI 0x1
  6. /* que sería en binario -> 0000 0000 0000 0000 0000 0000 0000 0010 */
  7. #define BIT_WORLD 0x2
  8. /* que sería en binario -> 0000 0000 0000 0000 0000 0000 0000 0100 */
  9. #define BIT_ELHACKER 0x4
  10.  
  11. /* los 1 no deben superponerse*/
  12.  
  13. int bitCheck(int Flags,int Bit){return ((Flags & Bit)== Bit);}
  14. void bitAdd(int Flags,int Bit){Flags|=Bit;}
  15. void bitToggle(int Flags,int Bit){Flags^=Bit;}
  16. void bitUnset(int Flags,int Bit){Flags &= ~Bit;}
  17.  
  18. void mFuncion(int mMask)
  19. {
  20.    if (bitCheck(mMask,BIT_HI)) printf(" Hola");
  21.    if (bitCheck(mMask,BIT_WORLD)) printf(" Mundo");
  22.    if (bitCheck(mMask,BIT_ELHACKER)) printf(" de elhacker.net");
  23. }
  24.  
  25. int main()
  26. {
  27.    printf("\r\nUsando BIT_HI y BIT_WORLD : ");
  28.    mFuncion(BIT_HI|BIT_WORLD);
  29.    printf("\r\nUsando BIT_HI, BIT_WORLD y BIT_ELHACKER: ");
  30.    mFuncion(BIT_HI|BIT_WORLD|BIT_ELHACKER);
  31.    return 0;
  32. }
  33.  
  34.  

para este ejemplo elegí un tipo de dato muy grande, con un byte o char alcanzaba tranquilamente (8 bits), pero bueh, para ilustrar... también hay funciones que no se usan ahí, pero también las dejé para ilustrar y para no las usé para no liar mucho el ejemplo ...

¿es eso ?

Saludos.


Título: Re: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 15 Mayo 2010, 18:00 pm
NO lo que queria era meter 3 variables en 1 parametro y si alguna de esas es por ejemplo if(x==1)...


Título: Re: [AYUDA]Funcion avanzada
Publicado por: h0oke en 15 Mayo 2010, 19:33 pm
Entonces por qué no un array?


Título: Re: [AYUDA]Funcion avanzada
Publicado por: anonimo12121 en 15 Mayo 2010, 20:00 pm
ya tendria que haber un bucle. pero si es lo mejor creo.