mercredi 8 juillet 2020

Why isn't my code producing a random sequence of numbers between 1 and N? No file is produced. What is the error in my code? What am I doing wrong?

The goal of the program is to generate a random sequence of numbers between 1 and N, where N is passed as an argument to the program, and write the resulting sequence to a file.

My file isn't produced. What am I doing wrong? Are there any errors in my code? Is there something wrong with my code? Am I outputting the file correctly?

/*01*/ //
/*02*/ // random_sequence_v6.c
/*03*/ // Generate a random sequence of all numbers between 1 to N
/*04*/ //
/*05*/ #include "stdio.h"
/*06*/ #include "stdint.h"
/*07*/ #include "stdlib.h"
/*08*/ #include "stdint.h"
/*09*/ #include "sys/types.h"
/*10*/ #include "sys/stat.h"
/*11*/ #include "fcntl.h"
/*12*/ #include "assert.h"
/*13*/ #include "inttypes.h"
/*14*/
/*15*/ typedef uint64_t value_t;
/*16*/
/*17*/ value_t* generate_sequence(int num_values)
/*18*/ {
/*19*/     assert(num_values > 0);
/*20*/     value_t* data = calloc(num_values, sizeof(int));
/*21*/     for (int i = 0; i <= num_values; i++) {
/*22*/        data[i] = i;
/*23*/     }
/*24*/     return data;
/*25*/ }
/*26*/
/*27*/ int random_value(int min, int max)
/*28*/ {
/*29*/     int random_number;
/*30*/     do {
/*31*/         random_number = rand();
/*32*/     } while ((random_number <= min) || (random_number >= max));
           return random_number;
/*33*/ }
/*34*/
/*35*/ void randomize_sequence(value_t* sequence, int num_values)
/*36*/ {
/*37*/     // Fisher-Yates
/*38*/     for(int i = 0; i < num_values-2; i++) {
/*39*/         int random_index = random_value(i, num_values-1);
/*40*/         // Swap them
               int temp = sequence[i];
/*41*/         sequence[i] = sequence[random_index];
/*42*/         sequence[random_index] = temp;
/*43*/     }
/*44*/ }
/*45*/
/*46*/ int main(int argc, char* argv[])
/*47*/ {
/*48*/     int num_values = strtoul(argv[1], NULL, 10);
/*49*/     value_t* pValues = generate_sequence(num_values);
/*50*/
/*51*/     randomize_sequence(pValues, num_values);
/*52*/
/*53*/     // Record results
/*54*/     FILE *fd = fopen("results.txt", "w+");
/*55*/     for (int i = 0; i < num_values; i++) {
/*56*/         fprintf("%i = %"PRIu64"\n", i, pValues[i]);
/*57*/     }
/*58*/     fclose(fd);
/*59*/
/*60*/     return EXIT_SUCCESS;
/*71*/ }




Aucun commentaire:

Enregistrer un commentaire