Si te digo la verdad no se me había ocurrido eso de que la función seguía activa con su correspondiente gasto de memoria, ya estoy modificando el código, en cuanto pueda lo copio y lo modifico aquí.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúconst double cargaElectron = 1.6e-19;
#define cargaElectron 1.6e-19L
/*Cabeceras incluidas*/
#include <stdio.h> /*Cabecera estándar*/
#include <stdlib.h> /*Cabecera estándar*/
/*Funciones declaradas (prototipos)*/
void limpiarBuffer (void); /*Limpia el buffer de entrada*/
void limpiarPantalla (void); /*Limpia la pantalla de la consola del sistema*/
void menu (void); /*Imprime un pequeño menú de bienvenida*/
void sentidoConversion (void); /*Indica el sentido en el que se realizará la conversión*/
void J_Ev (void); /*Realiza la conversion de Julios a Electron-Voltios*/
void Ev_J (void); /*Realiza la conversion de Electron-Voltios a Julios*/
void reinicio (void); /*Reinicia o finaliza el programa*/
/*Funcion main*/
int main (void)
{
menu();
sentidoConversion();
reinicio();
return 0;
}
/*Funciones definidas (cuerpos de las funciones)*/
void limpiarBuffer (void) /*Limpia el buffer de entrada*/
{
while (getchar() != '\n');
}
void menu (void) /*Imprime un pequeño menú de bienvenida*/
{
printf("--->Conversor Julios <-> Electron-Voltios\n");
}
void limpiarPantalla (void) /*Limpia la pantalla de la consola del sistema*/
{
system("cls");
}
void sentidoConversion (void) /*Indica el sentido en el que se realizará la conversión*/
{
/*Declaración de variables*/
unsigned char eleccion = 0; /*Valor por defecto en 0*/
/*Trámites con el usuario*/
printf("Como desea realizar la conversion?:\n");
printf("[1] -> Julios -> Electron-Voltios\n");
printf("[2] -> Electron-Voltios -> Julios\n");
printf("Su eleccion: ");
scanf("%hhu", &eleccion);
limpiarBuffer();
/*Derivar a una u otra funcion según la decisión del usuario*/
switch (eleccion)
{
case 1:
limpiarPantalla();
J_Ev();
break;
case 2:
limpiarPantalla();
Ev_J();
break;
default:
printf("ERROR: Inserte 1 o 2 segun el sentido de la conversion que desee.\n");
printf("Pulse [ENTER] para continuar...");
getchar();
limpiarPantalla();
sentidoConversion();
break;
}
}
void J_Ev (void) /*Realiza la conversion de Julios a Electron-Voltios*/
{
/*Declaración de variables*/
double J;
double Ev;
const double cargaElectron = 1.6e-19;
/*Trámites con el usuario*/
printf("Julios a convertir: ");
scanf("%lf", &J);
limpiarBuffer();
printf("Convirtiendo...\n");
/*Conversion*/
Ev = J/cargaElectron;
printf("%lg J = %lg Ev\n", J, Ev);
}
void Ev_J (void) /*Realiza la conversion de Electron-Voltios a Julios*/
{
/*Declaración de variables*/
double J;
double Ev;
const double cargaElectron = 1.6e-19;
/*Trámites con el usuario*/
printf("Electron-Voltios a convertir: ");
scanf("%lf", &Ev);
limpiarBuffer();
printf("Convirtiendo...\n");
/*Conversion*/
J = Ev*cargaElectron;
printf("%lg Ev = %lg J\n", J, Ev);
}
void reinicio (void) /*Reinicia o finaliza el programa*/
{
/*Declaración de variables*/
unsigned char eleccion = 0; /*Valor por defecto en 0*/
/*Trámites con el usuario*/
printf("Desea realizar otra conversion?\n");
printf("[1] -> Si\n");
printf("[2] -> No\n");
printf("Su eleccion: ");
scanf("%hhu", &eleccion);
limpiarBuffer();
/*Derivar a una u otra funcion según la decisión del usuario*/
switch (eleccion)
{
case 1:
limpiarPantalla();
main();
break;
case 2:
break;
default:
printf("ERROR: Inserte 1 o 2 la opcion que desee.\n");
printf("Pulse [ENTER] para continuar...");
getchar();
limpiarPantalla();
break;
}
}
Cita de: Eternal Idol en 3 Septiembre 2013, 00:00 AM
Es decir que la funcion no sirve mas que para este main ... bueno.
size_t numero;
unsigned int numero;
Cita de: Eternal Idol en 2 Septiembre 2013, 22:56 PM
Por algo strlen devuelve un size_t y no un unsigned char, tu funcion no podra devolver el valor correcto si la cadena es mayor a 255 caracteres.
texto[contador] += 'A';
/*#include <stdio.h> en C*/
#include <cstdio>
/*Prototipos de funciones utiles para el manejo de cadenas de caracteres*/
inline size_t magnitudTexto (char texto []);
inline void textoMayusculas (char texto [], size_t numeroCaracteres);
inline void textoMinusculas (char texto [], size_t numeroCaracteres);
/*Funcion main*/
int main (void)
{
/*Declaracion de variables*/
const unsigned char CARACTERES_MAXIMOS = 140; /*Constante para no usar numeros magicos*/
char texto [CARACTERES_MAXIMOS]; /*Array de caracteres de 140 espacios*/
unsigned char caracteresTexto = 0;
/*Tramites con el usuario*/
printf("Introduzca un texto: \n");
fgets(texto, CARACTERES_MAXIMOS, stdin); /*Uso de fgets(); para evitar desbordamientos de buffer*/
/*Comprobaciones del funcionamiento de las funciones*/
caracteresTexto = magnitudTexto(texto);
printf("El texto tiene %hhu caracteres.\n", caracteresTexto); /*%hhu para variables unsigned char, de 0 a 255*/
textoMayusculas(texto, caracteresTexto);
printf("El texto pasado a mayusculas:\n%s", texto);
textoMinusculas(texto, caracteresTexto);
printf("El texto pasado a minusculas:\n%s", texto);
return 0;
}
inline size_t magnitudTexto (char texto [])
{
size_t magnitud = 0;
while (texto [magnitud] != '\0') /*Los arrays de caracteres finalizan con un \0*/
{
magnitud++;
}
return magnitud;
}
inline void textoMayusculas (char texto [], size_t numeroCaracteres)
{
size_t contador = 0;
while (contador <= numeroCaracteres)
{
if ((texto [contador] >= 'a') && (texto [contador] <= 'z'))
{
texto [contador] -= 'a' - 'A'; /*Consultar la tabla ASCII*/
contador++;
}
else
{
contador++;
}
}
}
inline void textoMinusculas (char texto [], size_t numeroCaracteres)
{
size_t contador = 0;
while (contador <= numeroCaracteres)
{
if ((texto [contador] >= 'A') && (texto [contador <= 'Z']))
{
texto [contador] += 'a' - 'A';
contador++;
}
else
{
contador++;
}
}
}