In order to become familiar with C, I think of a topic to try to do up, found a lot of harvest.
Although is patchwork, the whole procedure does not have the very good structure, therefore the optimization space is still very big, today summarizes this one's harvest.
The title is like this.
The reality is that aircraft routes will avoid some designated areas and then need to update their location relationships with those areas in real time.
So I abstracted a bit. Suppose I enter the coordinates of a "no-fly zone" in a coordinate system and record the range, preferably with a record of the position relationship
The structure is used here.
struct point_date{ int coor_x; int coor_y; int range; float Dis;} Point [SIZE];
The whole is a location. The line is stored in the array.
File operations
If you want your data to be retained, you need to use the file read and write, so as to be familiar with the use of documents, but also better reflect the practicality
In the operation of a file, the first thing to do is write data through a struct array and then log the array data to a file. That's a basic idea.
for (i=0; i<size;i++) { scanf ("%d%d%d",&point[i].coor_x,&point[i].coor_y,&point[ I].range); Record (); }
Write an array
voidrecord () {FILE*FP; inti; if((Fp=fopen ("point_date","WB"))==NULL) {printf ("cannot open file \ n"); return ; } for(i=0; i<size;i++) if(Fwrite (&point[i),sizeof(structPoint_date),1, fp)! =1) {printf ("file write error \ n"); } fclose (FP);}
Write to the file here also a little bit do not understand, not very understand the meaning of this operation to mark tomorrow to solve
It's in the file, and now it needs to be read.
voidRead () {FILE*FP; inti; for(i=0; i<size;i++) { fread ( &point[i],sizeof (struct point_date), 1,FP); intTemp,varout,varin; for(Varout =1; varout<size;varout++) {Temp=point[varout].coor_x; Varin= Varout-1; while(Varin >=0&& temp<point[varin].coor_x) {Point[varin+1].coor_x =point[varin].coor_x; Varin--; } Point[varin+1].coor_x =temp; } printf ("x=%d y=%d rang=%d \ n", Point[i].coor_x,point[i].coor_y,point[i].range); }}
The red of the mark knows the function but still lacks the deep understanding, here is not only to read out also realizes a sort of function, uses the Hasselblad inserts the sort, later has the time slowly
You can use some other algorithms to improve efficiency.
After finishing the sequence, you can first look at the logic of the main function
voidMain () {inti; intT_x,t_y,t_ran; printf ("Input the point and range \ n"); for(i=0; i<size;i++) //Through this loop implementation of the file write {scanf ("%d%d%d", &point[i].coor_x,&point[i].coor_y,&Point[i].range); Record (); } read (); //read out the data you just wrote and sort by the size of the x-coordinate to printf ("input the target point x y range\n"); scanf ("%d%d%d",&t_x,&t_y,&T_ran); //Enter the location where you are now floatA[size]; for(i=0; i<size;i++) {Count_dis (t_x,t_y,point[i].coor_x,point[i].coor_y); //Calculates the value of x, Y, and X and y of the location at which the function of the distance is entered, and the value of Point[i].dis for each point in the array=Count_dis (t_x,t_y,point[i].coor_x,point[i].coor_y); A[i]=Point[i].dis; //Because you want to sort it out so it's easy to operate printf ("The distance is%LF \ n", A[i]); } range (a); //To sort from small to large for(i=0; i<size;i++) {printf ("\ n"); printf ("The distance is%LF \ n", A[i]); } }
In fact, after reading the main function basically finished the following to post the sorting and calculate the distance function
floatCount_dis (intT_x,intT_y,intXinty) { intDis,dx,dy; intpx,py; DoubleA; DX= t_x-x; Dy= T_y-y; PX=ABS (DX); PY=abs (DY); Dis= px*px + py*py; A=sqrt (DIS); returnA; }voidRange (floata[]) { inti; Doubletemp; for(i=0; i<size-1; i++){ if(a[i]>=a[i+1]) {temp=A[i]; A[i]= a[i+1]; A[i+1] =temp; } }}
This involves more practical two things one is abs () This function, is to take absolute value. There is also a sqrt ()
As for the sort, it should be the bubble method is the size Exchange position, small to the front.
This is basically done although not much but their efficiency is not high, or up and down one weeks.
This is actually the prototype, there are a lot of places to optimize the following list below, I have the ability time to try
1. The name of the last three points after sorting the nearest distance, and the azimuth reference coordinate system
2. Go out and do something repetitive, like two times in a sort. Can you open a function independently?
3. The array can be changed into a linked list to operate, improving the scalability
There are, of course, some questions
1. When I read from a file, the array of arrays is reordered, and the contents of the file are changed.
2. The use of fopen fwrite fclose in file operations is still not very understanding
3. The last distance sort of a little bit bug sometimes not according to small to large Depressed in
This is another 1 points, today saw a sentence, I think it is very interesting to come out and share with you
The scientist worked late. Because the day is mediocre, and then at night with guilt to do their own things.
Well, this is the day I play, and at night I find it's not done yet and stay up late ...
It means a lot. You can have more experience.
中文版 version coming soon~~~~~
C's Practice