Kurzusok
/
Prolog
Prolog
/
Feladatok
/
Globális helymeghatározó rendszer
Globális helymeghatározó rendszer

Globális helymeghatározó rendszer

Közepes

Bevezetés

A geocaching a szabadban töltött idő és a fejtörők megoldása iránti szeretetedet ötvözi, és te nagy rajongója vagy. Bár a helyi geocaching weboldal felsorolja az összes láda GPS-koordinátáját, arra viszont nem ad lehetőséget, hogy hatékony útvonalat tervezz a begyűjtésükhöz. Történetesen van a gépeden egy útvonalkereső szoftver, csakhogy az más GPS-formátumot használ, mint a geocaching weboldal. Ahhoz, hogy betápláld az adatokat az útvonalkereső szoftverbe, fel kell dolgoznod a weboldalon szereplő minden GPS-koordináta szélességi és hosszúsági fokát és féltekéjét.

Utasítások

A feladatod GPS-koordináták feldolgozása. Minden koordináta a tizedes fok formátum azon változatában van megadva, ahol a félteke külön szerepel:

<LATITUDE_DEGREES> <LATITUDE_HEMISPHERE>, <LONGITUDE_DEGREES> <LONGITUDE_HEMISPHERE>

Ezek az egyes komponensek megengedett értékei:

  • <LATITUDE_DEGREES>: lebegőpontos szám a 0..90 tartományban (a végpontokat is beleértve)
  • <LATITUDE_HEMISPHERE>: N vagy S
  • <LONGITUDE_DEGREES>: lebegőpontos szám a 0..180 tartományban (a végpontokat is beleértve)
  • <LONGITUDE_HEMISPHERE>: E vagy W

Például a "48.8584 N, 2.2945 E" feldolgozásának eredménye:

  • <LATITUDE_DEGREES>: 48.8584
  • <LATITUDE_HEMISPHERE>: N
  • <LONGITUDE_DEGREES>: 2.2945
  • <LONGITUDE_HEMISPHERE>: E

11 részfeladat vár rád, amelyekben lépésről lépésre dolgozod fel a GPS-koordinátákat. A Prolog határozott klóznyelvtan (DCG) támogatását fogod használni, amelyet strukturált szövegek feldolgozására terveztek.

Note

Hogy könnyebben elindulj, a vázfájl már tartalmazza a dcg/basics könyvtárat az alábbi módon:

:- use_module(library(dcg/basics)).

1. Vessző feldolgozása

Valósítsd meg a comma szabályt egyetlen vessző (",") feldolgozására:

?- string_codes(",", Codes), phrase(comma, Codes).

2. Szóköz feldolgozása

Valósítsd meg a space szabályt egyetlen szóköz (" ") feldolgozására:

?- string_codes(" ", Codes), phrase(space, Codes).

3. Az összes whitespace támogatása (az újsorok kivételével)

Módosítsd a space szabályt úgy, hogy minden whitespace-t feldolgozzon, az újsorok kivételével:

?- string_codes("\t", Codes), phrase(space, Codes).

?- string_codes("\n", Codes), phrase(space, Codes).
false.

4. A szélesség féltekéjének feldolgozása

A szélesség féltekéje "N" vagy "S" lehet, amelyet a north vagy south atommá kell feldolgozni. Valósítsd meg a latitude_hemisphere szabályt a szélesség féltekéjének feldolgozására:

?- string_codes("N", Codes), phrase(latitude_hemisphere(Hemisphere), Codes).
Hemisphere = north.

5. A hosszúság féltekéjének feldolgozása

A hosszúság féltekéje "E" vagy "W" lehet, amelyet az east vagy west atommá kell feldolgozni. Valósítsd meg a longitude_hemisphere szabályt a hosszúság féltekéjének feldolgozására:

?- string_codes("E", Codes), phrase(longitude_hemisphere(Hemisphere), Codes).
Hemisphere = east.

6. Fokok feldolgozása

A hosszúság vagy szélesség fokai lebegőpontos számként vannak meghatározva. Valósítsd meg a degrees szabályt lebegőpontos számok feldolgozására:

?- string_codes("748.012", Codes), phrase(degrees(Degrees), Codes).
Degrees = 748.012.

7. A szélességi fokok feldolgozása

A szélességi fokok nem csupán lebegőpontos számok, hanem a 0..90 tartományba eső (a végpontokat is beleértve) lebegőpontos számok. Valósítsd meg a latitude_degrees szabályt a szélességi fokok feldolgozására a fenti tartomány használatával:

?- string_codes("48.745", Codes), phrase(latitude_degrees(Degrees), Codes).
Degrees = 48.745.

?- string_codes("117.844", Codes), phrase(latitude_degrees(Degrees), Codes).
false.

8. A hosszúsági fokok feldolgozása

A hosszúsági fokok nem csupán lebegőpontos számok, hanem a 0..180 tartományba eső (a végpontokat is beleértve) lebegőpontos számok. Valósítsd meg a longitude_degrees szabályt a hosszúsági fokok feldolgozására a fenti tartomány használatával:

?- string_codes("178.773", Codes), phrase(longitude_degrees(Degrees), Codes).
Degrees = 178.773.

?- string_codes("-22.523", Codes), phrase(longitude_degrees(Degrees), Codes).
false.

9. A szélesség feldolgozása

A szélesség két részből áll: a fokokból és a féltekéből, amelyeket szóköz választ el. Valósítsd meg a latitude szabályt a szélesség feldolgozására:

?- string_codes("56.101 N", Codes), phrase(latitude(Degrees, Hemisphere), Codes).
Degrees = 56.101,
Hemisphere = north.

10. A hosszúság feldolgozása

A szélesség két részből áll: a fokokból és a féltekéből, amelyeket szóköz választ el. Valósítsd meg a latitude szabályt a szélesség feldolgozására:

?- string_codes("143.889 W", Codes), phrase(longitude(Degrees, Hemisphere), Codes).
Degrees = 143.889,
Hemisphere = west.

11. A koordináta feldolgozása

A koordináta két részből áll: a szélességből és a hosszúságból, amelyeket vessző, majd egy szóköz választ el. Valósítsd meg a coordinate szabályt, amely mind a szélességet (fokok és félteke), mind a hosszúságot (fokok és félteke) feldolgozza:

?- string_codes("48.8584 N, 2.2945 E", Codes), phrase(coordinate(Latitude, LatitudeHemisphere, Longitude, LongitudeHemisphere), Codes).
Latitude = 48.8584,
LatitudeHemisphere = north,
Longitude = 2.2945,
LongitudeHemisphere = east.
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Prolog Exercism

Készen állsz elkezdeni a(z) Globális helymeghatározó rendszer feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Prolog nyelvet 109 feladat segítségével, valódi emberi mentorálással, mindez ingyen.