elrincondelc.com
Inicio :: Foros
Usuario: Clave: Regístrate
Salir


programa comando en c

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
Gaborodri



Registrado: 04 Sep 2005
Mensajes: 1

MensajePublicado: 05/09/2005 5:42 am Responder citando
Título: programa comando en c

queria pedir un poco de ayuda con este ejercicio se poco de c, pero me dieron el siguiente programa comando
-----------------------------------------------------------------------------------
EJERCICIO “PROGRAMA COMANDO”
(PROGRAMA CON ARGUMENTOS EN LÍNEA DE COMANDO)

Construya un programa comando que obtenga la suma de los números enteros representados por sus argumentos e imprima el resultado.

Ejemplo:
Suma 4 32 –14 18
La suma es 40

Suma 6
La suma es 6

Debe construir y utilizar dos funciones:
1) una función “hueca” VerificaArgumento que supuestamente verifique si cada argumento está correctamente escrito y representa un número entero, pero que siempre retorne “verdadero” (luego veremos cómo rellenarla);
2) una función Ayuda que, si solo se ingresa el nombre del comando (Suma), despliega un mensaje que explica qué hace este comando y algunos ejemplos de su uso.

En la resolución de este problema, utilice la función atoi de la Biblioteca ANSI C.

En el apunte “Módulo 2”, desde la página 44, hay información que le puede resultar útil para construir este programa.

Debe presentar el listado del fuente, mensajes del compilador (si los hay) y ejemplos de corridas realizadas.
-----------------------------------------------------------------------------------

esto es lo que intente hacer yo pero no lo puedo compilar, el compilador que utilizo es ANSI C de Boorland
-----------------------------------------------------------------------------------
/* suma.c
Programa que suma dos numero reales e imprime el resultado:
********************
suma <real> <real>
********************
4/09/2005
*/

#include <stdio.h> /* printf */
#include <stdlib.h> /* atoi */

/* prototipos */

void Ayuda (void); /* despliega informacion de ayuda */
int VerificarArgumento (char *); /* verifica si el argumento es correcto */
void muestraResultado (int); /* despliega el resultado de la suma */

int main (int argc, char *argv[]) {
int Entero, Entero2,i,n ;

if (argc == 1) { /* solo el nombre del comando => pide ayuda */
Ayuda();
return 0;
}

/* Verifica si los argumentos son correctos */
while(n=1,n<=argc,++n){
if ( ! VerificarArgumento(argv[n]) ) { /* primer argumento incorrecto */
return 0;
}
}

/* los arguentos so correctos; realizar el proceso */

Entero2=0;
while(i=1,i<=argc,++i){
Entero = atoi(argv[i]);
Entero2 = Entero + Entero2;
muestraResultado(Entero2);

return 0;
}

void Ayuda (void) {
printf("********************\n");
printf("Suma <Entero> <Entero> <Entero>\n");
printf("********************\n");
printf("Suma los dos argumentos, que son numeros reales.\n");
printf("Ejemplo: suma2 4 -18 5\n");

}


int VerificarArgumento (char *r) {
return 1; /* siempre retorna correcto */
}

void muestraResultado (int a) {
printf("*** El resultado de la suma es %f ***\n" , a);
}
Volver arriba
Ver perfil del usuario Enviar mensaje privado
rir3760



Registrado: 01 Oct 2004
Mensajes: 7534
Ubicación: Mexico

MensajePublicado: 05/09/2005 7:37 am Responder citando
Título:

Tu programa no suma una serie de numeros de punto flotante sino enteros, por lo mismo debes de cambiar la linea donde imprimes el resultado:
Código:
void muestraResultado (int a)
{
   printf("*** El resultado de la suma es %f ***\n" , a);
}


a:
Código:
void muestraResultado (int a)
{
   /* Imprimir utilizando el calificador '%d' */
   printf("*** El resultado de la suma es %d ***\n" , a);
}


Y para verificar que cada uno de los argumentos de linea de comandos es un numero no se puede (bueno, no se deberia de) utilizar atoi ya que esta funcion no permite validacion de ningun tipo. Para verificar que la entrada sea valida tienes que utilizar la funcion strtol (stdlib.h).

Tambien hay errores en los dos bucles while:
Código:
/* Verifica si los argumentos son correctos */
while(n=1,n<=argc,++n){
   if (!VerificarArgumento(argv[n])){ /* primer argumento incorrecto */
      return 0;
   }
}


La forma convencional de un bucle while es:
Código:
/* iniciar variables */
while (condicion){

   /* cuerpo del bucle */
   
   /* incremento */
}


Por lo mismo el primer bucle de tu programa deberia ser:
Código:
/* Procesar argv[1] .. argv[argc - 1] */
n = 1;
while(n < argc){
   if (!VerificarArgumento(argv[n]))
      return 0;

   ++n;
}


Un programa que suma los argumentos pasados mediante linea de comandos es:
Código:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   int i, numero, total;
   
   if (argc < 2){
      printf("Utilize: programa num_1, num_2, ...\n");
      return EXIT_FAILURE;
   }
   
   total = 0;
   for (i = 1; i < argc; i++)
      if ((numero = atoi(argv[i])) != 0)
         total += numero;
      else
         break;
   
   if (i == argc)
      printf("El total es %d\n", total);
   else
      printf("No se pudo convertir uno de los argumentos!\n");
   
   return EXIT_SUCCESS;
}


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
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1 Todas las horas están en GMT - 8 Horas

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com, 1999-2007

Un proyecto de UrlanHeat.com