A Beginner s Guide to Programming Logic, Introductory

Similar documents
st, sts Steek, Steke hlb Halwe Langbeen vslalleen Voorste lus rd Rondte lb Langbeen alsalleen Agterste lus

st, sts Steek, Steke hlb Halwe Langbeen vslalleen Voorste lus alleenlik

GRAAD 11 NOVEMBER 2013 INLIGTINGSTEGNOLOGIE V1

BenguFarm Bestelvorm

Prosesse wat gevolg word om sake op te volg op distriksvlak. Processes used to follow up on cases at district level

ks Kettingsteek dlb Dubbelslaglangbeen vhk Voorste hekkie gs Glipsteek drieslb Drieslaglangbeen ah Agterste hekkie

NASIONALE SENIOR SERTIFIKAAT GRAAD 11

Laerskool Olifansvallei LSO Kwartaal 1 - ASSESSERINGSPROGRAM

Mandala Madness Deel 2

Die netto waarde van die onderneming en die rekeningkundige vergelyking *

MODULE 2 ALLE RISIKO S. Toepaslike Eenheidstandaarde

NASIONALE SENIOR SERTIFIKAAT GRAAD 12

MENLYN. Week in oorsig Aandeel van die week DB Tracker USA (DBXUS) 17 Januarie 2014

INHOUDSOPGAWE. Inleiding... 7 DEEL EEN: SEISOENE IN ONS LEWE

Kolossense. die nuwe ou volkome onvolmaakte jy. leiersgids vir. inspirasie. Edi Bajema

Rut: n Liefdes Verhaal

Direkte en indirekte rede *

Hoe om krag te spaar

HOËRSKOOL STRAND REKENAARTOEPASSINGSTEGNOLOGIE (VRAESTEL 1 - PRAKTIES) GRAAD 10 PUNTE: 150 NOVEMBER 2013 TYD: 3 UUR

SIZA takes the sting out of auditing

HANDLEIDING VIR WERKOPDRAGTE

33 J.N. Visser. daar was onderbrekings gewees, wat hy tee gedrink het, en

Uit Moerdijk se pen Man en Media

In Groenewald v Van der Merwe (1) (1917 AD ), Innes CJ described delivery with the long hand as follows:

PROVINCIAL GAZETTE EXTRAORDINARY, 23 APRIL LOCAL AUTHORITY NOTICE PLAASLIKE BESTUURSKENNISGEWING LOCAL AUTHORITY NOTICE 106 GREATER TZANEE

My Tracer GPS Voertuig Volg Sisteem Geoutomatiseerde Elektroniese Logboek SAIAS ABSA, ATKV Cross Country Ons Leuse

IN DIE HOOGGEREGSHOF VAN SUID-AFRIKA (TRAKSVAALSE PROVINSIALE AFDELING)

Tariewe

Provincial Gazette Provinsiale Koerant

2016 SACAI-WINTERSKOOL GESKIEDENIS NOTAS

Provincial Gazette Provinsiale Koerant

IN DIE ARBEIDSHOF VAN SUID AFRIKA (GEHOU TE KAAPSTAD)

COPYRIGHT AND CITATION CONSIDERATIONS FOR THIS THESIS/ DISSERTATION

"FASCINATION WOOD" Welcome to the 8 th WOOD CONFERENCE PROGRAM. holzbau. Thursday, 15 th February 2018 at CTICC, Cape Town

ALPHA PHARM APTEEKPERSONEEL KLINIESE ONDERRIG HANDLEIDING

Nienakoming van die voorgeskrewe prosedures na indiening van n direksiebesluit om met ondernemingsredding te begin: Is

GRAAD 8 NATUURWETENSKAPPE SEPTEMBER 2013 TYD: 2 URE PUNTE: 100

EXTRAORDINARY BUITENGEWOON PROVINCIAL GAZETTE PROVINSIALE KOERANT

HOOFSTUK 5 DIE BELANG VAN GESKIEDENIS 5.1 PROBLEEMSTELLING Subprobleem 4

HOOFSTUK3 DIE PROSES VAN AMALGAMERING VAN SKOLE EN DIE BESTUUR DAARVAN

ENVIRONMENTAL IMPACT ASSESSMENT (EIA): 12/12/20/944 ESKOM: PROPOSED NUCLEAR POWER STATION AND ASSOCIATED INFRASTRUCTURE

LIDMAATSKAP AANSOEK MEMBERSHIP APPLICATION

ALTERATION, SUSPENSION, REMOVAL OF RESTRICTIONS

REKENAARTOEPASSINGSTEGNOLOGIE RIGLYNE VIR DIE PRAKTIESE ASSESSERINGSTAAK (PAT) GRAAD 12. Hierdie dokument bestaan uit 24 bladsye en twee bylaes.

SPLUMA QUESTIONS AND ANSWERS

DIE PROSES VAN DISSIPELSKAP

Cambridge International Examinations Cambridge International General Certificate of Secondary Education

COPYRIGHT AND CITATION CONSIDERATIONS FOR THIS THESIS/ DISSERTATION

Uittree-Annuïteitsplan. Planbeskrywing

SHAREMAX GESINDIKEERDE MAATSKAPPYE OPGEDATEERDE KOMMUNIKASIE

(TRASSVAALSE PRQVINSIALE ATDELIS'G)

Ekonomiese en Bestuurswetenskappe Graad 7. By: Siyavula Uploaders

Be gees terde werknemers as boublok vir n gesonde samelewing Spirited employees as building block for a healthy society

Die subtíele aanleg en moonuikhede van die nominale styl: 'n Studie in Nuwe- Testamentiese Grieks

2017 Universiteit van Suid-Afrika. Alle regte voorbehou. Gedruk en uitgegee deur die Universiteit van Suid-Afrika Muckleneuk, Pretoria

Huweliks Seremonies Vir Uitverkorenes

1. FUNKSIES EN STRUKTUUR VAN DIE KANTOOR VAN DIE PENSIOENFONDSBEREGTER

Pasteur en Lister oorwin kieme *

HOOFSTUK 2. 'n Struktuuranalise van die skool word getnaak aan die hand van die

3024. hulle praat van n persoon wat so onlangs heengegaan het, meer klem te le op die goeie nie? -- Dit is inderdaad so

OEFENVRAESTEL VRAESTEL 2 WISKUNDE GELETTERDHEID GRAAD 10

HOOFSTUK 4 Bestuursmodelle, met spesifieke verwysing na die bedryf- en besigheidsaspekte van oop afstandsleer

Tonga die olifant - 01 *

moenie stres nie! moenie stress book.indd 1 08/04/ :22

Hierdie is n aansoek om die volgende regshulp:

HOOFSTUK 7 TOEPASSING VAN GESELEKTEERDE TEORETIESE BEGRIPPE IN 'N ANALISE VAN

Tariewe

ESKOM DISTRIBUSIE: VOORGESTELDE NUWE CLOCOLAN

Dialoog en paragrawe *

n Narratiewe alternatief op die konsep van afhanklikheidsidentiteit: n Pastorale perspektief THEUNIS CHRISTIAAN ACKERMANN PHILOSOPHIAE DOCTOR (PhD)

INHOUD: Die SIZA Program 1 Monitering en Evaluasie 3 SIZA / GRASP Nakoming 1 Koolstofvoetspoor Werkswinkels 5 Die SIZA Platvorm 2

DIE FUNKSIONELE BEMAGTIGING VAN DIE OPVOEDER VAN VOLWASSENES IN DIE WES-KAAP

Beloftes maak skuld NUUSBRIEF (2014/09)

Eerste pogings tot definiering van klimaat en kultuur vanuit die algemene organisasieteorie het nie 'n onderskeid getref tussen die begrippe

Die Laaste Oordeel 1 50 (Sien ook die Voortsetting in ) Emanuel Swedenborg Arcana Coelestia Geheime van die hemele

PARKTOWN BOYS HIGH SCHOOL DEPARTEMENT AFRIKAANS (TAAL, GELETTERDHEID & KOMMUNIKASIE) AFRIKAANS (EERSTE ADDISIONELE TAAL)

Sitrus Snoei. 2 Snoei Toerusting. Leergids. Kopiereg. Posbus 461, Hillcrest, 3650 (031)

Provincial Gazette Extraordinary Buitengewone Provinsiale Koerant

NASIONALE SENIOR SERTIFIKAAT GRAAD 11

RIGLYNE VIR DIE SKRYF VAN SKRIPSIES EN WERKSTUKKE

Mosselbaai Munisipaliteit

Departement Bos- en Houtkunde. Akademiese programme vir Magisterprogramme

Gehaltebeheer op Web-inligting

Bestuur van Verandering. Hoofstuk2 HOOFSTUK2 BESTUUR VAN VERANDERING 2.1 INLEIDING

Spraakoudiometrie in Suid-Afrika: Ideale Kriteria teenoor Kliniese Praktyk

Dagsê al die belangstellendes in die geskiedenis van ou Pretoria,

Dagsê al die belangstellendes in die geskiedenis van ou Pretoria,


REËLS VIR DIE BENOEMING, VERKIESING, AANWYSING EN AANSTELLING VAN RAADSLEDE

DIE OPVOEDER AS LEERMEDIATOR EN DIE HAALBAARHEID VAN DIE NODIGE KOMPETENSIES SOOS OMSKRYF IN DIE NORME EN STANDAARDE VIR OPVOEDERS

INSTRUKSIES AAN OUTEURS

Afrikaans Huistaal Graad 8. By: Siyavula Uploaders

DIE ONTWIKKELING VAN ALTERN A TIEWE KONSTRUIKSIES IN 'N TERAPEUTIESE GESPREK: 'N GEVALLESTUDIE. deur ALETTA MARIA VOGES

MODULE 4 Outeursreg EENHEID 1

G. J. du Preez

ARTKAT Studio Johanna Prinsloo

# 2012 Universiteit van Suid-Afrika Alle regte voorbehou Gedruk en uitgegee deur die Universiteit van Suid-Afrika Muckleneuk, Pretoria

Faan: Totsiens, Dominee!, en dankie vir n besielende gesprek! Ek sal daarvan werk maak om ou Bart weer in die oggenddiens te kry!

ONS CHRISTELIKE GELOOF EN DIE WETENSKAP

ADJUNKHOOF. Titel: Adjunkhoof (Skool) Doel van die pos: staan om die skool te bestuur, en om. Verseker die effektiewe implementering van. leierskap.

Transcription:

A Beginner s Guide to Programming Logic, Hoofstuk 2 Werking met Data, Skep van Modules, en Ontwerp van Hoëkwaliteitprogramme Doel In hierdie hoofstuk sal jy leer oor: Verklaring en gebruik van veranderlikes en konstantes Toeken van waardes aan veranderlikes Die voordeel van modules Skep van modules in `n program Die mees algemene konfigurasie van hoofstroom logika 2 1

Doel Hiërargiese kaarte Sommige kenmerke van goeie programmeringsontwerp 3 Verklaring en Gebruik van Veranderlikes en Konstantes Data items Al die teks, nommers en ander inligting wat deur `n rekenaar verwerk word Gestoor in veranderlikes in geheue Datatipes Numeries bestaan uit nommers String is enige iets behalwe wiskundige tekens (nommers en teks) Verskillende vorme van data Veranderlikes Letterlike of vaste waardes (Literals), of onbenoemde konstantes Benoemde konstantes 4 2

Werking van Veranderlikes Benoemde geheueposisies (identifiseerders) Inhoud kan variëer of verskil oor tyd Verklaring Stelling wat die datatipe en die identifiseerder (naam) van die veranderlike verskaf Identifiseerder Veranderlike se naam 5 Werking van Veranderlikes Datatipe Klassifisering wat die volgende beskryf: Watter soort waarde kan gestoor word deur die veranderlike Hoe die item gestoor word in die rekenaar se geheue Watter operasies kan uitgevoer word op die veranderlike Inisialisering van `n veranderlike Verklaar `n beginwaarde vir enige veranderlike Gemors Veranderlike se onbekende waarde voor dit geïnisialiseer word 6 3

Werking van Veranderlikes Figure 2-1 Flowchart and pseudocode for the number-doubling program 7 Figure 2-2 Flowchart and pseudocode of number-doubling program with variable declarations 8 4

Benaming van Veranderlikes Programmeerder kies aanvaarbare en beskrywende name vir veranderlikes Programmeringstale het reëls vir die skep van identifiseerders (veranderlikes) Meeste tale gebruik letters en syfers (maar nooit net syfers!) Sommige tale laat koppeltekens, dollartekens, of ander spesiale karakters toe Gereserveerde sleutelwoorde word nie toegelaat nie Ons neem aan sleutelwoorde is kassensitief Verskillende limiete op die lengte van veranderlikes 9 Benaming van Veranderlikes Kameel kassering (Camel casing) Veranderlike name soos uurlikseloon het `n boggel in die middel weens die hoofletter van die tweede woord Veranderlike name wat deurgaans in die boek gebruik word Mag nie spasies bevat nie (een woord soos uurlikseloon) Moet met `n letter begin Moet `n sinvolle betekenis hê 10 5

Onbenoemde Vaste Konstantes en hulle Datatipes Numeriese konstante (of letterlike/vaste numeriese konstante) Spesifieke numeriese waarde Voorbeeld: 43 Verander nooit String konstante (of letterlike/vaste string konstante) String of karakters binne aanhalingstekens Voorbeeld: "Amanda" Onbenaamde konstantes Het nie identifiseerders (name) soos veranderlikes nie 11 Verstaan van die Datatipes van Veranderlikes Numeriese veranderlike Stoor digitale waardes Kan wiskundige operasies op hulle uitvoer String veranderlike Kan teks stoor Letters van die alfabet Ook spesiale karakters soos leestekens (dus enige karakter, of dit nou teks, digits of spesiale karakters is Tipe-veilig Ken data toe aan `n veranderlike slegs as dit die korrekte datatipe is 12 6

Verklaar van Benaamde Konstantes Benaamde konstante Soortgelyk aan `n veranderlike Maar kan slegs een keer `n waarde toegeken word Ken `n toepaslike naam toe aan `n waarde wat nooit sal verander gedurende die program se leeftyd nie Tower (magic) getal Onbenaamde konstante Die doel sal later bekend word vermy eers Gebruik taxamount = price * SALES_TAX_AMOUNT eerder as taxamount = price * 0.06 13 Toeken van Waardes aan Veranderlikes Toekenningstelling set myanswer = mynumber * 2 Toekenningsoperator Gelykaan teken Opereer altyd van regs na links Geldig: set somenumber = 2 set somenumber = someothernumber Ongeldig: set 2 + 4 = somenumber 14 7

Uitvoer van rekenkundige bewerkings Standaard rekenkundige operatore: + (plus teken) optelling (minus teken) aftrekking * (asterisk) vermenigvuldiging / (skuinsstreep (slash)) deling 15 Uitvoer van rekenkundige bewerkings Reels oor uitvoer van volgorde Ook genoem volgorde van operasies Dikteer die volgorde waarin operasies uitgevoer word in dieselfde stelling Uitdrukkings in hakies word altyd eerste uitgevoer Dan word vermenigvuldiging en deling uitgevoer Van links na regs Dan word optel en aftrek uitgevoer Van links na regs 16 8

Uitvoer van rekenkundige bewerkings Links-na-regs assosiatiwiteit Operasies met dieselfde volgorde vind plaas van links na regs 17 Uitvoer van rekenkundige bewerkings Table 2-1 Precedence and associativity of five common operators 18 9

Die Voordele van Modularisasie Modules Subeenheid van `n programmeringsprobleem Ook genoem subrotines, prosedures, funksies, of metodes Modularisasie Opbreek van `n groot program in modules Stellings wat so uit n hoofprogram geneem word en in modules geplaas word, noem ons ge-enkapsuleer Dit maak die hoofprogram makliker om te lees en verstaan Redes Abstraksie Laat vele programmeerders toe om aan een program te werk Herbruik kode meer 19 Modilarisasie Verskaf Abstraksie Abstraksie Let op na belangrike eienskappe terwyl mens minder-belangrike detail tydelik ignoreer Selektiewe onkunde (selective ignorance) Nuwer hoëvlakprogrammeringstale Gebruik Engelsoortige woordeskat Een breë stelling stem ooreen met dosyne masjieninstruksies Modules verskaf nog `n manier om abstraksie toe te pas 20 10

Modularisasie laat vele programmeerders toe om aan een program te werk Verdeel die taak maklik tussen mense Baie selde gebeur dit dat `n enkele programmeerder `n volle kommesiële stelsel skryf Professionele sagteware-ontwikkelaars kan nuwe programme vinnig skryf deur groot programme in modules te verdeel Ken elke module toe aan `n individuele programmeerder of span 21 Modularisasie laat toe dat jy jou werk herbruik Herbruikbaarheid Kenmerk van modulêre programme Laat toe dat individuele modules gebruik word in `n verskeidenheid van toepassings (programme) Baie werklike-wêreld voorbeelde van herbruikbaarheid Betroubaarheid Verseker dat n module getoets is en bewys is om reg te funksioneer 22 11

Modularisering van `n Program Hoofprogram (main) Basiese stappe (hoof logika) van die program Sluit in `n module Opskrif (Header) Liggaam (Body) Terugkeerstelling (Return statement) Naam van `n module Soortgelyke benaming as `n veranderlike Module naam word gevolg deur `n stel hakies () 23 Modularisering van `n Program Wanneer `n main program `n module wil gebruik Sê ons dit Roep of Call die module se naam Vloeikaart simbool wat gebruik word om `n module te roep is `n reghoek met `n dubbel streep bo-aan Plaas die naam van die module wat geroep word in die reghoek Teken elke module apart met hulle eie simbole 24 12

Modularisering van `n Program Bepaal wanneer om `n program op te breek in modules: Daar is nie vasgestelde reëls om dit te bepaal nie Programmeerders volg wel sekere riglyne: Stellings moet bydra tot dieselfde taak: Funksionele samehorigheid (cohesion) 25 Verklaar van Veranderlikes en Konstantes in Modules Ons kan enige stellings in `n module plaas net soos in die hoofprogram, naamlik: Invoer-, verwerking- en afvoerstellings Veranderlike en konstante verklarings Veranderlikes en konstantes wat verklaar word in `n module is bruikbaar slegs in die module Sigbaar In omvang (scope) Modules is gewoonlik Draagbaar (Portable) Selfstantige eenhede wat maklik draagbaar of herbruikbaar is 26 13

Figure 2-3 Program wat `n rekening uitdruk net met n main program 27 Figure 2-5 Die rekening program met konstantes verklaar in die module 28 14

Figure 2-5 Die rekening program met konstantes verklaar in die module 29 Verklaar van Veranderlikes en Konstantes in Modules Globale veranderlikes en konstantes Verklaar op die hoofprogram vlak Sigbaar en bruikbaar in al die modules wat deur die program geroep word Meeste programmeerders vermy globale veranderlikes om foute (dubbelsinnigheid) te vermy (meer daaroor later) 30 15

Die Eenvoudigste Konfigurasie van Hoofprogram Logika Hoofprogram logika (Mainline logic) van omtrent enige rekenaarprogram volg `n algemene struktuur: Verklaar van globale veranderlikes en konstantes Dan huishoudilike take Dan detail (herhalings-) take Einde van take 31 Die Eenvoudigste Konfigurasie van Hoofprogram Logika Figure 2-6 Vloeikaart en pseudokode vir `n tipise prosedurele program 32 16

Skep van Hiërargiese kaarte Hiërargiese kaart Wys die oorsigtelike prentjie van hoe modules aan mekaar verwant is Vertel jou watter modules bestaan in `n program en watter modules roep ander modules n Spesifieke module mag dalk geroep word vanuit verskillende plekke in `n program Dit dien as n beplanningshulpbron Ontwerp die totale verwantskap tussen program modules voordat jy die modules self skryf Dit dien as n dokumenteringshulpbron (fig 2.9-2.11) 33 Kenmerke van Goeie Programontwerp Gebruik program kommentaar waar nodig Identifiseerders (veranderlikes) moet goed gekies word (goeie beskrywende name) Streef daarna om duidelike stellings te ontwerp in jou program en modules Skryf duidelike gebruikersaanwysings (prompts) en eggo invoer waar nodig Hou aan om goeie programmeringsgebruike uit te voer soos wat jy jou programmeringsvaardighede ontwikkel 34 17

Gebruik van Program Kommentaar Program kommentaar Geskrewe verduidelikings Nie deel van die programkode (logika) nie Dien as dokumentering vir lesers (ander programmeerders) van jou program Sintaks verskil tussen programmeringstale Vloeikaart Gebruik `n annotasiesimbool om inligting te hou om die vloeikaart uit te brei basies `n stippellyn met `n Nota: woord en dan `n beskrywing van die nota sien fig 2-13 35 Gebruik van Program Kommentaar Figure 2-12 Pseudocode that declares some variables and includes comments 36 18

Figure 2-13 Flowchart that includes some annotation symbols 37 Kies van identifiseerders (veranderlikes) Algemene riglyne Gee `n veranderlike of `n konstante `n naam wat `n selfstandige naamwoord is (bv. name, age, testscore) Noem `n module gewoonlik `n werkwoord (bv. runtest) Gebruik sinvolle name (bv. nie firstmodule) Dit moet self-dokumenterend wees Gebruik uitspreekbare name (bv. nie preparead) Wees versigtig vir afkortings (bv. nie getstat getstatistic? getstatic? getstate?) Vermy digits in name (bv. nie run0 or run1) 38 19

Kies van identifiseerders (veranderlikes) Algemene riglyne (vervolg) Gebruik die stelsel wat jou taal toelaat om lang multiwoord name te skei (underscore_ camelcasing) Benaamde konstantes begruik hoofletters en woorde word geskei deur `n underscore (_) n Organisasie dwing soms verskillende reëls af wat programmeerders moet volg vir benaming van veranderlikes Hongaarse notasie (indentation of inkeping) Declarations num numpagecount 39 Kies van identifiseerders (veranderlikes) Programmeerders kan lyste skep van alle veranderlikes in `n program Staan bekend as (stoor dit in) `n Data biblioteek (data dictionary) maar ons gaan nie juis dit doen in hierdie kursus nie 40 20

Ontwerp van Duidelike Stellings Vermy die afbreek van lyne wat mens kan deurmekaarmaak Gebruik tydelike veranderlikes eerder as om lang komplekse stellings te hê sien fig. 2-14 41 Vermy Afbreek van Lyne wat Verwarring kan Veroorsaak Meeste moderne programmeertale laat toe om lyne op enige plek te breek (vryvorm): swak leesbaarheid Maar maak eerder seker die afbreekpunt maak sin Moenie veelvuldige stellings in een lyn plaas nie: input percentage, total = percentage * 100 input percentage input percentage total = percentage * 100 total = percentage * 100 42 21

Gebruik van Tydelike Veranderlikes om Lang Stellings te Vermy Tydelike veranderlike Staan ook bekend as `n Werksveranderlike Word nie juis gebruik vir invoer of uitvoer nie Word gebruik gedurende berekeninge tydens die uitvoer van `n program Probeer om `n reeks van tydelike veranderlikes te gebruik om tussentydse resultate te stoor Meer lyne kode is miskien meer omslagtig, maar makliker verstaanbaar en selfdokumenterend 43 Gebruik van Tydelike Veranderlikes om Lang Stellings te Vermy Figure 2-14 Two ways of achieving the same salespersoncommission result 44 22

Skryf van Duidelike Uitdrukkings en Eggo van Invoer Gebruikersaanwysings (Prompts) Boodskap wat op die skerm gedruk word om die gebruiker te vra vir reaksie (invoer) Word beide gebruik in opdrag-lyn (command-line) en GUI interaktiewe programme Eggo invoer Herhaal van invoer terug na die gebruiker of in `n opeenvolgende invoer aksie of in `n uitvoerstelling 45 Skryf van Duidelike Uitdrukkings en Eggo van Invoer Figure 2-15 Beginning of a program that accepts a name and balance as input 46 23

Figure 2-16 Beginning of a program that accepts a name and balance as input and uses a separate prompt for each item 47 Handhawing van Goeie Programmeringsbeginsels en Gewoontes Elke program wat jy skryf sal beter wees as jy: Beplan voor jy kodeer Haandhaaf die gewoonte om eers `n vloeikaart te teken voor jy pseudokode skryf Gaan jou programlogika na, nadat jy dit geskryf het Dink mooi na oor die veranderlike en module name wat jy gebruik Ontwerp jou programstellings sodat dit maklik en voordiehandliggend is om te lees en gebruik 48 24

Opsomming Veranderlikes Geheueposisies met name wat veranderlike inhoud bevat Gelykaan-teken is die toekenningsoperator Breek programmeringsprobleme op in selfstandige eenhede wat bekend staan as modules Sluit `n header, `n body, en `n return stelling in Hoofprogram logika van omtrent enige program kan `n algemene struktuur volg Soos wat jou programme meer kompleks raak: Word behoefte vir goeie beplanning en ontwerp groter 49 25