Foros del Web » Programación para mayores de 30 ;) » C/C++ »

no se resolver este programa

Estas en el tema de no se resolver este programa en el foro de C/C++ en Foros del Web. Hola a todos, necesito hacer un programa que trata de contar el número de letras de cada uno de los argumentos que se escriben en ...
  #1 (permalink)  
Antiguo 03/12/2012, 10:36
 
Fecha de Ingreso: mayo-2012
Mensajes: 14
Antigüedad: 11 años, 11 meses
Puntos: 0
no se resolver este programa

Hola a todos, necesito hacer un programa que trata de contar el número de letras de cada uno de los argumentos que se escriben en la línea de comandos en la llamada al programa (sin contar el nombre del programa).
Para ello, almacenaremos en una tabla de enteros la longitud de cada una de las palabras de la línea de comandos exceptuando el nombre del programa. Posteriormente, dentro de la función main, se imprime este vector y la suma total. El tamaño de esta tabla se especicará mediante una constante simbólica de tamaño 4.

Para el diseño del programa, nos serviremos de la función cuentaCaracteres que devuelve el número total de caracteres de los argumentos de la línea de comandos, y recibe como argumentos:

palabras: dirección de comienzo de una tabla cuyos elementos son las direcciones de comienzo de los argumentos pasados al programa (sin incluir el nombre del programa).
Recuerde que argv es una tabla de punteros donde el primer elemento corresponde a la dirección de la tabla de caracteres donde se guarda el nombre del ejecutable.
Por tanto, en la llamada a la función, el parámetro real es argv+1 que es la dirección del primer numcaracteres: dirección de comienzo argumento después del nombre del programa. de una tabla de enteros donde almacenar el número de
caracteres de cada argumento.

tam: número de argumentos escritos en la línea de comandos exceptuando el nombre del programa, o bien el tamaño de la tabla de enteros si el número de argumentos introducido es mayor que el tamaño de la tabla de enteros.


Esta función, a su vez, utilizará la funcion lonCadena, que recibe como parámetro una cadena de caracteres y devuelve el número de caracteres de dicha cadena (recuerde que una cadena siempre finaliza con el carácter ’\0’.)

Si el número de argumentos es mayor que el tamaño de la tabla de enteros en el que se almacena la longitud de cada argumento, se da un mensaje de aviso indicando que no se han podido contar los caracteres de todos los argumentos. Por ejemplo, si el máximo de parámetros esperado fuera cuatro,
la ejecución sería:

salas@318CDCr12: ̃$ gcc -W -Wall -o cuentaCar cuentaCar.c
salas@318CDCr12: ̃$ cuentaCar septima practica del curso actual
El argumento 1 tiene 7 caracteres.
El argumento 2 tiene 8 caracteres.
El argumento 3 tiene 3 caracteres.
El argumento 4 tiene 5 caracteres.
El numero total de letras en linea de comando es: 23.
Aviso, han quedado argumentos sin contar.


por favor ayundeme a resolverlo, que no me entero muy bien de los punteros y las tablas. Solo he echo esto pero creo que no van por ahi los tiros.

Código:
/* Includes del sistema */

#include <stdio.h>

/* Includes de la aplicacion */

#include "cuentaCar.h"

/* constantes */

/* tipos definidos por el usuario */

/* Prototipo de funciones locales */

int cuentaCaracteres (char palabra[TAM]);


int main(int argc, char *argv[])
{
  char palabras[TAM];
  int i=0;
  int caracteres=0;
  
  for (i=1; i<argc; i++)
  {
    palabras[TAM]=argv[i];
   caracteres= cuentaCaracteres(palabras[TAM]);
    printf(T_CARACTERES, argc, caracteres);
  
  } 

}


int cuentaCaracteres (char palabra[TAM])
{
  int result=0;
 
  
  while (palabra[TAM]!='\0')
  {
    result++;
  } 
  
  return result;
  
}
  #2 (permalink)  
Antiguo 03/12/2012, 11:12
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: no se resolver este programa

Hola! el problema lo tenes con el manejo de cadenas
Código C:
Ver original
  1. palabras[TAM]=argv[i];
con esto estas intentando guardar un puntero en la ultima posicion del arreglo, lo cual esta mal
Código C:
Ver original
  1. cuentaCaracteres(palabras[TAM]);
estas pasando mal el arreglo a la funcion
Código C:
Ver original
  1. while (palabra[TAM]!='\0')
aca estas usando mal el indice, no deberia ser TAM



Quedaria algo asi:
Código C:
Ver original
  1. int main(int argc, char *argv[])
  2. {
  3.   int i=0;
  4.   int caracteres=0;
  5.  
  6.   for (i=1; i<argc; i++)
  7.   {
  8.    caracteres= cuentaCaracteres(argv[i]);
  9.     printf(T_CARACTERES, argc, caracteres);
  10.  
  11.   }
  12.  
  13. return 0;
  14.  
  15. }
  16.  
  17.  
  18. int cuentaCaracteres (char palabra[TAM])
  19. {
  20.   int result=0;
  21.  
  22.  
  23.   while (palabra[result]!='\0')
  24.   {
  25.     result++;
  26.   }
  27.  
  28.   return result;
  29.  
  30. }

Saludos

PD: mi consejo es que practiques con cosas mas basicas antes de seguir con esto
  #3 (permalink)  
Antiguo 03/12/2012, 11:20
 
Fecha de Ingreso: mayo-2012
Mensajes: 14
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: no se resolver este programa

gracias, pero es la practica que debo hacer de punteros y tablas, lo chungo es que falté a clase ese día por temas laborales y ahora estoy pagando las consecuencias XD. Muchas gracias
  #4 (permalink)  
Antiguo 03/12/2012, 11:37
 
Fecha de Ingreso: mayo-2012
Mensajes: 14
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: no se resolver este programa

Vale ya lo he sacado, gracias por la respuesta al final queda así:

Código C:
Ver original
  1. /* Includes del sistema */
  2.  
  3. #include <stdio.h>
  4.  
  5. /* Includes de la aplicacion */
  6.  
  7. #include "cuentaCar.h"
  8.  
  9. /* constantes */
  10.  
  11. /* tipos definidos por el usuario */
  12.  
  13. /* Prototipo de funciones locales */
  14.  
  15. int cuentaCaracteres (char palabra[TAM]);
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.       int i=0;
  20.       int caracteres=0;
  21.       int argumento=1;
  22.       int sumacaracter=0;
  23.      
  24.       for (i=1; i<=TAM; i++)
  25.       {
  26.        
  27.        caracteres= cuentaCaracteres(argv[i]);
  28.         printf(T_CARACTERES, argumento, caracteres);
  29.         argumento++;
  30.         sumacaracter=sumacaracter+caracteres;
  31.       }
  32.         printf(T_TOTAL,sumacaracter);
  33.      
  34.      if (argc > TAM)
  35.      {
  36.         printf(T_WARNING);
  37.      }
  38.      
  39.     return 0;
  40.      
  41. }
  42.      
  43.      
  44. int cuentaCaracteres (char palabra[TAM])
  45. {
  46.       int result=0;
  47.      
  48.      
  49.       while (palabra[result]!='\0')
  50.       {
  51.         result++;
  52.       }
  53.      
  54.       return result;
  55.    
  56. }
  #5 (permalink)  
Antiguo 03/12/2012, 13:24
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: no se resolver este programa

Supongo que TAM es el maximo de argumentos del main posibles(segun el enunciado 4), si es asi esta mal usar TAM en la funcion como tamaño de la palabra:
Código C:
Ver original
  1. int cuentaCaracteres (char palabra[TAM]) // esta mal TAM, pone otra cosa


Saludos

Etiquetas: fichero, funcion, int, programa, resolver
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:02.