[ Foro de C ]

Parametros de Main

29-Aug-2012 22:00
Antonio Rodriguez
2 Respuestas

Lentamente, pero sigo avanzando en el tema 9 :D

Tengo una duda con los ejercicios del apartado 9.9, y es con la conversión de las cadenas de texto a números para poder realizar las operaciones solicitadas. Se que existe un comando (atoi) que me podría facilitar la vida, pero como no lo hemos visto he preferido no usarlo, así que me he inventado una forma que funciona, pero solo parcialmente: tienen que ser números enteros y positivos. No se si esto es suficiente para dar el ejercicio como bueno, o bien si hay alguna forma más sencilla de hacer esa conversión de cadena de texto a número. Pongo los dos ejercicios de este apartado y espero comentarios :D

/* Ejercicio 9.9.A
Crear un programa llamado "suma" que calcule y muestre la suma de dos numeros
que se le indiquen como parametro. Por ejemplo, si se teclea "suma 2 3" deberá
responder "5" y si se teclea "suma 2" debera responder "no hay suficientes datos" */

#include <stdio.h>
#include <string.h>
#include <math.h>


int main (int argc, char *argv[]) {

int n1=0, n2=0, size, i, temporal=0;

if (argc < 3) printf ("No hay suficientes datos");

else {
size = strlen (argv[1]); /* calculamos la longitud de la cadena introducida como parametro 1 (el primer numero)*/
for (i=0; i<size; i++) {
temporal = ((int)(argv[1][i] - 48) * (pow(10, (size-i-1)))); /*vamos transformando cada caracter de la cadena a número*/
/* restamos 48 por ser el valor ascii de 0; los números están almacenados en codigo ascii*/
/* los multiplicamos por 10 elevado a la correspondiente potencia segun su orden: unidades, decenas, centenas, etc)*/
n1 = n1+temporal;
}
size = strlen (argv[2]);
for (i=0; i<size; i++) {
temporal = ((int)(argv[2][i] - 48) * (pow(10, (size-i-1))));
n2 = n2+temporal;
}
printf("La suma es %d\n", n1+n2);
}
return 0;
}


/* Ejercicio 9.9.B
Crear una calculadora basica, llamada "calcula" que debera sumar, restar, multiplicar o
dividir los dos numeros que se le indiquen como parametros. Ejemplos de su uso serian
"calcula 2 + 3" o "calcula 5 * 60" */

#include <stdio.h>
#include <string.h>
#include <math.h>


int main (int argc, char *argv[]) {

float resultado;
int n1=0, n2=0, size, i, temporal=0;

if (argc < 4) printf ("No hay suficientes datos");

else {
size = strlen (argv[1]); /* calculamos la longitud de la cadena introducida como parametro 1 (el primer numero)*/
for (i=0; i<size; i++) {
temporal = ((int)(argv[1][i] - 48) * (pow(10, (size-i-1)))); /*vamos transformando cada caracter de la cadena a número*/
/* restamos 48 por ser el valor ascii de 0; los números están almacenados en codigo ascii*/
/* los multiplicamos por 10 elevado a la correspondiente potencia segun su orden: unidades, decenas, centenas, etc)*/
n1 = n1+temporal;
}
size = strlen (argv[3]);
for (i=0; i<size; i++) {
temporal = ((int)(argv[3][i] - 48) * (pow(10, (size-i-1))));
n2 = n2+temporal;
}

switch (argv[2][0])
{
case '+' : printf("La suma es %d", n1+n2);
break;
case '-' : printf("La resta es %d", n1-n2);
break;
case '*' : printf("El producto es %d", n1*n2);
break;
case '/' : resultado = (float) n1 / (float) n2;
printf("La division es %1.3f", resultado);
break;
default: printf("Operacion no reconocida\n");
}

}
return 0;
}


31-Aug-2012 20:14
Nacho Cabanes (+30)

Tienes razón con lo de "atoi". No lo he mencionado en ninguna parte del curso, y debería estar, al igual que el equivalente para números reales, "atof". Lo apunto para añadirlo en esta actualización.

Aun así, en el apartado 5.2.7 tienes una alternativa muy razonable de hecho, puede resultar más robusta que "atoi"): sscanf que te permite analizar una cadena y extraer desde ella un número o lo que quieras.


31-Aug-2012 20:57
Antonio Rodriguez

Se me olvidó por completo la opción de sscanf, anda que no me he complicado la vida ni nada xD






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)