1 /* vim: set et ts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t:
3 * Taller de Programación (75.42).
6 * Graficador de la solución de una ecuación diferencial por el método
7 * de Euler (explícito).
9 * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
10 * Puede copiar, modificar y distribuir este programa bajo los términos de
11 * la licencia GPL (http://www.gnu.org/).
13 * Creado: sáb ago 23 16:59:01 ART 2003
19 /* Para utilizar fprintf() y stderr */
21 /* Para utilizar strtod() */
24 int argtod(const char* arg, Real* var, const char* nom) {
25 /* Puntero al último caracter bien interpretado por strtod. */
27 /* Realiza la conversión de un string a un Real */
28 *var = strtod(arg, &err);
29 /* Si el caracter donde apunta endptr es 0 es porque se interpretó toda la
31 if ((char)*err == '\0') {
33 /* Si no, es que hubo error. */
35 fprintf(stderr, "Error: El parámetro '%s' debe ser un número ", nom);
36 fprintf(stderr, "real. Usted ingresó '%s' pero '%s' no ", arg, err);
37 fprintf(stderr, "pudo ser interpretado.\n");
42 int cargar_datos(int argc, const char** argv, Real* paso, Real* t0, Real* tf,
45 /* Si no tiene parámetros usa los valores por omisión. */
48 /* Si tiene de 1 a 3 parámetros, los lee y valida, saliendo con un
49 * mensaje de error en caso de haberlo. */
51 /* Hay 3 parámetros, lee el 3er parámetro. */
52 if (!argtod(argv[3], f0, "f0")) {
55 /* Continúa con el resto de los parámetros. */
57 /* Hay al menos 2 parámetros, lee el 2do parámetro. */
58 if (!argtod(argv[2], tf, "tf")) {
61 /* Continúa con el resto de los parámetros. */
63 /* Hay al menos 1 parámetro, lee el 1er parámetro. */
64 if (!argtod(argv[1], paso, "paso")) {
67 break; /* Finaliza el switch (no lee más parámetros). */
68 /* Hay demasiados parámetros, sale con mensaje de error. */
70 fprintf(stderr, "Error: Demasiados parámetros.\n");
73 /* El paso debe ser mayor que cero. */
75 fprintf(stderr, "Error: El paso (%f) debe ser mayor que cero.", *paso);
78 /* El tiempo final debe ser mayor que el inicial. */
80 fprintf(stderr, "Error: El tiempo final (%f) no es mayor que ", *tf);
81 fprintf(stderr, "el tiempo inicial (%f).", *t0);