OT`Nqp &<C@E$g: <1AY&B&f"8*A$ $<!*!&2Q!adNu"x." "4V"GBIZ2۷mG"&AB@4<[Q4/</<?BK*U,M/ ?<NNJ@k:`IG:ܹm*N2<0<4]Q:/</<?B/?< NNJ@kD f0B?<"NNTм/Hz /<NN 8LN0I@`  `! #@%`')+-/1 3@g`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`ikmoq s@u`wy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`!Aa   !Aa!#AD@`  `! #@%`')+-/1 3@g`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`ikmoq s@u`wy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`!Aa   !Aa!#AD1BASALG TOS  5.BASALG PRG  5.BASALG DOC X gDEMOAES Z  DEMO Z 9 EQUA Z m ,PSYM Z  DUMPFILEZ  CALEND Z  " LISEZMOIS ) %NDESKTOP INF &DEMO IMG ' '  0660103030566 9[...... .. ....]  BASICALGEBRIQUE version1987.8 J.J.LABARTHE 14rueduRoyaume 91440BURESsuryvette 1.L'EDITEUR 1.1.Introduction 1.2.Insertiondanslasource 1.3.Listingdelasource 1.4Remplacement 1.5.Effacementdubloc 1.6.Impressiondelasource 1.7.Dplacementd'unbloc(Move) 1.8.Recopied'unbloc(Repeat) 1.9.Rechercheetchange 1.10.LESUTILITAIRES 1.10.1.Commandesfichier 1.10.2.Divers 2.ECRITUREETMISEAUPOINTDESPROGRAMMES 2.1.Excutiond'unprogramme:lacommande/ 2.2.Erreursdesyntaxe 2.3.Debugger 3.PREMIERSPASENBASICALGEBRIQUE 3.1.Lesnombres TabledesVA-fonctions TabledeV-fonctionsnumriquessansargument TabledeV-fonctionsnumriquesexactes TabledeV-fonctionsutilisablesavecdesnombres. 3.2.Noms Tabledestypes 3.3.LescommandesBasicstandard 3.4.LetypeIndex 3.5.LitteraletVariable 3.6.Polynome. 3.7.Produitdepolynomes 3.8.Commandesdeveloppeetfacteur 3.9.V-FonctionsFORMD(u)etFORMF(u) 3.10.CalculsAlgbriques TabledeV-fonctionsalgbriques 3.11.Calculsconditionnels,ennombrescomplexes 3.12.Chaine TabledesC-fonctions TabledeV-fonctionsayantdeschainesenarguments 3.13.Allocationmmoire,reprsentationsmmoires 3.14.GEMDOS,BIOS,XBIOS,VDI,AES,LIGNESAetF 3.15.TraductionduSTBASICenBASALG 3.16.VitesseduBasicAlgbrique. 4.TOUTCEQUEVOUSVOULEZSAVOIRSURLEBASICALGEBRIQUE 4.1.DEFINITIONS 4.2.BASICALPHABETIQUE APPENDICEA.CLAVIER Table1.Mouvements.  Table2.Touchesdefonction Table3.CodesASCII Table4.Control+Lettre. APPENDICEB.EDITIONDELASOURCE Table5.Dfinitionsdebase. Table6.Dfinitiondubloc APPENDICECSOLUTIONDESEXERCICES. BASICALGEBRIQUE BasicAlgbriqueestunlangagedeprogrammationpermettant demanipulerdesexpressionsalgbriquesdefaonlittrale.Il s'utilisecommeunBasic,enfaitc'estunvraiBasicavec traitementdeschainesdecaractres,fonctionsgraphiqueset musicales.Sonditeurpleinepagemunidesfonctionsdecopieet dplacementparblocetdecommandespuissantesderechercheet d'changeestparticulirementagrabled'emploi.Lamiseaupoint desprogrammesestrenduefacileparundbuggertrs sophistiqu.BasicAlgbriqueestcapabled'appelertoutlesystme d'exploitationdel'Atari(TOS,BIOS,XBIOS,VDI,AESetmmeles lignesAetF). Considronsleprogrammesuivant: W=(1+X)^2 PRINTW EnBasicordinaire,XetWsontdesvariablesquiprennent certainesvaleurs.ParexemplesiXvaut0,alorsWvaut1.Lemme programmecritenBasicAlgbriqueesttrsdiffrent.LenomX quiapparatdroitedanslapremireligneestunlittral.Il n'apasdevaleur.Wquiapparatgaucheestunevariable.Sa valeurestl'expression(1+X)^2.LersultatduPRINTest X^2+2*X+1 quiestlaformedveloppedel'expression. BasicAlgbriquetraitelesnombresdefaonexactesans approximation.Ilacceptelesnombresrationnelsm/navecdes entiersmetnaussigrandsque10^19727.Touteslesoprations *,/,+,-,^sonteffectuesdefaonexacte.Parexemple (10^5000+1/3)-10^5000 estcalculsansapproximationetdonne1/3.Ondisposedetoutes lesfonctionsmathmatiquestranscendantesusuelles (log,sin,exp,pi,...),maisllesvaleurssontcalculesdefaon approchesaveclaprcisionquevousdsirez(onpeutobtenir plusde1000chiffresexactspourcesfonctions). BasicAlgbriqueestcapabledetraiterlesexpressions rationnellesdeplusieurslittraux,parexemple: (A/2+B)^5/(X^2-Y+7/11)^3. BasicAlgbriquepeutdvelopperouaucontrairefactoriserces expressions.Ilpeuteffectuersubstitutions,drivations, intgrationsetdveloppementslimits.Ilcalculelesdterminants etsaitlimineruneinconnueentre2quations.Ilpeutcalculer ennombresrels,complexesoumodulounnombrepremier.Toutesles fonctionsncessairesaudcorticaged'uneexpression(trouverles littraux,lesexposants,lescoefficients...)sontprsenteset permettentdeprogrammersoi-mmen'importequellemanipulation d'expressionsnonprvuedansBasicAlgbrique. Notations  Dansladescriptiondescommandes,leslmentsplacs entrecrochets[]sontoptionnelsetleslmentsplacsentre accolades{}peuventtrerptsunnombrequelconquedefois. aSetcSdsignentl'appuisurSetAlternateousurSetControl.  Lesparagrapheslimitspar(Z)-(ZF) doiventtresautsen premirelecture. 1.L'EDITEUR 1.1.Introduction Ilyadeuxsortesdecommandes:lescommandesdubasic,qui s'criventavecdesnomsalphanumriquesdeplusieurs caractres,etlescommandesdel'diteurquiconsistentenunseul symboleautrequ'unelettre.Lescommandesdetypediteur permettentdecreretdemodifierlasource(oucodesource). BasicAlgbriquepeuttredansdiversmodes. Lesmodes principauxsontlesmodesBASALGetSource.Lemodedanslequel setrouveBasicAlgbriqueestindiqusurlapremirelignede l'cran,lalignedette,quiestrserveausystme.Elle indiqueaussilenombredelignesmodifiesdepuisladernire sauvegarde,etlenombredelignesdelasource. AppuyezsurF10.BasicAlgbriquepasseenmodeBASALG.Tapez: PRINT$100[CR] o[CR]dsignelatoucheReturnouEnter.BasicAlgbriqueexcute cettecommande,quiestunecommandeduBasic,c'estdirequ'il critlavaleurdcimaledunombrehexadcimal100. Tapezmaintenant: =[CR] C'estunecommandedel'diteur.Lescommandesdel'diteur sontaussivalidesparappuisurCR(quenousomettrons dsormais).Vousobtenezlacartemmoire. AppuyezsursF10(iesurShiftetF10quenousnoterons aussisF10):BasicAlgbriquepasseenmodesource.Tapezmaintenant PRINT$100 Cettefois,lacommandePRINTn'estpaseffectue.Aprsl'appui surCR,lalignesetrouvedanslasource.Vrifiezleentapant F1,quilisteledbutdelasource. Retapezmaintenantlacommande"=",BasicAlgbriquecrit desrenseignementssurl'utilisationdelammoire.Vrifiez(F1) quelasourcen'apastmodifie.  Enrsum,lescommandesdel'diteurpeuventtreeffectues enmodesourceouBASALG.SeulesdeslignescommenantparA-Z,";" ou":"peuventtreinsresdanslasourceenmodesource.  Passage modesourceversBASALG: F10 ou * Les*endbutdelignesontignorsetfont passerenmodeBASALG."*="estdonc quivalent"=".  PassagemodeBASALGverssource: sF10  ou -ligne Indiquequ'ondsireinsrerdesnouvelles lignesaprslaligne.  PassagemodequelconqueversBASALG: Esc Cettetoucheinterrompttouteslescommandes sauflorsqueledisquetourne.  L'diteurpleinepage.  Al'aidedestouchesmouvements(Table1del'appendice A),onpeutsedplaceretcrirefacilementsurtoutl'cransauf lalignedette.L'cranestformde24lignescransetd'un nombreplusrduitdelignestextes.  lignetexte Aprsclrous+upleslignestextessontleslignes crans.Lorsqu'oncritenpassantlalignesuivante,oncreune lignetexteformede2lignescrans.Ilfautvraiment crire,passeraveclecurseurnesuffitpas.Onpeutaussiutiliser s+downpourrallongerlalignetexteducurseur. nota1)Enappuyantsurs+leftets+rightonverraquelles  sontlesextrmitsdelalignetexte. 2)Lalignetextepeutoccupertoutl'cran.  3)NoterqueInsert,Delete,Backspaceagissentsurla  lignetexteducurseur.  4)AprsappuisurCR,c'estlalignetextequiest  valide.Sicettelignetaitladerniredela  page,lapremirelignetextedelapagedisparat  etl'cranremontelaissantdelaplacepourune  nouvelleligne.  motsclefs L'appuisurControl+lettredeAZcritunmot  usuel,sionsetrouveenextrieurdeguillemets (voirTable4del'appendiceA). 1.2.Insertiondanslasource  L'insertionsefaitdevantlepointeurd'insertion(M),en modesource.Ilfautdoncpositionnercepointeuretpasserenmode source.  positionnementgraphiquedeM Sionvalidelaligne:  123>_. ou 123._. ou 124>^. ou 124.^. (les.indiquentdescaractresquelconques)  lepointeurMsepositionnedesortequel'insertion  sefaitaprslaligne123etavantlaligne124.  (Z) AprspassageenmodesourceparsF10,ilest conseill derelisterlapageparF9.Eneffetsion remonte lecurseursurunelignecomme   10.EXGA0,A1 etqu'onappuiesurCRcroyantl'insrer,enralit  onmodifielaligne10etonplacelepointeurMsur  laligne11.AprsF9laligneestrcritesousla  forme 10>EXGA0,A1 (ZF) etpeuttreinsre.  -ligne  Cettecommandepermetlafoisdepositionnerle  pointeurMetdepasserenmodesource.Exemples: - Insertionenttedelasource -D Insertionenfindelasource -12 Insertionaprslaligne12 -gamma Insertionaprslalignecommenant par "gamma:" (Z) PourlasyntaxecompltedecettecommandevoirTable 5del'appendiceB. nota Nepascrire"-12,"parerreur(voirEffacement) (ZF)  quiauraituneffetdsastreux. Exemple  Aprs"-"leprogrammecrit  1>  Tapez debut:cP"RecherchedestridresdeSteiner"  cVdroite(27) Remontezsurlaligneprcdente,changez"droite"en  "droite1"enutilisantInsertet1 ettapezsur  [CR].Vrifiezlasourceobtenue(F1). Tapez -debut indexi,j Vrifiezlanouvellesource. Remarques 1) Lesmodificationsquevousfaitessurdeslignesprcdentes nesontvalidesqu'aprsCR.Sicesmodificationsnevous conviennentplus,vouspouvezretrouverl'anciencranparF9. 2) L'diteurinsre: silalignetextecommencepar"n>"toutelaligne  texteaprs"n>" sinontoutelalignetexte. 3)Lesblancsavantlepremiercaractre(quidoittreA-Z,a- z,";"ou":")avantlepremier";" et":" nonentreguillemets nesontpasinsrs.  4) Onpeutinsrerunelignevide.  (Z)5)Aprsl'insertionlespointeursM,A,B,Dsontmodifisde sortequ'ilscontinuentpointerlesmmeslignesque (ZF) prcedemmentmmesileurnumroachang. 1.3.Listingdelasource touchesdefonction. Voirlatable2del'appendice #ligne listepartirdelalignedonne.  nota:1)Lelistingestdelaformen.(enmodeBASALG)etdela  formen>enmodesource. 2)Lelistingestformat:lesespacesdevantlesdbuts de ligneet";"n'existentpasdanslasourceen mmoire (Z) 3)#bloc(Voirtable6lasyntaxedebloc) (ZF) listeetdfinitleblocdelignes. 1.4Remplacement n.instr Remplacelalignenpar"instr",etdplacelepointeur d'insertionpourinsertionaprslalignen.  n. Effacelalignen Pourcorrigerunelignedelasource,parexempleaprs dtectiond'uneerreur,sicetteligneestlistesouslaforme n.etc ilsuffitdecorrigerNua R@gRNu02@_A_ggANu ANug @NuAf@S@IVNu02@_A_gfg e$N\Ja%5<NuA I AefUHT@`6$N&J6a@S@4x6 ؃7BDHDQ2fNuf@oAH$N&J4AUB B d6aU@@ASA|BC8BB(H*I:%܅dRBQ7<HFRCUHAo8@oUITH8ACjJFg4A2`fga R@gRNuf`fga R@gRNuf` Q@gf(H*Iap Le(g."M2A_gr Ag$0_f @f0H@a,&JH@`$&N$K&,Ka4BSBetd'appuyersurCRpourvaliderla correction. (Z) Cescommandespeuventtreeffectuesenmodesource.Ainsi 108>7. effacelaligne7. Aprseffacementlesnumrosdesligneschangent.En particulier les ligneslistesaprsunelignequivient d'treeffaceontdesnumrosfaux.Ilestalorsdangereux de conserveruntelcran,etlaprudenceconseilled'appuyer surF9.Onremarquerad'ailleursqu'aprseffacement,le curseurremonte,pourrestersuruneligneavecsonvrai (ZF) numro .  1.5.Effacementdubloc Ondsigneparblocunensembledelignesconscutivesdela source.LespointeursAetBreprentlapremireetdernireligne dublocrespectivement. -bloc oblocn'estpasdelaforme"ligne".(Table6)  Celaeffaceirrversiblementlebloc. nota Ilestplusprudentdeprocdercommesuit: 1)Dfinirlebloc. Onpeutdfinirleblocgraphiquementparexemple  12857.`etc   13589.'etc oupar #12857,13589(aveclisting) ouencorepar aB12857,13589(sanslisting) 2)Vrifierquec'estbienleblocvoulu.(F8) 3)Effacerpar: -aB Aprscetteinstructiononsetrouveenmodesource,pour insertionl'endroitosetrouvaitlebloc. Exercice1.5 Commentviderlasource?   1.6.Printingdelasource aP[bloc]  Imprimelebloc(pardfauttoutelasource). L'instruction  "PAGEtitre" insredanslasourcepermetde mettreuntitreenhautdechaquepagedulisting.Pouradapter votreimprimantevoirlacommandePRINT. 1.7.Dplacementd'unbloc(Move) aM[bloc][;ligne] Dplaceleblocdevantlaligne. Sileblocn'estpasdonn,ils'agitdudernierblocdfini. Silalignen'estpasdonne,leblocestdplacdevantle  pointeurd'insertion. Aprsledplacement,lepointeurd'insertionestaprsle bloc,etlespointeursAetBsontsurlanouvelleposition dubloc. Exemple -10 |Metleslignes100,107113 aM100 |aprslaligne10 aM107,3 | 1.8.Recopied'unbloc(Repeat) aR[bloc][;ligne]  Commealt+M,maisl'ancienblocexistetoujours.Aprsla copie,lespointeursAetBrestentsurl'ancienbloc,etle pointeurd'insertionsetrouveaprslenouveaubloc. 1.9.Rechercheetchange  Ondisposede2commandesidentiquesderechercheaSetaT maisdfinissant2chainesdifferentesSetT,etd'unecommandede changementaCquichangelachaineSenT. Cescommandessonttrsperfectionnes:onpeut rechercher/changerdeschainesformesdecaractresdfinis sparspardescaractresnonprcissetquipeuvents'tendrent surplusieurslignes. RecherchedeS aS[chaine][aBbloc][rep][aH] Les3derniersargumentspeuventtredonnsdansunordre quelconque.Ilsdfinissentlesoptionssuivantes: bloc Danslequels'effectuelarecherche.Pardfauttoute lasource. rep C'estl'undescaractresaU(arrtaprslapremire occurence)ouaR(rptelarecherche,quiestla valeurpardfaut) aH Encasderptition,larecherchenes'arrtepas toutesles16lignes.(Hold) Lachaine estpardfautladernirechaineSdfinie.Elle estformed'auplus48caractres.Lescaractressuivantsontun sensparticulier: aS Dsigneuncaractreautreque0-9,A-Zeta-z (sparateur).Parexemple aSaSMOaS trouveraW=MO+XmaispasPRINT MOD(X^60-1,X^41-1,X) aZ Dsignelasparationentre2lignesdelasource (zero:eneffetleslignesdelasourcesontspares pardesoctetsnuls) aF Dsignen'importequellechaine,ventuellement  vide,inclusedansunelignesourcedonne.aFdoit  treprcdetsuivid'uncaractrediffrentdeaF. Exemple: aSWaFaZaFW  quicherche2lignes  conscutivescontenant"W"touteslesdeux.(filler)  Silachaineestdonne,elleestmmorisedansSetpourra trerecherchedenouveausanstrercrite.  RecherchedeT C'estlammecommandequeaS,mispartqu'elleagitsurla chaineT.LecaractredecommandeestaTaulieudeaS. ChangeSenT aC[chg][aBbloc][rep][aH]  Les3derniersargumentsontlemmesensquepourles commandesderecherche.L'argumentchgpeutavoirlesformes suivantes: (omis) ChangelachaineSenT.Ils'agitdeschainesen mmoire aI (Inverse)Onpermuted'abordleschainesSetTen mmoireavantd'effectuerlechangement. haineS][aTchaineT] CelapermetdedfinirlachaineSetou T,siuneestomiseonprendl'ancienne. (Z) LachaineS(respT)dfinitleszones1,2,...(resp 1',2',...) aS1aS...aF2aF3 aS... CeszonesnecontiennentniaSniaFmaispeuventcontenir aZ.DanschaquergionspareparlesaFilyauneseule zonequicommenceaupremiercaractreouaudeuximesile premierest aS. LacommandeexigequelenombredezonesdeSetTsoit identiques.Elleeffectuealorsleremplacementdelazone1 (ZF)parlazone1',delazone2parlazone2'... Exemple: aC:aT:aZaB2 coupelaligne2endeuxaprs: NotezquedansladonnedeschainesSetTlesespacessont significatifs,ycomprisaudbutdeSouT.Ilestgalement possibledemettredesespacessignificatifsenfindeces chaines,ilsvontjusqu'aupremierargumentdonn.(parexempleaR) Notezgalementqueminusculesetmajusculesdiffrentdansles chainesSetT.  Exercice1.9.1 Commentpeutonremplacerlelabel"A"parlelabel "apluslong"?LadifficultvientdecequebeaucoupdeAne doiventpastrechangs.(L'utilisationd'untellabelesttrs malencontreuse). Exercice1.9.2  Commentcrrunfichiersourcecontenantleslignes:  987 654  321 Onrappellequ'iln'estpaspossibled'insrerdeslignes commenantparautrechosequeA-Z,a-z,";"et":" 1.10.LESUTILITAIRES 2.1.Commandesfichier.  aVpath(View)Contenududisque.  Celadfinitl'environnement"path"(Exemples  A:\chess\ouA:\).Ecritlatailledisponible,puis  pourl'environnement,lalistedesfichiers(y  comprislesfichierscachs)etleurtaille.Letype  desfichiersestindiquparunsymbole: normal#nom  !lectureseul %sousrpertoire "systme &critetreferm aK(Kill)Effaceunfichier.Donnerlenomcomplet  avecl'extension. aA (Append)Rajoutelafindelasourceunfichierdisque aW (Write)Ecritlasourcesurdisque. (Z) SionveutunfichierASCIIoleslignessont  spares parchr(13)chr(10),ilfaututiliser  l'extension.S.Sinonlefichiercrestunfichier  ASCIIleslignestantsparesparchr(0).Pardfaut  l'extensionest.Z LesfichierslusparaA peuventtredecesdeux  types,sansquel'extensionsuivencessairementles  rglesd'criturecidessus.BASALGsechargedela  convertionautypeavecsparateurchr(0),quiestla  reprsentationinterneutilise. aI(Image)Litunfichierdanslammoire Pourlirelefichierenentierdonner-1pourlafin. aJ Ecritunezonemmoiresurdisque. Pardfaut,l'extensionest.IMG (ZF) 1.10.2.Divers ! SortiedeBasicAlgbrique.(Bye,Quit) = Cartemmoire. aO (Old)Essaidercuprerlasourceaprs-, Peutgalementpermettrederetrouverunesource ditableaprsunedestruction. (Z)Cidessous".s"vaut".B"(octet)".W"(mot)ou".L"(long) aN.sad Litetmodifielammoireenad  aQ.sad (Query)Examinelammoireenad   Siadestomisonutiliseladernirevaleur+128.  aX Copied'unblocmmoire. aF Fillmmoire aE Comparedebut,..,fin-1avecdest,dest+1,... (ZF) 2.ECRITUREETMISEAUPOINTDESPROGRAMMES 2.1.Excutiond'unprogramme:lacommande/ Noussavonsditerlasource.Unprogrammeestformde lignesdeformegnrale: [label:][instruction][;commentaire] Ilyaauplusuneinstructionparligneetlarfrenceune ligneduprogramme(parexempledans"GOTO")doitsefaire l'aided'unlabel.L'excutionduprogrammedanslasourceselance parlacommande"/",quiproduitleseffetssuivants: Uneinstruction"CLR"esteffectuequieffacetousles ancienslabelsetvariables.EnsuiteBasicAlgbriqueeffectueun premierpassageoillitleslabelsendbutdeligne.Ilparcourt pourcelatoutelasourcejusqu'uneinstruction"END"o jusqu'lafins'iln'yenapas.EnfinBasicAlgbriqueexcute lesinstructionsenpartantdelapremireligne.Ils'arrte lorsqu'iltrouveunecommande"STOP","END"ouuneerreur.Vous pouvezl'arrtertoutmomentenappuyantsurESC. 2.2.Erreursdesyntaxe.  LeserreursdesyntaxesontclairementindiquesparBasic Algbrique.Laligneenerreurestsortieavecsonnumrodesorte quelacorrectiondelasourceestfacilite.L'endroitol'erreur atdtecteestindiquesuruneautreligneavecunpoint d'interrogation.Remarquezquel'erreurdansuneinstructioncomme READpeuttrecauseparuneerreurdansuneautreligne.Dansces caslaligneaveclepointd'interrogationdiffredelaligne numrote,etilfaudrarechercherdanslasourcelaligneen erreur. Sivousnecomprenezpasd'ovientl'erreurdesyntaxevous pouvezutiliserlescommandes"PRINT",pourvoirlecontenudes variableset"TYPE"quiindiquedequeltypeestunnom. Ilestbiensurplusdifficilededcouvrirleserreursde logiqued'unprogramme.Unebonnemthodeestd'utiliserle dbuggerpourexcuterleprogrammeaulieudelacommande/.  2.3.Debugger Ledbuggerpermetdecontrolerl'excutiond'unprogramme. Onpeutpartird'unpointquelconque,excuterenpaspas certainesportions,mettredespointsd'arrts,sortird'unsous programme(D),excuterunnombredefoisprdterminune instruction(FetH).L'cranduprogrammen'estpasmodifide sortequel'excutionparledbuggerproduitengnrallesmmes rsultatsquel'excutionpar/.EnappuyantsurlatoucheEsc, onrevientBASALG,saufsivousavezlancunprogramme machineoudusystme(AES). Ainsiparexempledans:  I10:deb=5  I11:cof=cof+x^deb deb=deb-1 iftdeb>0gotoI10  I12:printcof vousavezfaitunboucleinfinieparerreur.Sivouslancezle programmepar/,vousnecomprenezpaspourquoiriennesort. IndiquonscommentmettreaupointceprogrammeI10parle dbugger.OnpartdelapremireligneI10paraG0.Ledbuggerse positionnesurlapremireinstruction.Ilestensuiteconseill d'excuterchaqueinstructionaumoinsunefoisenmodepaspas. AppuyezsurCR:lapremireinstructionatexcute,le dbuggerestpositionnsurla2emeligne.Appuyezencore3fois surCR,LedbuggerrevientligneI10,alorsquevousauriezvoulu allerligneI11:Voilal'erreur.Unefoisl'erreurcorrige,vous reprenezligneI10,maismaintenantvousvoulezallerjusqu'enI12 rapidement:appuyezsur5seulement(laligneI12estnumrote par5)ledbuggerexcutelaboucleenvitesserelleetse positionneenI12.Pourvoirl'cranduprogrammeappuyezsurE. PourrevenirenmodeBASALGappuyezsurA.Aufuretmesureque vouscorrigezleserreurs,vousn'avezplusbesoind'excuter touteslesinstructionsuneune.Ledbuggeroffredenombreuses possibilitspoursauterlespartiesdeprogrammedjaupoint. Voiciladescriptioncompltedudbugger.  Entre.(PassagedumodeBASALGouSourceenmodedbug) aG[ligne] Siligne=0,BasicAlgbriqueeffectueunCLR,calculeles adressesdeslabelsetsepositionnesurlapremire lig ne.Siligneestprcis,autreque0,BasicAlgbrique sepositionnesurlaligneindique.Siligneestomis, ilsepositionneloledbuggeratarrt prcdemment.DanscesdeuxdernierscasCLRn'estpas effectu.BasicAlgbriquepasseenmodedebug.Ilcritune dizainedelignessource.Cesontleslignespartirdela ligneexcuter.Remarquerqueceslignessontnumrotes partirde1,envuedefaciliterl'utilisationdu dbugger,levritablenumrondelapremireligneest rappelpar"leprgrvaexcuterlalignen".Pourle momentaucuneinstructionduprogrammedbuggern'at excute.Ledbuggerattendl'appuisurunetouchesuivant unmenuaffich.Cesontlescommandesdudbugger.  Commandes(Valablesseulementenmodedbug)  CR Excutel'instructiondelaligne1etrevientenmode debugsurl'instructionsuivante.C'estlepaspas.En appuyantseulementsurCRonpeutainsisuivrele programmedanstoutessesinstructions. I Lanceleprogrammesanss'occuperdel'arrter.On revientenmodeBASALGlorsqueleprogrammetrouve l'instruction"STOP",ousurerreur,ouenappuyantsurEsc Onrevientenmodedbugsurl'instruction"BKPT"insre danslasource. J CommeI,sansarrtsur"BKPT". 29 Lanceleprogrammeets'arrtesurlalignedonne. A Arrt.RetourenmodeBASALG.Ilestalorspossiblede vrifierlesvaleursdesvariables(l'aidede PRINT),puisdereprendreledbuggagepar"aG".Onse retrouveloonavaitquittdbug.Notezquesivous avezmodifilasource,ilfaudrarepartiravecaG0. BBreakpoint.Ledbuggerattendl'entredelignevalide parCR.Commed'habitude,onpeutdonnercetteligneen utilisantleslabels.AprsladonneduBreakpoint,le programmes'excutejusqu'aubreakpoint. CDemandeplusieursbreakpoints.Aprsledernierbreakpoint entrerCRpourvaliderlacommande.Onpeututiliser jusqu'16breakpoints.Leprogrammes'excutejusqu'au premierdecesbreakpointsatteint. DExcutejusqu'sortirdelasubroutineencours.Par exemple: S:GOSUBB  A:W=DER(W,X) . B:W=SUM(I=1,10OFY^I) GOSUBC W=SUBS(W,Y=X) RTS  AprsaGSledebuggervaexcuterlaligneS.Appuyez surCR,ledbuggervaligneB.AppuyezsurD,ledbugger valigneA.  ERemetl'cranduprogramme,sescouleurs,sarsolutionet soncurseur.Vouspouvezalorsadmirerloisircequesort votreprogramme.Attendensuiteunecommandedudbugger.Il estconseilld'utiliserK,sionveutcontinuerouAsion veuts'arrter.  FDemandenombredefoisetunbreakpoint(onpeutrentrer CRsansriend'autrepourlaligne1).Ledbuggerlancele programmeets'arrtelorsqu'ilatrouvlebreakpointle nombredefoisdonn.L'instructiondelalignebreakpoint auradonctexcutefois-1fois. HExcutejusqu'auretourl'instructiondelaligne1. CettecommandequivautdonclacommandeFavecfois=2 etbreakpoint=(vide)[CR].  KRemetl'crandudbugger(utileaprsE)  LBoucle.SilalignesetrouvedansuneboucleFOR...NEXT, dbuglanceleprogrammeets'arrteaprslasortiedela boucle. 3.PREMIERSPASENBASICALGEBRIQUE 3.1.Lesnombres Lesnombressontreprsentsparunentiermouunefraction m/navecmetnpremiersentreeux.Touslesnombresavecmetn infrieurs2^65536=10^19727~(~veutdireapproximativement) peuventtrereprsents. (Z)Codagemmoire Unentierm<2^13estcodsurunmot,avecbit14=1.  Unentiermdans[65536^k,65536^(k+1)[estcodsurk+1 mots:Lepremiermotcontient2k(quidoittreinfrieur2^13) etleskmotssuivantscontiennentm,encommenantparlemotle plussignificatif.Cetordreestbienadaptauxinstructions68000 "ADDX-(A0),-(A1)"et"CMPM(A0)+,(A1)+". Unefractionm/navecn#1estcodeparlesdeuxentiersmis lasuitempuisn,aveclebit13dupremiermotmisun. Lebit15dupremiermotindiquelesigne. Exemples0$4000 1/2$6001,$4002 -2^15$8002,$8000 (ZF) Base Lavaleurdelabase(pardfaut10)utilisepourl'entre etlasortiedesnombrespeuttremodifieparlacommande BASEk okvade236.Leschiffresaudelde9sontleslettresen majusculesouminusculesA,B,... Entredesnombres  Enplusdeschiffres,ondisposedessignes".","|"et"~". Exemples: .003nombreennotationdcimale. 0A000enbase>10silepremierchiffreestunelettre,il  fautlafaireprcderde0,sinonleBasiccroit  lireunnom.  16|-12 notationexponentiellede16*base^-12. 10.3|10 10.3*base^10 7.345~Letildequisuitunnombreestignorenentre. Sionfaitprcderlenombrede"$"(resp"%","")le nombreestdcodenbase16(resp2,10).Attention,dans$A.A/15 seulA.Aestenbase16,"15"estenbasecourante.Laraisonest quedansp/q(commedansp*q,p+q...)Basicalgbriquedcode2 nombreseteffectueuneopration. Sortiedesnombres Onpeutchoisirleformatd'critureparlacommande FORMATk. Sik=0,lasortiesefaitsouslaformeexactem/n. Sik>0,lasortiesefaitsousformedcimaleaveckchiffres aprslepointdcimal.Silaformeestapprochelenombreest suivide"~". Sik<0,lasortieestsousformeexponentiellea|boa infrieurougal1estdonnaveckchiffresaprslepoint. Nombresapprochsetfonctionsirrationnelles BasicAlgbriquecalculeexactement,sansfaired'approximations. Ondisposecependantdefonctionsirrationnelles,tellesqueexp, log,etc...dontlesrsultatsnepeuventtrereprsentsquede faonapprochepardesnombresrationnels.Cesquelquesfonctions sontappelesVA-fonctionspourbienindiquerleurdiffrenceavec lesfonctionsduBasicAlgbrique(appelesV-fonctions)qui donnenttoujoursdesrsultatsexacts.LafractionutiliseF pourreprsenterlersultatd'uneVA-fonctiondiffredela valeurexacteparf.Onpeutcontrolerlavaleurdefparla commande"PRECISIONk".Onauraengnralabs(f/F)<base^-k. EnbasedixlaprcisiondesVA-fonctionsestlimite1233 chiffresauplus. LafonctionAPPR  LafonctionAPPRpermetderemplacerunefractionparune fractionplussimpleapprochemieuxquebase^-k(Mthodedes fractionscontinues).Exemple: PRECISION20 FORMAT0 PRINT/L/"pi=",APPR(PI,6) FORMAT-1 PRINT"avecuneerreurde",APPR(PI,6)-PI   TabledesVA-fonctions _D _D  limitesdesarguments sqrt(p) [0,10^19000] pi exp(p) p<45500 log(p) 1/N0met denr(p) numr=a,denr=b _D _D  TabledeV-fonctionsutilisablesavecdesnombres. Pourcesfonctionsonpeutaussiutiliserdesexprcomme arguments. _D _D mod(p,q) identiquemodr(p,q)mais10%pluslent div(p,q) =(p-mod(p,q))/qestdiffrentdedivr(p,q) pourdesentierssigns. pgcd(p,q{,r}) identiquepgcdr root(p,k) okestunentierdans[1,2^15[ sip=r^korestrationnel,sortr sinonsort0 Exemple: root(-8,2)=0,root(-8,3)=-2 puis(p,k) =p*(p-1)*...*(p-k+1)sik>0 =1sik=0 =1/((p+1)(p+2)...(p-k))sik<0 voiraussipuis(e)danslatableprcdente _D _D    3.2.Noms  LesnomsreprsententlesobjetsmanipulsparBasic Algbrique.Ilsdoivents'criresansespacesaveclesletresA-Z a-z,leschiffres0-9etlesigne"_".Lepremiercaractredoit treunelettre.Aprslenomondoittrouversoitunespace,soit uncaractreautrequeA-Z,a-z,0-9ou"_".Certainsnomssontdes motsclefsconnusparBasicAlgbrique,parexemple"PRINT".Ces nomspeuvents'crireindiffremmentenmajusculesouminuscules parexemple"print","PrinT",... Lesautresnoms,particuliers votreprogramme,parcontredistinguentlesmajusculesdes minuscules.AinsiA1nedsignepaslemmeobjetquea1. Chaquenomnepeutdsignerqu'unobjet.Ainsivousne pouvezpascrire: DL=28 parcequeDLestuneV-fonctionduBasicAlgbrique. Lesnomspeuventtreindics,sansquelenombred'indices dpasse15.Lesindicesdoiventavoirunvaleurentiredans [0,2^15[.Exemples: AB(7,9)w3(K-5)(siparexempleKvaut12)  Achaquenomestassociuntype.Letyped'unnompeut treobtenuparlacommande TYPEnom  Tabledestypes _D _D type exemple _D commande gosub | V-fonction ssin valeuralgbrique|types VA-fonction sin valeurapproche|internes C-fonction right valeurchaine| constante dix valeurconstante | litteral | variable | index |typesutilisateur chaine | label |  _D _D  3.3.LescommandesBasicstandard  Latablesuivantedonnelalistedescommandestrsvoisines descommandesdetoutBasic.NoterlacommandeIFT(IFenBasic standard),lesoptionsduPRINTetlacommandeMUSIC. _@ _A BKPT Pointd'arrtpourdebug CLR  CLRTIME CompteurTimemiszro CURSx,y Positionducurseur ERROR label Traitementdeserreurs IF...ELSE...ENDIF Ifstructur IFTexprTHENinstruction END Finduprogramme FOR...NEXT Boucle GOSUBlabel Appelsous-programme RETURN[label] Retourdesous-programme[enlabel] GOTOlabel Branchement INPUT["texte"]... MUSICvirchaineProductiondesons. PAGEtexte Sautdepagel'impression  POKEBa{,k} PlusieurssortesdePOKE POKEWap{,k} POKELap{,k} POKECB{opt,}a,virchainePokeunechainedecaractres POKECW{opt,}ap,virchaine " PRINT/{opt}/virchaine READnomi{,nomi} Litdesexpressions DATA{,expr} critesenDATA RESTORE[label] STOP SAVEfichier,exprchaine Ecritfichierdisque _@ _A  3.4LetypeIndex  Unindexestunobjetprenantdesvaleursentiresdans [-2^15,2^15[.Ilestdfinidefaonexpliciteparlacommande INDEXnom{,nom} oudefaonimplicitedansunecommandedeboucle,parexemple: FORnom=-3,10,2 (Z) Unindexoccupeuneplacefixe(unmot)enmmoireetest donctraitplusrapidementqu'unnombreordinaire (ZF) 3.5LitteraletVariable  Nousavonsdjavuscestypesdansl'introductionvoiciun autreexemple: Z3=(A+B)^2-(A-B)^2 Z=Z3/4 PRINTZ LersultatduPRINTest"A*B".Nousavonsdanscet exemple,deslittrauxAetBetdesvariablesZetZ3dfinisde faonimplicite.BasicAlgbriquedonneletypevariableauxnoms inconnustrouvsgauchedusigne=d'uneassignation.Ildonnele typelitteralchaquefoisqu'iltrouveunnominconnudansune autreposition. Leslittrauxetvariablespeuventtredfinisdefaon expliciteparlescommandes: LITTERALnomi{,nomi} VARIABLEnomi{,nomi} onomidsignesoitunnom,soitunnomindic. Exemple: LITTERALAS(3,3) PRINTSUM(I=0,3OFAS(I,I)) Evidemment,lesvariablesoulittrauxindicsdoiventtre dclars. Nousavonsdjindiququeleslittrauxn'ontpasde valeur.Onpeututiliserjusqu'2^15littraux(unlittralindic commeTAB(5,8)comptepour6*9=54littraux). Ilnousrestevoirquellessortesdevaleurspeuvent prendrelesvariables.Ellesprennent2sortesdevaleurs,soitun polynome,soitunproduitdepolynome. 3.6.Polynome.  Exemplesdepolynomes(A,B,X,Zsontdeslittraux) A+B A^25*X+3*Z+1/27 Onpeututiliserjusqu'2^16monomeset2^15littraux parpolynome. (Z)Codaged'unpolynome nv1v2...vnma(0,1)a(0,2)...a(0,n)C(0)...a(m,1)...a(m,n)C(m) reprsentelepolynome: Sum(i=0,mofprod(j=1,nofV(j)^a(i,j))*C(i))) n(1mot)estlenombredelittraux vj(1mot)estlenumrodulittralV(j) m(1mot)estlenombredemonomesmoinsun a(i,j)(1mot)estunexposant C(j)(longueurvariable)estunnombre. Deplusv10Qn0)ilBQC:0Qn2NuRQNuaC>0Qn0)ARBBQ]2@nRQaFA8C 0(R@24(ASB@2Q4(2 QC24(A)QBJfNuCBg?<?<NN\`3'>a0<HaHGB69:`a689>0aQQaL`\Ha`al:0@ @0m @:m @Am @[m @am @smal0 @ gL8Nuy6096j@@??<?<NN\NuHa:fLNuHaLNu?Bg`aaxHaLNu??<`H瀀??<NAXOJ@g&BLNubg 0f?B@`* f bNu? fa0< ` f0< a0NuJjJ9cgJkp gSy j~a`H瀀0< a3& Syj:A$JygSHy3$a09HaTAafLNuHA(@0aLNu6`Jy gaTa @lHA@20NaDLNu"P8l|>nXBd @ eJy gaHaDa `aHGB@gN`LNuHG`H`aVgAR"BAA2<4Bf B@H@0LNuQrf2AAa`RefNux]^ abRR0M6H8P2K4 SG7GKMPH?0< a.0Nu?0< `aBHaĻgaL?NuaQNua0<.29>a`aQNu2g&e"4BDA@eHA2BBNuBJX`tNuGKtM3؀Ha2aa KafaHNLha`H@ @ gr @r gl @gPH@ fa` "fa0<"96g H@H@a6`H@J@fH@a` Ma8fa8`|<a0< aLNua09؀2  fUn2Q3؂B`/ a0"_Nu?<NNTNu?<`B@?p//?<Nq NuBA???<NN\ONua3O> @g a3'>2<wB@apapapaC y : f"@.# :A0<0Q`H29:C1B@`HABBLOC/POINTEURN.COMMANDE ILLEGALE~  DEBUGLABARTHEADRESSE IMPAIREAES/VDIDIVISION PAR ZEROEXPONENTIELLEOVERFLOWEXPOSANT TROP GRANDTROP DE NOMS DANS LA LIGNEREGLE DE SIMPLIFICATIONEXPRESSION ILLEGALELIT/VAR DIMENSION NON DEFINIETROP DE LIT/VARARGUMENTS DE FONCTIONINDEX/ADRESSEINSTRUCTION ILLEGALELABEL ILLEGALNOM REPETETYPES MELANGESCOMPARAISONPOLYNOMEREEL/ENTIERMATRICETROP DE GOSUB/RETURNIF/ELSE/ENDIFNOM RESERVEMONOME/LITTERALFOR/NEXTRACINECONDIMPRIMANTEDOMAINE DE DEFINITIONINTEGRATIONSIZEPIDISQUETTEFICHIER PAS TROUVEPAS DE PLACE DISQUETTEEXCEPTION 68000READ/DATA gS Am _ |f [e am {eSNuafR 0m :dNu*N g0 d2BAHHt0RA  d d &ЃЂd,M2>SOURCEBASICTRONQUERUNCALCULREAD SOURCEREAD VERS MEMOIREFILL MEMOIREMODIF MEMOIRECOPY MEMOIREWRITE SOURCEWRITE MEMOIREKILL FILECHERCHE SCHERCHE TCHANGECOMPARE MEMOIREPRINT SOURCEEXIT BASICMODIFICATION DE SOURCE NON SAUVEGARDEECLR EFFECTUE*NJf` HA V!A82< a A5 9,S2<ap 0<A aLNu LM LTAnPAq`RHA[AWa@LNua`fa``A`C""" y$pG2< &&QNuaF#0#4NuH` E" Z$pURSc gSkJf`BRLNuH` EJ" Z$pUHaPJaLS`aa&Z&ed  KNupa#(#,Nu z"H g"$Ig fg  f`"JB`#(aC2< !a,"#QNu`6aa z"HSB@l#(o f< `"Hgg "f g "g` ;fNurNu0<;aS$IJfS&I0<:af"H" & $ Nu 94A"H29aHB INu 9LgAފa`Na`HAHBXB yH0< ga yHat09kaBa(JCgBa<;09Bkaa`/IbBBBDBEBF*H,H ga9@9@Al:Bl<v498SBp09T@E240ft0`AF29>RAR@@ H@S@B@@y:n4XCDo*H33XDJGk KR`va6gp` y:lXDYDDH JGk؀`N"(C""""NuJ(fS g fRNuC Y$afSBNu gJfRBNu Y$~aaC~ Y$NuCtaBGaDaa`aIl((*,8<maRR)HQm 0< a `Nu"<&,rA3NuC Y$al`C Y$`C` y$t`xCaTaB`ha2an Agba C Y$BGaaan #H#B`8 i$)8<aQ#H#Baaa#H#Baz`a$`C^ )$ iaQ`C8 Y$a`ACho!`A""NuCh$I Y$l$$`$$`zanS"N y0$IJf" tչ&y((KB@ lo#`a Sk`NuE0< n Ӛ՚QNuJJQNuEn"Z gF" I$aEX0< o l$$`JJQ쒂$ Ba$y(n`Nuaa AgR`baTC" " E"Z" Z$n0< `JaB y0E"Z $*$Z" oԔln`aBE"$g/"/"aE&J"Z" Z$&&Ez&&`9`*NaDg"2<algQ,M2@,G @DgG @MgG @Ag @BfG S@Nu @Nu&N,y$t f,M2FIN>a&a/a,_0< NuMފ3b؀aHKtGa2aL(Nu VgNu`EXEC ~abNuNqHa>g gLNuAa/9Laap#L`ESCAPEo BY#jXBAAB0 ,yHS/rK؄B ,@gbJAgJg(y`RfJAfBAv RRl°f/JAf#rRRg e lgfAatNаf`U 0e$ :ex Ae [ej ae {e\RnT``" ؄S`^X`B Wpa``xB,_ NpR"M/a`B,_pQ/`C Y$9`g$ yraat$iԵlJfR`##H BGaaPIV(RQaa))`.yj`AH f A a`` gШ#a `PAS TROUVERRET []CONTINUEE"Z"n l JfR`"HS$`JfRQ`N"t$I`JfRQ/9Ha#HNu hLTApXP0"yHr RAJf49>RA0NuAYaaa ANuJ9qfAP Pm 0agNuA7JgxI؄By`gt gn f&gd g^ gX fB@Ry``Sg* g g fB@Ry````A`BCPNu` 3 pAb!|(!X !X4!X4Nu g g g NuBSgJ g" g@ g f pf`faA  P!X!X`NufhPq`KA`KAa(MaH2<.ga^gBQahaa`A>aA a|0<,a (gSad`A!aAa M`$CHERCHE DANS [FIN] REMPLACE PAR a aa`>0<"`RA(ada4<.K fT0< I"*(Q`6g6 gag&BQ`KB4<.galgBQavKaAjaA*Haja?K`a2&L$LILKx,K L gbJfJgBFab:(H MaZ*HJFf,Ef(JDg0<a0S@a~SD fB@apQ`JEg0<a^0aZJDg0<`Ȼ f0<aD` f f"HSBD`RDJg W g fg fSNu/ " JR"J Q"_NuAaaAa"@$B$<SgB gaS a6ala@abS a aVa*aLabQafNu*N,yta^vf a l Bgt Wg t Lf<*Nua&9*a^\gae 9*gf Nu"9$$9(AaN"9$9a@"9$9a2"9$9a$"9$a"9$9a "9$9av a, a& "H2< ap I`rAa$<Z.aVa$9(&y S& ab @mAHataag@`Aa~$T<fJXNuBgHyފ?<=NAP @g(J@k<NuBgHyފ?<ANA><`a0<6`0<7`0<8`??<>NAXJ@kNu z( bg< f T`NuJg2/?<;NAJfDA'0<2WSH*.*BA'a/<ފ?<NABo.ފ?<6NAAޖ 2< aa?|?/|'>NNAPJ@fbz 9ޤ2<a0< 9ޟgR@`aߖv Aިg a߆Q`aFQp:ar??<ONAT:J@fDQ`Aar`*.*2AaAaJ&:Ȗg $<Z.aaDaa:fNuDEST>DATA>Sur? ui FILENAME>FICHIER TROP LONG.FIN NON CHARGEE PAGE Src Noms Cond Var Libr Rsrv Allc Pas faitPas de fichier0<`^0<A`B@`߼0<`ߴ0<`߬0<`ߤ0< `ߜ0<`ߔ0<`ߌ0<!`߄0<"`|0<#`t0<%`l0<&`d0<'`\0<(`T0<+`L0<,`D0<1`<0<4`40<`,0<9`$0<2  VUMBB26A0  e"JBg$Agf2<@3@`tQNufV  g ^g _f Ra`CT `f$)e$Ra` 'fR$Be gS`SNNua۔aJy؂j At0<aLNu#Odr@ fB?< NA.y6#A؀N`Mah4a*N`aaXBy ,y(ah.yaTBza0aa a3IAC0gAaܮ3NqaahBy.y3NL 9(P@d 9P@d yȱeaT 9°g AXa@a3*afaaմ -~fa`Afa ` aaa -*faٚaaazafaa g *fa^`Safja2NN@@@@ @`@@@@@@@ @ @@@@@@%@)@+@/@5@;@=@C@G@I@O@S@Y@a0 fgp`$T@`gp`X@0fpNu2 fgr`$TA`gr`XA0fpNu2 fgr`$TA`gr`XA1fqNu4 fgt`$TB`gt`XB1 fq Nu4 fgt`$TB`gt`XB2 fr Nu0 fgp`$T@`gp`X@2frNu0 fgp`$T@`gp`X@3fsNu2 fgr`$TA`gr`XA3fsNu0gp`@T@Nu0gp`@T@Nu2gr`ATANu0gp`@T@Nu,H` ,I`,J`,K/nl`P g#Nua$N&Ja&J(H@S@6QNua R@gRNuaNua`aR_Nua"J$H@S@0Q,HNua*`02@_A_gzg&A$N @ dTJaX5NuXJaJ55<NuA I$N&J6a6@S@4`H@d(rQ N&HTHa 1#Q6 RdRNu7 QNuf@oAH$N&J6a@A4ASBSA8 6!D7QBAAf`02@_A_g&g$NAd:D@a4NuA Ia>Nuf2@mf8DSD$H&IJef QB@`AHaNu$N&J6a>@S@86 AHdrQ0<`XS@k7 QNuJ[gJDgNu0* @ d,J&J2a8 "K0ٱmNua&J`@a<&Jp`(a0*Ja&MNu0fQ`JAg$N4RBBad69DC?a/ a W/ "JalLH,J$@aRvLFHaRjA2/a& J"Wafaa WaRF _?anCJfSI 0fRH o _@g~B^/ o0/jBoRCa Ja(SNJ&gRN.0/`0Q"_f$H0/gSNJ&gRN| NaX,HBB"R,A WaQLNua`V JCJg"Ha^NuG/ JCN WaQr$_NuG`J@j-D@H|/,H"R,Aa Jar$H _f,HSHB"R,AL>NuE P@g< Q@g2Ha R@g _/ "Ja6"_ _/ / a*"JLNuLNuHNu Q@gINuggaa$H&IHb"KaLH K"Laz$_/ "JaL/ a~ _"J``$NaN@S@a*fHzAnaNL>af`0 @@g  @@f$Na2H"L?SIQAjPAH@@2/a"J o,JaLgd2QxL LNuBDTO`gpa"H/ ab"_H IaVL@f"J WaBD WaI$_NuH,_a/ Ja*x`ggaJDf R@gRNu$N<xNu0@_r @@gg2<`20(SAPdNuH/<@/<@/<@/<@a/ $WaaH0 J"oa8 J"o/ a WaI0 o"oa J"o/ aL&HaI S@g o$a o("JakXO _,_aLNu,I"o o/a Ja _"HaHHB o L,IaH/H$I,oaH/HL,IaH/H $I,WaH|LD.aHr`/JAj<`DA0<@BB A e4JRBBL EPm. Ja _/ ah"_ oH",J$IaFLD/HaF `XOL@LNu@R@``@2RA` P@gdg,Caj/a* _/ Ja``jCaj[69a/ 69yRjBCR?? JGa`? J"J/ aNLa WaEV$_6Q Ja026yCd a"JaF`D4aP`< J6ax0CAyjBCNu P@g$Ha`ad Ja/ a WaD$_Nu JCa69B/ JaL WaD$WagVRo49B@RBAAa WP?2 Ja "Ja Ja J2Aa "Ja2A W0`UHG^a WTH"Ja0 W4ah"J _"/Pa Ja<`@ P@gg/a _NuB69a/ $WagtRo"Ha Ja>49BARBa W2AB?A JaP"JaN Ja2/A Ja8"Ja J"WTIa W2/AP0aC`"HH09IAH.kgaLAvSCfUHVCXH0g, ug$4BBSB8D9AHaHQ`TH ` < !@c ,fp@aj(UBdB9LNua|G.z2<QQ|#NuKL<<': apLLaaB9LByLA'#L0<BXQB9LL<aapLLaaA=B"W$a0<` W  f((TA`"YQ(`HNLLNu+P  P@gg/a _ R@gRNuHaS"J Wa R@g2La,J2g S@g Ka&J$KXO Wa= Wa`LHa W"Jakg IaXO`LA`6LA69a*a|/R/ 0@y"H/ Iad JaWnC _/ aR JaWxTH/a J2/DA/Ha oa62/g(La J2//a _"Ha6 oaa6ax/ L a/ `X?ALa W"o / a&N,JLHa6jXO.,Ka6`La J"oa"Ha6F Waa6<2/0/AT _a _"Ha6  _a$H Wa6$_NuH0@?<B^?/< J&gTN0< +2g0< -< A@f"W0/< U@kJYg`a<*UNJgRN"_(o8 NSDk0JQg&<*a۞4a.SH0 @g ^aTITL`BB,H"R,Aa I<QX\O _C$I P +f0  f +g [g -ffB,I"R,ANu0g/< g=| -U@k?/2B^ A@gUNUHa NB^<*J f _aؾ< J&gTN< [`, * [? /їa< J&gTN<] W0 @g^ Na,H "R,A _0QB^` ap _NuH`gJH f<0Yf64S@kIVf(2Yf"0S@kIVfa@S@IVfQLNu$H48DG@z`ZgQNuBTBDBD6s e:3 aLQNuaHa/ 2SAkz0H@ oaJEobH<aAa/ BAa/ oCad _"W/ aZ W/ "HaP J"_aT Japf JaC _a6/ a6 JCa _"O/ a"J _a _/ a _"Ja o/ a Ja"J _a oa'LBANuH瀂a2aJg / aR _/ aJ"J _aB,I Pf ag/ o`H瀂a"Ja`HBa"W Qa "J oa$WL"Na"3@aLNu"H2gSA0H@@$oNg LQrNuPONu?aJWkajaJWgajakTONuHyc`Hyd`Hyb/2UAkaʖ "HH@@>aLg Q _ Nu JHAa"J _Pa`"Ha&` I`/2UAo(aN "H0(Vg?/ Iag\O _Nu Jra@ _/ a"J _a J2DAa& _"Ja^"Ha% I`(NB^$I&H6UCk 0J[gRT<`B^$I6UCk0g<`NuaH`4"HB2aH`"oaB S@fLCaɖQLNu,J o"oaa%zL`TIJQf($HH`aLfRaB^"_THXIaUJ Wa%J _Nu PngH@aL Pga$Haf` <09ఐNuaHTJRaE2TJ JCȖJAg aCQ<HB"Ha _"Ha W"Ja JaԞ _a$Laa$L NuJyga2UAk~/THa~ "H4)j4aVf.?a^/ a"J _aR2 JDAan"J Wa@a$B _` IQaD _"JH2UAkfa "HafN?!a J2DAa$ J"WaH"a J"o aL WH"$I,Ka#/H LDa#L` IQ oaj Ja Ja"Wa Ia#LNuajH 4"HB2a&H`aP R@fLCajQLNu o"oaa#PL`/ HJXfB^aL%"Ha#2 INu<aL2UAka "H&H@@an JaL=`"J oaLQ`HBAa`LJAg8 oHaL"N<<UFkda’("HaXHJEWfJHL/a@H Ja/ o a RgDn J"_aLa L LaLokRE?Ear/ a6/ LCdL LLNuA oaĒo4aP Ja~"J oat WHb"oaf oa^ J"oa` _L/ aNL" ҈SWH@$@a`aXH熢$R/ aۤ"_ k/) Jaa$o` oaL aNuH f:2) A@g& A@fa۔`H f2 Q@gXHBa@LNuaB`HJf2 A@g A@gL620JAg64JCg.@f(SASCfJAf Wa oH"aL!Fef@d0 Wa(< oaH"J oaFLaJEgJFfa`hLEdDH?Hb"H Ca\LaTL o "H`$@aarH"aja BeRJf6, C@g@,JJg"L$K Ja g&H"N,_XOLaT/H,I$KaH oa o`a,J$K"WH `> Ja"o 4QL @/ H"a Ka,/ SFg0SFf ,J oa` ? J2a2 o/ RAa J"_ahH"L,@a/HLD a/H,oaLDPO/Ha`XL 0/aJf6 k@f$L,Ba"Ja"JTO oaܪaV`L@\O`H KaL JEgNu"N<@H4f h@gRB2H`.a "WH`Ha"J oa oa/JLQLHa oaLa JNuH aa؎ J@gaJf j@fat J"oa IaLNuaH"NXN",2PNa$%(I&L(cd&% QEL`Nu"H2SA|H`0aLFd<4QNuH<$Ha&HTNBEREaSFg $KJkk`L4Nu" aHaHNuH<aG,@BERESFgTK$K8#jaDD<`H<a:a ,@BDRDSEgJSFgFHa:Lxf,$H&H4#2)JCkAf JCfal<`m4JCg`e`SEfL4NuvaH JaL J"Wa a"LNu Pg4 Qg,aHHa"opQfRgZ WaH" o "oa oa, oH"a &N oLDa/H,_a/H,_a/H,KaPO o"o a W"JaH/ J"o ap"J oa2Hr Ia߼ o"o aPH",oLHaB/H LDa4/H$,_a*/H$,_a L Pf2"oaH" o "oa&NLD Wa"H,KaLNu QgTHTIaa:e"H$H0"H o aL@H2a o"oaߐ _H"a o"oazH" o&a/ oLD ad/H",oaX/H&,oaL/H*,_aBFg` I$H0"H oaTL@H2a2 _ajH" o "oa oaRH" o"o&a`r,@$H&Ia0D@ /"o UA $EG(H@2XN/ "oa\ _H""oaNLaR J"o,a o  a LQXO0QLa $_ oЈ/@a W`H@0<H瀂aܬ0S@b"LAEJ@j R@gR"HUJa x INu o2$ @f6YHQDoQLA,H`TC(H@ o2/of SAQ``> /"o UA $EG(H@2XN/ "oa^ _H""oaRLaV"o,Ha< I"Jaێ !LQXO0QLa $_ oЈ/@a SW`GtHa Ia"J oNLNuGv`G`G&`H"@>S@`Q?0/S@?  J/ XNJof"$Ha&gPOLD NuJPga`THa.` ax Jaޠ$H %$_0Q02QL _BDNuH02BB0"0(0#ByBy#$Br 0aa(#Nua ae@ @0 e @ e9eSMB@Nu2<(`2<)`2<,`2<=`|2<^`v2<*`p2</`j2<<`d2<>`^2<"`X2<`R2<#`L2<`F2<`@2<`:2<`42<%`.2<~`(2<[`"2<]`2<&`2<$`2<.` 2<+`2<-agSMNuaSM ;gJNuBF/aZag0RFH$ JC>HaxLA JHa("JaL!a` _JFNuaf4<?9a@3FNutaFgt a2ga JfaVfazga(`a@fJafa/ H0a"JA=a J"W/Ha J"oap J"oa _POaB J*_2<|afJ/af0a g4 R@gRA=*"J/ a o"Ja*_ _a`aaf _,HB@Nu$HpNua Ae [e ae {eSMB@Nu 0e :e _g`0<_Nu yRH"Hag2<PHlQHag Q0<`HBA3@@afE2< a J@j2$yBA&JB@g IgAg`g f`pNupNuHpylJBgb$y&JB@gt"Kf@ @f" R&A2Be4fBg |(SBa0a,Q|)BLNuCT0v`2Q06!xRDCjC2QNu (f<`DJf" R"AaA;BP @ g TH @gTH4&I2RPk|A;8$P " BQNu*y$BLI(R gb M0<:agDg@aRgPJ@k PfD0<$` :f4JfP" R"A""aaSMah :gSMa fNuJf`A:"X$P l(Na"N&J`BUNJyg,`<BB^<@` 0g @f=|B^BaNuH N<fBJjDaNua>fa$a$Ha$ Jf?0<-a,H0 =f XgdJf0 @@fp`.p`( #fa,H`$Haf ?fg` f P@g`a`Nua,$Hazf`>a$HaԌ JftNuva*fHa$Haf(LM7Nuva fHa$Ha\fLM7NuafP CNuag&J@k"" R&A2A Af 48SfNu0<)`J#HP#aa(a(gv#aH gvaVf*a`N M0<:ag*I`?@`?@?aPf^0 g @g 0fVaa@a՘/ a*_`a4$H y` Wg8"&H!A&na0"gN$K` "Od$ m>"N(N,JaR` `",Hd0d d ` QNu/(NaЂna,_Nu$A(Ja" l "L&Ha`TOa*6Nu d^ eVgfLC2 gNaf4JfRLNuNaafa`Nuaa(ga@gaXf0<,`SM` Naf g "g`BB"R,ANuaf `af `/ af*_ajHa$H WaL!NuJ@k" R&A2A A@g A`fA`XOax N/$y`"Wgpaax _Nu0<0?a:g0J@j 0aXBANuTO" R&A e ge OnaBANuagJ@k Pf" R&A`ajaЮ$HJZg 0<-N 02"JJZf4&J R@fNua @f,HNua BfNu& d3$d#$d#$#$`#$#$#$#$QNu/TNaJ@g TH!a8fBa ! _Nu0<`p?a0g&J@jag0aTagTONu0 g/9Jf/ " R"A/ TI/ aTtaRCgkL0#BP.HBJBfHBJBkR@gTagarfLA2b /gTH0Befkb0S@20 @gPSBaQ`BSNJ&gRN ,H`PALCDHEIBByba.f&a(g 2<AڰWff RM`g 0<Ndg 0<Nda^ggg aa /2<B@gTNd  gC>4Qg`Qg/AJNNN AgB0<Nd _`,_f 0< Nd3NuRRET < >CONTINUEaA N`STOP aJCkA1(Xn0afaA1 XmXn0NBy#afA@#g "g`BabfHA0p*XJXf XaKMLa"a^W#*_aLgNuINPUT >@ @@f NaZg ag ,g ;g`aN`algRM "g`a#L*[Nu yر>m0<*`.aa y L #` yرoQa4f*`#LNua,glahBa2ga@gaDfaa`a׹LNua<,Ha,H@NuI/ aaJ`I`I`I`.I`&IS`I`I?`I `I9/ ajSMg6 g0 fH瀄SMAz g RHfL!g`(Ma*_NuJf gRCNuazBaDgaNgaNfaa`?<aa4g a6fRW`SWfTONuNu0< a6fN fHaaDf>4a8vBlDCa.faJCg NuaALNlfm0<.`V 00a L #Nu y&hajgaf f yܐ>mfXH68SiJCkSm#L*XNuSoQH#ag`^a(ad/"f P@g `SAXg Q0<0` _/A-D0RPkPA- "X$PYJm( 44  _!`a@/ a _ qg*H d eFf``JyfagJ@j 0<a"` f" R&A4 Np,<<,@,@aT y##NuByNua`3g\afVJCjDCRC` / a@f*Laf XO&96`*_a^6b d## Nua Cafa CdJ`aafa d.0`aafa `a Cm C$nNu3Nu$HaR Jf JCjRCal` afad/ "Ha/<*JCj./?aɔ"Haľ J6JCf$H Ia IL Nu0@?H Ia/ a"WaZ oa"J oa J0/aB&HL _"H aJ K6`/a?a02 _THaa&agNu/a\?afa"H0 _aagNu// 4fa*_ Wa _NuSBH B><a`6"WH" L/ a JaB(W2,/a Wa _"o ax(_LQL*K La LNu/a$HaDŽ"H$_`|a/ \Na*_Nu/a J,_"N<fBa INu/$HaJCa`/$Ha:@/ CaJ JCa*_Fg R@gR`/a K`/atff\N/ aL` Ja|agNuHajLA` L"Ha IadgNuHakLA` L"Ha Ia@gNu$HaƊ JNu// $Haxg0</`p\N69Ca0? JaJ Ja8 J2UAAa"JaF JL``&ag"H0`BYQ`$HaHL 0"H`YgQ`BaagM:"H0`JYgQ`6$H8SC"H2B@JYfRTJQJSf@d`@e:aQ0` ,H`,H 0R@`/a0S@ W,H"Ad @40`XO`zHt0fJXg4`Bga@4(afat4L Nu/a,_ N$"HB2SCCe,`aQMa"La0ANu,H @A`JPg/THaz$_H"Ha INu,H0`aB,Hp@gB@SC2AdaSCQ0 `a4f SCg2,H`SCgBd,HSCTHah`"Q$H NBXUaZHNuaJPgHa/ Jaa oaN Jaaa:"J _a WaL!NuaJPg/ a *_Nu/ aza*_ar/ a *_Nu ` ax0H"SNL(axSMgRMNuaFaVJCkt0SCkH"SNL( `a(H By_ Ja JLa$H War _`Ů/aa$_NuaH Ja Ja&Ha(J oa$ J$L/ aa¶"H Wa oax Ja "H _a$HXO WaL!Nu/a‚aaz"_HHaRaL!agNu/afaB$Haf:&H$_H$a¾f( P@g P@gad$ WBXaL!Nu`za Cg4mHaataȲ&HTH<aJDgL#,HabxNuL XfL"Ha* IBD*_NuTIH/a0 _aL2UAa0 H0H@J@fQLa` SN@`"H*Hadaf$H WaL!Nuv`adJova`fv aP,HCa$$NSN&gRNaB.,HfB"R,ANuJgSnSNNuaUNJfSN$Nýd$Ne$H`p`/aaJo,W a`RRNJg$N"H`ff& ,_`Ta CdJCf6< 4a NJkýmva"H³eBB"R,AaNu?<NN6>NNH@0TOa\JoH\Na J a"Ja KL``*a03Ip C` a43Ip0`a"3I  N3I<fB`F0<Ndag INAkNAYJ@k$A9 @ d&N@V@@ANNDagNu @`eA @peA @ql?@R@AlN0 @Pd @e4BgN" R&ATK/ N(SB0S@a,Q|)B,_ N`v8,5>GS^`a!1AQUqW(expr[, ])(poly[, ])(reel[, ])(matrice[, ])(chaine[, ])( [, ])commandelabelconstanteV-fonctionC-fonctioninconnu est de type a.ajH@0aB Ja0@L`R@A!0@00aXgbH\NAa: JC"af J693a JL`aBB`H2oA a,J Jar AdrRALaNuC$y09yd0<5`XJa`69afa`a6`~// $Ha\NCN`// $Hag0<2` P@g\Na`ZH\Nav`L/a/ a``aH0a"Haa"Na0=|`z 8H\Na JCVa`jagza gX Sf yJPgXH`#Nu Sf4#Nu aCHEN$$4H/*H,a^Jg(H4BAA B eA8NfEN`A,,a&L!NuHK.a:L!Nuaaga C0BE 44j5DR4< 2 C(m CdeC(C CRdAt00k4JBC`$BBHxCg6<% DgaߘCUDk64E/84BZ4BZBA0:` aנfTat0QA/` a׊f>a^0Q Dg Dtg D f" R f&BBra\(0 @S@3af*H3I"<psNBL`3INuaaתg|aC362C CtdE20g2ACHÆ 4HC Cf6<222BQA38` af aޔ0QA32` a֪f aޞ Qa0f~H3I0<"<NBL`3INuNBNua2HaˀaߞL!Nua`FaHa˪a߂L!Nua`*BBaZf gN+aZfgRM`NuaBAaHpafaaքf,HL` BfB@fJBkBBNuara`aոfHa߲aըfaߦL Ha4`gGCa"GCagbGCaGC$N/H`ag&fB3(g 1(fR`(HafSN`BB"R,A Wa^ _Nu$Ha`aJM JNu/aJ$HaBa J$Ia2,H _Nua4a INua*,J$K`a"$L,KaAH2a _aL!NuaCA0/ a8*_"HUINu/a6N%$G& N%b,@J.gBB"R,AN% _Nu,HCފ0<2QBQ$ oaJEg64WH/afL% o aXL< _UH"Ha I aH*_NuLM`Ba6ga۾& #NuG8g$*g JygB&Ea߀,yJDj`@Nu&SHBaTfa `XN&N o g ,N1``BL/ N*_ WajL`^NAN ~a8~PaӚ*y$p#L3.ya.#H`AN ~K,y.<ByBLa#` ?9:3: 9N#H瀀tBGNNNL3:BGNAN 9N (Nu,b"N el*RMBNu0<By`BAN` 9M+bJg/ N*_frNuA* BBNu0<""""QNu&yfN60<A@&Q y :0<6QA 0<6Q0<THQ0< 6QNN @"K`&yf0N/ ?<NN\ y :0<0QA D0<0Q0<PTHQ0< 0QN"@ Ka*N * A26D \d8ZDEBUG[CR]STEP [2-9]LIGNE RRET REAK [C]BREAKS [D]SUB-R CRAN OIS [H]CYCLE [K]NOP [I]BKPT MP OOP FOIS>DEBUG VA EXECUTER LA LIGNE ECRAN PRGR(DEBUG)BREAKPT>Jg0a*#f$AN ~aFaBPat#PN JyfAN ~aaANNNK$ 2e 9b1HHйaBa& 9N#L*H,y gra0gT.yPax#L# yteg 9 ytg 9ذplaH`$R ytg`AN~f:C4N#p3t`H3t` page prod ptsinp(ptsoutp( puisj root reel  rightjrnd  restore~ rtspregistrep readred!4 return` subs>subsr#subsrr# stop seizep@stra! sin sgn shyg sexph scos ssin slog1V satnsum systabp save  sqrt type ( test#then q tan  timevariable 0val vdi  xbios "aaQaY-QYaaaYaYq[arYY U#C1AAqiYQQ )) 1 5QaYYYQ" "" 0BB  A C!(((( (2Pp~ކ^S0T(S1)T;P錍ɛβ' @ @ $ DE O _| Basic Algbrique || v 1987.8 || || J.J. LABARTHE || 14 rue du Royaume || 91440 BURES ||_|,T . "6$&  ..J tv0   ^JdJR2zN Z dr:8j  &4  &   ~P06B N@0" ` >FX *l@P(h ,*&.(.Z:.   >TXt   .,^ J <$ 2B "lvx@B:t( L,B $j> ( |,Dj @..xR(6*  @8>L(RО8< &DBd .&  N R f  4FHb @$" "8 4.( D  P " 444$       06 6  "   B    xB`d.J8D  PRINTV polynome. PRINTA/B*(B+B*A)^7 DanslacommandePRINTaucune !assignationn'estfaite.Comme !l'expressionadutrecalcule !sousformeproduit,elleest !sortiesousformeproduit. FACTEUR Z=V Zestmissousformeproduit. PRINTZ,V Vquiestunpolynomeestsorti   ! sousformepolynome. Notesurlarapidit Autantquepossible,calculersousformepolynomiale.  3.9V-FonctionsFORMD(u)etFORMF(u) ouestunexpression. FORMDtransformeuenpolynome,sipossible,ousinonenforme C1*N*x1^a1*x2^a2*...xn^an/D oNetDsontdespolynomes,C1unnombreetxiunlittral. FORMFfactoriseu.Cettefonctionpeutncessiterbeaucoupdetemps etd'espacemmoire. Exemple: DEVELOPPE W=(X-A)*(X-2*A)*(X-B)^3 PRINTW BasicAlgbriqueconnaitW "sousformepolynome. PRINTFORMF(W) Retrouvelesfacteurs. FACTEUR W=W L'assignationsefaitsans PRINTW recherchedesfacteurs. Z=W*(X-A) Dansuneformefactorise PRINTZ lesfacteurssontpremiers  entre-eux.Lamultiplicationpar !X-Apermetdedcouvrirle !facteurX-AdeW.   3.10.CalculsAlgbriques BasicAlgbriquepossdeungrandnombredefonctionsde manipulationsdesexpressionsalgbriques.Nousavonsdjvules fonctionsFORMDetFORMF.Nousprsentonsdanslatablesuivante latotalitdesfonctionsdecetype.  TabledeV-fonctionsalgbriques Danscettetablep,q,...dsignentdesexpr(expressions algbriqueslesplusgnrales),A,B,...dsignentdespoly (polynomes),x,x1,y,...deslittraux,k,k1,...desentiers.  _@ _A  fonctionsmathmatiques DET(D,n[,k]) DterminantdutableauDdepoly DETF(D ,n[,k]) " d'expr  PER(D,n,k,kp) Dterminantoupermanent(polynomes) PROD({boucle}OFp) Produitsuruneboucle SUM({boucle}OFp) Sommesuruneboucle FORMD(p) Formedveloppe FORMF(p,k) Formefactorise PUIS(p,k) p*(p-1)*...*(p-k+1) SUBS(p,x1=q1,...) Substitutiondelittraux SUBSR(p,M1=q1,...) " demonomes SUBSRR(p,M1=q1,...) " DER(p,x1,...) Drivation DERM(p,k,x) Drivationmultiple INTG(p,x1,...) Intgration INTGM(p,k,x) Intgrationmultiple PSING(p,x,q,y) Partiesingulireenx=q DL(p,k,x) Dveloppementlimitl'ordrek SATN(A,k,x) SrieArctg(A)(tronquex^k) SCOS(A,k,x) Sriecos(A) SEXP(A,k,x) Srieexp(A)  SHYG(A,k,x,q,m,...) Sriehypergomtriquegnralise SLOG1(A,k,x) Srielog(1+A) SSIN(A,k,x) Sriesin(A) ROOT(p,k) Racinekimeexacte DCOM(p,q,...) Diviseurcommun DIV(p,A,x) Quotiententier MOD(p,A,x) RestemoduloA polynomes  DIVN(A,B,x) Pseudodivision DIVD(A,B,x) " MODN(A,B,x) " MODD(A,B,x) " CONT(A,x1,...) Contenu RED(A,x1,...) Partieprincipale(ourduite) ELIM(A,B,x) EliminationdexentreAetB PGCD(A,B,...) PgcddeA,B,... ORD(A,x1,...) Ordre(valuation)enx1,... DEG(A,x1,...) Degrenx1,... COEF(A,x1,k1,...) Coefficientdex1^k1*...  dcorticage POLYN(A) 1ercoefficientnumrique POLYLN(A) nombredelittraux POLYL(A,k) kimelittral POLYMN(A) nombredemonomes POLYM(A,k) kiememonome  NORM(p) norme NUM(p) numrateur NUMF(p) " DEN(p) dnominateur DENF(p)  " FACTEURN(p) nombredefacteurs FACTEURP(p,k) kimefacteur FACTEURE(p,k) kimeexposant MLEN(p) longueurmmoire _@ _A  3.11.Calculsconditionnels,ennombrescomplexes  BasicAlgbriquepermetdecalculermodulounnombrerel oumodulounensembledepolynomes.Cetypedecalculs'obtient endclarantdesconditionsl'aidedelacommande"COND". Exempledecalculmodulo2. COND2 W=5*X+7*Y-Z+2*A;ilfauteffectueruneassignation PRINTW L'exemplesuivantcalculecos(3x)enfonctiondec=cos(x).La commande"COMPLEXi"estapparenteauxcalculsconditionnels. Elleimposeeneffetlaconditioni^2=-1aulittrali. CONDs^2+c^2-1,s;relationentres=sin(x)etcos(x) COMPLEXi    W=(c+i*s)^3;cos(3x)estlapartierelledeW PRINT"cos(3x)=",CHANGE(COEF(W,i,0),"c","cos(x)") REEL ;pourrevenirdescalculsenrels Poursupprimerl'effetdesconditionsonalacommande: CLRCOND  3.12.Chaine  Cesontdesobjetsdfinisparlacommande CHAINEnomi{,nomi} Cesobjetsprennentpourvaleurunechainedecaractresde longueurquelconque. Exemple: CHAINEJOUR(6),MOIS(12),CHANT JOUR(0)="Dimanche" PRINTLEFT(JOUR(I),3),"",J,MOIS(K) MUSICCHANT Onpeutconcatnerdeschainesentreellespar"&".Des expressionsformesainsis'appellentdesexprchaines. (Z)Codagedeschaines  Lescaractressontcodssurunoctetparleurcodes ASCII.Lafindelachaineestindiqueparunoudeuxoctetsnuls (pourfinirsuruneadressepaire).  (ZF) TabledesC-fonctions  LesC-fonctionsrenvoientunechainedecaractre.Danscette tableS,S1,...dsignentdesexprchaine. _@ _A CHANGE(S,S1,S2,...) ChangedansS,S1parS2... CHR(k[,a])c afoislecaractredecodek CONC({boucle}OFS) Boucledeconcatnations JUSTD(S[,a]) JustificationdelachaineS JUSTG(S[,a]) JUSTM(S[,a]) CentragedelachaineS LEFT(S,a) MID(S,d,a) acaractresdelachaineS  RIGHT(S,a) STR(expr) Conversionenchaine STR(poly,x1,...) etrordonnesuivantleslittrauxx1,... LOAD(fichier) Chargeunfichierdisque _@ _A TabledeV-fonctionsayantdeschainesenarguments _@ _A ASC(S) CodeASCII CMP(S1,S2) Comparaisonde2chaines INSTR(S,S1[,a]) RechercheS1dansS LEN(S) NombredecaractresdeS VAL(S) Dcodageenexpressionalgbrique _@ _A  3.13.Allocationmmoire,reprsentationsmmoires  Cartedelammoire _@ _A  allocdebCodeduBasic50~octetsdecode68000  DataduBasic50~octets  Source Tampon 500octets,permetdemodifierla sourcesansdtruirelesvariables. Tabledessymboles Tampon 500octets Tabledesconditions Variables fvar Zoneencorelibre  peekl(systab+162) Tampon 1000 octets Pile pile Rservl'utilisateurpeekl(systab+148) alloc RservauGEM peekl(systab+152) cran peekl($436) _@ _A  Lapositionenmmoiredesdiverssegmentss'obtientparla commandediteur=. L'allocationestlazonemmoirealloueparleGEMauBasic Algbrique.Sivousn'utilisezpasl'AES/VDIellevad'allocdeb cran(=$F8000pourle1040).EneffetBasicAlgbriquene restituenormalementpasdemmoireauTOSetgardegostement toutelammoirepourlui.Onpeutcependantrendreunepartiede lammoireauTOS,cequiestncessairesionveututiliserle VDIouAES,aumoyendelacommande: OUVGEMalloc Danscecasl'allocationvad'allocdeballoc. Sideplusvousutilisezlacommande: LIMITpile BasicAlgbriquevousrservelazonemmoiredepilealloc,dans laquellevouspouvezpokersansrisque. LaV-fonctionsansarguments"LIBRE"donnelenombre d'octetsdontdisposeencoreBasicAlgbrique. LaV-fonctionADR(nomi)onomireprsentelenomd'une variableoud'unechainedonnel'adressemmoireosetrouvela chaineouvariable.Leschainesetvariablessontnumrotes ensemblede12^15-1auplus.Ellessontdisposesdelafaon suivante:d1V1d2V2d3V3... oV1,V2,...sontlocalissenADR(V1),ADR(V2),...etoles motslongsd1,d2,..contiennentlalongeurmmoiredeV1,V2,...  LetableauaccessibleparlaV-fonction"SYSTAB"permet l'accsdesvariablesinternesduBasicAlgbrique.  3.14.GEMDOS,BIOS,XBIOS,VDI,AES,LIGNESAetF  L'appeldesfonctionsTRAP#1,13et14duTOSs'effectue l'aidedesV-fonctionsGEMDOS(k,...),BIOS(k,...)etXBIOS(k,...). CesfonctionsprennentlavaleurduregistreD0aprsl'appel. Lescommandes"CALL","CALLA"et"CALLF"permettentl'appel deprogrammesmachine,etdeslignesAetF.LetableauREGISTRE permetdepasserdesparamtres. DeuxprogrammesmachinesduBasicAlgbriquesont accessiblesparlesV-fonctions"EDIT"(C'estleBasicAlgbrique enpersonne)et"RTS"(testelatoucheEsc). L'appelduVDIetAESncessitelarestitutiond'unepartie delamemoireauTOS.Celasefaitparlacommande"OUVGEM". L'appeldesfonctionspeutengnralseraliserl'aided'une seuleinstruction,BasicAlgbriquesechargeantderemplirles tableauxCONTRL,INTIN,... Exemple:Tracd'unfromage PRECISION2;sinetcoscalculsavec2chiffres LIMIT$E8000;libremmoire OUVGEM ;etinitialiseAES/VDI VDI23,20 ;typederemplissage VDI3 ;videl'cran  VDI-2,160,100,0,0,0,0,100,0,0,3600;tracecercle CALLA0 ;appeldelaligneA A0=PEEKL(REGISTRE);blocdevariablesdelaligneA POKEWA0+$26,160,100;centreducercle FORI=0,8 ;bouclesur8rayons POKEWA0+$2A,160+CINT(COS(PI/8*I)*100), 100+CINT(SIN(PI/8*I)*100);extrmitdurayon CALLA3 ;tracelerayon NEXT  FORI=0,8 ;bouclesur8secteurs VDI25,I+3 ;metcouleurderemplissage VDI24,9+I ;metstylederemplissage VDI ;rptepourrendreeffectif POKEWINTIN,1 POKEWPTSIN,160+CINT(COS(PI/8*(I+.5))*50),  100+CINT(SIN(PI/8*(I+.5))*45;pointdanslesecteur VDI103 ;remplissageonauraitaussipudonnerles  ;paramtrespoksdansPTSINetINTINparla ;commandeVDI103,x,y,c   NEXT Pourpouvoirutiliserl'AESilfautchargerleprogramme BASALG.PRGmaissivousn'avezpasbesoindel'AES,ilvautmieux chargerBASALG.TOSquivouslaisse10octetsdeplus.Aprs chargementdeBASALG.PRGlasourisestencorevisible,carBASALG nefaitaucunappelauVDI/AESparlui-mme.Ainsilesfentres ouvertessontcellesouvertesavantlechargementdeBASALG.On peuteffacerlasourispar VDI123 ouCALLA$A  3.15.TraductionduSTBASICenBASALG Nousdonnonsenminuscules,lesinstructionsduBASALG quivalentesauxinstructionsenmajusculesduSTBASIC. CLEARWetFULLW Pourviderl'cran:printchr(6)ouprint/c/"" Pourlagestiondesfentres:fonctionsaes100108 COLORa,b,c,d,es'obtientparles5instructions: vdi22,a vdi25,b vdi17,c vdi23,d vdi24,e FILLx,ys'obtientsi"c"estlacouleurcidessuspar: vdi103,x,y,c CIRCLEx,y,rs'obtientpar vdi-2,x,y,0,0,0,0,r,0,0,3600 CIRCLEx,y,r,a,bs'obtientpar vdi-2,x,y,0,0,0,0,r,0,a,b PCIRCLEx,y,rs'obtientpar vdi-4,x,y,0,0,r,0 PCIRCLEx,y,r,a,bs'obtientpar vdi-3,x,y,0,0,0,0,r,0,a,b ELLIPSEx,y,rx,rys'obtientpar vdi-6,x,y,rx,ry,0,3600 ELLIPSEx,y,rx,ry,a,bs'obtientpar vdi-6,x,y,rx,ry,a,b PELLIPSEx,y,rx,rys'obtientpar vdi-5,x,y,rx,ry PELLIPSEx,y,rx,ry,a,bs'obtientpar vdi-7,x,y,rx,ry,a,b LINEFx1,y1,x2,y2s'obtientpar vdi6,2,x1,y1,x2,y2 SOUNDetWAVEvoirlacommande"music" OprationsdisqueOPEN,PRINT#etc.EnBASALGondisposedela commande"save"etdelafonction"load"quicreoulitun fichierenuneseulefois.S'ilestncessairedelireoucrire unfichierparmorceauxilesttoujourspossibledeprogrammer directementleGEMDOS(fonctions$39$42). 3.16.VitesseduBasicAlgbrique. NousavonsreprislestestsdevitessesdesBasicspublisdans Atanews(numro2Dc1986)pourleSTBASICetleBASICGFA. _B BASALGSTGFATEST 50 85 12bouclevide10tours 38 23 4 10appels"gosub" 37 27 5 Remplir10foisunematrice10*100 95821430oprationsLEFT,RIGHTetMID 8436720oprations/et* 13313224 10calculssin(log(x))(PRECISION5pour  BASALG) 6381640234affiche10lignestexte 19625896trace10lignesgraphiques _B  D'aprscestests,BASALGsembletrslent,pourtantmmesans parlerdemanipulationsalgbriques,voiciquelquesproblmesqui seprogrammentenquelquesminutesenBASALG,maisbeaucoupplus difficilementenBasicusueletdanslesquelsilestprobableque lestempsdecalculsdeBASALGsoientlespluscourts: 1)Calculerexactementle1000menombredelasuite1,1,2=1+1, 3=2+1,5=3+2,...(Lersultatestunnombrede209chiffres). PourfairececalculenGFAilfautunprogrammed'additionen multiprcision.EnBASALGdesimplesadditionssuffisent. 2)Calculerexactementleproduitdes1000premiersnombres premiers. 3)Calculerundterminant20*20 4)Calculerlasurfaced'uncerclederayon1avec1000chiffres exacts.  LaversionprsenteduBASALGestlentedanslescalculsBasic Usuelprincipalementpourdeuxraisons: 1)Lasourcerestesouslaformeentreauclavier(onneremplace paslesmotsclefspardestokens). 2)L'accsauxvariablessefaitdefaonsquencielleetestdonc trsralenties'ilyaungrandnombredevariables.Pourviter cettecausederalentissement,aulieudedfinirparexemple: variablelettre(10) olettreprenddesvaleursentre1et26,ilvautmieuxcrerun tableaummoirehorsduBASALGen$70par lettre=$70 limitlettre Cetableauestcritparpokebetluparpeekb. Biensurcesralentissementssontparfaitementngligeablesdans lesprogrammesdemanipulationalgbriques. 4.TOUTCEQUEVOUSVOULEZSAVOIRSURLEBASICALGEBRIQUE 4.1.DEFINITIONS  Nousallonsdfinirdefaonprciselesexpressions algbriques:exprenestlaformelaplusgnrale.Ladfinition faitintervenirtoutuntasdedfinitionsquineserventqu'ici. Nousavonsdejvuladfinitiondesnoms(indics): nomi nom |nom(ind{,ind});auplus15indices  Vousvoyezcommentnousprsentonsnosdfinitions.Lesdivers caspossiblessontsparspar"|".Les";"signalentdes commentaires.Leslmentsentre{}peuventtrerpts(simple rappel).Ladfinitiondeexprestalors: expr expra ;expressionvraimentalgbrique |expracomparateurexpra ;lacomparaisonde2expressionsalgbriquesprendlavaleur 1(vrai)ou0(faux).   Unpeudepatience,ettoutseradfini: comparateur = |< |=<  |<=  |> |>= |=> |# ;diffrentde ;noterque=<et<=sontidentiquesainsique>=et=> ;lescomparaisons=et#peuventtreeffectuesentre expressionsquelconques,lesautresseulemententrenombresrels. expra signeoterme{signeterme} ;reprsenteunesommealgbrique signe + |- signeo vide ;c'estdireriendutout! |signe terme fact{*fact}{/fact} ;reprsenteunproduitdefacteurs.enfaitonpeutalterner les*et/(ladfinitionestdoncunpeufaussepoursimplifier). fact primaire |primaire^signeoprimaire ;exponentiellel'exposantdoitavoirunevaleurentiredans [-2^15,2^15[ . primaire nombre |variable ;prendlavaleurdelavariable |litteral  |nominconnu ;letypelitteralestattribunom |V-fonction |VA-fonction |(expr) ;prendlavaleurdeexpronpeututiliser |[expr] ;descrochetsoudesparenthses. Voyonsmaintenantquelquescasparticuliersd'expr poly C'estuneexprpouvanttrecritesousformede polynome.Parexemple(A^2-B^2)/(A-B). reel C'estunpolyrduitunnombre.Exemple72/13 entier reelvaleurentire adresse entierdans]-2^31,2^31[ adressepairecommelenoml'indique. ind entierdans[-2^15,2^15[(Souvenezvousdesindex) litteral exprrduiteunseullittral(gnralisationdusens) Indiquonsicisousquelleforme(factoriseoudveloppe) sonteffectuslescalculsd'expr. Sil'optionestFACTEURtouslesrsultatsdescalculs intermdiairessontsousformefactorise. Sil'optionestDEVELOPPE: a)Lersultatd'uneexponentiationestpolynomialesipossible. b)LersultatdeA+B,A-B,A*BestsousformepolynomesiAetB sonttousdeuxsousformepolynome.Sinonlersultatest factoris. c)LersultatdeA/Bestconvertienpolynomesic'estpossible. ExemplePRINTA/B,A*B/B,A/B*B,A/B*B/1donne factoris,polynome,factoris,polynome  Voyonsmaintenantleschainesdecaractres.Ellessont dfiniesenfonctiondelachainelmentaireelchaine: elchaine "texte" ;chainedonneexplicitemententre"" |chaine ;nomdclarcommechaine |aL ;=chr(13)sautdeligne |aS ;=chr(32)espace  |C-fonction ;@LEFT(...)parexemple |expr ;exprestalorsconvertienchainede caractres=str(expr) Noterquelorsquevousditez"texte",aprsavoirtapple premierguillemetlesmouvementsducurseurnesontpluspossible (saufHelp).Aulieudecelac'estlecodedumouvementquiestmis danslachaine.Lorsdel'impressiond'unetellechaine,les mouvementssontalorseffectus. Letypeexprchaineestunechaineutilisedanslesappelsde fonction.Lesymbole"&"ralisel'oprationdeconcatnation: exprchaineelchaine{&elchaine} nota:LesymboledeconcatnationpeuttreomisdevantaSouaL LetypevirchaineintervientdanslescommandescommePRINT etMUSIC,lesvirgulessontalorsquivalentes&: virchaineexprchaine{,exprchaine} 4.2.BASICALPHABETIQUE  Nousdonnonsiciladescriptiondtailledetoutesles commandesetfonctionsduBASIC,rangesdansl'ordre alphabtique,encommenantparlaseulecommandenonalphabtique. (Assignation) Metunevaleurdansunevariable,indexouchaine (casdesvariables) Sinomiestdetypevariable,laformedelacommandeest: nomi=expr Remarques:1)sinomiestunnominconnu(etnonindic),ildevient detypevariable. 2)sil'optionFACTEURestvalide,ilyaconversionen typefactoris. 3)sil'optionDEVELOPPEestvalide,ilyaconversionen typepolynomesic'estpossible. Exemple: DEVELOPPE W=FORMF(X^2+2*X+1) PRINTW,FORMF(X^2+2*X+1) FORMFdonne(X+1)^2maisdansl'assignationcetteformeest dveloppe.ParcontredanslePRINTledveloppementdeFORMF n'estpaseffectu. Exemple: FACTEUR W=FORMF(X^2+2*X+1) PRINTW Danscetexemplel'assignationestfaitesousforme factorise. (casdesindex)  Sinomestdetypeindex,l'assignationsefaitpar: nom=ind (casdeschaines)  Sinomireprsenteunechaine,l'assignationsefaitpar: nomi=virchaine Exemple CHAINECH CH="(1+X)^2="&(1+X)^2 _C  ABS(p)  V-fonction:Valeurabsolue p:rel _C  ADDRIN  V-fonction:adressetablede8octets ADDROUT  V-fonction:adressetablede4octets VoirAES _C   ADR(nomi)  V-fonction:adressemmoiredenomi nomi:nom(peuttreindic)dechaineoudevariable   Exemple CHAINECH CH="ABCD" aQ.LADR(CH)-4 ;commandediteurenmodeBASALG CelapermetdevoircommentestcodCH: 06414243440... LepremiermotlongestlalongueurutiliseparCH Ledeuximeestlachaine(ici4caractres) Enfinvientlamarquedefin(unoctetnul)etunoctet,galement nul,pouratteindreuneadressepaire. AprsuneassignationADR(CH)peutchanger,parexempledans: U=2^1000 W=3^333 U=ADR(W) PRINTU,ADR(W) EneffetlavariableUeststockeavantlavariableW,salongueur variedansl'assignationU=ADR(W),etparsuitelavaleurdeADR(W).  Exemple:Crationd'untamponaccessibleparpeeketpoke CHAINETAMPON TAMPON=CHR(0,10);tamponde10octets POKEBADR(TAMPON)+7,OCTET;critunoctetdansletampon ...;nepasassignerTAMPON=...:salongueurresteconstante PRINTPEEKB(ADR(TAMPON)+7);relitcetoctet VoirunautreexempledansGEMDOS(fonction$36) _D  AES Commande:appelAESbrut AESk{,ini}{,adj} oufonctionk  k:entierdans[10,125] ini:ind adj:adresse CONTROL  V-fonction:adressetablede10octets GLOBAL  V-fonction:adressetablede30octets INT_IN  V-fonction:adressetablede32octets INT_OUT  V-fonction:adressetablede14octets ADDRIN  V-fonction:adressetablede8octets ADDROUT  V-fonction:adressetablede4octets   NombrederenseignementsdonnsproposdelacommandeVDI restentvalablesetnesontpasrptsici. Siaucunargument n'estdonn("AES"),lacommandeeffectueunappelAESbrutsans initialiserlestableaux.Ilfautdoncpokerlesvaleursvoulues danslestableauxCONTROL,GLOBALADDRINetINT_INavantl'appel brutAES.Ilestgalementpossibled'utiliserd'autrestableaux CONTROL...queceuxdusystmeenmodifiantletableauAESPB accessibleparSYSTAB+22. Sil'argumentkestdonnBasicAlgbriquesechargede remplirles5valeursCONTROL[0]CONTROL[4]selonlenumrode fonctionk.Ensuitelesn+1argumentsin0,in1,...innsont utilisspourremplirINTIN[0-n]etlesm+1argumentsad0,...adm serventremplirADDRIN[0-m].Biensurnetmdpendentdela fonctionk:n+1=CONTROL[1],m+1=CONTROL[3]. TabledesfonctionsAES NousdonnonslesvaleursdeCONTROL[0-3].CONTROL[0]estle numrokdelafonctionAES.CONTROL[1-3]sontmisparBasic Algbrique.CONTROL[1]=n+1estlenombred'argumentsiniattendus parBasicAlgbriqueetCONTROL[3]=m+1lenombred'argumentsadj attendus.CONTROL[4]estinitialisgal0.Pourlesrfrences g125b201voirTabledesfonctionsVDI. [0][1][2][3]'  gestiondel'application 10 0 1 0 g294b190appl_init(faitparOUVGEM) 11 2 1 1 g340b191appl_read 12 2 1 1 g341b191appl_write 13 0 1 1 b192appl_find 14 2 1 1 b193appl_tplay 15 1 1 1 b192appl_trecord 19 0 1 0 b193 appl_exit gestiondesvnements 20 0 1 0 g331b194evnt_keybd 21 3 5 0 g332b194evnt_button 22 5 5 0 g334b195evnt_mouse 23 0 1 1 g337b195 evnt_mesag 24 2 1 0 g336b198evnt_timer 25 16 7 1 g338b198evnt_multi 26 2 1 0 b200evnt_dclick gestiondesmenus 30 1 1 1 g387b200menu_bar 31 2 1 1 g388b201 menu_icheck 32 2 1 1 g389b201menu_ienable 33 2 1 1 g391b202menu_tnormal 34 1 1 2 g393b202menu_texte 35 1 1 1 g394b202menu_register gestiondesobjets 40 2 1 1 b203objc_add 41 1 1 1 b203objc_delete 42 6 1 1 g359b204objc_draw 43 4 1 1 g361b204objc_find 44 1 3 1 g362b205objc_offset 45 2 1 1 b205objc_order 46 4 2 1 g363b206objc_edit 47 8 1 1 g365b206objc_change gestiondesformes 50 1 1 1 g375b207form_do 51 9 1 1 g376b207form_dial 52 1 1 1 g381b208b110form_alert 53 1 1 0 g383b208b110form_error 54 0 5 1 g378b209form_center gestiondesgraphismes 70 4 3 0 g396b209graf_rubberbox 71 8 3 0 g398b210graf_dragbox 72 6 1 0 g400b210graf_movebox 73 8 1 0 g402b211graf_growbox 74 8 1 0 g404b211graf_shrinkbox 75 4 1 1 g406b211graf_watchbox 76 3 1 1 g408b212graf_slidebox 77 0 5 0 g295b212graf_handle 78 1 1 1 g410b213graf_mouse 79 0 5 0 g412b213graf_mkstate gestiondupressepapiers 80 0 1 1 b225scrp_write 81 0 1 1 b226scrp_read selecteurdefichier 90 0 2 2 b225fsel_input gestiondesfetres 100 5 1 0 g309b214wind_create 101 5 1 0 g311b215wind_open 102 1 1 0 g312b219wind_close 103 1 1 0 g313b219wind_delete 104 2 5 0 g302b215wind_get 105 6 1 0 g314b216wind_set 106 2 1 0 g317b217wind_find 107 1 1 0 g318b218wind_update 108 6 5 0 g320b218wind_calc gestiondesresources 110 0 1 1 g370b220rsrc_load 111 0 1 0 g371b221rsrc_free 112 2 1 0 g372b220rsrc_gaddr 113 2 1 1 g374b221rsrc_saddr 114 1 1 1 b221rsrc_obfix gestiondescommunications 120 0 1 2 b222shel_read 121 3 1 2 b222shel_write 122 1 1 1 b22:3shel_get 123 1 1 1 b224shel_put 124 0 1 1 b223 shel_find 125 0 1 2 b223shel_envrn _C  APPR(p[,k])  VA-fonction:Valeurapprochedep p:expr k:entier>0(pardfautlavaleurcorrespondantPRECISIONkp) Remplacetouslesnombresdansppardesfractionsplus simples,approximationsmieuxque2^-k decesnombres.Lamthode consistedvelopperlesnombresenfractionscontinuesjusqu'la prcisionvoulue. Nota:lesnombresentiersetlesfacteursautrequele premierd'uneexpressionfactorisenesontpasmodifisparcette fonction.EngnralsipestfactorisAPPR(p)etAPPR(FORMD(p)) diffrent.  _C ASC(exprchaine)  V-fonction:codeASCIIdupremier  caractredelachaine Silachaineestvidemet0. _C  ATN(p)  VA-fonction:ValeurapprochedeArctg(p) p:rel Lersultatestunnombredans[-PI/2,PI/2] _C  BASEb  Commande:Dfinitlabaseutilisepour b:entierdans[2,36]  l'entre-sortiedesnombres. Exemple BASE16;metenbase16 BASE10 ;resteenbase16,car"10"estluenbase16 BASEDIX ;revientenbasedix OndisposegalementdesconstantesDEUX,HUITetSEIZE VoiraussiPRINT(options/H/et/D/). _C  BIOS(k{,wli}) V-fonction:AppelduTRAP#13fonctionk k:entier wl1,...wln:entiers VoirGEMDOS _C BKPT  Commande:Breakpointenmodedbug Arrteledbugger.Pasd'effetenmodeRun("/").  _C  CALLadressepaire Commande:Appelroutine CALLAk  Commande:AppelligneA CALLFk  Commande:AppelligneF k:entierdans[0,$FFF] LepassagedesregistresD0-D7/A0-A6avantetaprsl'appel sefaitparlatableREGISTRE Exemple POKELREGISTRE,0,1,2,3,4,5,6,7,$F0,$F0002 CALLmachin DUN=PEEKL(REGISTRE+4) CALLautremachin machinestexcutaveclesregistresD0=0,D1=1,...A0=$F0,... DUNalavaleurduregistreD1lasortiedemachin Lesregistresensortiedemachinsontidentiquesauxregistresen entred'autremachin. LacommandeCALLAkexcuteuneinstructiondecode $A000+k Exemple CALLA0 D0=PEEKL(REGISTRE) A1=PEEKL(REGISTRE+36) PRINT"adressedespointeurspolicedecaractre=",A1 PRINT"adressedublocdesvariablesdelaligneA=",D0 _D  CHAINEnomi{,nomi}  Commande:Dclarationdechaines Exemple CHAINEA,B,C,T(7),U(8,3) DfinitleschainessimplesA,B,CetleschainesT(i)oiva de70(ordreinvers!)etles9*4chainesU(8,3),U(7,3)... U(0,3),U(8,2),...U(0,0).L'ordredonnestl'ordred'implantation danslammoire.Ceschainessontinitialiseslachainevide. Ladclarationdeschainessimplesouindicesest obligatoire. _D CHANGE(s{,ui,vi})  C-fonction:substitutionsdechaine s,ui,vi:exprchaine Changedanslachainestouteslesoccurencesdelachaineu1 parlachainev1,puissurlersultatchangeu2env2... _D CHR(k[,a]) C-fonction:chainedeacaractresidentiques   decodeASCIIk k:entierdans[0,255] a:entier(dfauta=1) Sik=0,oncreunchained'espaces(vraicode=32),car BasicAlgbriquen'aimepasleszros. Sia<1metlachainevide. _D  CINT(p)   V-fonction:Plusprocheentier6 p:rel MetSGN(p)*INT(ABS(p)+0.5) Exemple PRINTCINT(3.9),CINT(-5.7) donne4 -6 _D  CLR  Commande:Initialisationduprogramme Cettecommandenemodifiepaslasource.Elleeffacetousles anciensnomsetconditionsenmmoire.Ellemetdeplus: BASEDIX DEVELOPPE PRECISION10;VA-fonctionscalculesavec10chiffresexacts CLRTIME Nota:1)CLRn'estpasutilisableaumilieud'unprogrammeen gnralcarileffaceleslabels. 2)Chaquerun("/")oudbuggage("aG0")commence (implicitement)parunCLR. _D  CLRTIME  Commande:InitialisationducompteurTIME _D  CLRCOND Commande: Effacelesconditionsetretourenmodereel _D CMP(s,sp)  V-fonction:Comparaisondedeuxchaines s,sp:exprchaine Sipourl'ordrealphabtiquevaleurdeCMP(s,sp)  sp>s 1 sp=s 0 sp<s -1  _D  COEF(p{,xi,ki})   V-fonction:coefficientde p:poly  x1^k1*...*xn^kn x1,...xn:littraux k1,...kn:ind Ledernierkipeuttreomis(dfautkn=1) Lecoeffientestunpolynomesuivantleslittrauxautresque x1,..xn. Exemplesip=(X+Z*T)*Y^2+9*Y+X+Z+U COEF(p,Y,k)=0sik>2ouk<0 X+Z*T sik=2 9 sik=1(onpeutcrireCOEF(p,Y) X+Z+U sik=0  COEF(p,Y,2,Z,1)=T _D  COMPLEXi  Commande:Modecomplexe i:litteral Cettecommandepermetlescalculsennombrecomplexes.Le littralireprsentesqrt(-1).Lesnombrescomplexessont reprsentspardespolynomeseni,quisontrduitsenpolynomes dedegr0ou1enimoduloi^2+1.Autrementditcettecommande dfinitlacondition: CONDi^2+1,i Depluslesvariablesfactorisessontrduitesdefaon faireapparatreunseulfacteurcomplexed'exposant1. Siplusieurscommandes"COMPLEXi"sontexcutes,seulela dernireestvalable,leslittrauxcomplexesantrieurs redeviennentdeslittrauxordinaires. Onrevientenmoderelpar"REEL"ou"CLRCOND"ou"CLR". _D  CONC({bouclei}OFs)C-fonction:concatnationsurlesboucles bouclei:commandeFOR s:exprchaine VoirSUM _D  CONDp[,x]  Commande:Modeconditionnel CONDe p:poly x:litteral(pardfautx=POLYL(p)) e:rel Avanttouteassignationd'uneexpressionq,l'expressionest rduitesuivantlesconditionsenvigueur(onpeutrentrerautant deconditionsquevoulu).Lesconditionscritesavecunrele impliquentlecalculmoduloedetouslesnombres(danscecasles calculssousformefactorisesontinterdits).Lesconditions "COND p,x"produisentlasimplificationq=MOD(q,p,x). LescalculssontplusrapidessiCOEF(p,x,DEG(p,x))=1. Lesconditionss'effacentpar"CLRCOND". _D  CONT(p{,xi})  V-fonction:contenu RED(p{,xi})  V-fonction:partieprincipale p:poly x1...xn:litteral  Onap=CONT(p,x1...)*RED(p,x1...) oCONTetREDsontdeuxpolynomes CONTnecontientpasx1,...xn REDestunpolynomecoefficientsnumriquesentiersdepgcdgal 1.Sonpremiercoefficientnumriqueestpositif.Lespolynomes COEF(p,x1,e1,...,xn,en)(poureivariables)ontunpgcdgal1. Lepolynomepestnormalissietseulementsip=RED(p). _D  CONTROL  V-fonction:adressetable de10octets VoirAES _D  CONTRL  V-fonction:adressetablede24octets VoirVDI _D  COS(p)  VA-fonction:Valeurapprochedecos(p) p:rel _D  CURSe,f Commande:Positionducurseur f:entierdans[1,24] e:entierdans[0,39](bassersolution)ou[0,79](hauteet moyennersolution) _D  DATAE1{,Ei}  Commande:Donnesalgbriquesouchaines E1,Ei:expr |exprchaine VoirREAD _D  DCOM(p1,p2{,pj})  V-fonction:Diviseurcommun p1,p2...pn:expr Metuneexpressionqtellequep1/q,p2/q,...pn/qsoient despolynomespremiersentreeux. _D  DEG(p{,xi})  V-fonction:degrenx1...xn p:poly x1,...xn:littraux Siaucunlittralestdonn,onobtientledegrtotaldep. VoirORD _D  DEN(p)  V-fonction:dnominateurd'uneexpression p:expr Metlaformepolynome.VoirNUM _D  DENF(p)  V-fonction:dnominateurd'uneexpression p:expr Metuneformefactorise.VoirNUMF _D  DENR(p)  V-fonction:dnominateurd'unrel p:rel VoirNUMR _D  DER(p{,xi}) V-fonction:Drivepsuivant x1,...xn p:expr x1,...xn:litteral Pardfautonmetn=1,x1=POLYL(p)oux1=POLYL(FACTEURP(p,2)) _D  DERM(p,k[,x])  V-fonction:Drivepkfoisenx p:expr k:entier>=0 x:litteral(dfautx=POLYL(p)oux=POLYL(FACTEURP(p,2))) Metpsik=0. _D  DET(D,n[,k])    V-fonction:dterminant DETF(D,n[,k])    V-fonction:dterminant PER(D,n[,k[,kp]]) V-fonction:dterminantoupermanent D:tableaucarrdclarparVARIABLED(N,N) n:entierdans[0,N] k:entierdans[0,n](dfautk=1) kp:ind(dfautkp=1) CesfonctionscalculentledterminantdutableauD(i,j)oi etjvarientdans[k,n]. DETFcalculesousformefactorise. DETcalculesousformepolynomialesipossible,sinoncommeDETF. PERilfautdonnerkp=0pourcalculerledterminant(sinonPER calculelepermanentdutableau).DeplusilfautquelesD(i,j) soientsousformedepolynomes.(SilesD(i,j)sontdespolynomes sousformefactorise,sortieerreur)  DETetDETFutilisentlamthodedeBareiss.PERcalculela sommesurlespermutations.DETetDETFontdoncdestempsde calculspolynomiauxenn,tandisquePERauntempsdecalculpire qu'exponentielenn.Ilestdoncconseilld'utiliserDET. CependantsiD(i,j)esttrscompliqu,etnpastropgrandPER peuttreleplusrapide.D'autrepart,ilsepeutquePER fonctionnealorsqueDETproduituneerreurmmoire. Voiciquelquescomparaisonsdestempsdecalculsde determinantsN*N(tempsens). 1)D(i,j)=RND(10) 2)D(i,j)=SUM(k=1,10ofx(k)*RND(10))  N PER DET DETF N PER DET MLEN(Rsultat) 4 .04 .05 .11 3  5 28 4880 7 4.7 .20 .7 4 82 erreur 15830 9 300 .4 1.8 5 1438 mmoire 48300 21 ? 13 38 _D  DEUX    V-fonction:nombre2 VoirBASE _D  DEVELOPPE   Commande:metenmodedeveloppe Enmo dedeveloppelesvariablessontassignessousforme polynomesipossible. _D  DIV(p,q[,x])   V-fonction:Quotient"entier" p:expr q:poly#0 x:litteral(pardfautx=POLYL(q)) Met(p-MOD(p,q,x))/q. Sipetqsontdesrels>0,DIV(p,q)=DIVR(p,q). _D  DIVD(p,q[,x])   V-fonctions:pseudodivision DIVN(p,q[,x])  MODD(p,q[,x])  MODN(p,q[,x])  p,q:poly(q#0) x:litteral(pardfautx=POLYL(q)) LapseudodivisionEuclidiennedepparq=B*x^m+...o m=DEG(q,x)s'crit B^a*p=S*q+R oa=MAX(DEG(p)-m+1,0),SetRsontdespolynomesetDEG(R,x)=0 x:litteral(dfautx=POLYL(p)oux=POLYL(FACTEURP(p,2)) Metuneexpressiondelaforme: F*x^a*[C0+C1*x+C2*x^2+...+Ck*x^k] oF:expr,C0...Ck:poly,a:indnecontiennentpasx. Cetteexpressionestledveloppementlimitdepjusqu' l'ordrea+kenx Exemple PRINTDL(1/(1-X),10) _D  EDIT V-fonction:adresseduretourchaud   duBasicAlgbrique _D  ELIM(p,q[,x])   V-fonction:liminationdex p,q:poly  entrepetq x:litteral(pardfautx=POLYL(q)) Sip=A0*x^n+A1*x^(n-1)+...+An etq=B0*x^m+B1*x^(m-1)+...+Bm Lafonctioncalculelarsultantedepetq,donneparle dterminantd'ordrem+ndutableau: A0 A1 A2 ... An 0 0 ... 0 0 A0 A1 ... An-1 An 0 ... 0 . 00 ...A1 . An B0 B1...Bm0 0 0 ... 0 0 B0 ... Bm-1 Bm 0 0 ... 0 . 0 0 ... ... Bm  Sipetqnecontiennentpasx,met-1 Exemple.Sionveutrsoudrelesystmed'quations  x+y+z=a+3 x*y*z=2*a x^2+y^2+z^2=a^2+5 onpeutlimineryetz: W1=ELIM(x+y+z-a-3,x*y*z-2*a,y) W2=ELIM(x+y+z-a-3,x^2+y^2+z^2-a^2-5,y) W=ELIM(W1,W2,z) etlesracinesenxs'obtiennentenfactorisantW: PRINTFORMF(W) _D  ELSE  Commande:MarqueduIFstructur VoirIF _D  END Commande:Marquedefinduprogramme Toutesleslignesaprscettecommandesontignores. L'excutiondelacommandeestquivalente"STOP". Exemple GOTOL GOTOL ... ... L:... END END L:... L:... Leprogrammedegaucheestcorrect,iln'yapasdelabelrpt. Leprogrammededroiteestincorrect,ilmanquelelabelL. S'iln'yapasdecommande"END"leprogrammeesttoutelasource. _D  ENDIF  Commande:MarquedefinduIFstructur VoirIF _D  ERROR[label]  Commande:Traiteme?ntdeserreurs Aprs"ERRORlabel"uneerreurprovoqueunsautlabelen modeRun("/")oudbug("aG"),sanssortiedumessaged'erreur.Si unenouvelleerreurseproduit,elleprovoqueunarrtmoins qu'uneautrecommande"ERRORlabel"aittrencontre.Aprs "ERROR"sanslabel,l'effetdelacommande"ERRORlabel"est annul. _D  EXP(p)  VA-fonction:Valeurapprochedeexp(p) p:rel<45500~ _D  FACTEUR    Commande:metenmodefacteur Enmodefacteurlesvariablessontassignessousforme produitdefacteurs. _D  FACTEURE(p[,k])  V-fonction:kimeexposantdep p:expr k:ind(dfautk=1) k valeur Sipestsousformepolynome: 1 1 &autre  0 Sipestfactorisennfacteurs p=C1*f2^e2*f3^e3... *fn^en 1  1 n=FACTEURN(p) 2 e2 C1estunnombre.  ...  ...  fkestunpolynomenormalis n en Lesfksontordonns autre 0 _D  FACTEURN(p)  V-fonction:nombredefacteursdep p:expr Sipestsousformepolynomemet0 _D  FACTEURP(p[,k])  V-fonction:kimefacteurdep p:expr k:ind(dfautk=1) k valeur Sipestsousformepolynome: 1 p &autre  1 Sipestfactorisennfacteurs p=C1*f2^e2*f3^e3... *fn^en 1  C1 n=FACTEURN(p) 2 f2 C1estunnombre.  ...  ...  fkestunpolynomenormalis n fn Lesfksontordonns autre 1 _D  FORi=a,b[,c]  Commande:Boucle i:index a,b,c:entiersdans[-2^15,2^15[c#0 Exemple FORJ=0,8,2  W=X^J PRINTJ,W NEXT LeblocdeligneentreFORetNEXTestexcutaumoinsunefois aveciprenantlesvaleursa,a+c,a+2c,...jusqu'bauplussi c>0etjusqu'baumoinssic<0.Silepasdelabouclecestomis ilestprisgal1(sia<=b)ou-1(sia>b). Bouclesimbriques  Onpeututiliser10niveauxd'imbricationauplus.LeNEXT peuttrecommunsionindiquelesindexdeboucle. Exemple FORI=0,10 FORJ=0,8 TABL(I,J)=0 NEXTJ,I Autreexemple FORI=1,10 A:PRINT"I=",I FORJ=1,18 B:PRINT"I=",I,",J=",J NEXTI Danscetexemple,BasicAlgbriqueexcute: ligneA(I=1) ligneB(I=1,J=1) puisretourneexcuterlaligneA(I=2,J=1).Iln'yadoncpasde bouclesurJ. Explications: 1)Lacommande"NEXTI,J,..."quivautlasuite NEXTI NEXTJ ... 2)Lacommande"NEXTI"terminetouteslesbouclescommences aprslaboucleI,puischangeIenI+cetsilavaleurestentre aetbreprendlaboucle.SinonterminelaboucleI. 3)Lacommande"NEXT"sansindexconcerneladernireboucle ouverte. 4)Lacommande"FORI=...",lorsqueleprogrammeestdjadans unebouclesurInontermine,terminetouteslesboucles commencesaprsl'ancienneboucleI. _D  FORMATk[$[aL]] Commande:formatdesortiedesentiers k:entier Sik=0,lesnombresontsortisexactement(formep/q). Sik>0,lesnombressontsortissousformedcimaleaveck chiffresaprslepointdcimal. Sik<0,lesnombressontsortisennotationexponentielle, souslaformeu[|a]ouestunnombredcimal,abs(u)<=1, ayant-kchiffresaprslapointdcimal. Lorsquelenombresortiestapproch(k#0)ilestsuivid'un tilde"~". Sil'option$[VaL]estdonne,aveck#0,toutsepassecomme sionavaitdonndepluslacommande: PRECISIONabs(k)+1[aL] _D FORMD(p)   V-fonction:Dveloppep p:expr Lersultatestunpolynomesipossible.Sinononobtientla formeproduitdefacteursC1*N/D*PROD(i=1,mOFxi^ei)oC1estun nombre,NetDsontdespolynomesnormaliss,xisontdes littraux. _D FORMF(p[,k]) V-fonction:Factorisation p:expr k:ind(dfautk=1) Ilyadesexpressionsfactorisablesquelaversionactuelle decettefonctionnetrouvepas.Lafonctionestcependantassez performantepouravoirpufactorisercompltementtoutesles expressionsquel'auteuraeubesoindefactoriserjusqu' prsent.Commeletempsdecalculpeuttretrslong,leparamtre kpermetderduirecetemps,endiminuantlespossibilitsdela fonction. Sik<0larecherchedesfacteursestlaplusrapide.Prenonspar exemplep=x*a^2+2*x*a*b+x*b^2+a+b.Pourchaquelittral,on examinesilescoefficientsdediversdegrsdecelittralontun facteurcommun.Icic'estlecasaveclelittralx,onobtient alorslafactorisationp=(a+b)*(a*x+b*x+1). Sik=0enplusdelarechercheprcdente,ontrouvetousles facteursmultiplesdep,parcalculdupgcddepetdeses drivesparrapportauxdiverslittraux. Sik>1lafonctionestaumieuxdesesperformances,maiscela coutecherentempsdecalcul.Ellefactorisedesexpressions comme:p=x^6-3*a^2*x^3+2*a^4etc... _D  GEMDOS(k{,wli}) V-fonction:AppelduTRAP#1fonctionk BIOS(k{,wli}) V-fonction:AppelduTRAP#13fonctionk XBIOS(k{,wli}) V-fonction:AppelduTRAP#14fonctionk k:entier wl1,...wln:entiers LesfonctionsrenvoientlecontenuduregistreD0(motlong sign).Laliste{,wli}dpenddunumrokdelafonction. L'ordred'entreestlemmequ'enassembleur(ordreinverseduC).  GEMDOS Exemple:fonction$36demandantdesinformationssurledisque. l'appeldecettefonctionenassembleursefaitpar: MOVE#drive,-(SP);drive=numrodudisque(0pardfaut, #1siA,2siB...) MOVE.L#tampon,-(SP) ;tampon=adressed'untableaude16 &octets  MOVE#$36,-(SP) ;numrodefonction TRAP#1 ;appeldelafonction ADDQ#8,SP ;correctiondepile CetappelpeuttrefaitenBasicAlgbriquecommesuit: drive=0 ;disquecourant CHAINEtampon tampon=chr(0,16) ;dfinitunezone16octets. dzero=GEMDOS($36,drive,ADR(tampon));appelTRAP#1 IFdzero :PRINT"disque",drive,"inactif";sidzero#0 ELSE :PRINT"nombredeblocslibres",PEEKL(ADR(tampon)) :PRINT"nbtotaldeblocsdudisque",PEEKL(ADR(tampon)+4) :PRINT"tailled'unsecteur",PEEKL(ADR(tampon)+8),"octets" :PRINTPEEKL(ADR(tampon)+12),"secteursparbloc" ENDIF  Voiciunautreexemple(fonction$2Cdemandel'heure) D0=MODR(GEMDOS($2C),2^16);D0dans[0,2^16[ H=DIVR(D0,2^11) D0=MODR(D0,2^11) M=DIVR(D0,2^5) S=2*MODR(D0,2^5) PRINTH,"heures",M,"minutes",S,"secondes"  TabledesfonctionsduGEMDOS Listedesnumrospermisenhexadcimal.Lesnumros0et$20 sontinterdits. Onaindiqusidescommandesoufonctionsdu BasicAlgbriquesontanalogues.Cependantlesdiffrencespeuvent tretrsimportantes.Lalisted'appelestprcise(wetl). 1 GET 2w PRINTchr(w) 3 litRS232 4w metl'octetwversRS232 5w PRINT/p/chr(w) 6w KEY(siw=-1)ouPRINTchr(w)sinon 7 GET 8 GET 9l PRINTchaine;l=ADR(chaine) A l INPUTchaine;l=ADR(chaine) B demandel'tatdutamponclavier Ew fixeledrivepardfaut 10 renvoie-1 11 tatdel'imprimante 12 demandel'tatdutamponRS232(entre) 13  " (sortie)   19 drivepardfaut 1Al donneuntampon44octetspouroprationsdisques 2A renvoieladate 2Bw fixeladate 2C renvoiel'heure(voirexemple) 2Dw fixel'heure 2F renvoiel'adressedutampon44octetsoprationsdisques 30 renvoielenumrodeversionduGEMDOS 31w,l libremmoire 36w,l informationsurdisque(voirexemple) 39l crationd'unsousrpertoiresurdisque 3Al effaceunsousrpertoiredisque 3Bl fixelerpertoiredisquecourant 3Cw,l crationd'unfichierdisque 3Dw,l ouvertured'unfichierexistantsurdisque 3Ew fermelefichierdisquew 3Fl,N,w litNoctetsdufichierwdansl 40l,N,w critNoctetsdeldanslefichierw 41l effacefichierdisque 42w,w,l dplacelepointeurd'unfichierdisque 43w,w,l fixe/renvoielesattributsd'unfichierdisque 45w renvoieunautreidentificateurdufichierw 46w,w forceunidentificateurdefichier 47 w,l renvoielerpertoirecourant 48l demanded'allocationmmoire 49l librationdemmoire 4Al,l,w " 4Bl,l,l,w chargeetexcuteunprogramme 4Cw termineunprogramme 4Ew,l rechercheunfichierdisque 4F " 56l,l,w renommeunfichier 57w,w,l fixe/renvoieladatedecrationd'unfichier  BIOS Exemplefonction$A(disqueactif) D0=BIOS($A) FORI=0,15 M=MODR(D0,2) D0=DIVR(D0,2) IFTMPRINT"disque",CHR(I+ASC("A")),"actif" NEXT  TabledesfonctionsduBIOS Listedesnumrospermisenhexadcimal.Lalisted'appelest prcise(wetl). 0l informationssurlammoire 1 w renvoiel'tatdupriphriquew(entre) 2w attendunoctetsurlepriphriquew 3b,w envoieunoctetbsurlepriphriquew  4w,w,w,l,w lecture/crituredesecteurssurdisque 5l,w fixe/renvoieunvecteurd'interruption 6 priodedutimer 7w renvoieleblocdeparamtresd'undisque 8w renvoiel'tatdupriphriquew(sortie) 9w testesiledisqueatchang A disquesactifs(voirexemple) Bw testeunedestouchesspcialeduclavier  XBIOS Exemplefonction0:activelasouris. SOURIS:CHAINESOURISP SOURISP=CHR(1,12);tamponde12octets POKEWADR(SOURISP)+4,200,100,0,0 IFTXBIOS(0,0,ADR(SOURISP),2)PRINT"erreursouris" puisdsactivesouris: PASDESOURIS:IFTXBIOS(0,0,ADR(SOURISP),0)PRINT"erreursouris"  TabledesfonctionsduXBIOS Listedesnumrospermisenhexadcimal.Lalisted'appelest prcise(wetl). 0l,l,w gestionsouris(voirexemple) 2 renvoielabasephysiquedel'cran 3 renvoielabaselogiquedel'cran 4 renvoielarsolution 5 w,l,l fixel'cranetlarsolution 6l fixelescouleurs 7w,w fixeunecouleur 8w,w,w,w,w,l,l lecturedesecteurssurdisque 9w,w,w,w,w,l,l criture " Aw,l,w,w,w,w,w,l,l formataged'unepiste Cl,w envoieunechaineversMIDI Dl,w placeuneinterruptionduMFP Ew renvoiel'adressedesparamtresd'untampond'entre Fw,w,w,w,w,w configurationduRS232 10l,l,l fixelestablesdedcodageduclavier 11 RND(2^24) 12w,w,l,l construitunbufferbootsector 13w,w,w,w,w,l,l vrificationdesecteursdisque 14 copiecransurimprimante 15 w,w fixe/renvoielesattributsducurseur 16l fixeladateetl'heure 17 renvoieladateetheure 18 remetleclaviersystme 19l,w envoidecommandesau6301 1Aw dsactiveuneinterruptiondu68901 1Bw activeuneinterruptiondu68901 1Cw,w lit/critunregistreson 1Dw positionnelebitwduportA0 1Ew positionnelebitwduportA1 1Fl,w,w,w initialiseuntimerdu68901 20l VoirMUSIC 21w fixe/renvoielaconfigurationimprimante 22 renvoieledescripteurdevecteursclavier 23w1,w2 lit/critlesdlaisd'autorptitiondestouches: w2premirw1suivanten20*ms(-1pourlire) 24l copied'cransurimprimanteparamtrable 25 attendinterruptionverticale 26l excutiond'uneroutineenmodeTRAP 27 suppressiondel'AES  _C  GET  V-fonction:Attendtoucheduclavieret   metlecodeASCIIdelatouche AladiffrencedeKEY,GETattendl'appuisurunetouche. _D  GLOBAL  V-fonction:adressetablede30octets VoirAES _D GOSUBlabel  Commande:Appeldesousprogramme L'appeldoitobligatoirementsefaireparunlabel.Lenombre deniveauxdeGOSUBmaximumest10.Iln'yapasdepossibilit d'utiliserdesvariableslocalesdanslessousprogrammes. Exemple GOSUBSP A:... . B: . SP:IFTX=0RETURN ;RetourenA,aprsl'appel RETURNB ;RetourenB  Lacommande"RETURNLBL"estdiffrentede"GOTOLBL",eneffet dans"RETURNLBL"ondpilel'adressederetourdelasubroutine. ComparezlesprogrammesquinediffrentqueparlaligneSP1: X=0 X=0  GOSUBSP GOSUBSP PRINTX PRINTX STOP STOP SP:GOSUBSP1 SP:GOSUBSP1  X=10  X=10 A:RETURN A:RETURN  SP1:RETURNA SP1:GOTOA  _D GOTOlabel   Commande:Branchementaulabel Lebranchementdoitobligatoirementsefaireparunlabel. _D  HUIT   V-fonction:nombre8 VoirBASE _D IFexpr  Commande:Ifstructur VoirIFTpourlacommande"IFT...THEN..." Le"IF"structurs'emploieenconjonctionavec"ENDIF"et (facultativement"ELSE").laformedelastructureest: IFexpr IFexpr . ;blocA . ;blocA ELSE ENDIF . ;blocB ENDIF Siexprest#0leblocdelignesAestexcut,maisleblocBne serapasexcut.Siexprestgal0onsauteleblocAeton excuteleblocB,s'ilestdonn(exempledegauche).LesblocsA etBeux-mmepeuventcontenirunnombreillimitdetelles structures. Pourviterd'oublierdes"ENDIF"ilestrecommandde prsenterleprogrammel'aided'indentations(utiliser":") Exemple: IFx :PRINT1 ELSE :IFy :PRINT2 :ELSE :GOTOL1 :ENDIF ENDIF Onremarqueraaussidanscetexemple,qu'ilestpossibledesortir d'unblocduIFparunGOTOlabel. _D IFTexpr[THEN]instruction  Commande:If...Then Noterlasyntaxe"ift"ole"t"rappellele"then"pour distinguercettecommandedu"if...else...endif".Siexpraune valeurdiffrentedezroexcutel'instruction.L'instructionpeut tren'importequellecommandeduBasicAlgbrique.Onpeutomettre "THEN"saufsil'instructionestuneassignation. Exemple  IFTA=8GOTOL8 IFTA=9THENA=3 _D INDEXnom{,nom}  Commande:Dclarationd'index Exemple INDEXI,J,K DfinitlesindexI,JetK.Iln'existepasd'index dimensionn.Lesindexoccupentuneplacefixeenmmoire(1mot) etprennentunevaleurentiredans[-2^15,2^15[.Ilssont initialisszro.Ladclarationdesindexpeuttrefaitede faonimplicitedansunedclarationdeboucle. Exemples FORU=0,9,3 W=CONC(H1=1,3FORH2=1,5OFCH(H1,H2)) dfinitlesindexU,H1etH2. _D  INPUT["texte"]N1{,Ni} Commande:entreauclavier Ni:nomidevariable,chaineouindex Ecrit"texte"(ou"input>"pardfaut) Attenduneentreclaviersuiviede[CR].Sionrentre  A,B... lacommanderaliselesassignations N1=A N2=B ... Sionveutassignerunechaineavecvirguleouespacesrentrerla chaineentreguillemets.Sionrentretropd'expressions,les entresentropsontignores.Sionn'enrentrepasassez,la commanderclamera denouvellesentres. _D INSTR(s,sp[,a])  V-fonction:Positiondespdanss s,sp:exprchaine a:entier>0 Cherchelachainespdanslachainespartirduaime caractre(a=1pardfaut).Silachaineesttrouvemetla positiondudbutdelachainespdanss(unentier>0).Sila chainespn'estpasdanssmetlavaleur0. _D  INT(p)   V-fonction:Partieentire p:rel MetDIVR(p,1) Exemple PRINTINT(3.9),INT(-5.7),INT(-5.2) donne3 -5-5 _D  INTG(p{,xi}) V-fonction:Intgrepsuivant x1,...xn p:expr x1,...xn:litteral Pardfautonmetn=1,x1=POLYL(p)oux1=POLYL(FACTEURP(p,2)) 1)Leprogrammeabesoindesplesdep.S'ilnepeutpasles trouverilyaerreur. Exemple:INTG(1/(X^2+X+1))plesnonrationnelsetdonc introuvablesparBasicAlgbrique. 2)Encasdepledersidu#0ena,l'intgralecontient log(abs(x-a)).Celaapparatsouslaformeog(x-a)dansle rsultat,maisattention: a)Ceog(x-a)n'estpasunefonctiondex,maislenomd'un littralcrparBasicAlgbrique.Onnepeutdoncniledriver nil'intgrer.Ainsi: W=INTG(1/(X-1)) PRINTW,DER(W,X);Ladriveestnulle! PRINTINTG(W,X);L'intgraleestfausse! b)Siog(x)apparatplusieursfois,c'estenfaitunnouveau littralchaquefois.Ainsi PRINTINTG(1/x)-INTG(1/x);critog(x)-og(x) _D  INTGM(p,k[,x])  V-fonction:Intgrepkfoisenx p:expr k:entier>=0 x:litteral(dfautx=POLYL(p)oux=POLYL(FACTEURP(p,2))) Nota:silersultatcontientdesog(x...),l'intgrale peuttrefausse,carlesog(x...)sontconsidrscommedes constantesdanslesintgrationssuccessives. _D  INTIN  V-fonction:adressetablede256octets INTOUT  V-fonction:adressetablede256octets VoirVDI _D  INT_IN  V-fonction:adressetablede32octets INT_OUT  V-fonction:adressetablede14octets VoirAES _D  JUSTD(s[,a]) C-fonction:Justificationdroite JUSTG(s[,a]) C-fonction:Justificationgauche JUSTM(s[,a]) C-fonction:Centrage s:exprchaine a:entier(dfauta=1) Appellonssplachaineobtenueenenlevantlesespacesaux extrmitsdelachaines.CesC-fonctionscrentunechainede longueurmax(len(sp),a)enrajoutantdesespaces JUSTDdevantlachaine JUSTGaprslachaine JUSTMdevantetaprsdefaon(presque)gale. _D  KEY   V-fonction:Testeleclavier Sionaappuysurunetouche,metlecodeASCIIdelatouche Sinonmetzro. AladiffrencedeGET,KEYn'attendpasl'appuisurunetouche. _D  LEFT(exprchaine,a) C-fonction:Lesacaractresdegauchede aentier>=0-lachaine _D LEN(exprchaine) V-fonction:Lenombredecaractresdelachaine Exemple PRINTLEN("12345"&CHR(0,7)) donne12 _D  LIBRE V-fonction:espacelibre Donnelenombred'octetsdisponiblespourleprogramme. _D LIMITadressepaire  Commande:Hautdelammoire LIMITMAX   FixelehautdelammoireutiliseparleBasicAlgbrique. ExempleLIMIT$D0 PEEKL$D0,a,b,c,...;n'interfreplusavecle #BasicAMlgbrique. LIMITMAX;rendlammoireauBasic _D LITTERALnomi{,nomi}  Commande:Dclarationdelittraux Exemple LITTERALX,Y,Z(2,3) DfinitleslittrauxsimplesX,Yetles3*4littraux Z(2,3),Z(1,3),Z(0,3),Z(2,2)...Z(0,0).L'ordredonnest l'ordredenumrotationdeslittrauxquifixel'ordredanslequel leslittrauxs'impriment.Lenombretotaldelittrauxestlimit 2^15. Ladclarationdeslittrauxsimplesestfacultative,celle deslittrauxindicsestobligatoire. _D  LOAD(f)  C-fonction:Lectured'unfichierdisque f:exprchaine;reprsentelenomd'unfichier,sil'extension n'estpasindiqueonprend.DAT VoirSAVE _D  LOG(p)  VA-fonction:Valeurapprochedelog(p) p:reldans[1/N,N]  (logarithmenaturel) N=10^9000~ _D  MAX(p,q{,r}) V-fonction:maximumdesnombresp,q,.. p,q,r...:rels _D MID(exprchaine,d,a) C-fonction: Lesacaractrespartir !dudimecaractredelachaine aentier>=0 dentier>0 _D  MIN(p,q{,r})  V-fonction:minimumdesnombresp,q,.. p,q,r...:rels _D  MLEN(p)  V-fonction:longueurenoctetsdu p:expr  codagemmoiredep Diffrede LEN(p)(=longueurdelareprsentationen caractresdep;onrappellequel'exprpestaussiune exprchaine).SiWestunevariable,onaMLEN(W)=PEEKL(ADR(W)-4). _D  MOD(p,q[,x])  V-fonction:Restemoduloq p:expr q:poly#0 x:litteral(pardfautx=POLYL(q)) Siqestreel,pdoittreunpoly.Onremplacetousles coefficientsdepparleurrestemoduloABS(p).Enparticuliersi paussiestrel,MOD(p,q)=MODR(p,q)  Siqestunpoly#reel 1)Sipestunpoly,ladivisionEuclidiennedepparqs'crit p=Q*q+R oQetRsontdespolynomesenx,maispasforcemmentsuivantles autreslittraux,avecdegrdeRenx(noncalculablepar DEG(R,x))<DEG(q,x). DanscecasMOD(p,q,x)renvoieR(sousformefactorise) 2)Sipestsousformefactorise p=C1*f2^e2*...fn^en chaquefacteurf2,...fnestremplacparsonresteRicommeen1) cidessus.MOD(p,q,x)renvoieC1*R2^e2*...*Rn^en Exemple FACTEUR W=(X+1)*(X-1) PRINTMOD(W,X^2+1,X) PRINTMOD(FORMD(W),X^2+1) PRINTMOD(FORMD(W),A*X^2+1) _D  MODD(p,q[,x])  V-fonctions:pseudodivision MODN(p,q[,x])  p,q:poly(q#0) x:litteral(pardfautx=POLYL(q)) VoirDIVD _D  MODR(p,q)   V-fonction:restedepmoduloq p,q:rels(q#0) Metlerelrtelquep=s*q+rosestentieretrestdans [0,abs(q)[. CettefonctiondonnelesmmesrsultatsqueMOD(p,q)mais 10%plusvite. _D  MUSICvirchaine  Commande:musique,bruits Cettefonctionpermetdeprogrammerfacilementlafonction $20duXBIOS(TRAP#14). LavirchainedoittrecomposedelettresenMAJUSCULES, ventuellementsuiviesd'unnombrek,etdesparenthses"("et ")".Chaquelettre,"("et")"produitunecommandelmentaire paramtreparlenombrek.Silenombrekestomis,savaleurest prisegale0. Exemples A metunenoteDO W100 attend101*20ms V10 metvolume=10pourlescanauxouverts. etc... Attention:Danscettecommandelabaseestlocalementdix;cpar exempledans: BASESEIZE MUSIC"O20A";metoctave=20etjouelanote20. MUSIC"O$20A" ;metoctave=32etjouelanote32. Avantdedonnerladescriptioncompltedessous-commandes, voicideuxexemplesdeMUSIC.Nousdcomposonslavirchainesur plusieurslignespourlacommenter. MUSIC"(A1Q1U2DV8M11P500S10Y9R2";plusbruitquemusique. (AQ1 metlapriode(=celledelanote36)("A")etmet l'enveloppe1("Q")pourlecanalA;noterqu' aprs "(","A"n'metpasunenote,maisfixelapriode. U2DV8 metlevolume=8("V")etlapriode(=note39)("D") ducanalB(lecanalBestseulouvertaprs"U2") M11 validelecanalA+bruitetlecanalB P500 priodedel'enveloppe S10 formedel'enveloppe Y9 y=9donnel'incrmentdelabouclequisuit R2 effectueuneboucleenvoyantlasuitedevaleurs 1,1+y,1+2y...,251(modulo256)dansleregistre2 cequifaitvarierlafrquenceducanal2.  MUSIC"O36T5L4I4E4O35AO36B DEB2EO35A5O36W14 G4L4I4E4B DEG2IG5W14" Cetexempleesttrssimple.Onjouedesnotesdeduresmultiples de5*20ms("T5")surlecanalA."O36"ou"O35"fixelavaleur attribuelanoteque"A" reprsente.ChaquelettreA-Lproduit l'missiond'unenote,pendantuneduredpendantdunombre suivantlalettre.Les"W"correspondentdespauses.Comparezla commandeMUSICduBasicAlgbriqueaveclacommandeSOUNDduST- Basic:cedernierexempleestlemmemorceauqueceluidela noticeduSTBasicpage46. Lessous-commandesdeMUSIC  Lessous-commandesdeMUSICcriventdanslesregistres0 13dugnrateurdesonYM2149,parl'intermdiairedelafonction XBIOS($20).Celaestindiqupar<r,k>(envoiekdansleregistre r).D'autrepart<$FF,k>,<$80,k>et<$81,...>indiquentdes commandesduXBIOS($20).LescanauxA,B,Csontdsignspar i=0,1,2. LacommandeMUSICutilisedesvariablesinternes,dontvoici lalisteaveclesvaleursinitialesaudbutdechaquecommande MUSIC: par=")" Prendlesvaleurs"("et")"cequiindiquesion estenintrieur"("ouextrieur")"de parenthses.LescommandesA-Ldiffrentsuivant lavaleurde cettevariable. note Prendlesvaleursdans[0,95].Lapriode correspondantnoteestp(note)=3822*2^(-note/12) =ph*256+pb(en8|-6s) octave=36 Prendlesvaleursdans[0,95].C'estlenumrode lanoteA. dure=8 Tempsenunit20ms(audbut160ms). x=1 y=10 z=251Limitesd'uneboucleFORI=x,z,ymodulo256. unit=1 unit=a0+2*a1+4*a2oai=0(ferm)ou1(ouvert) indiquel'tatducanali.Onnoteai=bitide unit.Initialementseullecanal0estouvert. env bitideenvest1,sil'enveloppeestvalide pourlecanali. AudbutdeMUSIClevolumeest10:<7,$FE>,<8,10>. EnfindeMUSIC,lescanauxsontferms:<7,$FF>,<$FF,0>.   commande ( Metpar="(" ) Metpar=")" Ak Posonsz=0pour"A",z=1pour"B"...z=11pour"L" ... Cettecommandedfinitnote=z+octavequidoittre Lk dans[0,95].Lacommandedposelapriodep(note) danslesregistresdescanauxiouverts(telsque bitideunit=1):<2*i,pb>,<2*i+1,ph>. Deplussipar=")",lescanauxouvertssont valids,onattendt=(k+1)*dure(20ms),puison fermelescanaux.Celacorrespondl'mission d'unenote:<7,.NOT.unit><$FF,t><7,$FF>. Mk kdans[0,$3F]<7,.NOT.k> ExempleM9validelecanalAetmixelegnrateur debruit.Pouri=0,1,2lebitidekcorrespondent lavalidationdusonsurlecanali,etlebit i+3lavalidationdubruit(1=on0=off). Nk kdans[0,$1F]<6,k>k=priodedubruit  Ok kdans[0,95]metoctave=kquiestlenumrodela note"A" Pk kdans[0,7]validel'enveloppe:metenv=ket pourlescanauxiouverts. Rk kdans[0,13]k#7.Effectuelaboucledela fonctionXBIOS($20):<$80,x><$81,k,y,z>c'est direquedansleregistrekonplace,raison d'unevaleurtoutesles20ms,lasuitedevaleurs: x,x+y,x+2*y,...,z(modulo256).Cettesuitepeut treinfiniesizestmalchoisi.Ilestsurtout intressantd'utilisercettecommandeavecles registres2,4et6cequidonnedesvariationsde frquence. Sk kdans[0,15]shape<13,k> Tk metdure=k(20ms) Uk kdans[0,7]metunit=kquidfinitlescanaux ouverts(bitidek=1)etferms. Vk kdans[0,15]pourlescanauxitelsquebitide unitetde.NOT.envsont1,metlevolume<8+i,k> Wk kdans[0,254]attend(k+1)20ms<$FF,k+1> Xk kdans[0,255]metx=k Yk kdans[1,255]mety=k Zk kdans[0,255]metz=k _D  NEXT[N1{,Ni}]  Commande:Findeboucle(s)FOR... VoirFOR _D  NORM(p)   V-fonction:normed'uneexpression p:expr /valeur Sipestfactorisp=C1*f2^e2*...*fn^en: C1=FACTEURP(p) Sipestsousformepolynomep=C1*x^k*...+... C1=POLYN(p) Onremarqueraquesip=pp,maissipestsousformepolynome etppsousformefactorise,engnralNORM(p)#NORM(pp). _D  NUM(p)  V-fonction:numrateurd'uneexpression p:expr Metlaformepolynome. LesV-fonctionspolynomeNUM(p)etDEN(p)sontcaractrisespar p=NUM(p)/DEN(p), NUM(p)=FORMD(NUMF(p)) DEN(p)=FORMD(DENF(p))estnormalis PGCD(NUM(p),DEN(p))=1  SipestunpolynomeDEN(p)=1,NUM(p)=p. _D  NUMF(p)  V-fonction:numrateurd'uneexpression p:expr Metuneformefactorise. Sipestfactoris:p=C1*f2^e2*...*fn^en: NUMF(p)=C1*fi^ei*...*fj^ejoongardeleproduitdes facteursdepexposantspositifs. DENF(p)laformeproduitdesfacteursdepexposantsngatifs. Onatoujours: p=NUMF(p)/DENF(p), PGCD(NUMF(p),DENF(p))=1  SipestsousformepolynomeDENF(p)=1,NUMF(p)=p. _D  NUMR(p)  V-fonction:numrateurd'unrel p:rel Sip=a/boaetbsontdesentierspremiersentreeux(b>0) ona:NUMR(p)=aetDENR(p)=b. _D  ORD(p{,xi}) V-fonction:ordre(valuation)enx1...xn p:poly x1,...xn:littraux Siaucunlittralestdonn,onobtientl'ordretotaldepsuivant tousleslittrauxdep. Lorsque p=SUM(i=1,mOF...x1^a(1,i)*...x^n^a(n,i)) contientdeslittrauxparmisx1...xn,ORD(p,x1,..xn)(resp DEG(p,x1,...xn))estleminimum(resplemaximum)des a(1,i)+...+a(n,i)pouriparcourantlesmmonomes1...mdep. Sipnecontientaucundeslittrauxx1...xn, ORD(p,x1,...xn)=-1etDEG(p,x1,...xn)=0. Exemplesip=X^2*A+X*A^4*T ORD(p)=3 ORD(p,X)=1 ORD(p,A)=1 ORD(p,T)=0 ORD(p,Y)=-1 ORD(p,X,A)=3ORD(p,X,T)=2etc... DEG(p)=6 DEG(p,X)=2 DEG(p,A)=4 DEG(p,T)=1 DEG(p,Y)=0 DEG(p,X,A)=5DEG(p,X,T)=2etc... Nota:pesthomognesietseulementsiDEG(p)=ORD(p) pesthomogneenX,YsietseulementsiDEG(p,X,Y)=ORD(p,X,Y) _D  OUVGEM[alloc]  Commande:InitialisationGEM alloc:adressepaire a) Chaquefoisquecettecommandeestexcute: Lammoireestlibrejusqu'allocparunappelde GEMDOS($4A).Pardfautalloc=pileopileestdfiniparla Commande"LIMITpile".Ilfautalloc>=pile.Lammoirecomporte alorstroiszonesd'adressescroissantes: allocdebpile-1BasicAlgbrique pilealloc-1 Zoneutilisateur,cettezonen'estutiliseni parBasicAlgbriqueniparleGEM alloccran-1 GEM  IlestpossibleaprsOUVGEMdemodifierlapositiondepile parunecommande"LIMITnouvellepile".Enparticulier(1040ST) aprsLIMIT$F8000onredonneauBasicAlgbriquetoutela mmoire,lescommandesAESetVDIsortentalorsenerreur. b)Lorsdupremierappel(danstoutelavieduBasicAlgbrique) delacommandeOUVGEMseulement: AES10 applinit  AES77 grafhandle VDI100,1,1,1,1,1,1,1,1,1,1,2 openvwrkstation VDI15,1 traitscontinus VDI32,1 critureenmodenormal VDI129,0 affichageglobal _D  PAGEtexte  Commande:Sautdepageettitreimprimante Cettecommanden'ad'effetquelorsdelasortiedulisting parlacommandeaPblocdel'diteur.Elleforceunsautdepage, etcrit"texte"enhautdechaquenouvellepage. _D  PEEKB(adresse)  V-fonction:Peeksurunoctet PEEKL(adressepaire)  V-fonction:Peeksurunmotlong PEEKW(adressepaire) V-fonction:Peeksurunmot  Cesfonctionsrenvoientdesentiers>=0. AttentionPOKELetPEEKLnesontpasinverses,carPOKELutilise desnombressigns.Essayezparexemple: LIMIT$F0 POKEL$F0,-1 PRINTPEEKL($F0) _D  PER(D,n[,k[,kp]]) V-fonction:dterminantoupermanent D:tableaucarrdclarparVARIABLED(N,N) n:entierdans[0,N] k:entierdans[0,n](dfautk=1) kp:ind(dfautkp=1)  LesvariablesD(i,j)oietjvarientdans[k,n]doivent tresousformepolynome. sikp=0calculeledterminantdutableauD(i,j):VoirDET sikp#0calculelepermanentdutableauD(i,j). _D  PGCD(p1,p2{,pi})  V-fonction:pgcd(polynomes) p1,p2...pn:poly Lecalculdupgcdestplusrapidesionutilisedespolynomes coefficientsentiers,ainsiPGCD(RED(p1),RED(p2))estplus rapidequePGCD(p1,p2),carlescalculssontenentiersdansle premiercasetenfractionsdansledeuxime.Cettefonctionest trsoptimise(mthodedessubrsultanteslgrementmodifie) carelleintervientdansbeaucoupdefonctionsduBasic Algbrique.  AladiffrencedePGCDR,iciPGCD(p,0)estadmis(etvautp). _D  PGCDR(e,f{,gi})  V-fonction:pgcd(entiers) e,f,gi:entiersnonnuls _D  PI  VA-fonction:Valeurapprochede=3.14... _D POKEBadresse{,Bi}  Commande:Pokedesoctets Bi:entierdans[0,255] Exemple POKEB$C0 ;listevidepasd'effet POKEB$D0,1,2,3 Celapoke1en$D0,2en$D0001et3en$D0002. _D  POKECB{opt}adresse,virchaine  Commandes:Pokechaine POKECW{opt}adressepaire,virchaine optaL |aZcarct;carctestuncaractrequelconque Lachaineestpokeenmmoirepartirdel'adresseraison d'uncaractreparoctetpourPOKECBoud'uncaractreparmot pourPOKECW,l'octetfortdumottantmiszro.Onpokegalement unoctetoumotnulaprslachainesaufsil'optionaLestmise. L'optionaZcarctindiquequ'ilfautpoker0aulieudecarct. Exemple POKECBaZA$E0,"BACAD" Pokeen$E0:$42,0,$43,0,$44,0 _D  POKELadressepaire{,Li}  Commande:Pokedesmotslongs Li:entierdans]-2^31,2^31[ Exemple POKEL$C0 ;listevidepasd'effet POKEL$D0,1,2,3 Celapoke1en$D0,2en$D0004et3en$D0008. Nota:onnepeutpaspoker-2^31=$80avecPOKEL __'  POKEWadressepaire{,Wi}  Commande:Pokedesmots Wi:entierdans[0,$F] Exemple POKEW$C0 ;listevidepasd'effet POKEW$D0,1,2,3 Celapoke1en$D0,2en$D0002et3en$D0004. _D  POLYL(p[,k])  V-fonction:kimelittraldep p:poly k:ind(dfautk=1) Lesn=POLYLN(p)littrauxdepsontordonns(ordrede cration,voirLITTERAL).Sikn'estpasdans[1,n]met0 _D  POLYLN(p)   V-fonction:nombredelittrauxdep p:poly ExemplePRINTPOLYLN(1),POLYLN(X*Y+Z) donne0 3 _D  POLYM(p[,k])  V-fonction:kimemonomedep p:poly k:ind(dfautk=1) k valeur Sip=M1+...+Mn 1 M1 n=POLYMN(p) ... ... Mimonomesordonns n Mn &autre 0  _D  POLYMN(p)   V-fonction:nombredemonomesdep p:poly _D  POLYN(p)   V-fonction:premiercoefficientdep p:poly Sip=C1*x^a*y^b*...+C2*x^ap*..+...estlaformequi s'imprimeparPRINTFORMD(p),C1tantlepremiercoefficient,on aPOLYN(p)=C1. Sipestsousformepolynome,onaNORM(p)=POLYN(p),parcontre sipestsousformefactorisecetterelationestfausse. _D  PRECISIONk[aL]  Commande:PrecisiondesVA-fonctions k:entier>0  CettecommandecalculePI(stockenmmoire)saufsi l'optionaLestdonne.Laprcisionrelativedescalculsest base^-k. Exemple PRECISION50 FORMAT100 PRINTEXP(1) e=EXP(1)estsortiavec50chiffresdcimauxexacts. Nota1)CettecommandepeuttretrslonguequandellecalculePI, ainsienbase10: ktempsdecalcul(s) 20 1 60 19 100 66 1000 7h 2)Ondoitavoirbase^-k>2^-4096(enbasedixk<1234) 3)SilavaleurdePIconnueduprogrammecorrespondune prcisionplusfaiblequecelledemandeparPRECISIONk,les fonctionstrigonomtriquespeuventsetermineren"ERREURPI" Exemple PRECISION7;PIestconnu10^-7prs PRECISION15aL;etondemandelaprcision10^-15 PRINTATN(0.5);okn'utilisepasPI PRINTSIN(1) ;produitl'"erreurpi"  _D  PRFACT(e[,f])  V-fonction:Facteurspremiersdee e,f:entiers(e>1) Sifn'estpasdonn,dcomposeeenfacteurspremiers. Sif=0chercheunseulfacteurpremierdee Sif#0cherchelesfacteurspremiersdeeinfrieurf+1. Lersultatestunpolynome.Si e=2^a*3^b*... onobtientlepolynome 2*u^a+3*u^b+... ouestlelittral(denumrozro)denomvide. Exemple PRINTPRFACT(2^(2^5)+1) Notezquelepluspetitdiviseurdees'obtientpar: NORM(PRFACT(e,0)) _D PRINT[/{opt}/]virchaine  Commande:impression optdsigneunedes8lettressuivantes(majusculeouminuscule) P Sortieimprimante E Metenexposant I Metenindices A Pauseaprslasortiede20lignes(moinsuncaractre).On peutalorscontinuerourevenirenmodeBASALG(enappuyant surA).Cetteoptionfonctionnemalsivousimprimezdes mouvementsdecurseurautrequesautdeligne. L Nepasallerlaligneenfind'impression C Viderl'cranavantimpression D Labaseprendlavaleurlocale(pourlePRINTseulement)dix H Labaseprendlavaleurlocaleseize  LorsquelacommandeesteffectueenmodeBASALG,onvide d'abordlalignetexteolersultatvatrecrit,cequiest utilequandonrutilhiseunPRINTdjasurl'cran. Exemple PRINT/CH/1000 videl'cranetcrit1000enhexadcimal. Sortiesimprimante PRINT/PEI/"Z(1,7)=",X^3+X^2+1 Lasortieimprimanteestdelaforme: Z1,7=X3+X2+1 Eneffet,avecl'optionE,lachaineimprimerCestmodifiepar: C=CHANGE(C,"^",CHR(27)&"S0",CHR(22),CHR(27)&"T") c'estdirequelesigne"^"estconvertienlasquencefaisant passerl'imprimanteenmodeexposantetlecaractre22,qui indiquelafindel'exposant(lecaractre22estinvisiblepour l'impressionsurl'cran)enlasquenceretourl'impression normale.Demmeavecl'optionI,cesontlescaractres"("et")" quisontconvertiseninstructionsdepassageenindiceetretour lanormale.Lachaineestmodifiepar: C=CHANGE(C,"(",CHR(27)&"S1",")",CHR(27)&"T") Lescommandesimprimantesutilisesconviennentaux imprimantesEPSON.Ellespeuventtremodifiesparpoke. adresses valeurspourimprimanteEPSONoucompatible SYSTAB+46 "^" ;1eroctetchanger SYSTAB+48 27,"S0",0 ;onpeuttransmettrejusqu'7octets SYSTAB+56 22 SYSTAB+58 27,"T",0 SYSTAB+66 "(" SYSTAB+68 27,"S1",0 SYSTAB+76 ")" SYSTAB+78 27,"T",0  Envoidescaractresl'imprimante.  L'envoidescaractres6,13(isol)et0(leschainesdu BasicAlgbriquenepeuventcontenirde0,quiestlamarquede fin)poseproblme.Eneffetaulieude6onenvoie12etaulieude 13onenvoie13,10.Onaintroduitavantenvoiversl'imprimantela conversiondespairesd'octetscommenantpar$91("aZ"). codeenvoi 13 13,10 612 $91$300 $91,n nsin#"0"  Onpeutainsienvoyertouslescodes,mme0: PourenvoyerUtiliser 0 "aZ0" 6 "aZ"&chr(6) 13 "aZ"&chr(13) $91 "aZaZ" n chr(n)pourlesautresvaleurs Impressiondelasource LasortieimprimantedelasourceparaPblocsefait galementavecdesconversions,maisdiffrentesdecellesde PRINT: codeenvoi 6 12 13 13,10 n<128 n pourn#6etn#13 n>127peekb(SYSTAB+90+(n-128)) Latablede128octetsenSYSTAB+90estdonclatablede conversiondescaractres>=128.Cettetableconvientaux imprimantesEPSON:lessymbolesAlternate+Lettresontrenduspar lalettremajusculeenitalique. _D  PROD({bouclei}OFp) V-fonction:produitsurlesboucles bouclei:commandeFOR p:expr VoirSUM _D  PSING(p,x,q,y) V-fonction:Partiesinguliredep p,q:expr  enx=q x,y:litteral Sip=SUM(i=1,mOFA(i)/(x-q)^i)+p0op0estrgulierenx=q cettefonctionrenvoielapartiesingulire,misesouslaforme: SUM(i=1,mOFA(i)/y^i) _D  PTSIN  V-fonction:adressetablede256octets PTSOUT  V-fonction:adressetablede256octets VoirVDI _D  PUIS(p,k)   V-fonction:p(p-1)...(p-k+1) p:expr k:ind si k=0 renvoie1 sik>0renvoieleproduitdekfacteurs: p*(p-1)*(p-2)*...*(p-k+1) sik<0renvoie1/PUIS(p-k,-k) CettefonctionvrifielarelationPUIS(x,k)=x*PUIS(x-1,k-1). Lorsquepestunentier,kpeuttreomis: PUIS(e)   V-fonction:e! e:ind sie>=0renvoiee!=puis(e,e) sie<0renvoiepuis(e,e+1)=-(-)^e/(-e-1)! _D  PWR(p,q)   VA-fonction:Valeurapprochedep^q p,q:rels Siqestentier,pwr(p,q)estuneV-fonction(exact),sinon c'estuneVA-fonction. _D READnomi{,nomi}  Commande: Initialisationde "chaines,variablesetindex S'utiliseenconjonctionavecDATAetRESTORE Exemple: CHAINEZ READZ READW,I : RESTOREdat;modifielepointeurdelecturedesDATA READJ DATAunechainesansvirgules,DER((1+X+X^2)^3,X) dat:;Celabelnepointepasforcemmentundata DATA1000 Lesinitialisationsdecetexempleauraitputreeffectuespar: Z="unechainesansvirgule" W=DER((1+X+X^2)^3,X) I=1000 J=1000 _D  RED(p{,xi})   V-fonction:partieprincipale p:poly x1...xn:litteral VoirCONT _D  REEL  Commande:Moderel Lescalculssontdenouveaueffectusennombresrels. l'effetdelacommande"COMPLEXi"estannul,etiredevientun littralordinaire. _D  REGISTRE  V-fonction:adressetablede15motslongs  REGISTRE+4*kcontientDk0<=k<8 REGISTRE+32+4*kcontientAk0<=k<7 VoirCALL _D  RESTORE[label]  Commande:modifielepointeurDATA LepointeurDATAestmissurlelabel(endbutdeprogramme pardfaut).labelpeutpointeruneinstructionquelconque. VoirREAD _D RETURN[label]  Commande:Retourdesousprogramme LeretoursefaitaprsleGOSUBayantappellesous programme,ouaulabelsiceluiciestdonn. VoirGOSUB _D RIGHT(exprchaine,a) C-fonction:Lesacaractresdedroite aentier>=0  delachaine  _D  RND(a)  V-fonction:Nombrealatoirechoisi a:entierdans[1,2^31[  dans[0,a[ _D  ROOT(p,k) V-fonction:Racinekimeexacte p:expr k:entier>0 S'ilexisteuneexpressionrationnelleqtellequep=q^k renvoiez. Sinonrenvoie0. Exemple PRINTROOT((A^2+2*A*B+B^2)/C^2,2);crit[A+B]/C PRINTROOT(3,2);crit0 _D  RTS V-fonction:adressed'uneroutine  duBasicAlgbrique Cetteroutinecontientlesinstructions: BSRESCAPE;testelatoucheEscsielleestappuye retourchaudauBasicAlgbrique(BRAEDIT) ;sinonconservelesregistresetcontinue CLR.LD0 RTS Utilisablepourmettredansdesvecteursd'interruptions. _D  SATN(p,k[,x])  V-fonction:SrieArctg(p) p:polyORD(p,x)>0 k:entier>=0 x:litteral(dfautx=POLYL(p)) Metlasrie:Arctg=p-p^3/3+p^5/5-...ensupprimanttousles termesx^ndedegrn>k. _D  SAVEf,S  Commande:SauvegardeScommefichierdisquef f:exprchainereprsentelenomd'unfichier(extensionprise .DATpardfaut) S:virchaine LachainedecaractresSestsauvegardesurdisqueetforme latotalitdufichierf.Onpeutrelirecettechaineavecla C-fonctionLOAD(f). 1) Sionutilise SAVEf,S1 SAVEf,S2 aveclemmenomdefichier,lepremierfichieresteffaceton nepeutplusrelireS1.SionveutsauvegarderS1etS2ilfaut soitcrerdeuxfichiers: SAVEf1,S1 SAVEf2,S2 soitcrerunfichiercontenantlesdeuxchaines: SAVEf,S1,S2 2)Iln'yapas(besoin)decommandesOPENetCLOSE 3)Aprs CHAINEC C=LOAD(f) lachaineCestremplieavectoutlefichierf.Onnotera cependantquelescommandesutilisantlachaineC,parexemple PRINTC nefontintervenirquelapartiedeCjusqu'aupremieroctetnul rencontr.VouspouvezessayeravecundesfichiersourceduBasic Algbrique:C=LOAD("ESSAI.Z")parexemple.Toutlefichierest charg,onpeutlelire paraQadr(C)ouparpeekb,maisPRINTC nesortquelapremireligne. 4)AprsLOAD(f),silammoiredisponibleestinsuffisante,seul ledbutdufichierfestcharg. _D  SCOS(p,k[,x])  V-fonction:Sriecos(p) p:polyORD(p,x)>0 k:entier>=0 x:litteral(dfautx=POLYL(p)) Metlasrie:scos=1-p^2/2!+p^4/4!-...ensupprimanttousles termesx^ndedegrn>k. _D  SEIZE   V-fonction:nombre16 VoirBASE _D  SEXP(p,k[,x])   V-fonction:Srieexp(p) p:polyORD(p,x)>0 k:entier>=0 x:litteral(dfautx=POLYL(p)) Metlasrie:sexp=1+p+p^2/2!+p^3/3!-...ensupprimanttous lestermesx^ndedegrn>k. _D  SGN(p)   V-fonction:signed'unrel p:rel Sip<0met-1 p=0 0 p>0 1 _D  SHYG(p,k,x{,qi,mi})V-fonction:Sriehypergomtrique p:polyORD(p,x)>0 k:entier>=0 x:litteral(dfautx=POLYL(p)) q1,...qn:expr m1,...mn:ind Metlasriehypergomtriquegnralise 1+q1^m1*...qn^mn*p+[q1*(q1+1)]^m1*...*[qn*(qn+1)]^mn*p^2 +[q1*(q1+1)*(q1+2)]^m1*...*[qn*(qn+1)*(qn+2)]^mn*p^3+... ensupprimanttouslestermesx^ndedegrn>k. Cedveloppementensrieinclustouteslessriesusuelles parexemple(1+x)^s=1+(-s)(-x)/1+(-s)(-s+1)(-x)^2/2!+... s'obtientparSHYG(-x,k,x,-s,1,1,-1) _D  SIN(p)  VA-fonction:Valeurapprochedesin(p) p:rel _D  SLOG1(p,k[,x])  V-fonction:Srielog(1+p) p:polyORD(p,x)>0 k:entier>=0 x:litteral(dfautx=POLYL(p)) Metlasrie:slog1=p-p^2/2+p^3/3-...ensupprimanttousles termesx^ndedegrn>k. _D  SQRT(p)  VA-fonction:Valeurapprochedela p:rel>=0   racinecarre Lesracinesd'entierscarrssonttrouvesexactement,mais lesracinesdefractionscarresnesontengnralqu'approches. Exemple FORMAT10 PRINTSQRT(1/9)-1/3,ROOT(1/9,2)-1/3 donne0.0 2~0  _D  SSIN(p,k[,x])   V-fonction:Sriesin(p) p:polyORD(p,x)>0 k:entier>=0 x:litteral(dfautx=POLYL(p)) Metlasrie:ssin=p-p^3/3!+p^5/5!-...ensupprimanttousles termesx^ndedegrn>k. _D STOP  Commande:arrtduprogramme ProvoqueleretourenmodeBASALG.Lafindelasource(oula commande"END"provoquentgalementunretourenmodeBASALG.  _D STR(expr)  C-fonction:Conversionenchaine STR(poly,x1{,xi}) xi:litteral InversedeVAL SiCHestunechaineonpeutcrire,aveclesmmeseffets: CH=STR(expr)ou CH=expr PRINTSTR(expr) ou PRINTexpr LaformeSTR(poly,x1,x2,...)permetd'ordonnerlespolynomes suivantleslittrauxx1,x2,...(formeditercursive) Exemple PRINTSTR(SUM(I=0,8FORJ=0,3OFA(I,J)*X^I*Y^J),X,Y) sort ((A(8,3))*Y^3+(A(8,2))*Y^2+(A(8,1))*Y+(A(8,0)))*X^8 +(...)*X^7+... _D SUBS(p{,xi=qi}) V-fonction:Substitution p,qi:expr xi:litteral Dansp,onremplacex1parq1puisx2parq2... _D SUBSR(p{,Mi=qi})  V-fonction:Substitutions SUBSRR(p{,Mi=qi}) p,qi:expr Mi:monomenormalis LesMisontdoncdelaformex1^a1*x2^a2*...*xm^am. SUBSRtransformepsuivantleprocdsuivant,pouri=1,2,...n a)Rcritp=N/DoN=NUM(p)etD=NUM(p)sontdespolynomes. b)Regroupeleslittrauxpourfaireapparatreautantque possibleleproduitMi. c)Remplacepartoutenmmetempsdansp,Miparqi. Remarque:sionutilisepourMideslittrauxsansexposant,xi, SUBSR(p,x1=q1,...)donnelemmersultatqueSUBS(p,x1=q1,...), maislorsquepestfactoris,SUBSquinedveloppepasles facteursestplusrapide.ParexempleSUBSR((x+1)^100,x=y+1)prend 9s,alorsqu'avecSUBS,enmodeFACTEUR,lecalculprend0.01s. ExemplesSUBSR(a*x^4+b*x^2+c,x^2=y)donnea*y^2+b*y+c SUBSR((1+i)^8,i^2=-1)donne16 SUBSRReffectuelemmecycledetransformationsqueSUBSR,puis recommencecesmmestransformationsjusqu'cequepreste inchangpendanttoutuncycledetransformations. Remarque:celapeutdonnerunebouclesansfin(appuyersurEsc pourensortir)commedansSUBSRR(x+1,x=y,y=x). _D  SUM({bouclei}OFp)V-fonction:sommesurlesboucles PROD({bouclei}OFp)V-fonction:produitsurlesboucles CONC({bouclei}OFs)C-fonction:concatnationsurlesboucles bouclei:commandeFOR p:expr s:exprchaine 1) LesbouclessontdonnescommedanslescommandesFOR, cependantlepremier"FOR"peuttreomis. Exemples PRINTSUM(FORI=1,10OFI)critlasomme1+2+...+10. FARFELU=PROD(I=1,5FORJ=I,2*IOF(x^I+J)) calcule(x+1)*(x^2+2)*(x^2+3)*(x^2+4)*(x^3+3)*... PRINTCONC(I=1,10OF"W("&JUSTG(I)&")"="&W(I)&CHR(13)) 2)LesbouclesdesfonctionsSUM,PRODetCONCnesontpas empilesaveclesbouclesdesvritablescommandesFOR...NEXT. Celapeuttrelacaused'erreursnondiagnostiquescommedans l'exempled'erreursuivant: FORI=1,100 PRINTSUM(I=1,10OFI) NEXT DanslacommandeSUM,laboucleInedpilepasl'ancienneboucle surIdesortequesurl'instructionNEXT,Ivauttoujours11,qui estsavaleurlasortiedesaboucledansSUM.Cetteerreurest assezanaloguel'erreurquiconsisteraitmettre"I=11"dansla boucleFORI=...NEXT. AucontrairedesbouclesFOR...NEXT,lenombredeboucles dansSUM,PRODetCONCn'estpaslimit. _D  SYSTAB  V-fonction:adressetablevariablessystme Cettetablecontientlesvariablessystmesuivantes: (adressesendcimal,B=octetW=motL=motlong) 0W grafhandle 25*L contrl,intin,ptsin,intout,ptsout(blocVDIPB) 226*L control,global,int_in,int_out,addrin,addrout(blocAESPB) 46B optionPRINT/E/ 488*B 56B 588*B 66B optionPRINT/I/ 688*B 76B 788*B 86W nombredelignesparpageimprimante(=59) 88W nombredecaractresparligneimprimante(=80) 90128*BtabledeconversionpouraP(VoirPRINT) 218L pagedebase(allocdeb) 222L pile(VoirOUVGEM) 226L alloc(VoirOUVGEM) 234W 0modeBASALG#0modeRUN 236L findesvariables  _D  TAN(p)  VA-fonction:Valeurapprochedetg(p) p:rel#PI/2(moduloPI)  _D  TIME  V-fonction:Tempscoulensecondes  depuis"CLRTIME"  _D TYPEnom{,nom}Commande:critletypedesnoms Cettecommande,quidonneaussiletypedupremierargument danslecasonomestunefonction,estutiledanslamiseau pointdesprogrammes. _D VAL(exprchaine)  V-fonction:Valeurd'unechaine InversedeSTR _D VARIABLEnomi{,nomi}  Commande:Dclarationdevariables Exemple VARIABLEA,B,C,T(7),U(8,3) DfinitlesvariablessimplesA,B,CetlesvariablesT(i)oiva de70(ordreinvers!)etles9*4variablesU(8,3),U(7,3)... U(0,3),U(8,2),...U(0,0).L'ordredonnestl'ordred'implantation danslammoire.Cesvariablessontinitialises0. Ladclarationdesvariablessimplesestfacultative,celle desvariablesindicesestobligatoire. _D VDI Commande:appelVDIbrut VDIk[,n]{,ptsi}{,inj}[,S] oufonctionk  k:entierdans[-10,131] n,ptsi,inj:ind S:exprchaine CONTRL  V-fonction:adressetablede24octets INTIN  V-fonction:adressetablede256octets PTSIN  V-fonction:adressetablede256octets INTOUT  V-fonction:adressetablede256octets PTSOUT  V-fonction:adressetablede256octets   Siaucunargumentn'estdonn("VDI"),lacommandeeffectue unappelVDIbrutsansinitialiserlestableaux.Ilfautdonc pokerlesvaleursvouluesdanslestableauxCONTRL,PTSINetINTIN avantl'appelbrutVDI.Ilestgalementpossibled'utiliser d'autrestabeauxCONTRL...queceuxdusystmeenmodifiantle tableauVDIPBaccessibleparSYSTAB+2. SilenumrokdelafonctionVDIestdonn,BasicAlgbrique sechargederemplirCONTRL,etaussiPTSINetINTINsuivantla listed'argumentsptsi,injetS.LespointeursCONTRL,PTSINet INTINsontceuxdeBasicAlgbriquequ'ilnefautdoncpas modifierenSYSTAB+2,SYSTAB+10etSYSTAB+6respectivement lorsqu'onutiliseVDIk.Lalistedonneaprskdpenddela valeurdek.Cettelistepeuttredonnedefaonincomplte,les variablesnonrentresn'tantpasinitialises. BasicAlgbriquesechargederemplirles7valeursCONTRL[0] CONTRL[6]selonlenumrodefonctionk,saufpourlesfonctions koCONTRL[1]ouCONTRL[3]peuttrevariable.Danscescasla valeurvariablemiseestl'argumentsuivantndelaliste.Ensuite lesargumentspts1,pts2,...sontutilisspourremplirPTSIN,les argumentsinjetlachaineS(quiestplacepourlesfonctions k=8,116et-10)serventremplirINTIN. Lesfonctionsk=-10-1correspondentlafonction11, sous-fonction-kduVDI. LesvaleursdesortieduVDIsontlisiblespar PEEKW(INTOUT+2*i)ouPEEKW(PTSOUT+2*i). L'appelduVDI(ouAES)n'esteffectuquesil'initialisation "OUVGEMalloc"atfaiteetquepile(dfiniparLIMITpile)se trouvedanslazonelibre(pile<=alloc).  TabledesfonctionsVDI Lalistemaximumd'argumentsestdonnepourchaquevaleurdu numrodelafonction.Sestuneexprchaine,lesautresarguments sontdesentiers(certainsdoiventtremisgaux0,cequiest indiquparun0).CONTRL[0-1]parexempleindiqueles2valeurs CONTRL[0]etCONTRL[1]. Larfrenceg107renvoitlapage107de: SzczepanowskiGntherLelivreduGEM(MicroApllication1985) Larfrenceb158renvoitlapage158de: LBesleAuCoeurdel'AtariST(Eyrolles1986) -10,x,y,dx,0,a,b,Sg125b172 AffichelachaineSavecjustification. x,ypointd'affichage;dx=longueurd'affichageenpixel INTIN[0-1]=a,bespacelesmots(sia#0)etcaractres(sib#0) INTIN[2-n]etCONTRL[3]sontmissuivantlachaineS. -9,x,y,xp,yp g125b158Rectanglearrondiplein -8,x,y,xp,yp g123b158Rectangle(bord) -7,x,y,dx,dy,a,b g118b160 Portiond'ellipsea,bde03600(angles) -6,x,y,dx,dy,a,b g116b160Arcd'ellipse -5,x,y,dx,dy g121b160Ellipsepleine -4,x,y,0,0,r,0 g114b159Cerclerempli(zrosobligatoires) -3,x,y,0,0,0,0,r,0,a,b g111b159Portiondecercle(idem) -2,x,y,0,0,0,0,r,0,a,b g108b159Arcdecercle(idem) -1,x,y,xp,yp g106b158Rectangleplein(cfVDI114) 1,a1,...,a11 g71b150Ouvrestationdetravail(inutilisable) 2 g77b151Fermestationdetravail(inutilisable) 3 g83b154Videl'cran 4 g84Misejour(inutile) 5 b175-8b180b188 BasicAlgbriquemetCONTRL[1]=0etCONTRL[3]=0.Lessous fonctionsdoiventtreappelesl'aidedepokesdansCONTRL etparappelbrutsiCONTRL[1]ou[3]sont#0 6,n,x1,y1,...xn,yng90b157 Tracelalignepolygonaleentrenpoints 7,n,x1,y1,...xn,yng92b166 Tracenmarqueurs 8,x,y,S g94b172AffichelachaineSenx,y 9,n,x1,y1,...xn,yng96b164 Remplitlepolygonensommets 10,n,a1,a2,...an g98Cellarray 11  Doittreappelpar-10-1 12,0,dy g150b170Hauteurdescaractres(0obligatoire) 13,a g154b171a=0,900,1800,2700directiond'criture 14,c,r,v,b g132b167 Metlacouleurc(dans[0,15]).r,v,bsontlesintensitsdu rouge,vertetbleu(dans[0,1000]. 15,t g136b155 Mettypedelignet(dans[0,7])t=1:continue 16,dx,0 g140b156Largeurdeslignes(0obligatoire) 17,c g134b167Couleurdeslignes=c(cdans[0,15]) 18,m g144b165 Slectionnelemarqueurm(mdans[1,6])m=1:point 19,0,dy g146b166Tailledumarquage(0obligatoire) 20,c g148b167Couleurdumarquage 21,f g156b156Policedescaractres 22,c g158b167Couleurdutexte 23,r g165b161 Typederemplissager=0(vide),1(plein),  2(motifs),3(hachures),4(utilisateur) 24,i g167b161Indexdutypederemplissage(VDI23)  idans[1,24]sir=2oudans[1,12]sir=3  25,c g169b167Couleurduremplissage 26,c,f g228b168 Compositiondelacouleurc(f=0(relle)ou1(arrondie)) INTOUT[1-2]=intensitsdurouge,vertetbleu 28,x,y g189g192b181 Testelasourisetlestouchesdedplacement x,y=ancienneposition siensortieCONTRL[2]=1sourisdplacejusqu'PTSOUT[0-1]  siCONTRL[4]=1appuisurlatoucheINTOUT[0]  29,v g195b197Testetouchesdplacement 30,n,t g199g200nmisdansCONTRL[3] 31,x,y,l,m g202g204b182INPUT 32,m g128b155Modegraphiquem=1(remplacement), 2(transparent),3(EOR)4(transparentinverse) 33,p,a g187b181Moded'interrogationp=1(souris), 4(clavier)a=1(attente),2(test) 35 g230b158Sortiedesattributsdeligne 36 g232b166Sortiedesattributsdemarqueur 37 g233b164Sortiedesattributsderemplissage 38 g235b174Sortiedesattributsdetexte 39,h,v g162b169Alignementdestextes 100,a0,a1,...a11 g78g296b151Ouvreunestationdetravail virtuelle(inutilecarappelparOUVGEM) 101 g82b154Fermelastationdetravail 102,f g223b153Infosurlastationdetravail 103,x,y,c g101b164Remplitlasurfacepartirdu pointx,yjusqu'aucadredecouleurc 104,f g171b163Remplissagefaitenrajoutantun contoursif#0 105,x,y g185b168SortINTOUT[0-1]=valeuretindex delacouleurdupointx,y 106,e g160b171Effetsdetextesuivantbitidee 0(gras)1(fin)2(italique)3(soulig)4(fil)  107,n g152b188Hauteurdescaractresimprimante 108,d,f g142b157Formesdedbutetfindeligne 109,x,y,xp,yp,X,Y,XP,YP,m g177b183 Copielerectanglex,y,xp,ypversX,Y,XP,YPavecl'option logiquem.Avantl'appelilfaut: POKELCONTRL+14,MFDBsource,MFDBdestination 110 g183b185CopiestructureMFDB.Avantl'appel: POKELCONTRL+14,MFDBsource,MFDBdestination 111,f0,f1,...f36 g207b179Nouvelleformedelasouris 112,n,f1,...fn g173b163Nouveaustylederemplissage 113,m g138b156Nouveaustyledeligne 114,x,y,xp,yp g103b158Remplitrectangle 115,u g242Demandelemoded'entre 116,S g237b173CadrepourlachaineS 117,m g240b173Infosurlecaractrem(ASCII) 118 g209b189Modifieinterruptiontimer 119,0 g85b185Chargelesfontes 120,m g87b187Otelesfontes 121,x,y,xp,yp,X,Y,XP,YP,m,c,cp g180b184 Copierectangleavecchangementdecouleur(cfVDI109) 122,c g211b179Montresourisc=0(sanscompteur) .1(aveccompteur) 123 g213b179Cachesouris 124 g214b183Retournelapositionsouris PTSOUT[0-1]coordonnes INTOUT[0]bouton(bit0:gauche,bit1:droite)  125 g216b189Interruptionboutonsouris 126 g217b189 Interruptionmouvementsouris 127 g219b189Interruptiontracsouris 129,x,y,xp,yp,f g88b154Restreintl'affichageaurectangle pasderestrictionsif=0 130,n b186Infopolicedecaractresn 131 b186Infopolicedecaractrescourante _D  XBIOS(k{,wli}) V-fonction:AppelduTRAP#14fonctionk k:entier wl1,...wln:entiers VoirGEMDOS _D _D  APPENDICEA.CLAVIER  Table1.Mouvements.  _@ _A CodesTouches Effets ASCII_< 1 up | 2 down |  3 right |Mouvementsducurseur 4 left | 5 home | 6 clr Videl'cran 7 delete Effaceettirelalignetexte 8 backspace Effacelafindelignetexte 9 tab Vasurlesparateursuivant A sleft Vaendebutdelignetexte B sdown Connectelalignetextesuivante C sup Briseleslignestexteenlignescran D Return Validelalignetexte E sright Vaenfindelignetexte F sInsert Togglersolution(basse/moyenne) 10 Insert Insreunblancdanslalignetexte 11 Help Toggle(intrieur/exterieur)de"" 12 Undo Vaenbasdepage _A _A  Table2.Touchesdefonction  Effetdestouchesdefonctionenextrieurdeguillemets. _= _= F1 Listedepuisledbut sF1 Listejusqu'lafin F2 Listejusqu'aupointeurd'inscription. F3 Liste1/2pageplusbas. F4 ListeladernirepagemmoriseparsF4. sF4 Metlapageenmmoire(pilede4pointeurs). notaSeullepointeurdepageestconserv,paslapage. F5 Listelapageprcedente. F6 Listelapagesuivante. F7 Listeuneligneplusbas. F8 Listelebloc. F9 Listedenouveaulammepage.  F10 Metenmode* sF10 Metenmode>(Source) _= _= Table3.CodesASCII Cescodeshexadcimalsontobtenusenintrieurdeguillemets ourenvoysparlesfonctionsgetetkey.Parexemple,enappuyant simultanmentsurShift,AlternateetonobtientlecodeASCII $A8.Cecodecritsurl'cranun"?"renvers.Lescodesenblanc nesontpasdlivrsparleclavier. _E _E \ 0 1 2 3 4 5 6 7 8 9 A  B C D(E) F 0 Ins SP 0 @ P ` p a  aA aD aB F6 1 up Help ! 1 A Q a q  a aZ aF aN F7 2 down Undo " 2 B R b r   aE aG   F8  3 rght cS # 3 C S c s a- aR aH   F9  clft 4 left cT $ 4 D T d t  aT aJ   F10 sF1 crgt 5 home cU % 5 E U e u  aY aK    sF2 6 clr cV & 6 F V f v   aU aL    sF3  a1 7 del CW ' 7 G W g w   aM   sF4 chom 8 back CX ( 8 H X h x   aO sa    sF5   9 tab CY ) 9 I Y i y   aP c    SF6  a2 A slft CZ * : J Z j z  aI      sF7  a3 B sdwn esc + ; K [ k {      F1   sF8  a4 C sup C< , < L \ l |    aW F2   sF9 :  a5 D CR C - = M ] m }    aX F3     a6 E srgt C^ . > N ^ n ~   aQ aC F4   sF10 a7 F sins Cdel / ? O _ o   aS aV F5    a8 _F _F Table4.Control+Lettre. L'appuisimultansurControletunelettre,enextrieurde guillemetsdlivreunmotclef. _: _: A abs Jjustg S subs B base K key T type C chaine L litteral U formf D developpe M mod V variable E endif N next W coef F facteur O ord X xbios G goto P print Y gosub H huit Q sqrt Z return I index R root _: _: APPENDICEB.EDITIONDELASOURCE  Table5.Dfinitionsdebase. _= _= source Ensembledeslignesprogrammeenmmoire.Les lignessontnumrotes1,2,3,... pointeur Lalignedevantlaquelleonpeutinsrerde d'insertion nouvelleslignesdanslasource. bloc Ensembledelignesconscutivesdusourcebien dtermin,pouvantetrecopi,effac,... pointeurA Lapremirelignedubloc. pointeurB Ladernirelignedubloc. label Nomalphanumriqueapparaissantunefoisentte delignesuivide":".Parexemple:  debut:;  Caractresautoriss:A-Za-z0-9(A=a,B=betc) Lepremiercaractrenedoitpastreunchiffre Lelabelrepregalementlalignedusourceo ilapparatsouscetteforme. n Dsigneunentierdcimaletlalignedusource demmenumro. sligne Dsignelesfaonssuivantesdedfiniruneligne dusource: M Lignedupointeurd'insertion D Dernireligneducodesource. A PointeurA(1relignedubloc) B PointeurB(dernirelignedubloc) label Lalignedulabel ligne Dsignelesfaonssuivantesdedfiniruneligne dusource:    Ligne"0"(quin'existepas!)  (""dsignel'absencedesymboles) n Lignen sligne sligne+n |slignedcalden sligne-n | _> _> Table6.Dfinitiondubloc Lescrituressuivantespermettentdedfinirle bloc."l"et "l'"cidessoussontdutypeligne.  Leblocpeutaussitredfinigraphiquement Exemple:157.`... Dfinileblocde157245 245.'... aprsvalidationpar"Return". Pourplusdtailsvoirl'Insertion. _> _>  aA Toutelasource aB L'ancienbloc. n,p Blocdelalignenjusqu'lapremire lignedenumroseterminantparp Ex:10087,03 | blocde10087 ou 10087,103 | 10103 ou10087,0103 | l, Blocdellafin ,l Blocde1l , Toutelasource l,l' (sidiffrentden,p): Blocdelalignell' l,+n Blocdenlignespartirdelalignel l Blocformdelaseulelignel _> _> APPENDICECSOLUTIONDESEXERCICES. Exercice1.5-, Exercice1.9.1  aSaSAaS Chercheles"A"entresparateurs,carle label"A"nepeutapparaitrequ'entre sparateurs. aTaSapluslongaS Cherchesilachaineapluslongexiste. Supposonsquenon,onobtientlediagnostic "pastrouv". aCaHChange"A"en"apluslong"sanss'arrter aprs16changements.  aCaIaH Vousavezunregret,trouvezquelenouveau nomesttroplong.Vouspouvezannulerle changementainsi(parcequ'iln'yavaitpas dechaine"apluslong"l'origine) Exercice1.9.2 -, Videlasourceprcdente,semeteninsertion ;987 Onrentrelesnombresenlesfaisant ;654 prcderde";" ;321 aC;aTaR Change";"enchainevide. F1 Listelasource.   index iprint /c/" ",justm("DEMO utilisation de l'AES",40)print " Ce programme ne peut fonctionner que si vous avez charg BASALG.PRG."print "Si vous avez charg BASALG.TOS il vaut mieux vous arreter."print " Voulez-vous continuer ? ui"i=getift (i#asc("o"))*(i#asc("O")) then stopindex xint,yint,dxint,dyint,x1,y1,dx1index dy1,xcentr,ycentr,dxmin,dymin,xextindex yext,dxext,dyextindex dynouv,dxnouv,i54,xnouv,evnmtindex comp_fenindex couleur1,couleur2index nbcol,id_fenindex xa,xb,ya,ybchaine mess,titremess=chr(0,16);tampon de 8 mots pour AES 23titre="DEMO AES"nbcol=xbios(4);rsolution, on transforme en nb de couleursift nbcol=1 then nbcol=4ift nbcol=0 then nbcol=16dxmin=20dymin=20limit peekl($436)-$10;restitue $10 octets au gemouvgemaes 78,0;forme souris=flchecomp_fen=$2Baes 104,0,4;demande coord de la fenetre 0xext=peekw(int_out+2)yext=peekw(int_out+4)dxext=peekw(int_out+6)dyext=peekw(int_out+8)aes 108,1,comp_fen,xext,yext,dxext,dyext;demande coord intrieur fentrexint=peekw(int_out+2)yint=peekw(int_out+4)dxint=peekw(int_out+6)dyint=peekw(int_out+8)aes 100,comp_fen,xext,yext,dxext,dyext;cration de la fentreid_fen=peekw(int_out)pokel int_in+4,adr(titre)aes 105,id_fen,2;met le nom de la fenetreaes 101,id_fen,xext,yext,dxext,dyext;ouvre fenetreerror fermex1=xinty1=yintdx1=dxintevnmt=0dy1=dyinttrace_fen:;trace ellipsevdi 123;cache sourisvdi 129,x1,y1,x1+dx1-1,y1+dy1-1,1;restreint l'affichagexcentr=x1+int(dx1/2)ycentr=y1+int(dy1/2)vdi 23,2;type de remplissages=motifsvdi 24,8;index de remplissagecouleur1=rnd(nbcol)vdi 25,couleur1;couleur de remplissagevdi -1,x1,y1,x1+dx1-1,y1+dy1-1;rectangle pleinvdi 23,4;type de remplissages=utilisateurcouleur2=modr(rnd(nbcol-1)+1+couleur1,nbcol)vdi 25,couleur2;couleur alatoirevdi -5,xcentr,ycentr,int(dx1/2),int(dy1/2);ellipse pleinevdi 122,0;montre sourisvdi 23,2;type de remplissages=motifsvdi 24,8;index de remplissagevdi 25,couleur1;couleur de remplissagexa=int((x1+xcentr)/2)ya=int((y1+ycentr)/2)xb=int((x1+dx1+xcentr)/2)yb=int((y1+dy1+ycentr)/2)vdi 9,5, xa,ycentr, xcentr,ya, xb,ycentr, xcentr,yb, xa,ycentr;rempli polygoneattend:aes 23,adr(mess);attend venementevnmt=peekw(adr(mess))ift evnmt=20 goto attenddynouv=peekw(adr(mess)+14)dxnouv=peekw(adr(mess)+12)ynouv=peekw(adr(mess)+10)xnouv=peekw(adr(mess)+8)ift evnmt=28 goto l100ift evnmt#27 goto sortiel100:aes 108,1,comp_fen,xnouv,ynouv,dxnouv,dynouv;demande coord de travailx1=peekw(int_out+2)y1=peekw(int_out+4)dx1=peekw(int_out+6)dy1=peekw(int_out+8)if dx1 (envoi u dans le registre r).Les canauxdata A B et C sont dsigns par i=01 et 2.Certaines commandes modifient desdata variables internes linstruction music.Les valeurs par dfaut de ces vari-data ables sontdata par=")" octave=36 dure=8data x=1 y=10 z=251 unit=1data Au dbut le canal 0 est ouvert et le volume est mis 10.unit(i) dsigne ledata bit i de unit.data gosub continuegosub textedata COMMANDES DE MUSICdata ( ou ) dfinissent la valeur de la variable par="(" ou ")"data A L k posons z=0 pour Az=1 pour B...z=11 pour L.Cette commande dfinitdata note=z+octave.Il faut 0<= note <96.La commande calcule la priodedata p=3822*2^(-note/12) et la dpose dans les registres des canaux idata ouverts (tels que unit(i)=1 ) <2imodr(p256)> <2i+1divr(p256)>data De plus si par=")" les canaux ouverts sont validset on attenddata (k+1)*dure*20 ms puis on ferme les canaux.Cela corresponddata lmission dune note.<7.not.unit><$FFdure><7$FF>data M k k dans [0$3F] <7.not.k> .Par exemple M9 valide le canal 1data et mixe le gnrateur de bruit.data N k k dans [0$1F] <6k> .Priode du bruitdata O k k dans [095] dfinit octave=k.data P k k dans [032767] dfinit la priode de lenveloppe=256*k 10^-6 s.data <11modr(2k256)> <12divr(2k256)>data Q k k dans [07] valide lenveloppe met env=k et pour lesdata canaux ouverts.data gosub continuegosub textedata R k k dans [013] k#7.effectue la boucle de la fonction $20 du xbiosdata <$80x> <$81kyz> ie on place dans le registre k la valeur x puisdata x+ypuis x+2*y... jusqu z.data S k k dans [015] shape <13k>data T k met dure=kdata U k k dans [07] met unit=k qui dfinit les canaux ouverts.data V k k dans [015] pour les canaux i tels que unit(i)=.not.env(i)=1data met le volume <8+ik>data W k k dans [0254] attend (k+1)*20 ms <$FFk+1>data X k k dans [0255] met x=kdata Y k k dans [1255] met y=kdata Z k k dans [0255] met z=kdata gosub continuegosub textedata EXEMPLES DE MUSICdata music "(AQ1U2DV8M11P500S10Y9R2"data (AQ1 met la priode(=celle de la note 36) et enveloppe pour le canal Adata U2DV8 met le volume=8 et la priode(=celle de la note 39)du canal Bdata M11 valide canal A+bruit et canal Bdata P500 priode de lenveloppedata S10 forme de lenveloppedata Y9 y=9data R2 effectue la boucle k=1k=10...k=250 (mod 256)data k est mis dans le registre 2 qui change la frquence du canal 2.data music "O36T5L4I4E4O35AO36BDEB2EO35A5O36W14G4L4I4E4BDEG2IG5W14"data Cela joue des notes de dure multiple de 5*20 ms sur le canal 1.data music "(AQ1U2DV8M11P500S10Y9R2"music "O36T5L4I4E4O35AO36BDEB2EO35A5O36W14G4L4I4E4BDEG2IG5W14"gosub continuegosub textedata APPEL DU GEMDOS (TRAP#1)data Lappel du GEMDOS se fait par la fonction gemdos(n...) o n est ledata numro de la fonction et ... sont les arguments dans lordre de lappeldata en assembleur.Exemple de la fonction $36 demandant des info sur le disquedata En assembleur lappel se fait pardata move #drive-(sp)data move.l #tampon-(sp)data move #$36-(sp)data trap #1data Cet appel est ralis en BASIC ALGEBRIQUE comme suitdata chaine tampondata tampon=chr(016)dfinit une zone de 16 octetsdata drive=0pour le lecteur Adata d0=gemdos($36driveadr(tampon))data adr(tampon) fourni ladresse du dbut de la chaine tampondata d0 contient la valeur du registre D0 aprs le retour du gemdosdata gosub continuegosub textedata DRIVE=0data PRINT CHR(132)"INFO SUR LE DISQUE"DRIVECHR(13)"(0=PAR DEFAUT1=DISQUE A2=DIQUE B...)"data CHAINE TAMPONdata TAMPON=CHR(016)data if GEMDOS($36DRIVEADR(TAMPON))data PRINT "DISQUE"DRIVE" INACTIF"data ELSEdata PRINT "NOMBRE DE BLOCS LIBRES"PEEKL(ADR(TAMPON))data PRINT "NOMBRE TOTAL DE BLOC DU DISQUE"PEEKL(ADR(TAMPON)+4)data PRINT "TAILLE DUN SECTEUR EN OCTETS "PEEKL(ADR(TAMPON)+8)data PRINT "NOMBRE DE SECTEURS PAR BLOC"PEEKL(ADR(TAMPON)+12)data ENDIFdata gosub continueDRIVE=0ctexte=CHR(13,2),"INFO SUR LE DISQUE",DRIVE,,"(0=PAR DEFAUT,1=DISQUE A,2=DIQUE B...)"gosub sprintTAMPON=CHR(0,16)if GEMDOS($36,DRIVE,ADR(TAMPON)): ctexte="DISQUE",DRIVE," INACTIF": gosub sprintELSE: ctexte="NOMBRE DE BLOCS LIBRES",PEEKL(ADR(TAMPON)),"NOMBRE TOTAL DE BLOC DU DISQUE",PEEKL(ADR(TAMPON)+4),"TAILLE DUN SECTEUR EN OCTETS ",PEEKL(ADR(TAMPON)+8),"NOMBRE DE SECTEURS PAR BLOC",PEEKL(ADR(TAMPON)+12): gosub sprintENDIFgosub continuegosub textedata HEUREPRINT "HEURE"data D0=MODR(GEMDOS($2C)2^16)data H=DIVR(D02^11)data D0=MODR(D02^11)data M=DIVR(D02^5)data S=2*MODR(D02^5)data PRINT H" HEURES"M" MINUTES"S" SECONDES"data RETURNdata gosub HEUREgosub continuegosub textedata APPEL DU BIOS (TRAP#13)data APPEL DU XBIOS (TRAP#14)data Lappel du BIOS (resp XBIOS) se fait par la fonction bios(n...) (respdata xbios(n...) )o n est le numro de la fonction et ... sont les arguments dansdata lordre de lappel en assembleur.Exemple de la fonction $A du bios demandantdata les disques actifsdata d0=bios($A)data for ia=015data m=modr(d02)data d0=divr(d02)data if mdata PRINT "DISQUE "CHR(ia+ASC("A"))" ACTIF"data endifdata next iadata (Rsultat de cet exemple)data d0=bios($A)for ia=0,15m=modr(d0,2)d0=divr(d0,2)if m: ctexte="DISQUE ",CHR(ia+ASC("A"))," ACTIF": gosub sprintendifnext iagosub continuegosub textedata APPEL DE PROGRAMMES EN ASSEMBLEURdata REGISTRE est un pointeur sur un tableau de 15 mots longsdata registre+4*k pointe Dk registre+4*k+32 pointe Akdata La commande "call ad" o ad est une adresse paire charge les registresdata D0-D7A0-A6 du 68000 avec les valeurs du tableau registreeffectue un jsr addata et charge le tableau registre avec les valeurs de retour.data Lappel des lignes A et F seffectue par "calla k" ou "callf k"data (calla 5 pour A005)Le passage des registres seffectuant comme pour "call ad".data Exemple (appel de $A000)data CALLA 0data D0=PEEKL(REGISTRE)data A1=PEEKL(REGISTRE+36)data PRINT/h/"ADRESSE DES POINTEURS POLICE DE CARACTERES= $"A1data PRINT/h/"ADRESSE DU BLOC DES VARIABLES DE LA LIGNE A = $"D0data (Rsultat de cet exemple)data CALLA 0D0=PEEKL(REGISTRE)A1=PEEKL(REGISTRE+36)base seizectexte="ADRESSE DES POINTEURS POLICE DE CARACTERES= $",A1,"ADRESSE DU BLOC DES VARIABLES DE LA LIGNE A = $",D0base dixgosub sprintgosub continuegosub textedata APPEL DU VDI ET AESdata RESTITUTION DE MEMOIRE AU GEMdata INITIALISATION DU GEMdata BASIC ALGEBRIQUE utilise la mmoire jusqu ladresse pile dfinie pardata limit piledata Au chargement de BASIC ALGEBRIQUE pile a sa valeur maximale possibledata soit $F8000 pour le 1040ST.La valeur maximale peut tre remise pardata limit maxdata La commande suivante restitue la zone mmoire alloc-max au GEMdata ouvgem [alloc] (par defaut alloc=pile)data Cette commande se charge de plus dinitialiser GEM .Elle effectue lesdata appels suivants lors de son 1er appel seulementdata AES 10appl_initdata AES 77graf_handledata VDI 10011111111112open_vwrkstationdata VDI 151traits continusdata VDI 321criture mode normaldata VDI 1291affichage globaldata gosub continuegosub textedata TABLEAUX DE CONTROLEdata Les pointeurs suivants servent aux passage des paramtres avec le GEMdata contrl 24data intin 256data ptsin 256data intout 256data ptsout 256 Les nombres indiquent la taille desdata control 18 tableaux rservs par BASIC ALGEBRIQUEdata global 30data int_in 32data int_out 14data addrin 8data addrout 4data gosub continuegosub textedata SYSTABdata SYSTAB est un pointeur sur des variables du BASIC ALGEBRIQUEdata " 0 W graf handle"data " 2 5*L bloc des pointeurs VDI (contrlintinptsinintoutptsout)"data 22 6*L bloc des pointeurs AES (controlglobalintinintoutaddrinaddrout)data 46 B option /e/ du printdata 48 8*Bdata 56 Bdata 58 8*Bdata 66 B option /i/ du printdata 68 8*Bdata 76 Bdata 78 8*Bdata 86 W nb de lignes/page (imprimante)data 88 W nb de caractres/lignedata 90 128*B table de conversions imprimantedata 218 L page de basedata 222 L piledata 226 L allocdata gosub continuegosub textedata APPEL VDIdata BASIC ALGEBRIQUE se charge de remplir les tableaux contrlptsinintindata suivant le numro de fonctionsil est donn.Sinon il y a un appel brut.data La commande dappel est data vdi [k [n] {ptsin(i)} {intin(j)} [S] ]data k numro de la fonction.Noter que les numros ngatifs de -1 -10 corres-data pondent lappel de la fonction 11sous-fonction -k.data BASIC ALGEBRIQUE met contrl(0) contrl(6) suivant la valeur de ksauf lorsquedata une des variables contrl(1) ou contrl(3) peut tre variable cette variabledata est donne par n.Ensuite ptsin(i) servent remplir ptsinles intin(j) et ladata chaine S (qui est place pour les fonctions 8116 et -10) servent remplirdata intin.data gosub continuegosub textedata APPEL AESdata BASIC ALGEBRIQUE se charge de remplir le tableau control suivant ledata numro de fonctionsil est donn.Sinon il y a un appel brut.data La commande dappel est data aes [k {intin(j)} {addrin(j)}]data k numro de la fonction.data Les appels VDI et AES ne sont possibles que si linitialisationdata ouvgem alloc a t faite et que si pile (dfini par "limit pile") se trouvedata dans la zone libre.(ie si pile<=alloc)data Il faut charger BASALG.PRG pour pouvoir appeler l'AESdata gosub continuegosub textedata TRACE DUN FROMAGEdata FROMAGEEXEMPLE DAPPELS LIGNE A ET VDIdata PRECISION 2SIN ET COS CALCULES AVEC 2 CHIFFRESdata LIMIT PEEKL($436)-$10LIBERE $10 OCTETS POUR LE GEMdata OUVGEMINITIALISE GEMdata VDI 232TYPE DE REMPLISSAGEdata VDI 3CLR LECRANdata POKEW INTIN03600ANGLES DE DEPART ET ARRIVEEdata POKEW PTSIN16010000001000CENTRE DU CERCLE ET RAYONdata VDI -2TRACE CERCLEdata CALLA 0APPEL DE $A000data A0=PEEKL(REGISTRE)BLOC DE VARIABLES DE LA LIGNE Adata POKEW A0+$26160100CENTRE DU CERCLEdata FOR I=08BOUCLE SUR 8 RAYONSdata POKEW A0+$2A160+CINT(COS(PI/8*I)*100)100+CINT(SIN(PI/8*I)*100)EXTREMITE DU RAYONdata CALLA 3TRACE RAYONdata NEXTdata gosub continuegosub textedata FOR I=08BOUCLE SUR 8 SECTEURSdata VDI 25I+3MET COULEUR DE REMPLISSAGEdata VDI 249+IMET STYLE DE REMPLISSAGEdata VDIREPETE POUR RENDRE EFFECTIFdata POKEW INTIN1data POKEW PTSIN160+CINT(COS(PI/8*(I+.5))*50)100+CINT(SIN(PI/8*(I+.5))*45)POINT DANS LE SECTEURdata VDI 103REMPLISSAGEdata RETURNdata NEXTdata gosub continuegosub FROMAGEia=getvdi 3gosub textedata SOURISLIMIT PEEKL($436)-$10data PRINT/C/"DEPLACER LA"data OUVGEMdata VDI 224COULEURdata VDI 1206HAUTEURdata VDI 1069EFFETSdata VDI 89814"SOURIS"data VDI 2210COULEURdata VDI 12010HAUTEURdata VDI 1064EFFETSdata VDI -100100320011" PUIS CLIQUER"data VDI 1220data VDI 124data X=PEEKW(PTSOUT)data Y=PEEKW(PTSOUT+2)data GOTO S3data gosub continuegosub textedata S1VDI 1220data S2VDI 124data IFT PEEKW(INTOUT) GOTO S5data S3X1=Xdata Y1=Ydata X=PEEKW(PTSOUT)data Y=PEEKW(PTSOUT+2)data IFT X#X1 GOTO S4data IFT Y=Y1 GOTO S2data S4VDI 123data VDI 62X1Y1XYdata GOTO S2data S5VDI 123data RETURNdata gosub continuegosub SOURISvdi 3gosub textedata Ce programme de dmonstrationcrit en Basic Algbrique sort dabord lesdata formes dveloppees et factorisesainsi que les drives et intgrales desdata expressions que vous rentrez au clavier.data Vous pouvez rentrer des expressions rationnelles comme par exempledata (1+x+3*y^2)/(7/3*a+z^-5)^2data Vous pouvez galement utiliser les fonctions du Basic Algbrique comme dansdata der(1/(a*x^2+b*x+c)x) (dsigne la drive par rapport x)data subs(s^2*p^4+s*(p+1)s=x+yp=x*y) (dsigne des substitutions)data etc...data Si vous rentrez des nombres entiers le programme les factorisera.data " "data " "data debut:print CHR(0,12)&"DEVELOPPEMENT FACTORISATION DERIVATION INTEGRATION"print ,"Entrez une expression algbrique ou un nombre reel"developpe;les calculs sont faits si possible sous forme dveloppeinput cexpr;entre clavier mise dans la chaine "cexpr"ctexte="Vous venez de rentrer",cexprgosub sprintclr time;met le compteur de secondes "time" zerowexpr=formd(val(cexpr));"val" transforme la chaine en expression;"formd" dveloppe lexpressionctexte="Forme dveloppe (calcule en",time," s)" & wexpr;noter que la conversion de wexpr en chaine et automatiquegosub sprint;ecrit la chaine ctextefacteur;les calculs sont faits sous forme factoriseclr timewfact=formf(wexpr);factorisectexte="Forme factorise (calcule partir de la forme dveloppe en",time," s)" & wfactgosub sprintift facteurn(wfact)>1 goto algeb;"ift" est la commande "if...then"developpeclr timectexte="Vous avez rentr un nombre rel de numrateur",numr(wfact),,chr(0,27),"et de denominateur",denr(wfact)gosub sprintwfact=abs(numr(wfact))if wfact>1: ctexte="Dcomposition en facteurs premiers <10^4 du numrateur": gosub sprint: wexpr=prfact(wfact,10^4);met les facteurs premiers <10^4 de wfact sous la forme dun polynome littral fantome: ctexte=wexpr: if norm(wexpr)=wfact;"norm" est le 1er coefficient du polynome.Sil est egal wfact cest quaucun facteur a t trouv: if wfact>10^8: ctexte="Pas de facteurs premiers infrieurs 10^4": else: ctexte="Nombre premier": endif: endif: ctexte="Calcule en",time," s:",change(ctexte,"+","* ");"change" remplace dans ctexte "+" par "* " pour amliorer la prsentation: gosub sprintendifgoto choixalgeb:developpeift facteurn(wexpr) goto fact;en mode "developpe" facteurn donne zero si et seulement si appliqu un polynomeia=polyln(wexpr);nombre de litterauxctexte="Vous avez rentr un polynome de",ia," littraux :",conc(ib=1,ia of polyl(wexpr,ib));conc(boucle...boucle of ***) concatne les *** parcourus par les boucles;polyl met le ib ime littralctexte=ctexte,chr(0,26),"et de",polymn(wexpr)," monomes"gosub sprintzz=polyl(wexpr,1)goto derivfact:ia=1;cas wfact nest pas un polynomefacteurfor ib=2,facteurn(wfact);boucle sur les facteurs de wfact pour dterminer sil y a plus quun littralwexpr=facteurp(wfact,ib);ib ime facteurift ib=2 then zz=polyl(wexpr);met le 1er littral dans zzift polyln(wexpr)>1 then ia=2;il y a plus de 2 litteraux dans le facteurift polyl(wexpr)-zz then ia=2;on a trouve un autre littral que zznextctexte="Vous avez rentr une fraction rationnelle"gosub sprintwexpr=wfactderiv:if ia#1: print "Rentrez le littral par rapport auquel vous voulez driver et intgrer": gosub litzzendifclr timewfact=der(wexpr,zz);drive wexpr par rapport zzctexte="Derive par rapport ",zz," (calcule en",time," s)" & wfactgosub sprintclr timewfact=intg(wexpr,zz);intgre wexpr suivant zzctexte="Intgrale par rapport ",zz," (calcule en",time," s)" & wfactgosub sprintchoix:print "Voulez vous"," <1>dvelopper,factoriser,driver et intgrer"ia=getift ia=asc("1")goto debutstop;entre clavier dun entier mis dans "nombre" avec verificationj09:print "Erreur rentrez un entier positif"litnb:input nombreift facteurn(formf(nombre,-1))#1 goto j09ift denr(nombre)#1 goto j09ift nombre<=0 goto j09return;entre clavier dun littral mis dans "zz" avec vrificationj10:print "Erreur rentrez un littral"litzz:input zzift facteurn(formd(zz)) goto j10ift polyl(formd(zz))#zz goto j10return;entre clavier dun polynome mis dans "wexpr" avec vrificationj11:print "Erreur rentrez un polynome"litpoly:input wexprift facteurn(formd(wexpr)) goto j11returntexte:ctexte=chr(6);*sortie cran des data;vide crangosub sprinttexte1:read ctexte;sortie cran des dataift instr(ctexte,"")return;alt+A fin des dataif instr(ctexte,"");alt+M centrage: ctexte=change(ctexte,"",""): ctexte=justm(ctexte,70)endifctexte=change(ctexte,"",":","",";");alt+P=:alt+O=";"gosub sprintgoto texte1sprint:ctexte=change(ctexte,""," ","",",","",chr($88),"",chr(13),"",chr($27));alt+N=espaces,alt+V=virgule,alt+E=e + ^ctexte=change(ctexte,"",chr($87))if len(ctexte)>800;sortie avec attente si la chaine est trop longue: print /a/ctexteelseprint ctexteendifif 0;*mettre 1 pour sortie imprimante: ctexte=change(ctexte,"",chr($27),"",ibm&""&epson,chr($88),ibm&chr($88)&epson,"",ibm&""&epson,"",ibm&""&epson);conversions imprimante: ctexte=change(ctexte,chr($87),ibm&chr($87)&epson,"",ibm&""&epson): ctexte=change(ctexte,"",ibm&""&epson): print /pe/ ctexte;sortie printer avec mise en exposantendifreturncontinue:print ,"Presser une touche pour continuer."ift get=27 stop;*get attend touche arret si ESCreturnHEURE:D0=MODR(GEMDOS($2C),2^16)H=DIVR(D0,2^11)D0=MODR(D0,2^11)M=DIVR(D0,2^5)S=2*MODR(D0,2^5)ctexte="HEURE",H," HEURES",M," MINUTES",S," SECONDES"goto sprintPARFAIT:ctexte="NOMBRES PARFAITS PAIRS",,"P=2^(I-1)*(2^I-1) OU I ET 2^I-1 SONT PREMIERS"gosub sprintclr timeFOR I=2,20IFT NORM(PRFACT(I,0))#I GOTO CTX=2^I-1IFT NORM(PRFACT(X,0))#X GOTO CTctexte="I=",I," P=",2^(I-1)*X," (TEMPS=",TIME,")"gosub sprintCT:NEXT IRETURNFROMAGE:;EXEMPLE DAPPELS LIGNE A ET VDIPRECISION 2;SIN ET COS CALCULES AVEC 2 CHIFFRESLIMIT PEEKL($436)-$10;LIBERE $10 OCTETS POUR LE GEMOUVGEM;INITIALISE GEMVDI 23,2;TYPE DE REMPLISSAGEVDI 3;CLR LECRANPOKEW INTIN,0,3600;ANGLES DE DEPART ET ARRIVEEPOKEW PTSIN,160,100,0,0,0,0,100,0;CENTRE DU CERCLE ET RAYONVDI -2;TRACE CERCLECALLA 0;APPEL DE $A000A0=PEEKL(REGISTRE);BLOC DE VARIABLES DE LA LIGNE APOKEW A0+$26,160,100;CENTRE DU CERCLEFOR I=0,8;BOUCLE SUR 8 RAYONSPOKEW A0+$2A,160+CINT(COS(PI/8*I)*100),100+CINT(SIN(PI/8*I)*100);EXTREMITE DU RAYONCALLA 3;TRACE RAYONNEXTFOR I=0,8;BOUCLE SUR 8 SECTEURSVDI 25,I+3;MET COULEUR DE REMPLISSAGEVDI 24,9+I;MET STYLE DE REMPLISSAGEVDI;REPETE POUR RENDRE EFFECTIFPOKEW INTIN,1POKEW PTSIN,160+CINT(COS(PI/8*(I+.5))*50),100+CINT(SIN(PI/8*(I+.5))*45);POINT DANS LE SECTEURVDI 103;REMPLISSAGENEXTRETURNSOURIS:LIMIT PEEKL($436)-$10PRINT/c/"DEPLACER LA"OUVGEMVDI 22,4;COULEURVDI 12,0,6;HAUTEURVDI 106,9;EFFETSVDI 8,98,14,"SOURIS"VDI 22,10;COULEURVDI 12,0,10;HAUTEURVDI 106,4;EFFETSVDI -10,0,100,320,0,1,1," PUIS CLIQUER"VDI 122,0VDI 124X=PEEKW(PTSOUT)Y=PEEKW(PTSOUT+2)GOTO S3S1:VDI 122,0S2:VDI 124IFT PEEKW(INTOUT) GOTO S5S3:X1=XY1=YX=PEEKW(PTSOUT)Y=PEEKW(PTSOUT+2)IFT X#X1 GOTO S4IFT Y=Y1 GOTO S2S4:VDI 123VDI 6,2,X1,Y1,X,YGOTO S2S5:VDI 123RETURNfibonacci:ctexte="Calcul du 1000 me nombre F1000 de la suite"ctexte=ctexte&" 1,1,2=1+1,3=1+2,5=2+3,...F(n)=F(n-2)+F(n-1)..."gosub sprintW1=0W2=1for I=1,999W3=W1+W2W1=W2W2=W3next Ictexte="F1000 s'crit avec"&len(justg(W2))&" chiffres "ctexte=ctexte& "F1000="&W2goto sprintNpage Rsolution dun systme dquations;page donne un titre au listingindex ia,ib,ic,iaa,ibb,inco,equa,correct,litt,nbmax;dclaration des noms utiliss comme indexnbmax=10;nb dinconnues maxvariable inc(nbmax),equ(nbmax),equi(nbmax),soli(nbmax),coef1(2),deg1(2);dclaration des variables dimensionneslitteral x,y,z;fixe lordre dimpression de ces littrauxchaine ctexte,ibm,epson;dclaration des variables de type chaineibm=chr($1B)&"~51"&chr($1B)&"6";met limprimante en configuration IBM graphiqueepson=chr($1B)&"~50";met limprimante en configuration Epsonprint ,"Voulez vous","<1>Voir les exemples","< >Rsoudre un systme"ia=getift ia#asc("1")goto debtgosub texte;ecrit les data suivantsdata "";*tdata BASIC ALGEBRIQUEdata RESOLUTION DUN SYSTEME DEQUATIONSdata data La mthode est base sur lutilisation de la fonction elim(eq1eq2x) quidata limine x entre eq1 et eq2.data Les quations peuvent tre non linaires.Mme dans ce cas le programme estdata capable de trouver les solutions grce la fonction "formf" qui factorise lesdata expressions littrales.data Les quations peuvent comporter des littraux autre que les inconnues.data Sil y a plus dquations que dinconnues le programme sort les conditionsdata sur les littraux pour quil existe une solution.data Sil y a moins dquations que dinconnues le programme exprime lesdata solutions en fonction dinconnues pouvant tre arbitraires.data Sil y a un facteur commun entre 2 quations la rsolution est faite endata remplaant les 2 quations par ce facteur. On ne trouve donc pas les solutionsdata telles que ce facteur soit diffrent de zro.data Voici quelques exemples de rsolution.data data gosub litsysdata 3,x,y,z,3,x+y+z-3*a,x+2*y+3*z-6*a+b,4*y+10*z-14*a+5*bgosub litsysdata 3,x,y,z,3,x-y-1,y-z-1,z-x+1gosub litsysdata 3,x,y,z,3,x-y-a,y-z-b,z-x-cgosub litsysdata 1,x,1data c^3*x^6 -17/4*c^3*x^4 +c^3*x^2 -x^4*a -2*x^4*b^2 +17/4*x^2*a +17/2*x^2*b^2 -a -2*b^2gosub litsys;lit et rsoud le systme donn en datadata 10,a,b,c,d,e,f,g,h,x,ydata 10data a+b+c+d+e+f+g+h+x+y-1data 2*a+3*b+4154*c+5*d+6*e+7*f+8*g+9*h+10*x+11*ydata 3*a+4154*b+6*c+9*d+13*e+18*f+24154*g+31*h+38*x+41546*ydata 4154*a+14154*b+36*c+19*d+23*e+88*f+41543*g+13*h+11*x+68*ydata 5*a+55*b+41544*c+29*d+13*e+ 8*f+53*g+ 3*h+ 7*x+ 8*ydata 6*a+ 1*b+ 4154*c+ 9*d+16*e+25*f+36*g+41549*h+64154*x+91*ydata 7*a+ 6*b+ 5*c+ 4154*d+ 3*e+ 2*f+ 0*g- 1*h- 2*x- 3*ydata 8*a-16*b+15*c-14154*d+13*e-12*f+10*g-11*h+12*x-13*ydata 9*a-3*b+5*c- 7*d+ 9*e-11*f+13*g-15*h+17*x-19*ydata 10*a+3*b+2*c+77*d+29*e+18*f+83*g-75*h+10*x-39*ygosub litsysdata 2,x,y,2,x+y-1,x^3+a^2*(y-1)gosub litsysdata 2,x,y,2,(x-y)*(x+y-2),(x-y)*(x+2*y-3);stop;*tgosub continuedebt:restore debtgosub textedata ""data RESOLUTION D UN SYSTEME D EQUATIONSdata " "data Vous pouvez maintenant entrer un systme dquations.data Mettez les quations sous la forme polynome=0 et rentrez seulement polynomedata " "data goto resolchoix:print ,"Voulez vous rsoudre un autre systme dquations","<1>avec les memes inconnues","<2>en changeant les inconnues"ia=getift ia=asc("1")goto i16ift ia#asc("2")stopresol:developpei15:print chr(13,3),"Rentrez le nombre dinconnues"gosub litnbinco=nombreif inco>nbmax: print "Le nombre dinconnues est limit ",nbmax: print "Sil vous faut plus dinconnues changez nbmax dans le programme": goto i15;les transferts vers ou hors dun bloc du if sont autorissendiffor ia=1,incoi155:print "Rentrez linconnue numro",iagosub litzzfor ib=1,iaif (ib#ia)*(zz=inc(ib)): print "Inconnue dj donne": goto i155endifnext ibinc(ia)=zznext iai16:print ,"Rentrez le nombre dquations"gosub litnbequa=nombreif equa>nbmax: print "Le nombre dquations est limit ",nbmax: print "Sil vous faut plus dquations changez nbmax dans le programme": goto i16endiffor ia=1,equagoto i18i17:print "Vous devez rentrer un polynome contenant des inconnues"i18:print "Rentrez lquation numro",iagosub litpoly;lit polynomeiaa=polyln(wexpr)ift iaa=0 goto i17;vrifie non relcorrect=1;verifie quil y a au moins une inconnue dans lquationfor ib=1,incofor ic=1,iaaift inc(ib)=polyl(wexpr,ic)then correct=0next ic,ibift correct goto i17equ(ia)=wexprnext iagosub solutiongoto choix;entre clavier dun entier mis dans "nombre" avec verificationj09:print "Erreur rentrez un entier positif"litnb:input nombreift facteurn(formf(nombre,-1))#1 goto j09ift denr(nombre)#1 goto j09ift nombre<=0 goto j09return;entre clavier dun litteral mis dans "zz" avec vrificationj10:print "Erreur rentrez un litteral"litzz:input zzift facteurn(formd(zz)) goto j10ift polyl(formd(zz))#zz goto j10return;entre clavier dun polynome mis dans "wexpr" avec vrificationj11:print "Erreur rentrez un polynome"litpoly:input wexprift facteurn(formd(wexpr)) goto j11returntexte:read ctexte;sortie cran des dataift instr(left(ctexte,1),"")return;alt+A fin des dataif instr(left(ctexte,1),"");alt+M centrage: ctexte=change(ctexte,"",""): ctexte=justm(ctexte,70)endifgosub sprintgoto textesprint:ctexte=change(ctexte,""," ","",",","",chr($88),"",chr(13),"",chr($27));alt+N=espaces,alt+V=virgule,alt+E=e + ^;return;*T: ctexte=change(ctexte,"",CHR($87))if len(ctexte)>800;sortie avec attente si la chaine est trop longue: print /a/ctexteelseprint ctexteendifif 0;*mettre 1 pour sortie imprimante: ctexte=change(ctexte,"",chr($27),"",ibm&""&epson,chr($88),ibm&chr($88)&epson,"",ibm&""&epson,"",ibm&""&epson);conversions imprimante: ctexte=change(ctexte,"",ibm&""&epson,"",ibm&""&epson,chr($87),ibm&chr($87)&epson): print /pe/ ctexte;sortie printer avec mise en exposantendifreturndecomp:wmem=wexpr;decompose wexpr suivant linconnue zzic=-1dec10:ic=ic+1ift ic>2 goto dec11ib=deg(wexpr,zz)deg1(ic)=ibcoef1(ic)=coef(wexpr,zz,ib)wexpr=wexpr-coef1(ic)*zz^ibift wexpr goto dec10dec11:wexpr=wmemreturn;PRESENTATION DES SOLUTIONS DE wexpr=0 EN zzsolsor:if ord(wexpr,zz)>0: ctexte=zz,"=0": gosub sprint: nbsolu=nbsolu+1: soli(equi(ia))=0: wexpr=wexpr/zz^ord(wexpr,zz): ift deg(wexpr,zz)=0 returnendifgosub decompift ic goto i25if polyln(wexpr)): ctexte="Condition ncessaire",red(wexpr),"=0": gosub sprint: returnelse: ctexte= "Systme Impossible": gosub sprint: returnendifi25:nbsolu=nbsolu+deg1(0)ift ic>1 goto i30wexpr=-coef1(1)/coef1(0)ift deg1(0)#1 goto i26;sort linconnue si lquation est du 1er degrctexte= zz,"=",wexprgosub sprintsoli(equi(ia))=wexprreturni26:ib=deg1(0)wfact1=wexprracine:if ib#1;sort racine ib ime de wfact1: wfact2=root(wfact1,ib): if wfact2=0: if ib#2: ctexte= zz,"= racine",ib," ime de",wfact1: gosub sprint: else: ctexte= zz,"= sqrt(",wfact1," )": gosub sprint: endif: else: if ib#2: ctexte= zz,"=",wfact2," *racine",ib," ime de lunit": gosub sprint: else: ctexte= zz,"=",wfact2: gosub sprint: ctexte= zz,"=",-wfact2: gosub sprint: endif: endifelse: ctexte= zz,"=",wfact1: gosub sprintendifreturni30:ift ic>2 goto i35ib=deg1(1)ift deg1(0)#2*ib goto i35;cas equ du 2me degrwexpr=coef1(1)^2-4*coef1(0)*coef1(2)wfact=root(wexpr,2)if wfact: wfact1=(-coef1(1)+wfact)/2/coef1(0): gosub racine: wfact1=(-coef1(1)-wfact)/2/coef1(0): gosub racineelse: ctexte=-coef1(1)/2/coef1(0)&" + sqrt("&wexpr/4/coef1(0)^2&" )": if ib=1: ctexte= zz,"=",ctexte: gosub sprint: else: ctexte= zz,"= racine",ib," ime de",ctexte: gosub sprint: endifendifreturni35: ctexte= zz," est racine de lquation",wmem,"=0": gosub sprintreturn;Lecture dun systme dquations donnes en datalitsys:gosub continueread inco;nombre dinconnuesfor ia=1,incoread inc(ia)next iaread equa;nombre dquationsfor ib=1,equaread equ(ib)next ib;RESOLUTION DU SYSTEMEsolution:for i=1,equaequ(i)=red(equ(i));forme rduitenext ictexte=" de lquation"ift equa#1 then ctexte=" du systme dquations"ctexte= ,"Rsolution en",conc(ia=1,inco of inc(ia)),ctexte,conc(ia=1,equa of chr(13)&equ(ia)&"=0"),"Solution";conc(boucle ...bogosub sprintiaa=1;numro dquation contenant la ibb ime inconnueibb=1;numro de linconnue liminer des quations aprs iaai19:dgmin=10;degr min de la variable liminerfor ia=iaa,equa;cherche une quation contenant linconnue ibbwexpr=equ(ia)if ord(wexpr,inc(ibb))#-1;si l'equation contient inc(ibb): dgia=deg(wexpr,inc(ibb)): if dgiaequa goto i24;fin des quationsift ibb<=inco goto i19for ia=iaa,equa;il y a des quations en tropif equ(ia): if polyln(equ(ia)): ctexte= "Condition ncessaire",red(equ(ia)),"=0": gosub sprint: equ(ia)=0: else: ctexte= "Systme Impossible": gosub sprint: return: endifendifnext iai24:ift ibb<=inco goto i21for ia=equa,1;sortie de la solutionwexpr=equ(ia)ift wexpr=0 goto i41;quation supprimeif ia#equa;substitue les inconnues trouves: for ib=ia+1,equa: ift equ(ib) then wexpr=num(subs(wexpr,inc(equi(ib))=soli(equi(ib): next ibendifnbsolu=0;nombre de solutionszz=inc(equi(ia))ift deg(wexpr,zz) goto i50if polyln(wexpr): ctexte= "Condition ncessaire",red(wexpr),"=0": gosub sprint: goto i40else: ctexte= "Systme Impossible": gosub sprint: returnendifi50:gosub decompift (ic>2)+(ic=2)*(deg1(0)-2*deg1(1)+deg1(0)=0) goto i55gosub solsorgoto i40i55:facteurequ(ia)=formf(wexpr);factorise wexprfor ibb=2,facteurn(equ(ia));boucle sur les facteursift facteure(equ(ia),ibb)<0 goto i58;nglige les facteurs du denominateurwexpr=facteurp(equ(ia),ibb);ibb ime facteurift deg(wexpr,zz)=0 goto i58;doit contenir linconnue zzdeveloppegosub solsorfacteuri58:next ibbdeveloppei40:if nbsolu#1: soli(ia)=zz: ctexte= " (",nbsolu," solutions en",zz," )": gosub sprintendifi41:next iareturncontinue:print ,"Presser une touche pour continuer."ift get=27 stop;*get attend touche arret si ESCreturn;entre WP symetrique en x(1),x(2)...,x(n) et homogeneis par Z;sortie WP en fonction des fonctions symetriques S(k)=sum x(1)*x(2)..*x(k) et Z (initialisation par sdef);ou en fonction des fonctions symetriques S(k)=sum x(1)^k et Z (initialisation par sdef1);tous les litteraux/variables utilises sont declares;les lignes ";*T" forment le test run;noms externesindex nvariable WPlitteral x(10),S(10),Zn=4;*T;noms interneslitteral inc(200);coef du nouveau polynomevariable sv(10);expression de S(k) en fonction des x(i)variable aux(10);tableau de travailvariable WT,waux,WH,WR,W1,W2;variables de travailindex i,j,k,ir,ik,degz,degt,ninc;*Test rungosub sdef1;*Tprint "Calculs en fonction de ",chr($E5),"(k)=sum(i=1,n of x(i)^k)";*TWP=x(1)*x(2);*Tgosub SYMR;entre non symtrique WP ne contient pas Z ;*Tprint "symtris un facteur prs de ( x(1)*x(2))=",change( WP,"S",chr($E5));*TWP=prod(i=1,n of (Z-x(i)) );*Tgosub sdef1;*Tgosub SYMN;*Tprint "prod(Z-x(i))=",change(WP,"S",chr($E5));*Tprint "Calculs en fonction de S(k)=sum(x(i1)*...x(ik))";*TWP=prod(i=1,n of (Z-x(i)) );*Tgosub SYMND;*Tprint "prod(Z-x(i)) =",WP;*Tprint "calcul des ",chr($E5),"(k) pour n=",ngosub sdef;*Tfor ka=1,100;*TWP=sum(i=1,n of x(i)^ka);*Tgosub SYMN;*Tprint chr($E5),"(",ka,")=",WP;*Tfor i=1,n;*TWP=subs(WP,S(i)=sv(i));*Tnext i;*Tift WP-sum(i=1,n of x(i)^ka) then err;*Tnext ka;*Tstop;*T;SYMR Symetrise d4abord WPSYMR:ift deg(WP)#ord(WP) then non homogneWT=WPgosub symredgoto SYM10;SYMN s'appelle par gosub SYMND (1er appel) ou SYMN (appels suivants)SYMND:gosub sdef;met sv(i);verif WP est homogne symetriqueSYMN:ift deg(WP)#ord(WP) then non homognefor i=2,nift subs(WP,x(1)=x(0),x(i)=x(1),x(0)=x(i))-WP then non symetriquenext i;simplifie WPWT=WPgosub reduitSYM10:WP=WTWT=0;calcule WR=expression en S(i)WR=0;boucle suivant le degrfor degz=0,deg(WP,Z)W1=0W2=coef(WP,Z,degz)WP=WP-W2*Z^degzdegt=deg(W2)ninc=0for i=2,naux(i)=0next iaux(1)=degtii10:ninc=ninc+1ift ninc>200 then dim de inc insuffisanteW1=W1+inc(ninc)*prod(i=1,n of S(i)^aux(i))WT=prod(i=1,n of sv(i)^aux(i))gosub reduitW2=W2-inc(ninc)*WTWT=0j=aux(1)i=nii14:k=aux(i)ift i>j goto ii16aux(i)=k+1aux(1)=j-igoto ii10ii16:j=j+k*iaux(i)=0i=i-1ift i>1 goto ii14ii18:ift W2=0 goto ii20ift ninc=0 then errWH=polym(coef(W2,inc(ninc)))ift WH=0 then errfor i=1,naux(i)=deg(WH,x(i))next i;equation en inc(ninc)WH=coef(W2,x(1),aux(1))for i=2,nWH=coef(WH,x(i),aux(i))next iWH=-coef(WH,inc(ninc),0)/coef(WH,inc(ninc))W2=subs(W2,inc(ninc)=WH)W1=subs(W1,inc(ninc)=WH)ninc=ninc-1goto ii18ii20:WR=W1*Z^degz+WRnext degzWP=WRWR=0return;dans WT ne garde que les monomes x(1)^a1 * ...*x(n)^n avec a1<=a2<=...<=anreduit:waux=0for ir=1,polymn(WT)WH=polym(WT,ir)for kr=1,n-1ift deg(WH,x(kr))>deg(WH,x(kr+1)) goto ik10next krwaux=waux+WHik10:next irWT=wauxwaux=0return;Symetrise WT puis ne garde que les monomes x(1)^a1 * ...*x(n)^n avec a1<=a2<=...<=ansymred:waux=0for ir=1,polymn(WT)WH=polym(WT,ir)aux(1)=deg(WH,x(1))W1=coef(WH,x(1),aux(1))for kr=2,ndegt=deg(W1,x(kr))W1=coef(W1,x(kr),degt)for i=kr-1,1,-1ift aux(i)<=degt goto ik12next iik12:ift i=kr-1 goto ik14for j=kr,i+2aux(j)=aux(j-1)next jik14:aux(i+1)=degtnext krfor kr=1,ndegt=aux(kr)for i=kr,nift aux(i)#degt goto ik15next iik15:W1=W1*puis(i-kr)kr=i-1next krfor kr=1,nW1=W1*x(kr)^aux(kr)next krwaux=waux+W1next irWT=wauxwaux=0return;calcul des sv(1)...sv(n)sdef:for k=1,nsv(k)=0i=0goto ig15ig11:sv(k)=sv(k)+prod(i=1,k of x(aux(i)))i=kig13:ift aux(i)=n-k+i goto ig17aux(i)=aux(i)+1ig15:ift i=k goto ig11i=i+1aux(i)=aux(i-1)+1goto ig15ig17:i=i-1ift i goto ig13next kreturn;autre cas des S(i)sdef1:for k=1,nsv(k)=sum(i=1,n of x(i)^k)next kreturn+page DUMPFILEprint "Sortie des octets d'un fichier"chaine nfich,fich,ch,ch1index impr,lu,i,im,j,kvariable deb,debm,fin,ad0,long,rem1,rem2nom:error nomprint "Donner le nom du fichier.extension"input nfichfich=load(nfich)errorlong=peekl(adr(fich)-4)print /l/"Longueur de ",nfich," =",longprint /h/" $",justg(long)sortie:print "Sortie de tout le fichier"deb=0fin=longgosub ouiift impr=0 goto sortldeb:error ldebprint "Donner Debut (0 a ",justg(long-1),")"input debift deb<0 then deb=0ift deb>=long goto ldebdebm=debrem2=deblfin:print "Donner Fin (",justg(deb+1)," a ",justg(long),")"input finift fin<=deb goto lfinift fin>long then fin=longerrorsort:impr=0print "Sortie imprimante"gosub ouisort1:rem1=rem2rem2=debfor k=1,10ad0=adr(fich)+debift deb>=fin goto termineim=min(19,fin-deb-1)base seizech=justd(deb,6)&" "ch1=chr($20,8)for i=0,imif mod(i,4)=0: ch=ch&" ": ch1=ch1&" "endifj=peekb(ad0+i)ch=ch & justd(right(j,2),3)ift j<$20 then j=asc(".")ift j=asc("") then j=asc(".")ch1=ch1 &" "&chr(j)next iif impr=0: print /p/ch: print /p/ch1else: print ch: print ch1endifdeb=deb+im+1base dixnext kif impr: print "emonte. Demi page plus bas haut. continue": lu=get: ift lu=asc("R") goto remonte: ift lu=asc("r") goto remonte: ift lu=asc("H") goto remo1: ift lu=asc("h") goto remo1: ift lu=asc("B") goto desc: ift lu=asc("b") goto descendifgoto sort1remonte:deb=rem1goto sort1remo1:deb=(rem1+rem2)/2goto sort1desc:deb=(deb+rem2)/2goto sort1termine:print "Nouvelle sortie de la meme zone"gosub ouideb=debmift impr=0 goto sortprint "Sortie d'une autre zone du meme fichier"gosub ouiift impr=0 goto ldebprint "Lecture d'un autre fichier"gosub ouiift impr=0 goto nomstopoui:impr=0print /l/ "O/N "lu=getift lu=$1B stopift lu=asc("o") goto oui1ift lu=asc("O") goto oui1ift lu=asc("y") goto oui1ift lu=asc("Y") goto oui1impr=1print "non"returnoui1:impr=0print "oui"return>index m,j,lchaine dys(6),mhs(12),s_s,s1s,s2s,e_sfor i=0,6read dys(i)nextdata vendredi,samedi,dimanche,lundi,mardi,mercredi,jeudifor i=1,12read mhs(i)nextdata janvier,fevrier,mars,avril,mai,juin,juillet,aout,septembre,octobre,novembre,decembreprint "exemples d'epoques :"print "1987"print "3m1987"print "j3m1287 calendrier julien"print "3m1287 bc"print "26jul1987 h14 m7 s3"print "26jul1987.3"date:gosub l8200y=xz=hhgosub l8000print dys(modr(y,7))," ",e_sgoto datestopl2530:xd=divr(abs(x),3600)xs=abs(x)-3600*xdxm=divr(xs,60)s_s=str(int(xs-60*xm+.5))s_s=str(xm)&chr(0,5-len(s_s))&s_ss_s=str(xd)&chr(0,10-len(s_s))&s_sift x<0 then s_s="-"&s_ss_s=chr(0,15-len(s_s))&s_sreturn;met e_s=jour y heure decimale zl8000:a1=int(2000+y/365.25)l8010:m=1j=1gosub l8400if x>y: a1=a1-1: goto l8010endifift x=y goto l8075l8040:d=m+divr(m,8)d=30+modr(d,2)ift m#2 goto l8065d=28ift modr(a1,4) goto l8065ift (modr(a1,100)#0)+(modr(a1,400)=0)+(ju=1) then d=29l8065:i=jj=j+y-xift j<=d goto l8075m=m+1j=0x=x+d-iift m<13 goto l8040a1=a1+1m=1goto l8040l8075:s1s=str(j) & " " & mhs(m)ift j<10 then s1s=" "&s1si=-(a1<=0)s_s=str(abs(a1)-i)s2s=s1s & chr(0,7-len(s_s))&s_sx=z*3600gosub l2530e_s=s2s&s_ss_s="g "ift ju=1 then s_s="j "e_s=s_s&e_ss_s=" ut"ift i then s_s=" bc"e_s=e_s&s_sreturnl8100:x=0l8105:l=len(s_s)ift l=0 returni=asc(s_s)ift i=32 goto l8125ift (i<48)+(i>57) returnx=10*x+i-48l8125:s_s=right(s_s,l-1)goto l8105l8150:s1s=""l8155:l=len(s_s)ift l=0 returni=asc(s_s)ift i=32 goto l8175ift (i>64)*(i<$5B) then i=i+32ift (i<58)*(i>47) returns1s=s1s&chr(i)l8175:s_s=right(s_s,l-1)goto l8155l8200:lg=0print "Epoque ?"input s_si=asc(s_s)ift (i>64)*(i<$5B) then i=i+32ju=(i=106)+2*(i=103)ift ju then s_s=right(s_s,len(s_s)-1)gosub l8100j=1m=1ift x>99 goto l8242j=xgosub l8150l=len(s1s)ift l=0 goto l8200if cmp(s1s,"jul")=0: m=7: goto l8240endiffor m=1,12ift cmp(left(mhs(m),l),s1s)=0 goto l8240next mgoto l8200l8240:gosub l8100l8242:a=xa1=aift a=0 goto l8200l8245:gosub l8700hh=yift y then lg=0ift cmp(s1s,"UT")=0 then lg=1if cmp(s1s,"BC")=0: a1=1-a: lg=1endifgosub l8400n=xreturnl8400:x=int(30.6*(m+1))-428a=a1ift m>2 goto l8420x=0a=a1-1ift m=2 then x=31l8420:b=divr(a,100)-divr(a,400)x=x+j+int(365.25*a)-730120ift ju goto l8450ju=2ift x<-152386 then ju=1l8450:ift ju=1 then x=x+b-2returnl8700:y=0s=1ift len(s_s)=0 returnif asc(s_s)=45: s=-s: s_s=right(s_s,len(s_s)-1)endifl8710:ift cmp(s_s,"")=0 goto l8745gosub l8150k=1ift cmp(s1s,"h")=0 goto l8750k=60ift cmp(s1s,"m")=0 goto l8750k=3600ift cmp(s1s,"s")=0 goto l8750k=-15ift cmp(s1s,"")=0 goto l8750ift cmp(s1s,"d")=0 goto l8750k=-900ift cmp(s1s,"'")=0 goto l8750ift cmp(s1s,"p")=0 goto l8750if cmp(s1s,".")=0: i1=len(s_s): gosub l8100: x=x*10^(l-i1): k=1/24: goto l8760endifift(cmp(s1s,"bc")=0)+(cmp(s1s,"ut")=0)goto l8745print "mal ecrit"l8745:y=y*sreturnl8750:gosub l8100l8760:y=y+x/kgoto l87101Basic Algbrique peut etre charg partir du TOS (BASALG.TOS) ou partir du GEM (BASALG.PRG). Le mode d'emploi BASALG.DOC peut etre lu et imprim par 1ST WORD. Les fichiers d'extension .Z sont des programmes en Basic Algbrique. Pour charger ces programmes par Basic Algbrique, appuyer simultanment sur "A" et "Alternate", puis sur "Return". Ecrire le nom du fichier (sans .Z) et taper "Return". Pour lancer le programme taper la touche "/" puis Return. DEMOAES.Z dmonstration des appels de l'AES doit etre lanc par BASALG.PRG DEMO.Z dmonstration illustrant le mode d'emploi. EQUA.Z rsoud les systmes (meme non linaires) d'quations. PSYM.Z exprime les fonctions symtriques de n littraux en fonction de fonctions symtriques lmentaires. DUMPFILE.Z permet de lire un fichier disque. CALEND.Z est un calendrier perptuel #a0 #b0 #c7770007000600070055200505552220770557075055507703103 #d - #E 9B 02 #W 00 00 08 01 17 17 08 A:\*.*@ #W 00 00 0D 08 15 0B 00 @ #W 00 00 0E 09 15 0B 00 @ #W 00 00 0F 0A 15 0B 00 @ #M 00 00 00 FF A DISQUE@ @ #M 00 01 00 FF B DISQUE@ @ #T 00 03 02 FF CORBEILLE@ @ #F FF 04 @ *.*@ #D FF 01 @ *.*@ #G 03 FF *.PRG@ @ #G 03 FF *.APP@ @ #F 03 04 *.TOS@ @ >