Título: Poner separador de miles a la hora de mostrar resultado en pantalla Publicado por: galapok11 en 11 Agosto 2016, 11:36 am 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 |*/ /*+------------------------------------------------------------------- Título: Re: Poner separador de miles a la hora de mostrar resultado en pantalla Publicado por: AlbertoBSD en 11 Agosto 2016, 14:53 pm 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: Código
Ve que se ve mejor. Basicamente lo que pide se puede separar de 2 formas.
Ambas salidas deberian de devolver un string o (char*) listo para que se imprima en pantalla. Saludos Título: Re: Poner separador de miles a la hora de mostrar resultado en pantalla Publicado por: + 1 Oculto(s) en 11 Agosto 2016, 17:26 pm ese codigo no parece tuyo, en fin solo deber ir dividiendo y actualizar
Título: Re: Poner separador de miles a la hora de mostrar resultado en pantalla Publicado por: Yoel Alejandro en 12 Agosto 2016, 16:58 pm 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
|