#include \"race.h\" /*this funtion will take the max number of racer and crate r
ID: 3752575 • Letter: #
Question
#include "race.h"
/*this funtion will take the max number of racer and crate race objct and return it by refrance*/
race * create_race(int max_racers)
{
//make rac object and assign mamory
race * newRace = (race*)malloc(sizeof(race));
newRace->num_racers = 0; // assign num racers who will tell how many racer are in race array
if (max_racers <= 0) // if max racer size is negative or zero than make it 20
newRace->max_racres = 20;
else
newRace->max_racres = max_racers; // assign race array max size
newRace->racers = (racer*)malloc(sizeof(racer) * newRace->max_racres);
return newRace; // return race object
}
/*this funtion will add new racer in race*/
int add_racer(race * rec, racer rcr)
{
int isDublicat = 0, i;
if (rec->num_racers < rec->max_racres) // check is there any space avelabe in the race array
{
// if space is avelable than check is reacer is already in this race by it id
for (i = 0; i < rec->num_racers; i++)
{
if (rec->racers[i].bib_number == rcr.bib_number)
{
isDublicat = 1;
break;
}
}
if (isDublicat == 0) // is the racer is not in the race already than add it
{
rec->racers[rec->num_racers] = rcr;
rec->num_racers++;
}
else // if racer already in the race than print error massage
{
printf("Cannot add racer to race. Duplicate bib number ");
}
}
else// if no more space in the race for racer than print error
{
printf("Cannot add another racer to race. Race size exceeded ");
return -1;
}
return 0;
}
/*this function will return the min age racer age if not found than return zero*/
int calc_min_age(race * rec)
{
int i = 0;
int min_age;
if (rec->num_racers > 0)
min_age = rec->racers[0].age;
else
return 0;
for (i=1; i < rec->num_racers; i++)
{
if (rec->racers[i].age < min_age) // finding min age
min_age = rec->racers[i].age;
}
return min_age; //return age
}
/*this function will return the max age racer age if not found than return zero*/
int calc_max_age(race * rec)
{
int i = 0;
int max_age;
if (rec->num_racers > 0)
max_age = rec->racers[0].age;
else
return 0;
for (i = 1; i < rec->num_racers; i++)
{
if (rec->racers[i].age > max_age) // finding min age
max_age = rec->racers[i].age;
}
return max_age; // return age
}
/*this function will return the avrage age racer age if not found than return zero*/
double calc_avg_age(race * rec)
{
double avg_age = 0.0;
int i = 0;
for (; i < rec->num_racers; i++)
{
avg_age += rec->racers[i].age; // sum all age
}
if (avg_age == 0)
return 0;
avg_age /= ((double)rec->num_racers); // calculate avrage
return avg_age; // return avrage
}
/*Delete racer if found*/
int delete_racer(race * rec, int racer_num)
{
int i = 0, found = -1;
for (i = 0; i < rec->num_racers; i++)
{
if (found != -1)
{
rec->racers[i - 1] = rec->racers[i];
}
if (rec->racers[i].bib_number == racer_num)
{
found = i;
}
}
if (found != -1)
{
rec->num_racers--;//if found deleta racer
}
else// not found print error
{
printf("Racer w/ number %d not found. Did not delete. ", racer_num);
}
return 0;
}
/*print all racer in race*/
void print_race(race * rec)
{
int i = 0;
double avg_age;
printf("Race: ");
for (; i < rec->num_racers; i++)
{
print(rec->racers[i]);
}
avg_age = calc_avg_age(rec);
if(avg_age > 0)
printf("Racer ages youngest: %d yo, oldest: %d yo, average age: %.2f ", calc_min_age(rec), calc_max_age(rec), avg_age);
else
printf("Racer ages youngest: %d yo, oldest: %d yo, average age: 0 ", calc_min_age(rec), calc_max_age(rec));
}
/*free race object from heap memory*/
void free_race(race * rec)
{
free(rec);
}
...................................................................................................................................................
#include "racer.h"
/*this function will take bobnumber, age and name as peramiter and return the racer object*/
racer create_racer(int num, char * name, int age)
{
racer newRacer; // make racer object
int i, j = 0;
if (num < 0) // check if num is negtive if negative make it positive
newRacer.bib_number = num * (-1);
else
newRacer.bib_number = num; // assign num
if (age < 0) // if age is negative make it positive
newRacer.age = age * (-1);
else
newRacer.age = age;
for (i = 0; i < MAX_NAME_LENGTH; i++) // assign name to the racer object
{
if (name[j] != '' && name[j] != ' ') {
newRacer.name[i] = name[j];
j++;
}
else // if name size is less then max name size than i will add space till max name size is this else part
{
newRacer.name[i] = ' ';
}
}
newRacer.name[MAX_NAME_LENGTH] = '';
return newRacer; // restun racer object
}
/*this function will take racer iobject and print it*/
void print(racer rcr)
{
printf("Racer %d %s %02d ", rcr.bib_number, rcr.name, rcr.age); // print the recer object
}
...........................................................
both codes race and racers are working fine no error no problems
i am asking you to make changes in the both codes, replace some commands and other things
you neet to write it in different way and make sure the code is working when you make changes
Explanation / Answer
NOTE: As you have not provided race.h and racer.h it is impossible for me to run this code. You have not mentioned what specific changes to be made so I have changed the code as much it could have been modified. Leave comments if you want to get done something specific or the code is giving any issue while running also please mention the error along with the line number having the error.
Code:
#include "race.h"
/*create_race funtion will take the max number of racer and create race objct and return it by reference*/
race * create_race(int max_num_of_racer)
{
/*Creating race object and assigning memory*/
race * new_race = (race*)malloc(sizeof(race));
/* Initializing number of racers TO ZERO*/
new_race->num_racers = 0;
/* if maximum number of racers is negative or zero then initialize it with value 20*/
if (max_num_of_racer <= 0)
new_race->max_racres = 20;
else
/* else initialize race array max size with max_num_of_racer that was passed in this function*/
new_race->max_racres = max_num_of_racer;
new_race->racers = (racer*)malloc(sizeof(racer) * new_race->max_racres);
/* Returning race object*/
return new_race;
}
/*add_racer funtion will add new racer in race*/
int add_racer(race * race_var, racer racer_var)
{
int is_dup = 0, i;
/* Checking race array is not full*/
if (race_var->num_racers < race_var->max_racres)
{
for (i = 0; i < race_var->num_racers; i++)
{
/* Checking by id if the racer is already present in this race */
if (race_var->racers[i].bib_number == racer_var.bib_number)
{
is_dup = 1;
break;
}
}
/*If not already in the race then add racer*/
if (is_dup == 0)
{
race_var->racers[race_var->num_racers] = racer_var;
race_var->num_racers++;
}
/*Else Print the error message*/
else
{
printf("Cannot add racer to race. Duplicate bib number ");
}
}
/*If racer array is full print error*/
else
{
printf("Cannot add another racer to race. Race size exceeded ");
return -1;
}
return 0;
}
/*findMinimumAge function will return the min age racer age if not found than return zero*/
int findMinimumAge(race * race_var)
{
int index = 0;
int minimum_age;
/*If number of racers is not 0 then take auxiliary minimum age using 1st index*/
if (race_var->num_racers > 0)
minimum_age = race_var->racers[0].age;
/*If number of racers is zero return 0*/
else
return 0;
/*Check for minimum age through the whole array of racers*/
for (index=1; index < race_var->num_racers; index++)
{
if (race_var->racers[index].age < minimum_age)
minimum_age = race_var->racers[index].age;
}
/*Return minimum age*/
return minimum_age;
}
/*findMaximumAge function will return the max age racer age if not found than return zero*/
int findMaximumAge(race * race_var)
{
int i = 0;
int maximum_age;
/*If number of racers is not 0 then take auxiliary maximum age using 1st index*/
if (race_var->num_racers > 0)
maximum_age = race_var->racers[0].age;
/*If number of racers is zero return 0*/
else
return 0;
/*Check for minimum age through the whole array of racers*/
for (i = 1; i < race_var->num_racers; i++)
{
if (race_var->racers[i].age > maximum_age)
maximum_age = race_var->racers[i].age;
}
/*Return minimum age*/
return maximum_age;
}
/*this function will return the avrage age racer age if not found than return zero*/
double calculateAverageAge(race * race_var)
{
double average_age = 0.0;
int index = 0;
/*Taking sum of all the ages in racer array*/
for (; index < race_var->num_racers; index++)
{
average_age += race_var->racers[i].age;
}
/*If sum of all the ages is zero return 0*/
if (average_age == 0)
return 0;
/*Calculate final average of the ages*/
average_age /= ((double)race_var->num_racers);
/*Return the average of the ages*/
return average_age;
}
/*delete_racer removes a particular racer if found in race*/
int delete_racer(race * race_var, int racer_num)
{
int i = 0, found = -1;
for (i = 0; i < race_var->num_racers; i++)
{
if (found != -1)
{
race_var->racers[i - 1] = race_var->racers[i];
}
/*If racer is found take its index in found variable*/
if (race_var->racers[i].bib_number == racer_num)
{
found = i;
}
}
/*If racer was found and removed in above decrease the number of races from the race*/
if (found != -1)
{
race_var->num_racers--;
}
/*If racer not found print error message*/
else
{
printf("Racer w/ number %d not found. Did not delete. ", racer_num);
}
return 0;
}
/*print_race function prints all racer's details present in race*/
void print_race(race * race_var)
{
int i = 0;
double average_age;
printf("Race: ");
for (; i < race_var->num_racers; i++)
{
printRacer(race_var->racers[i]);
}
average_age = calculateAverageAge(race_var);
if(average_age > 0)
printf("Racer ages youngest: %d yr, oldest: %d yr, average age: %.2f ", findMinimumAge(race_var), findMaximumAge(race_var), average_age);
else
printf("Racer ages youngest: %d yr, oldest: %d yr, average age: 0 ", findMinimumAge(race_var), findMaximumAge(race_var));
}
/*free_race function removes race object from heap memory*/
void free_race(race * race_var)
{
free(race_var);
}
...................................................................................................................................................
#include "racer.h"
/*create_racer function will take bibnumber, age and name as parameter and return the racer object*/
racer create_racer(int num, char * name, int age)
{
/*Define a new racer object*/
racer new_racer;
int i, j = 0;
/* If the passed number is negative make it positive*/
if (num < 0)
new_racer.bib_number = num * (-1);
/*Else assign number to new racer*/
else
new_racer.bib_number = num;
/*If passed age is negative make it positive*/
if (age < 0)
new_racer.age = age * (-1);
/*Else assign age to new racer*/
else
new_racer.age = age;
/*Assign name passed to the racer object letter by letter*/
for (i = 0; i < MAX_NAME_LENGTH; i++)
{
if (name[j] != '' && name[j] != ' ')
{
new_racer.name[i] = name[j];
j++;
}
/*Appending spaces in case name is smaller than max name length*/
else
{
new_racer.name[i] = ' ';
}
}
/*Ending the name string with null character*/
new_racer.name[MAX_NAME_LENGTH] = '';
/*Returning the racer object*/
return new_racer;
}
/*printRacer function will take racer object and print its details*/
void printRacer(racer racer_var)
{
/*Printing details of racers*/
printf("Racer Number: %d Racer Name: %s Racer age: %02d ", racer_var.bib_number, racer_var.name, racer_var.age);
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.