Ejemplos de funciones en c

Iniciado por Leon8086x, 18 Septiembre 2011, 18:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

Leon8086x

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



#include <stdio.h>

int atonum (int numero);

void main(void)
{

char c;
int numero;

printf("\n \t \t ingrese un numero o caracter \n \n \n \t \t");
scanf("%c",&c);

printf("\n \t \t ingreso el numero o caracter %c que en ASCII es %d  \n \n \t \t",c,c);

numero=atonum(c);

if (numero!=-1)
{
printf("ahora el numero  %c lo pasamos a entero en la variable numero  \n \n \t \t",c);
printf("la varible numero contiene el numero %d \n \n \t \t",numero);
}

if (numero==-1) {printf ("se ingreso un caracter \n \n \t \t");}


return (0);

}

int atonum (int numero)
{
  int n;
  if ( (numero-48)>=0 && (numero-48)<=9  ) {n=numero-48;}
  if ((numero-48)<0 && (numero-48)>9) {n=-1;}
  return (n);
}



potencia.cpp



#include <stdio.h>



int pot (int base, int exp);


void main(void)
{

int p,exp,base;


printf("ingrese la base \n \n \t \t");

scanf("%d",&base);

printf("ingrese el exponenete \n \n \t \t");

scanf("%d",&exp);

p=pot(base,exp);

printf ("el numero %d elevado a la %d es %d \n \n \t \t",base,exp,p);



 return (0);



}

int pot (int base, int exp)
{
  int p=1;

  if (exp==0){p=1;}

  while (exp>0)
  {
  p*=base;
  exp=exp-1;
  }

  printf("\n \n \t \t %d \n \n \n ",p);
  return (p);



}


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



#include <stdio.h>



int pot (int base, int exp);


void main(void)
{

int p,exp,base;


printf("ingrese la base \n \n \t \t");

scanf("%d",&base);

printf("ingrese el exponenete \n \n \t \t");

scanf("%d",&exp);

p=pot(base,exp);

printf ("el numero %d elevado a la %d es %d \n \n \t \t",base,exp,p);



 return (0);



}

int pot(int base, int exp)
{
  if (exp > 0)
  return base * pot(base, exp - 1);

  else
  return 1;
}






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

A esta le puse esnum.cpp





#include <stdio.h>

int esnum (int numero);

void main(void)

{
int numero;

printf("ingrese un numero del 0 al 9 \n \n \t \t");
scanf("%c",&numero);

printf ("La funcion esnum dio %d", esnum(numero));

    return (0);
}

int esnum (int numero)
{

  int r;

  if (0<=(numero-48)<=9)
  r=1;
  r=-1;

  return (r);

}






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.

Alien-Z

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.

Leon8086x

Gracias. Y desde ahora usare code ya que queda mucho mas legible.

Leon8086x

#3
Vean que la función esnum tiene varios errores; aquí la corrección funcional.

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



#include <stdio.h>

int esnum (char numero);

void main(void)

{
int numero, varaux;

printf("ingrese un numero del 0 al 9 \n \n \t \t");
scanf("%c",&numero);

varaux=esnum(numero);

printf ("La funcion esnum dio %d", varaux);

    return (0);
}

int esnum (char numero)
{

  if ( (numero-48)>=0 && (numero-48)<=9  )

  {return (1);}

  else {return(-1);}

}



El_Java

Cita de: 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++


#include <stdio.h>

int esnum (char numero);

void main(void)

{
int numero, varaux;

printf("ingrese un numero del 0 al 9 \n \n \t \t");
scanf("%c",&numero);

varaux=esnum(numero);

printf ("La funcion esnum dio %d", varaux);

     return (0);
}

int esnum (char numero)
{

   if ( (numero-48)>=0 && (numero-48)<=9  )

   {return (1);}

   else {return(-1);}

}



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 (cpp) [Seleccionar]

int esnum(char numero){
   if ((numero-48) >= 0 && (numero-48)<=9 ) return 1;
   return -1;
}

LearningSpanishProgrammer

#5
El_Java, no entiendo por qué tu usa números mágicos en su codigo


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.


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


Así, puede usar en el 'if' directamente.
Estoy aprendiendo español, y tu estas aprendiendo programación

rir3760

Cita de: LearningSpanishProgrammer en 25 Septiembre 2011, 20:39 PMEl_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".

Cita de: LearningSpanishProgrammer en 25 Septiembre 2011, 20:39 PMtambien 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 "&&":
int esnum(char numero)
{
   return numero >= '0' && numero <= '9';
}


Un saludo
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

LearningSpanishProgrammer

Estoy aprendiendo español, y tu estas aprendiendo programación

Leon8086x

#8
Al parecer acá se usa el numero como tal



int esnum(char numero)

{
  if ((numero-48) >= 0 && (numero-48)<=9 ) return 1;
  return -1;
}



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



int esnum(char numero)
{
   return numero >= '0' && numero <= '9';
}



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




El_Java

Ese modo de usar return lo unico que hace es que realiza las comparaciones que se le pide:
Código (cpp) [Seleccionar]
numero >= '0' && numero <= '9'
y devuelve el valor booleano resultante de dicha comparacion (true o false).