ITech Challenge 2012 második forduló – megoldások
Magazin 1. Feladat (20 pont) Melyik az a legkisebb Fibonacci-szám, amelynek az ábrázolásához több mint 65 bit szükséges? Megoldás: 51680708854858323072 Innen: http://www.maths.surrey.ac.uk/hostedsites/R.Knott/Fibonacci/fibtable.html És 2^66 nál kell nagyobb egyenlőnek lennie, ami a windows calculatorból: 73786976294838206464
2. Feladat (50 pont) Adott egy labirintus, az a kérdés, hogy a bal felső sarokból a legrövidebb úton hány lépésben lehet eljutni a jobb alsó sarokba? letölthető file: labirintus.txt
Megoldás: 10160, de minden 10158 – 10162 közötti értéket elfogadunk. Egy sima dijkstra algoritmust kell implementálni.
3. Feladat (20 pont) Ha a következő függvény kimenete 32 bites platformon "4 5", akkor mi volt a bemenő paraméter értéke? void Foo(int a) { float b; printf("%d", sizeof(++a+b)); printf(" %d", a); }
Megoldás: 5. A sizeof még fordítási időben kiértékelődik így a ++a nem fordul bele a kódba.
ITech Challenge 2012 második forduló – megoldások
Bugtracker Program is not Running (20 pont) Reporter: Shao Kahn Description This plogram not running. Try to enter on file, but open editor. I want to run program not open editor. I need please number the program outputs. Its very urgent. Can you help please?
Source void main() { size_t count= 0; for(size_t i = 0; i < 10; ++i) { for(int j = -10; j < 0; ++j) { if (j < i && i % 7 == 0) { ++count; } } } std::cout << count << std::endl; }
Response Megoldás: 0 Signed unsigned összehasonlítás esetén ( j < i) a signed értéket fogja a fordító unsignedra konvertálni és az összehasonlítást végrehajtani. Viszont 10 unsignedon ábrázolva nagyon nagy számot ad ezért j mindig > mint i.
ITech Challenge 2012 második forduló – megoldások
Wrong length is displayed (30 pont) Reporter: Striker Platform: Win32 PC Description When I run the program in release mode it runs OK, but displays some big random number under the string. But if I run the program in debug mode it crashes.
Expected It should display the string and the second line should display the length of the string.
Source class BufferBase { int OriginalLen; char* Buffer; int Len; public: BufferBase(char* buffer, int length); virtual ~BufferBase(); operator const char*() const { return Buffer; } operator char* () { return Buffer; } int GetOriginalLen() { return OriginalLen; } }; BufferBase::BufferBase(char* buffer, int length) : Len(length), OriginalLen(Len), Buffer(new char[Len]) { memcpy(Buffer, buffer, Len); } BufferBase::~BufferBase() { delete [] Buffer; } void main() { char Test[] = "abcdefghij"; BufferBase B(Test, strlen(Test)+1); std::cout << B << std::endl; std::cout << B.GetOriginalLen() << std::endl; }
ITech Challenge 2012 második forduló – megoldások
Response A) int Len; és int OriginalLen; megcserélni B) Buffer(new char[Len]) bevinni a függvény törzsén belülre C) memcpy-ben a length-et kell használni D) char Test[] a zárójelből hiányzik, hogy 10;
Megoldás: A Az egész problémát a hibás inicializálási sorrend okozza. Mivel az inicializálás olyan sorrendben történik, ahogy a headerben le vannak írva a dolgok, nem pedig attól függ, hogy milyen sorrendben vannak felsorolva konstruktor mögött. Így jelenleg először OriginalLen inizializálódik az inicializálatlan Lennel. Majd megint az inicializálatlan Len alapján foglalunk buffert, majd végül Len-t is inicializáljuk.
ITech Challenge 2012 második forduló – megoldások
Random crash issue (50 pont) Reporter: Goro Platform: Any Description This program runs fine most of the time, but there are some connections when it crashes. Can you please fix it?
Expected It shouldn't crash.
Source class Connection; /* !!! Must always use new, don't allocate on stack !!! */ class LoggedConnection : public Connection { char* LastMessage; void Cleanup(); public: LoggedConnection(const std::string& address, int port); virtual ~LoggedConnection(); // Functions virtual void virtual void virtual void
from Connection OnReceived(char* text); OnError(int errorcode); OnFinish();
}; LoggedConnection::LoggedConnection(const std::string& address, int port) : Connection(address, port) , LastMessage() { } void LoggedConnection::OnReceived(char* text) { printf("Received: %s\n", text); delete LastMessage; LastMessage= text; } void LoggedConnection::OnError(int errorcode) { printf("ERROR: %d\n", errorcode); Cleanup();
ITech Challenge 2012 második forduló – megoldások
} void LoggedConnection::OnFinish() { Cleanup(); } void LoggedConnection::Cleanup() { printf("Last Message (%d): %s\n", strlen(LastMessage), LastMessage); delete this; } LoggedConnection::~LoggedConnection() { delete LastMessage; }
void main() { LoggedConnection* C= new LoggedConnection(std::string(), 0); C->Start(); }
Response Megoldás: printf("Last Message (%d): %s\n", strlen(LastMessage), LastMessage); Ez a sor hibás abban az esetben, ha a connection-t azonnal lezárják üzenet küldése nélkül vagy hiba érkezik rajta. Ebben az esetben a LastMessage NULL, amire strlen()-t hívva crashel. A delete this; teljesen legálisan alkalmazható, ha utána a kérdéses metódus kilép anélkül, hogy virtuális metódust, vagy bármilyen membert próbálna elérni.
ITech Challenge 2012 második forduló – megoldások
Logging does not work sometimes (50 pont) Reporter: Raiden Platform: Any Description When I call the Log function with 0xFF as first argument it should display the log no matter what is_log_active contains. But it doesn't it sometimes displays it sometimes not. Can you please tell me what is wrong?
Source bool is_log_active[255]; void Log(char type_of_log, const char *txt) { if (type_of_log==0xFF || is_log_active[type_of_log]) printf("%s\n", txt); } int main() { Log(0xFF, "Hello"); }
Response A) is_log_active inicializalatlansaga miatt B) -1-gyel indexeli az is_log_active-ot C) 0xFF-et nem lehet char-on abrazolni túlcsordul D) || operator precedencia miatt, zarojel kellene
Megoldás: B. 0xFF értéke signed char-on ábrázolva -1. Ha 0xFF-et csak úgy beleírom a kódba, akkor azt a fordító int-ként kezeli, így type_of_log == 0xFF összehasonlításkor a kisebb típust (char) a nagyobbra (int) konvertálja, de -1 int-en ábrázolva: 0xFFFFFFFF lesz, ami soha nem lesz egyenlő 0xFF-el. Így a feltétel első rész mindig hamis, ezért tovább menve is_log_active tömböt fogja -1-el megcímezni a program, ami az adatsegmensben a tömb előtt lévő memória tartalma alapján vagy logol vagy nem.
ITech Challenge 2012 második forduló – megoldások
Memory Leak issue (50 pont) Reporter: Sonya Blade Platform: Any Description If you run this program it keeps allocating more and more memory. If you open the task manager you can see that the memory consumption goes up to more than 200 kb. This shouldn't happen. I tried to find the error myself, but couldn't find anything wrong with the program. Can you please help me Great Guru?
Source #include <stdio.h> #include <string.h> class Str { protected: char* mPtr; int mLen; void CopyPtr(const char* Ptr, int Len=-1) { delete [] mPtr; if (Ptr == NULL) { mPtr= NULL; mLen= 0; } else { if (Len == -1) { mLen= strlen(Ptr); } else { mLen= Len; } mPtr= new char[mLen+1]; strncpy(mPtr, Ptr, mLen+1); } } void ConcatenatePtr(const char* Ptr, int Len= -1) { if (Ptr != NULL) { int NewLen = Len; if (NewLen == -1) { NewLen= strlen(Ptr); }
ITech Challenge 2012 második forduló – megoldások
char* NewPtr= new char[mLen + NewLen + 1]; strncpy(NewPtr, mPtr, mLen); strncpy(NewPtr+mLen, Ptr, NewLen+1); delete [] mPtr; mLen+= NewLen; mPtr= NewPtr; } } public: Str() : mPtr(NULL), mLen(0) { } Str(const Str& Other) : mPtr(NULL), mLen(0) { *this= Other; } Str(char * Ptr) : mPtr(NULL), mLen(0) { CopyPtr(Ptr); } ~Str() { delete [] mPtr; } Str& operator=(const char* Ptr) { CopyPtr(Ptr); } Str& operator=(const Str& Other) { if (this == &Other) { return *this; } CopyPtr(Other.mPtr, Other.mLen); return *this; } Str& operator+=(const char* Ptr) { if (mPtr == NULL) { CopyPtr(Ptr); } else { ConcatenatePtr(Ptr); } return *this; } Str& operator+=(const Str& Other) { if (mPtr == NULL) { *this= Other; } else
ITech Challenge 2012 második forduló – megoldások
{ ConcatenatePtr(Other.mPtr, Other.mLen); } return *this; } Str operator+(const char* Ptr) { Str Tmp=*this; Tmp+= Ptr; return Tmp; } Str operator+(const Str& Other) { Str Tmp= *this; Tmp+= Other; return Tmp; } }; class UndoableStr: public Str { char* mStorePtr; int mStoreLen; public: UndoableStr() : mStorePtr(NULL), mStoreLen(0) { } UndoableStr(const Str& Other) : Str(Other), mStorePtr(NULL), mStoreLen(0) { Save(); } UndoableStr(const UndoableStr& Other) : Str(Other), mStorePtr(NULL), mStoreLen(0) { if (Other.mStorePtr == NULL) { mStorePtr= NULL; mStoreLen= 0; } else { mStorePtr= new char[Other.mStoreLen+1]; mStoreLen= Other.mStoreLen; strncpy(mStorePtr, Other.mStorePtr, mStoreLen+1); } } UndoableStr(char * Ptr) : Str(Ptr), mStorePtr(NULL), mStoreLen(0) { Save(); } ~UndoableStr() { delete [] mStorePtr; } void Save()
ITech Challenge 2012 második forduló – megoldások
{ delete [] mStorePtr; if (mPtr == NULL) { mStorePtr= NULL; mStoreLen= 0; } else { mStorePtr= new char[mLen+1]; mStoreLen= mLen; strncpy(mStorePtr, mPtr, mStoreLen+1); } } void Restore() { CopyPtr(mStorePtr, mStoreLen); } };
int main() { for(int i = 0; i < 1000000; ++i) { UndoableStr us("42"); us.Save(); Str s = "24"; Str ss = s + us; us += ss; us.Restore(); Str* uss= new UndoableStr(us); delete uss; } }
Response Megoldás: virtual maradt ki az ~Str() destruktor elől. Így a delete uss; hívásnál a fordító nem tudja, hogy UndoableStr-rel van dolga és csak az Str destruktorát hívja meg. Így az mStorePtr soha nem szabadul fel.
ITech Challenge 2012 második forduló – megoldások
Autogcom not working (20 pont) Reporter: Kano Platform: Any Description When I run the program it crashes instantly. While debugging I figured out that AUTOGCOM is not working properly because it crashes with a NULL pointer exception, when I try to call AddValue.
Source #include "igoheaders.h" class IGLOBAL_STATISTICS : public IINTERFACE { public: DEFINE_INTERFACE; virtual void AddValue(int Value) = 0; virtual int GetMin() = 0; virtual int GetMax() = 0; }; class GLOBAL_STATISTICS : public IGLOBAL_STATISTICS { protected: int mMax; int mMin; public: GLOBAL_STATISTICS(); virtual ~GLOBAL_STATISTICS() {} // IGLOBAL_STATISTICS virtual void AddValue(int Value); virtual int GetMin() { return mMin; } virtual int GetMax() { return mMax; } };
GLOBAL_STATISTICS::GLOBAL_STATISTICS() : mMax(INT_MIN) , mMin(INT_MAX) { } void GLOBAL_STATISTICS::AddValue(int Value) { if (mMax < Value) { mMax = Value; }
ITech Challenge 2012 második forduló – megoldások
if (mMin > Value) { mMin = Value; } }
Response Megoldás: Ami kimaradt az a DECLAREOBJECTFACTORY(GLOBAL_STATISTICS); De az ellenőrzésnél nem vesszük figyelembe a whitespaceket, amik legálisak lehetnek egy C++ kódban. A ; hiánya viszont rossz megoldást eredményez.
ITech Challenge 2012 második forduló – megoldások
RTFM (10 pont mindegyik) delete NULL? Szia! Most láttam egy részt a rendszerben, ami tuti, hogy delete -et hív egy pointerre, ami bizonyos esetben lehet NULL is. Ez így jó? Nem kellene oda egy if (!ptr)? Vagy csak benéztem valamit? Köszi, Jenő
A) http://en.cppreference.com/w/cpp/language/delete B) Thinking in C++ volume 1 239-242 C) Thinking in C++ volume 1 557 D) Thinking in C++ volume 1 581 Megoldás: D
NNG plakát Szia! Megtaláltam a neten a képet a régi, akkor még NavNGo-s óriásplakátról, azt, amelyiken a C++ rejtvény van. Viszont nem értem, hogy miért az jön ki, hogy navngo. Én akárhogy nézem mindig oavngo -t kapok. Egyébként itt a plakát, ha neked nincs meg itt a kép.
Köszi Jenő
A) http://en.cppreference.com/w/cpp/language/aggregate_initialization B) http://en.cppreference.com/w/cpp/language/direct_initialization C) Thinking in C++ volume 1 620-621 D) Thinking in C++ volume 1 623-625 Megoldás: D
ITech Challenge 2012 második forduló – megoldások
static_cast vs reinterpret_cast Hello! Most nézegetem, hogy C++-ban van egy csomó castolás művelet. Én eddig mindig a sima c típusú castolást használtam, de szeretnék áttérni. Csak azt nem értem, hogy mi a különbség a static_cast és a reinterpret_cast között. El tudod magyarázni? Előre is köszi, Jenő
A) http://en.cppreference.com/w/cpp/language/implicit_cast B) http://en.cppreference.com/w/cpp/language/explicit_cast C) Thinking in C++ volume 1 181-186 D) Thinking in C++ volume 1 712-713 Megoldás: C
const Szia! El tudod nekem mondani, hogy mi a különbség a const int* és az int const* között, sőt láttam olyat is, hogy int * const? Akkor ezek szerint mindegy, hogy hova írom, hogy const? Köszi a segítséget, Jenő
A) http://en.cppreference.com/w/cpp/language/cv B) http://en.cppreference.com/w/cpp/language/pointer C) Thinking in C++ volume 1 356-357 D) Thinking in C++ volume 1 363 Megoldás: B
ITech Challenge 2012 második forduló – megoldások
final Szia! Letöltöttem egy példakódot a netről, és találtam benne egy ilyet: class MyClass final { ... }; Ez mit csinál? Üdv, Jenő
A) http://en.cppreference.com/w/cpp/language/access B) http://en.cppreference.com/w/cpp/language/final C) Thinking in C++ volume 1 498-500 D) Thinking in C++ volume 1 709-712 Megoldás: B
Typename Szia! A múltkor gcc-vel fordítottam egy kódot, ami teljesen jól működött Visual Studio alatt és nem akart lefordulni. Végül Béla segített megoldani a dolgot és beleírt egy typename -et a kódba. Nézegettem, de nem igazán értem, hogy miért és mikor kell ezt kiírni. El tudod mondani? Köszi, Jenő
A) http://en.cppreference.com/w/cpp/keyword/class B) http://en.cppreference.com/w/cpp/language/class_template C) Thinking in C++ volume 1 188-189 D) Thinking in C++ volume 2 122-123 Megoldás: D
ITech Challenge 2012 második forduló – megoldások
=0 bug Szia! Most találtam a kódban egy ilyet class C { ... public: C(const C& c) = delete; Ez ugye bug? Ugyanis = 0; kellene oda írni és még persze a virtual is hiányzik. Jenő
A) http://en.cppreference.com/w/cpp/memory/new/operator_delete B) http://en.cppreference.com/w/cpp/language/virtual C) http://en.cppreference.com/w/cpp/language/class D) http://en.cppreference.com/w/cpp/language/copy_constructor Megoldás: D
Ez meg mi a template? Szia! Éppen egy nagyobb forrást olvasgattam és találtam benne egy érdekes template-et. Ilyet még nem láttam korábban és nem is igazán értem, hogy hogyan fordul le. El tudod mondani, hogy ez mit csinál, és mire jó?: template <> class C { ... }; Előre is köszi, Jenő
A) http://en.cppreference.com/w/cpp/language/class_template B) http://en.cppreference.com/w/cpp/language/function_template C) Thinking in C++ volume 1 685-688 D) Thinking in C++ volume 2 137-139 Megoldás: D
ITech Challenge 2012 második forduló – megoldások
Template függvény Szia! Béla azt mondta múltkor, hogy csináljak egy template függvényt az új template osztályom létrehozásához, hogy ne kelljen a sok template paramétert kiírnom. Azt hogyan kell, és egyáltalán miért segít? Köszi, J.
A) http://en.cppreference.com/w/cpp/language/template_specialization B) http://en.cppreference.com/w/cpp/language/function_template C) http://en.cppreference.com/w/cpp/utility/functional D) http://en.cppreference.com/w/cpp/container Megoldás: B
*&? Hello! Olvasom a példaprogramot, amit adtál, és belefutottam egy ilyenbe: int*&. Ez most micsoda? Pointer vagy referencia? Köszi, J.
A) http://en.cppreference.com/w/cpp/language/pointer B) http://en.cppreference.com/w/cpp/iterator C) Thinking in C++ volume 1 213-214 D) Thinking in C++ volume 1 478-479 Megoldás: D
ITech Challenge 2012 második forduló – megoldások
AUTOGCOM leak Hello! A kódban láttam egy ilyet: AUTOGCOM App; Ez micsoda? Mert úgy néz ki, és úgy van később használva mintha egy pointer lenne. Viszont nem kellene akkor delete-elni is? Köszi, J.
A) Elkéri az IAPPLICATION-t implementáló objektumot a repositoryból nem kell deletelni. B) Elkéri az IAPPLICATION-t implementáló objektumot a repositoryból és deletelni kell a végén. C) Elkéri az IAPPLICATION-t implementáló objektumot a repositoryból és ne felejts el DropClass-t hívni a végén. D) Automatikusan létrehoz egy IAPPLICATION típusú objektumot, ami valójában nem csinál semmit. Megoldás: A
Xml Config Szia! A projektemben éppen egy tök jó config osztályt csinálok. XML-ből tölt be és lehet bele mindenféle értékeket menteni és betölteni típusosan. De a legjobb része az, hogy van egy multiconfig osztályom, amivel több configot össze lehet kapcsolni és persze maga is config. Így aztán végtelenségig egymásba lehet ágyazni őket. Valamelyik fejlesztő (talán Béla volt?) mondta, hogy van erre egy design pattern és azt kövessem, de már nem emlékszem, hogy ki volt. Szerinted melyikre gondolhatott? Üdv, J.
A) http://en.wikipedia.org/wiki/Adapter_pattern B) http://en.wikipedia.org/wiki/Bridge_pattern C) http://en.wikipedia.org/wiki/Composite_pattern D) http://en.wikipedia.org/wiki/Decorator_pattern E) http://en.wikipedia.org/wiki/Facade_pattern F) http://en.wikipedia.org/wiki/Proxy_pattern
ITech Challenge 2012 második forduló – megoldások
Megoldás: C
Külső dll Szia! Kaptam egy külső library-t, hogy kössem be az iGO kódjába. Sajnos az interface nagyon nem illeszkedik a mienkhez. Mit mond ilyenkor a könyv, mi a teendő? Köszi, Jenő
A) http://en.wikipedia.org/wiki/Adapter_pattern B) http://en.wikipedia.org/wiki/Bridge_pattern C) http://en.wikipedia.org/wiki/Composite_pattern D) http://en.wikipedia.org/wiki/Decorator_pattern E) http://en.wikipedia.org/wiki/Facade_pattern F) http://en.wikipedia.org/wiki/Proxy_pattern Megoldás: A
Crash bug Szia! A múltkor találtam a kódban egy függvényt: void add_squares(std::vector& numbers) { size_t size= number.size()/2; for(size_t i = 0; i < size; ++i) { numbers.push_back(numbers[i] * numbers[i]); } } Átírtam iterátorosra, de így meg elég gyakran elszáll (Windows-on próbáltam). void add_squares(std::vector& numbers) { std::vector::iterator last= numbers.begin() + numbers.size()/2; for(std::vector::iterator i = numbers.begin(); i != last; ++i) { int num= *i; numbers.push_back(num * num); } }
ITech Challenge 2012 második forduló – megoldások
Elrontottam valamit? Nekem jónak tűnik. Köszi, J.
A) http://en.cppreference.com/w/cpp/language/operator_precedence B) http://en.cppreference.com/w/cpp/error C) http://en.cppreference.com/w/cpp/concept/RandomAccessIterator D) http://en.cppreference.com/w/cpp/container/vector/push_back Megoldás: D
Sprite system problem Szia! Képzeld most csinálok egy saját sprite rendszert. A spriteok bitmapek, amiket be lehet tölteni és meg lehet jeleníteni a képernyőn. Lehet pozicionálni is őket, sőt még forgatni is és nagyítani is tudom. Az a baj, hogy amikor elkezdem igazán használni a rendszert (éppen egy oldschool shootemup programot írok otthon telefonra), akkor elfogy a memória a telefonon. Rájöttem, hogy egy csomó spriteban ugyan az a bmp van betöltve. Főleg a bullet.bmp van bent nagyon sokszor. Tudsz valami tanácsot adni, hogy mit csináljak? Köszi, Jenő
A) http://en.wikipedia.org/wiki/Abstract_factory_pattern B) http://en.wikipedia.org/wiki/Builder_pattern C) http://en.wikipedia.org/wiki/Singleton_pattern D) http://en.wikipedia.org/wiki/Flyweight_pattern E) http://en.wikipedia.org/wiki/Observer_pattern F) http://en.wikipedia.org/wiki/Proxy_pattern Megoldás: D
ITech Challenge 2012 második forduló – megoldások
Project Managers Sürgős NMEA log analizálás Szia! Egy igen fontos ügyben kérném a segítségedet. Gyártás előtt állunk, és a partner már az utolsó országúti teszteken vizsgálja a programot. Eddig minden rendben ment, de most arra panaszkodtak, hogy az utolsó autopályás teszt közben az iGO rossz értékeket jelenített meg a képernyőn. Küldtek egy videót, meg az nmea logokat a készülékről. Meg kellene nézni a logot, és néhány fontos adatot belőle, hogy össze tudjam hasonlítani a videoban található adatokkal. Itt találod a logot: letölthető file: highway.nmea
Ezekre lennék kíváncsi: Mekkora távolságot tett meg? (m) (30 pont) Megoldás: 12740 m (elfogadott tartomány 12700 - 12800 ) Mennyi volt a legnagyobb sebesség? (km/h) (10 pont) Megoldás: 171.7 km/h (elfogadott tartomány: 171 – 173) Mennyi volt az átlagsebesség? (km/h) (20 pont) Megoldás: 144.1 km/h (összes távolság/összes idő. elfogadott tartomány: 143-145) Köszönöm szépen a segítséget, Tibor
ITech Challenge 2012 második forduló – megoldások
!!!FONTOS!!! Kódolás help Hello! A partner megküldte a karakter-gyakoriságokat a szövegben, amiket kértél a huffman kódoláshoz. Most azt kérdezi, hogy milyen hosszú lesz a legrövidebb és a leghosszabb kódszó. 2, 37, 38, 41, 44, 59, 60, 74, 81, 89
Meg tudod adni? (30 pont) A) 1, 6 B) 2, 5 C) 3, 5 D) 3, 6 Köszi, Alx Megoldás: B
ITech Challenge 2012 második forduló – megoldások
Dll Probléma Szia! Egy komoly problémával fordulnék hozzád. Egyik partnerünk küldött egy DLL-t, hogy kössük bele az iGO-ba és használjuk. Sajnos semmilyen leírást nem mellékeltek hozzá, és szabadságra mentek. Nekünk meg a következő Development Snapshot-ban már használni kellene ezt a DLL-t. Itt találod a DLL-t: letölthető file: MysteriousDLL.dll
Ki tudod deríteni, hogy mire való? (30 pont)
A) GPS pozíciók szűrését végzi, eltünteti az apróbb kiugrásokat B) Black Box loggoláshoz kell, rögzít minden pozíciót és eseményt C) Dead reckoningot valósít meg az autó szenzorai alapján D) Sebességmérő kamerákhoz távolság alapú riasztáshoz jó Lekötelezel, ha ezt megoldod nekem, Ágó Megoldás: A A total commander FileInfo pluginjében megnyitva láthatóak a függvények nevei, amiket exportál a dll. Abból ki lehet találni.
ITech Challenge 2012 második forduló – megoldások
28 Kütyü probléma! Sürgős! Szia! Hagytam az asztalodon egy kütyüt. Most érkezett a partnertől, mert állítólag valami GPS hibát talált a programban. Azt állítja, hogy nagyon lassan találja meg a pozíciót. Nem hiszem, hogy a mi oldalunkon lenne a hiba, de megtennéd, hogy utánanézel? Az én tippem az, hogy a gps vevő nem küld nekünk pozíciót. Ezzel nem tudunk mit csinálni, de tudjuk bizonyítani, hogy nem nálunk van a hiba. #1 Kérlek, nézd meg, hogy hány másodperc telik el a device bekapcsolásától addig a pontig, amíg az első GPS jelet megkapjuk. (40 pont) Megoldás: 33.94 másodperc. De elfogadjuk a 33-at és a 34-et is és a kettő közötti tört számokat is. Az első invalid RMC mondat: $GPRMC,062024.228,V,,,,,,,070907,,*2C 062024.228 paraméterből látszik, hogy 06:20:24.228 –kor volt. Az első valid RMC mondat: $GPRMC,062058.168,A,4728.0931,N,01902.0449,E,0.31,327.79,070907,,*07 062058.168 paraméterből látszik, hogy 06:20:58.162 –kor volt. #2 A partner azt mondja, hogy ez a lassú gps jelenség főleg akkor lép fel, ha sokáig kikapcsolva tartja a készüléket. Ha csak 5-10 percre kapcsolja ki a készüléket, akkor pár másodperc alatt talál GPS jelet. Ha azonban 4-5 órát áll, akkor sok idő kell neki. El tudod neki magyarázni, hogy ezt mi okozza? (20 pont) A) Ennyi ideig tart, amíg kiszámolja a pozíciót a kis teljesítményű processzorral. B) A műholdak elég messze vannak és időbe telik, amíg megérkezik róluk a jel C) A GPS vevő az Almanach adatokat tölt le a műholdakról. D) A GPS vevő az Ephemeris adatokat tölt le a műholdakról. Megoldás: D Köszi szépen a segítséget, Jani