C program, struct and functions help

  • Thread starter Thread starter jam12
  • Start date Start date
  • Tags Tags
    Functions Program
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 3K views
jam12
Messages
37
Reaction score
0
Hello, i want to write a function in the form of "float estM( Planet *body);" to calculate radius^3/period^2 for the planet earth, where i have an array of values for radius and period of different planets.
Here is the program so far, i am getting a -NaN error:

#include <stdio.h>
#include <math.h>

typedef struct pt {
char *name;
float period; /* orbital period in years */
float radius; /* orbital radius in ast units */
} Planet;

main() {

float estM( Planet *body); /* Have been told that the function is of this form to calculate radius^3/period^2 for earth*/

Planet Earth;
Planet plist[6];
int n, i;
Planet *body;
body=&Earth;

char nameMe[]="Mercury", nameV[]="Venus", nameE[]="Earth", nameMa[]="Mars", nameJ[]="Jupiter", nameS[]="Saturn";


plist[0].name = nameMe;
plist[0].period = 0.241;
plist[0].radius = 0.387;

plist[1].name = nameV;
plist[1].period = 0.615;
plist[1].radius = 0.723;

plist[2].name = nameE; /*Here is info for Earth */
plist[2].period = 1.0;
plist[2].radius = 1.0;

plist[3].name = nameMa;
plist[3].period = 1.881;
plist[3].radius = 1.524;

plist[4].name = nameJ;
plist[4].period = 11.86;
plist[4].radius = 5.203;

plist[5].name = nameS;
plist[5].period = 29.46;
plist[5].radius = 9.540;


n=6;
printf("Planet name\t period\t radius\n");

for (i=0;i<n;i++) {

printf("%s\t\t %.3f\t %.3f\n",plist.name, plist.period, plist.radius);

}

printf("%f\n",estM(body)); /* I want to calculate radius^3/period^2 for Earth */


}

float estM( Planet *body) { /*function to caculate radius^3/period^2 for Earth */

float m;
Planet Earth;
body=&Earth;
m=pow((*body).radius,3)/pow((*body).period,2);
return m;
}
 
on Phys.org
jam12 said:
Hello, i want to write a function in the form of "float estM( Planet *body);" to calculate radius^3/period^2 for the planet earth, where i have an array of values for radius and period of different planets.
Here is the program so far, i am getting a -NaN error:

Code:
float estM( Planet *body) {		/*function to caculate radius^3/period^2 for Earth */

float m;
Planet Earth;
body=&Earth;
m=pow((*body).radius,3)/pow((*body).period,2);
return m;
}

Looks like you accidentally left a non-initialized Earth structure in which you point the body pointer to (non-initialized floating point numbers are very likely to give a NaN). You should probably leave out the Earth variable, like

Code:
float estM( Planet *body) {		/*function to caculate radius^3/period^2 for Earth */
  return pow(body->radius,3)/pow(body->period,2);
}

where I have also replaced the (*pointer).member notation with pointer->member. You should then call this function with something sensible, like

Code:
printf("%f\n",estM(plist[2])); /* I want to calculate radius^3/period^2 for Earth */

Note, that in your code, the Earth variable in main is again non-initialized and will contain garbage, so either use plist[2] directly to refer to the values for Earth (as I did in the above snippet), or declare, say, Earth as "Planet *earth = plist[2];" after the plist declaration and then use "estM(earth)" later. If you want to call estM in your loop you will probably want to call with "estM(plist)".
 
Thanks just did it now, the code i used is:
in main:

Planet plist[6];
Planet *earth;
int n, i;
earth=&plist[2];

Here i didnt know that i could use a pointer to point to a member in the array, but it makes sense since all the members in the array are of type Planet.

then my function definition is just:

float estM( Planet *body) { /*function to caculate radius^3/period^2 for Earth */

return pow(body->radius,3)/pow(body->period,2);
}

Thanks again