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.
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.
Gracias. Y desde ahora usare code
ya que queda mucho mas legible.
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);}
}
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 ;)
int esnum(char numero){
if ((numero-48) >= 0 && (numero-48)<=9 ) return 1;
return -1;
}
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.
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
Gracias, rir3760
=)
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:
Ese modo de usar return lo unico que hace es que realiza las comparaciones que se le pide:
numero >= '0' && numero <= '9'
y devuelve el valor booleano resultante de dicha comparacion (true o false).
En una sentencia de retorno como esta:
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:
numero >= '0' && numero <= '9'
La prioridad de los operadores es, utilizando paréntesis:
(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:
(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
Genial, muchas gracias.