Szerző Téma: Leírás: Mûveleti sorrend PAWN makrókban.  (Megtekintve 3022 alkalommal)

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Leírás: Mûveleti sorrend PAWN makrókban.
« Dátum: 2010. november 07. - 22:08:32 »
0 Show voters
A makrók lényege, hogy apró feladatokban megkönnyítse a programozót, tehát egy-egy rutint gyorsan el tudjon végezni, anélkül hogy külön funkciókkal tömné tele a modját. Ám van egy pár fontos dolog, aminél az ember - ha nem gondolkodik eléggé - elakadhat. Nem hiszem hogy mindenkinek egetrengetõ, de ha csak egy embert is ki tudtam ezzel segíteni, megérte.
Elég sokat fáradozhat egy kezdõ programozó azon, hogy a PAWN preprocesszorával hogy lehet egy értelmes többmûveletes matematikai képletet összerakni, mivel hasonlóan a többi programnyelvhez, alapvetõen a PAWN sem képes a mûveleti sorrend megértésére, így nekivágtunk a vakvilágnak, és teszteltünk pár makró megoldást, hogy bemutassuk, hogy kell ezt megoldani:
 

#define HOZZAAD(%0,%1)                  %0 + %1
main()
{
    printf(\"%d\", HOZZAAD(3, 3) * 7);
}

 
A preprocesszor ezt a következõnek fogja fordítani: 3+3*7=42 ami nem egyenlõ a várt 24-gyel. Rendben, ez túl alap volt, próbáljunk ki zárójelket használni a kódban:
 

#define SZOROZ(%0,%1)                  (%0 * %1)
main()
{
    printf(\"%d\", SZOROZ(3 + 3, 7));
}

 
Eredmény? Az összes tag zárójelben marad! [ (3 + 3 * 7) ], tehát az eredmény mindig 42! A megoldás: használjunk duplazárójelet.
 

#define SZOROZ(%0,%1)                 ((%0) + (%1))
main() {
   printf(\"%d\", SZOROZ(3,  3*7));
}

 
A preprocesszor ezt a megfelelõ képlettel fogja lefordítani ((3)+(3*7))=24. Ezért nagyon fontos hogy matematikai mûveleteknél
hogy a mûvelet egészét zárójelbe rakjuk makróíráskor.
« Utoljára szerkesztve: 2011. június 26. - 10:54:59 írta krisk »

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
Leírás: Mûveleti sorrend PAWN makrókban.
« Válasz #1 Dátum: 2010. november 08. - 21:44:51 »
0 Show voters
Finom.
Aki átlátja a logikáját a dolognak annak felesleges a tut.
Aki nem, az sürgõsen próbálja meg átlátni.

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Leírás: Mûveleti sorrend PAWN makrókban.
« Válasz #2 Dátum: 2010. november 08. - 22:03:29 »
0 Show voters
Zárójelbe, ennek a bõvítését akartam közzétenni itt, csak sajnos az SFM közbekavart, én meg egy jódarabig nem fogom leírni újra, majd talán pár hónap múlva.

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Leírás: Mûveleti sorrend PAWN makrókban.
« Válasz #3 Dátum: 2010. november 12. - 21:00:32 »
0 Show voters
Azt igen nem értem, hogy mér épp 24 lett belõle.

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Leírás: Mûveleti sorrend PAWN makrókban.
« Válasz #4 Dátum: 2010. november 12. - 21:48:04 »
0 Show voters
A szorzás és az osztás magasabbrendû mûvelet mint az összeadás ill a kivonás, így azt kell a hatványok után elõször elvégezni.
 [ 3+(3*7) = 24 ]

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Leírás: Mûveleti sorrend PAWN makrókban.
« Válasz #5 Dátum: 2010. november 13. - 12:34:01 »
0 Show voters
Ja értem, ezt már én is észrevettem a matek scriptben.

Nem elérhető krisk

  • 2380
    • Profil megtekintése
Leírás: Mûveleti sorrend PAWN makrókban.
« Válasz #6 Dátum: 2011. június 26. - 10:52:19 »
0 Show voters
Elõkapartam a témát, és átírtam az utolsó fordításnál az eredményt, mivel az nem
 
(3+(3*7))

 
hanem
 
((3)+(3*7))

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal