#include
#include
#include
#include
#define max 1000
#define min 1
#define num_asteroids 10
#define max_distance 750
#define pos_dimensions 3
struct User
{
char name[20];
int pin;
};
int numberOfUsers(char* filename);
void readIdent(struct User *users,char* filename);
int verifyUser(struct User *users, int no_of_users);
void readAsteroidsData(char* asteroids,int attributes, int positions[][3]);
void writeAsteroidsTxt(int no_of_asteroids);
int getRandomNumber();
double calculateDistance(int x, int y, int z);
double calculateTime(double distance);
void writeToDistanceFile(char* asteroids,int no_of_asteroids, int attributes, int positions[][attributes]);
void readDistanceData(char* asteroids, int attributes, int distances[][attributes]);
void displayBarChart(char* asteroids,int no_of_asteroids, int attributes,int distances[][attributes]);
void sortArray(char* asteroids,int no_of_asteroids, int attributes,int distances[][attributes]);
void printArray(char* asteroids,int no_of_asteroids, int attributes,int distances[][attributes]);
int main()
{
//Common Variables
int no_of_users = numberOfUsers(“ident.txt”);
//int position_dimensions=3;
//Declare Arrays
char asteroids[num_asteroids];
struct User users[no_of_users];
int positions[num_asteroids][pos_dimensions];
time_t t;
srand ( (unsigned) time (&t));
//Verify User
readIdent(users,”ident.txt”);
if(verifyUser(users,no_of_users)==1)
{
printf(“nSuccessfully verifiednn”);
writeAsteroidsTxt(num_asteroids);
printf(“Asteriods positions written to filen”);
readAsteroidsData(asteroids,pos_dimensions,positions);
printf(“Asteriods positions read from filenn”);
//We now have the asteroids in a multidimensional array
//Calculate Distance and send
writeToDistanceFile(asteroids,num_asteroids,pos_dimensions,positions);
printf(“nAsteriods Distance from Spaceship written to filen”);
char aste[num_asteroids];
int distances[num_asteroids][pos_dimensions+1];
readDistanceData(aste,(pos_dimensions+1),distances);
printf(“Asteriods Distance from Spaceship read from filenn”);
printf(“Display Bar Chart of Distancesn”);
displayBarChart(aste,num_asteroids,pos_dimensions+1,distances);
sortArray(aste,num_asteroids,pos_dimensions+1,distances);
printf(“Asteroid Ranking from the closest to the furthest is as follows: n”);
printArray(aste,num_asteroids,pos_dimensions+1,distances);
printf(“Displaying Bar Chart After Sortingn”);
displayBarChart(aste,num_asteroids,pos_dimensions+1,distances);
}
else
{
printf(“Access Deniedn”);
}
return 0;
}
void printArray(char* asteroids,int no_of_asteroids, int attributes,int distances[][attributes])
{
for(int i=0;i<no_of_asteroids;i++)
{
printf(“%c %d %d %d %dn”,asteroids[i],distances[i][0],distances[i][1],distances[i][2],distances[i][3]);
}
}
//read ident.txt
void readIdent(struct User *users,char* filename)
{
FILE * fp;
fp = fopen(filename, “r”);
if (fp == NULL)
exit(EXIT_FAILURE);
int i = 0;
char id[20] ;
while(fscanf(fp,”%s”,users[i].name)==1)
{
fscanf(fp,”%s”,id);
users[i].pin =atoi(id);
i++;
}
fclose(fp);
}
//verify user
int verifyUser(struct User *users, int no_of_users)
{
//Verify the user input
//If valid , return 1
//Take input from the user
char nameInput[20] ;
printf(“Please enter your name:n”);
scanf(“%s”, nameInput);
int pinInput;
printf(“Please enter your pin:n”);
scanf(“%d”, &pinInput);
int found =0;
int attempts =0;
while(found==0 && attempts < 2)
{
for (int i = 0; i < no_of_users; i++)
{
if(strcmp(users[i].name, nameInput) == 0 && users[i].pin ==pinInput)
{
found=1;
}
}
if(found==0 && attempts < 2)
{
attempts++;
printf(“nInvalid!, Please Re-enter your details! n”);
printf(“You have %d attempts remaining!n”,3-attempts);
printf(“Please enter your username: “);
scanf(“%s”, nameInput);
printf(“Please enter your pin: “);
scanf(“%d”, &pinInput);
}
}
return found;
}
//count users in the file
int numberOfUsers(char* filename)
{
FILE *fp;
fp = fopen(filename, “r”);
if (fp == NULL)
{
exit(EXIT_FAILURE);
}
int i = 0;
char username[20],id[20] ;
while(fscanf(fp,”%s”,username)==1)
{
fscanf(fp,”%s”,id);
// users[i].id =atoi(id);
i++;
}
fclose(fp);
return i;
}
//generate asteroid positions
void writeAsteroidsTxt(int no_of_asteroids)
{
int i;
int num1 , num2 , num3;
FILE *fptr;
// opening file in writing mode
fptr = fopen(“asteroids.txt”, “w”);
char asteroids[10] =”ABCDEFGHIJ”;
// exiting program
if (fptr == NULL)
{
printf(“Error!”);
exit(1);
}
for ( i = 0; i < no_of_asteroids; ++i)
{
num1= getRandomNumber();
num2 =getRandomNumber();
num3 = getRandomNumber();
fprintf(fptr, “%c %d %d %dn”, asteroids[i],num1,num2,num3);
}
fclose(fptr);
}
int getRandomNumber()
{
int number;
number = (rand() % (max – min + 1)) + min;
return number;
}
//read asteroids
void readAsteroidsData(char* asteroids, int attributes, int positions[][attributes])
{
FILE * fp;
fp = fopen(“asteroids.txt”, “r”);
if (fp == NULL)
exit(EXIT_FAILURE);
int i = 0;
int attr =0;
char token[20];
while (fscanf(fp,”%s”,token)==1)
{
asteroids[i] =token[0];
while( attr<attributes)
{
fscanf(fp,”%s”,token);
positions[i][attr++] =atof(token);
}
attr=0;
i++;
}
fclose(fp);
//return positions;
}
//Calculate distance
double calculateDistance(int x, int y, int z)
{
int sum_of_squares;
double distance =0;
sum_of_squares = (x*x)+(y*y)+(z*z);
distance = sqrt(sum_of_squares);
return distance;
}
void writeToDistanceFile(char* asteroids,int no_of_asteroids, int attributes, int positions[][attributes])
{
int i;
int x, y, z;
double distance;
double time;
FILE *fptr;
// opening file in writing mode
fptr = fopen(“distance.txt”, “w”);
// exiting program
if (fptr == NULL)
{
printf(“Error!”);
exit(1);
}
for ( i = 0; i < no_of_asteroids; ++i)
{
x =positions[i][0];
y =positions[i][1];
z =positions[i][2];
distance= calculateDistance(x,y,z);
fprintf(fptr, “%c %d %d %d %.2fn”, asteroids[i],x,y,z,distance);
if(distance < max_distance)
{
printf(“WARNING WARNING WARNING n”);
printf(“Near asteroid %c at %d %d %d: %.2f KM Away!n”,asteroids[i],x,y,z,distance);
time = calculateTime(distance);
printf(“Time to impact %.2f secondsn”,time);
}
}
fclose(fptr);
}
double calculateTime(double distance)
{
double time = distance/25;
return time;
}
void readDistanceData(char* asteroids, int attributes, int distances[][attributes])
{
FILE * fp;
fp = fopen(“distance.txt”, “r”);
if (fp == NULL)
exit(EXIT_FAILURE);
int i = 0;
int attr =0;
char token[20];
while (fscanf(fp,”%s”,token)==1)
{
asteroids[i] =token[0];
while( attr<attributes)
{
fscanf(fp,”%s”,token);
distances[i][attr++] =atof(token);
}
attr=0;
i++;
}
fclose(fp);
}
//sort array
void sortArray(char* asteroids,int no_of_asteroids, int attributes,int distances[][attributes])
{
//read data to array
int temp[attributes];
char c ;
int i;
int j;
for( i=0; i<no_of_asteroids; i++)
{
for( j =i+1; j< no_of_asteroids; j++)
{
if(distances[i][3] > distances[j][3])
{
//swap items
//
temp[0] =distances[i][0];
temp[1] =distances[i][1];
temp[2] =distances[i][2];
temp[3] =distances[i][3];
//
distances[i][0] =distances[j][0];
distances[i][1] =distances[j][1];
distances[i][2] =distances[j][2];
distances[i][3] =distances[j][3];
//
distances[j][0] =temp[0];
distances[j][1] =temp[1];
distances[j][2] =temp[2];
distances[j][3] =temp[3];
c = asteroids[i];
asteroids[i] =asteroids[j];
asteroids[j]=c;
}
}
}
printf(“Finished sortingn”);
}
//display bar for distance
void displayBarChart(char* asteroids,int no_of_asteroids, int attributes,int distances[][attributes])
{
int asterisks ;
int j ;
for(int i=0; i<no_of_asteroids; i++)
{
asterisks = distances[i][3]/50;
printf(“%c |”,asteroids[i]);
for( j =0; j<asterisks; j++)
{
printf(“*”);
}
printf(“n”);
}
printf(” |n |n |n 0—-|—-|—-|—-|—-|————————-n”);
}
The post #include #include #include #include #define max 1000 #define appeared first on PapersSpot.