Poner separador de miles a la hora de mostrar resultado en pantalla

Iniciado por galapok11, 11 Agosto 2016, 11:36 AM

0 Miembros y 1 Visitante están viendo este tema.

galapok11

Saludos programadores.
He terminado un programa y me gustaria saber como incluir los separadores de miles a la hora de mostrar dicho resultado en pantalla. He estado investigando en Internet pero lo poco que he visto/entendido no he conseguido aplicarlo.
Gracias por leerme, y mas aun al que me responda :)

Este es el programa, siento que este en ingles...
/*+-------------------------------------------------------------------+*/
/*| System and library header files.                                  |*/
/*+-------------------------------------------------------------------+*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

/*+-------------------------------------------------------------------+*/
/*| Defines                                                           |*/
/*+-------------------------------------------------------------------+*/

//Maximum characters of the file cypher.txt
#define LIMIT_NAMES 6000

/*+-------------------------------------------------------------------+*/
/*| Structs & Definitions                                             |*/
/*+-------------------------------------------------------------------+*/

/*+-------------------------------------------------------------------+*/
/*| Global Variables                                                  |*/
/*+-------------------------------------------------------------------+*/

/*+-------------------------------------------------------------------+*/
/*| Static Variables                                                  |*/
/*+-------------------------------------------------------------------+*/

static char array_list_names[LIMIT_NAMES][50];
int ins_total_score = 0;


////Static variables for the time
static int ins_time_start;                  //Start time of NameLists
static int ins_time_stop;                  //Finish time of NameLists

/*+-------------------------------------------------------------------+*/
/*| Internal function prototypes.                                     |*/
/*+-------------------------------------------------------------------+*/

/*+-------------------------------------------------------------------+*/
/*| Explanation                                |*/
/*+-------------------------------------------------------------------+*/


//A 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order.
//
//Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.
//For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would obtain a score of 938 × 53 = 49714.
//What is the total of all the name scores in the file?
//
//In order to sort the names, you will need to use qsort (http://www.cplusplus.com/reference/cstdlib/qsort/).
//It might be a bit tricky and difficult,
//i'll let you try alone if you want, but due to the pointer redirection you will need to apply in order to use the function, i'll gladly help you out - so don't hesitate to stop by and ask me.

/*+-------------------------------------------------------------------+*/
/*| Main control procedure.                                           |*/
/*+-------------------------------------------------------------------+*/

   //Function compare by default
   int m_compare (const void * vpp_a, const void * vpp_b)
      {
         return strcmp((char *) vpp_a, (char *) vpp_b);
         //return ( *(int*)a - *(int*)b );
      }
   //////////////////////////////////////////////

int main ()
{
     //Indicate time
   clock_t t_start, t_end;
   double secs;
   t_start = clock();
   //////////////////////////////////////////////////////////////////////////////////////
   


   //////////////////////////////////////////////////////////////////////////////////////
   //Procedure to count the words of the file names.txt and keep the array with all names
 
   //Open file to read it
   FILE *file_names;
   file_names = fopen("names.txt", "r+");
   
   //If the file is incorrect, indicate it and close the program
   if (file_names==NULL)
   {
      printf("File's content is incorrect.");
      system("pause");
      return -1;
   }
   // //Function to count the total names of the file
   // int ins_number_names = 0+1;
   //      while(!feof(file_names))
   //      {
   //            if(fgetc(file_names) == ',')
   //            {
   //                   ins_number_names++;
   //            }
   //      }
   //////Show the total number of names
   //printf("\nThe Number of names of the file names.txt is %d\n", ins_number_names);
   //system("PAUSE");      

   //Variable to keep the total number of names
   int ins_number_names = 0;

   //Start a while to know the number of names, and keep all names in one array
   while(!feof(file_names) && ins_number_names < LIMIT_NAMES)
   {
      //Initial lenght for every name
        int lenght_names = 0;
      //Other characters of the file, in this case, the commas ','
        char other_char;
      //Limit of characters of the names
        char limit_char_names[50];

      //Exclude the commas ',' and double quotation marks ' " " ' to can counting the names
        while((other_char = fgetc(file_names)) != ',' && !feof(file_names))
      {
            if(other_char == '\"'){
                continue;
            }
            else{
                limit_char_names[lenght_names] = other_char;
                lenght_names++;
            }
        }
        limit_char_names[lenght_names] = '\0';

      //Keep with strcpy the names in the array array_list_names
        strcpy(array_list_names[ins_number_names],limit_char_names);
        ins_number_names++;
   }

   //Close the file names.txt
   fclose(file_names);
   /////////////////////////////////////////////////////////////////////////////////////



   //Show the array with all names to check it
   /*   for(int i = 0; i < ins_number_names; i++)
         {
         printf("%s ",array_list_names);
         }*/
   
   printf("\nThe total number of names is: %i\n",ins_number_names);
   system("PAUSE");
   
   
   //Start the function to sort all names in alphabetical order
   qsort (array_list_names, ins_number_names, 50, m_compare);
   
   //Show the array sorted to check the function sort
   /*for(int i=0; i<ins_number_names;i++)
      {
      printf ("%s ",array_list_names);   
      }*/
      
   //Start with the operations to calculate the name score and total score
   
   //Assign to every word of every name a value which will be the position of the letter
   for(int i1=0; i1<ins_number_names;i1++)
   {
      //Variable to indicate the sum
      int ins_sum=0;
      //Variable ins_number_char_names to know the lenght of the name
      int ins_lenght_names = strlen(array_list_names[i1]);

      for(int i2=0; i2<ins_lenght_names; i2++)
         {
         //Calculate the score of every character
         ins_sum += array_list_names[i1][i2] - 'A' + 1;
         }
      
      //Calculate the values
      int ins_value = ins_sum * (i1+1);
      //Calculate the total score
      ins_total_score += ins_value;
   }

   //Show the total score os the file names.txt
   printf("The total score of all names is: %i\n", ins_total_score);
   system("pause");
   ////////////////////////////////////////////////////////////////////////////////////


   //Show time
   t_end = clock();
   secs = (double)(t_end - t_start) / CLOCKS_PER_SEC;
   printf("Time used to process the names list and calculate the total score names: %.16g miliseconds", secs * 1000.0);
   printf("\n\n");
   /////////////////////////////////////////////////////
   
   system("pause");
   return 0;
   
   }

/*+-------------------------------------------------------------------+*/
/*| FINAL                                                             |*/
/*+-------------------------------------------------------------------

AlbertoBSD

Compañero, da un poco de flojera leer un codigo tan largo y menos si mo esta con la etiqueta GeSHi para codigo en C

Ejemplo:

int var = 1;

Ve que se ve mejor.

Basicamente lo que pide se puede separar de 2 formas.


  • Procesar el dato como numero y atravez de divisiones y variables temporales ir separando en bloques de centenas y agregarles el valor adecuado
  • Convertir el Numero a cadena y procesar cada 3 caracteres y agregarles el valor adecuado

Ambas salidas deberian de devolver un string o (char*) listo para que se imprima en pantalla.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

+ 1 Oculto(s)

ese codigo no parece tuyo, en fin solo deber ir dividiendo y actualizar

Yoel Alejandro

Aquí un pequeño código que te da una idea de cómo podrías imprimir el número separado por miles. El trabajo lo realiza la función imprimirNumero(), luego deberás adaptarlo a tu programa específico, de la manera como esperas que trabaje.

En cuánto al programa que presentas como ejemplo, coincido con los otros foristas en que es muy extenso y parece que fue diseñado para una tarea mucho más ambiciosa que la que tú pretendes. Por lo tanto no es un buen punto de partida si sólo deseas llevar a cabo una tarea sencilla como ésta.

Código (cpp) [Seleccionar]

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

void imprimirNumero( int x );

int main()
{
    imprimirNumero( 2341528 );
    printf( "\n" );
    return 0;
}

void imprimirNumero( int x )
{
    int BASE;
    int count;

    /* determina la mayor potencia de 1000 que es menor o igual al numero */
    BASE = 1;
    while ( 1000 * BASE <= x ) BASE *= 1000;

    /* divide sucesivamente entre 1000 para imprimir el numero separado
     * por miles */
    while ( BASE > 1 ) {
        printf( "%d.", x / BASE );
        x = x % BASE;
        BASE = BASE / 1000;
    }
    printf( "%d", x );
}
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)