Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Leon8086x en 18 Septiembre 2011, 18:35 pm



Título: Ejemplos de funciones en c
Publicado por: Leon8086x en 18 Septiembre 2011, 18:35 pm
Bueno de un ejercicio de la cátedra terminaron saliendo las siguientes funciones en c, son bastante simples pero de todas maneras las comparto, espero criticas y opiniones, o sea cualquier aporte u ocurrencia que tengan.


Bueno sin dar mas lata e aquí los códigos.


ASCII to number      

atonum.cpp

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int atonum (int numero);
  5.  
  6. void main(void)
  7. {
  8.  
  9. char c;
  10. int numero;
  11.  
  12. printf("\n \t \t ingrese un numero o caracter \n \n \n \t \t");
  13. scanf("%c",&c);
  14.  
  15. printf("\n \t \t ingreso el numero o caracter %c que en ASCII es %d  \n \n \t \t",c,c);
  16.  
  17. numero=atonum(c);
  18.  
  19. if (numero!=-1)
  20. {
  21. printf("ahora el numero  %c lo pasamos a entero en la variable numero  \n \n \t \t",c);
  22. printf("la varible numero contiene el numero %d \n \n \t \t",numero);
  23. }
  24.  
  25. if (numero==-1) {printf ("se ingreso un caracter \n \n \t \t");}
  26.  
  27.  
  28. return (0);
  29.  
  30. }
  31.  
  32. int atonum (int numero)
  33. {
  34.   int n;
  35.   if ( (numero-48)>=0 && (numero-48)<=9  ) {n=numero-48;}
  36.   if ((numero-48)<0 && (numero-48)>9) {n=-1;}
  37.   return (n);
  38. }


potencia.cpp

Código
  1.  
  2. #include <stdio.h>
  3.  
  4.  
  5.  
  6. int pot (int base, int exp);
  7.  
  8.  
  9. void main(void)
  10. {
  11.  
  12. int p,exp,base;
  13.  
  14.  
  15. printf("ingrese la base \n \n \t \t");
  16.  
  17. scanf("%d",&base);
  18.  
  19. printf("ingrese el exponenete \n \n \t \t");
  20.  
  21. scanf("%d",&exp);
  22.  
  23. p=pot(base,exp);
  24.  
  25. printf ("el numero %d elevado a la %d es %d \n \n \t \t",base,exp,p);
  26.  
  27.  
  28.  
  29.  return (0);
  30.  
  31.  
  32.  
  33. }
  34.  
  35. int pot (int base, int exp)
  36. {
  37.   int p=1;
  38.  
  39.   if (exp==0){p=1;}
  40.  
  41.   while (exp>0)
  42.   {
  43.   p*=base;
  44.   exp=exp-1;
  45.   }
  46.  
  47.   printf("\n \n \t \t %d \n \n \n ",p);
  48.   return (p);
  49.  
  50.  
  51.  
  52. }
  53.  

Otra forma de hacer la potencia de manera recursiva (Cortesía de rir3760)

Código
  1.  
  2. #include <stdio.h>
  3.  
  4.  
  5.  
  6. int pot (int base, int exp);
  7.  
  8.  
  9. void main(void)
  10. {
  11.  
  12. int p,exp,base;
  13.  
  14.  
  15. printf("ingrese la base \n \n \t \t");
  16.  
  17. scanf("%d",&base);
  18.  
  19. printf("ingrese el exponenete \n \n \t \t");
  20.  
  21. scanf("%d",&exp);
  22.  
  23. p=pot(base,exp);
  24.  
  25. printf ("el numero %d elevado a la %d es %d \n \n \t \t",base,exp,p);
  26.  
  27.  
  28.  
  29.  return (0);
  30.  
  31.  
  32.  
  33. }
  34.  
  35. int pot(int base, int exp)
  36. {
  37.   if (exp > 0)
  38.   return base * pot(base, exp - 1);
  39.  
  40.   else
  41.   return 1;
  42. }
  43.  
  44.  
  45.  
  46.  


Una función para saber si un numero entrado como caracter es numero u otra cosa.

A esta le puse esnum.cpp


Código
  1.  
  2.  
  3. #include <stdio.h>
  4.  
  5. int esnum (int numero);
  6.  
  7. void main(void)
  8.  
  9. {
  10. int numero;
  11.  
  12. printf("ingrese un numero del 0 al 9 \n \n \t \t");
  13. scanf("%c",&numero);
  14.  
  15. printf ("La funcion esnum dio %d", esnum(numero));
  16.  
  17.     return (0);
  18. }
  19.  
  20. int esnum (int numero)
  21. {
  22.  
  23.   int r;
  24.  
  25.   if (0<=(numero-48)<=9)
  26.   r=1;
  27.   r=-1;
  28.  
  29.   return (r);
  30.  
  31. }
  32.  
  33.  
  34.  
  35.  


Bueno saludos a todos y desde ya gracias, que esto me salio con la ayuda del foro.

Por cierto la resolución de funciones recursivas es un dolor de ....cabeza.  

Bueno saludos y suerte.


Título: Re: Ejemplos de funciones en c
Publicado por: Alien-Z en 19 Septiembre 2011, 09:38 am
Buen aporte, seguro que le servirá a más de uno, pero te aconsejo para la próxima vez que uses la etiqueta "code".

Saludos.


Título: Re: Ejemplos de funciones en c
Publicado por: Leon8086x en 22 Septiembre 2011, 04:35 am
Gracias. Y desde ahora usare
Código:
 code 
ya que queda mucho mas legible.


Título: Re: Ejemplos de funciones en c
Publicado por: Leon8086x en 25 Septiembre 2011, 09:41 am
Vean que la función esnum tiene varios errores; aquí la corrección funcional.

Función esnum compilada en lenguaje c con Dev c++

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int esnum (char numero);
  5.  
  6. void main(void)
  7.  
  8. {
  9. int numero, varaux;
  10.  
  11. printf("ingrese un numero del 0 al 9 \n \n \t \t");
  12. scanf("%c",&numero);
  13.  
  14. varaux=esnum(numero);
  15.  
  16. printf ("La funcion esnum dio %d", varaux);
  17.  
  18.     return (0);
  19. }
  20.  
  21. int esnum (char numero)
  22. {
  23.  
  24.   if ( (numero-48)>=0 && (numero-48)<=9  )
  25.  
  26.   {return (1);}
  27.  
  28.   else {return(-1);}
  29.  
  30. }
  31.  
  32.  
  33.  


Título: Re: Ejemplos de funciones en c
Publicado por: El_Java en 25 Septiembre 2011, 19:47 pm
Vean que la función esnum tiene varios errores; aquí la corrección funcional.

Función esnum compilada en lenguaje c con Dev c++

Código
  1. #include <stdio.h>
  2.  
  3. int esnum (char numero);
  4.  
  5. void main(void)
  6.  
  7. {
  8. int numero, varaux;
  9.  
  10. printf("ingrese un numero del 0 al 9 \n \n \t \t");
  11. scanf("%c",&numero);
  12.  
  13. varaux=esnum(numero);
  14.  
  15. printf ("La funcion esnum dio %d", varaux);
  16.  
  17.     return (0);
  18. }
  19.  
  20. int esnum (char numero)
  21. {
  22.  
  23.   if ( (numero-48)>=0 && (numero-48)<=9  )
  24.  
  25.   {return (1);}
  26.  
  27.   else {return(-1);}
  28.  
  29. }
  30.  
  31.  

Tu último código de esnum tampoco está del todo bien, funcionalmente sí, pero semanticamente tiene un fallo que a mi personalmente no me gusta nada nada.
Si haces una funcion con un if y dentro del if un return, no tienes la necesidad de poner un else en el otro return, porque si el if es true, retornará 1 y parará la funcion.
Tampoco es necesario los parentesis en los returns  ;)
Código
  1. int esnum(char numero){
  2.   if ((numero-48) >= 0 && (numero-48)<=9 ) return 1;
  3.   return -1;
  4. }
  5.  


Título: Re: Ejemplos de funciones en c
Publicado por: LearningSpanishProgrammer en 25 Septiembre 2011, 20:39 pm
El_Java, no entiendo por qué tu usa números mágicos en su codigo

Código:
int esnum(char numero)
{
   if (numero >= '0' && numero <= '9' )
      return 1;
   else
      return -1;
}

tambien no entiendo por qué el OP no usa cero en lugar de menos uno.

Código:
int esnum(char numero)
{
   if (numero >= '0' && numero <= '9' )
      return 1;
   else
      return 0;
}

Así, puede usar en el 'if' directamente.


Título: Re: Ejemplos de funciones en c
Publicado por: rir3760 en 26 Septiembre 2011, 01:18 am
El_Java, no entiendo por qué tu usa números mágicos en su codigo
Supongo querias decir: "El_Java, no entiendo por qué el (Leon8086x) usa números mágicos en su codigo".

tambien no entiendo por qué el OP no usa cero en lugar de menos uno.

...

Así, puede usar en el 'if' directamente.
Si se retorna uno en caso de coincidencia y cero en caso contrario no hay porque utilizar un "if", en su lugar se utiliza directamente el resultado del operador "&&":
Código
  1. int esnum(char numero)
  2. {
  3.   return numero >= '0' && numero <= '9';
  4. }

Un saludo


Título: Re: Ejemplos de funciones en c
Publicado por: LearningSpanishProgrammer en 26 Septiembre 2011, 01:45 am
Gracias, rir3760

=)


Título: Re: Ejemplos de funciones en c
Publicado por: Leon8086x en 27 Septiembre 2011, 21:12 pm
Al parecer acá se usa el numero como tal

Código
  1.  
  2.  
  3. int esnum(char numero)
  4.  
  5. {
  6.   if ((numero-48) >= 0 && (numero-48)<=9 ) return 1;
  7.   return -1;
  8. }
  9.  
  10.  

Mientras que acá se usa el carácter y se lo compara como carácter.

Código
  1.  
  2. int esnum(char numero)
  3. {
  4.   return numero >= '0' && numero <= '9';
  5. }
  6.  
  7.  

Por cierto; esta forma de utilizar el return no la conocía y la verdad no lo entiendo.  :huh:





Título: Re: Ejemplos de funciones en c
Publicado por: El_Java en 27 Septiembre 2011, 22:54 pm
Ese modo de usar return lo unico que hace es que realiza las comparaciones que se le pide:
Código
  1. numero >= '0' && numero <= '9'
y devuelve el valor booleano resultante de dicha comparacion (true o false).


Título: Re: Ejemplos de funciones en c
Publicado por: rir3760 en 27 Septiembre 2011, 23:07 pm
En una sentencia de retorno como esta:
Código
  1. return N;
"N" debe ser del tipo indicado en la declaración de la funcion (siguiendo tu ejemplo debe ser "signed int") y puede ser cualquier expresión.

Esto es una expresión:
Código
  1. numero >= '0' && numero <= '9'

La prioridad de los operadores es, utilizando paréntesis:
Código
  1. (numero >= '0') && (numero <= '9')
1) Primero se aplican los operadores ">=" y "<=", el resultado de estos es 1 o 0 (Verdadero o Falso).

2) Despues se aplica el operador "&&" en el caso de '5' tenemos:
Código
  1. (1) && (1)
El operador "&&" resulta en 1 o 0 si se cumple con el operador lógico AND (Verdadero si ambos operandos son distintos de cero, Falso en caso contrario).

Para el tema de expresiones no hay nada mejor que un libro de calidad, si no tienes uno consiguelo (empieza revisando los temas fijos de este foro para recomendaciones).

Un saludo


Título: Re: Ejemplos de funciones en c
Publicado por: Leon8086x en 28 Septiembre 2011, 21:09 pm
Genial, muchas gracias.