Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Pili

macrumors regular
Original poster
Nov 1, 2005
212
1
Orlando/Miami, FL
Yes, this is part of a hw problem for class but I just need help in understanding where to go with this, not actual code. I'm given a file that lists lat and long data for states, as well a line that indicates the state (sample shown). The goal is to create a program, using arrays only I believe (not structs), that asks a user to input the state in the command line and the program draws the outline of the state in a window based on the coordinates (drawing is done via a custom library they provide us). I understand the basics of inputing data into an array but I'm at a loss of how to go about dealing with the state labels, and how/if the labels are used selecting the correct data to draw with. Any help would be appreciated. thanks

Code:
WA
122750 49000
117000 49000
117000 46333
116866 46000
119000 46000
122666 45500
122916 46166
123916 46250
124166 47000
124666 48333
122833 48166
122666 47416
122583 47333
122416 47333
122750 49000
-1 -1
ID
117000 49000
116000 49000
116000 48000
114500 46500
...
 

lee1210

macrumors 68040
Jan 10, 2005
3,182
3
Dallas, TX
Are you supposed to buffer up the whole file in memory, or search the file after the user inputs the state?

If you're buffering the whole thing an approach would be:
char stateAbbvs[51][3];
float latitudes[51][MAXPOINTS];
float longitudes[51][MAXPOINTS];

Or combine the coordinates:
float coordinates[51][MAXPOINTS][2]; //0 is for latitude, 1 is for longitude

Then when the user enters the abbreviation you find the position in the co-arrays then display based on that. Probably write a function that takes the coordinates for the one state to format for display.

Otherwise, just search the file and read into the float array(s).

-Lee
 
Last edited:

chown33

Moderator
Staff member
Aug 9, 2009
10,750
8,422
A sea of green
The "BF&I (Brute Force & Ignorant)" approach:

Read and ignore lines until the desired state abbreviation appears on a line by itself.
Read, parse, and draw lat/lon pairs until terminator appears (-1 -1).
Halt.


The "Parallel Arrays" approach.

Read a line. Does it look like a state abbreviation or a lat/lon pair?

If a state abbreviation, store it in an array of state abbreviations,
then commence reading lat/lon pairs into an array of lat/lon coords
for this state, stopping at terminator.
Store that array into another parallel array.

"Parallel array" means an array with a different name and type than the state-name array, but whose items have the same index as the corresponding state name. So the name for AK is at index 0, and the array of coords for AK is also at index 0, but in a different array. (This is a BF&I approach to structuring data, when structs or objects are much clearer and more encapsulated. It's the kind of BS you'd do in old-school BASIC programs where the only composite data structure was an array.)


And I'm wondering what the data for Michigan looks like, or really any state with islands or discontiguous land areas.
 

jiminaus

macrumors 65816
Dec 16, 2010
1,449
1
Sydney
(This is a BF&I approach to structuring data, when structs or objects are much clearer and more encapsulated. It's the kind of BS you'd do in old-school BASIC programs where the only composite data structure was an array.)

LOL. You got me remembering about BASIC as soon as I saw parallel arrays. :)

In the interests of KISS, I would recommended chown33's first BF&I approach, considering the state is one the command-line and the program won't have to make multiple lookups.

If the OP gets that to work, fork the code and try to the parallel arrays approach. Lee's given you the data structures for this. But really I wouldn't bother. For reals, you wouldn't do it this way.
 

Pili

macrumors regular
Original poster
Nov 1, 2005
212
1
Orlando/Miami, FL
Thanks! going to try and tackle it this afternoon. FYI the states are really blocky and cartoon shaped so its by no means accurate lol.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.