Ad argvmentvm transi
Topos Uranos

Svmmarivm

Haec lectio codicem non continet, neqve per neglegentiam: algorithmvs programma antecedit, et qvi accvrate describere nescit qvid faciendvm sit, ne in C++ qvidem id dicere sciet. Primvm docetvr qvomodo problema specificetvr, id est qvomodo declaretvr qvae data accipiat, qvem eventvm reddere debeat et qva relatione ea conivngantvr, et ostenditvr vnam eandemqve envntiationem varias specificationes admittere. Deinde algorithmvs definitvr vt processvs finitvs, praecisvs et generalis, et gradibvs nvmeratis scribitvr algorithmvs divisionis per svbtractiones svccessivas. Docetvr qvomodo algorithmvs tabvla vestigii manv perseqvendvs sit, qvae per totvm cvrsvm primvm instrvmentvm erit ad intellegendvm et ad emendandvm. Exponvntvr tres modi gradvs conivngendi (seqventia, decisio et repetitio), qvibvs omnis algorithmvs scribitvr, et discitvr ostendere repetitionem desinere ope qvantitatis qvae in qvoqve gyro decrescit neqve sine fine descendere potest.

Proposita discendi

  1. Problema simplex specificare, introitvs eivs, exitvs et condiciones qvas implere debent indicando.
  2. Algorithmvm gradibvs nvmeratis describere, sine ambigvitate, decisionibvs et repetitionibvs expressis.
  3. Algorithmvm tabvla vestigii manv perseqvi eivsqve eventvm pro introitv dato determinare.
  4. In processv dato seqventiam, decisionem et repetitionem distingvere, et ostendere repetitionem desinere.

Qvid sit problema compvtationale

Problema compvtationale est relatio inter dvas species datorvm: ea qvae accipivntvr, qvae introitvs appellantvr, et ea qvae reddenda svnt, qvae exitvs appellantvr. Id solvere non est responsvm pro vno casv obtinere, sed methodvm habere qvae, pro qvolibet introitv admissibili, exitvm prodvcat qvi relationem impleat. «Qvantvm est 17 per 5 divisvm?» qvaestio est; «datis dvobvs integris, eorvm qvotientem et residvvm invenire» problema est, qvia de omnibvs integrorvm paribvs simvl loqvitvr.

Iam vero sermo cotidianvs imprecisvs est, et eadem envntiatio plvribvs modis intellegi potest. Qvam ob rem, anteqvam solvitvr, specificatvr: scribitvr qvid intret, qvid exeat et qvas condiciones qvaeqve res implere debeat. Specificatio tria membra habet. Introitvs data cvm sva specie envmerat (integros, decimales, verba) et condiciones qvae ab eis exigvntvr, qvae praecondicio appellantvr: qvi solvtione vtitvr se eas servatvrvm spondet. Exitvs eventvs envmerat. Relatio, sive postcondicio, dicit qvid exitvs respectv introitvs implere debeat: qvi solvtionem scribit se eam praestatvrvm spondet, dvmmodo praecondicio servata sit. Inde seqvitvr specificationem esse pactvm inter evm qvi problema proponit et evm qvi solvit, et extra praecondicionem solvtionem nihil promittere.

ExemplvmMaximvm trivm nvmerorvm

Envntiatio cotidiana: «maximvm trivm nvmerorvm invenire». Specificatio:

  • Introitvs: tres nvmeri xx, yy, zz (integri vel decimales, sine alia condicione).
  • Exitvs: nvmervs mm.
  • Relatio: mm vnvm ex tribvs datis est, nec vllvm eorvm maivs est qvam mm; id est m≥xm \geq x, m≥ym \geq y et m≥zm \geq z.

Relatio non dicit «maximvs trivm», qvod ipsvm est qvod definiri volebatvr, sed dvas condiciones qvae examinari possvnt. Prima exigit vt mm vnvm ex datis sit (sine ea, nvmervs 1000 secvndam pro paene qvolibet introitv impleret); secvnda, vt nvllvm id svperet. Et specificatio obiter dvbivm solvit qvod envntiatio apertvm relinqvebat: si dvo data in maximo aeqvantvr, vt in (4,9,9)(4, 9, 9), exitvs est 99, nec vllvs in eo error est.

Eadem envntiatio varias specificationes admittit, et inter eas eligere decisio est, non neglegentia. Casvs maxime instrvctivvs est divisio integrorvm. Pro integris a≥0a \geq 0 et b>0b > 0 omnes consentivnt: qvotiens qq et residvvm rr soli integri svnt qvi implent

a=b⋅q+r,0≤r<ba = b \cdot q + r, \quad 0 \leq r < b

Ita pro a=17a = 17 et b=5b = 5 svnt q=3q = 3 et r=2r = 2, qvia 17=5⋅3+217 = 5 \cdot 3 + 2. Sed envntiatio «dvos integros dividere» non dicit qvid faciendvm sit si aa negativvs est, nec qvaestio otiosa est: pro a=−7a = -7 et b=2b = 2 dvo responsa rationabilia svnt.

ExemplvmDvae specificationes divisionis cvm dividendo negativo

Prima specificatio: residvvm nvmqvam negativvm est, 0≤r<b0 \leq r < b. Tvm −7=2⋅(−4)+1-7 = 2 \cdot (-4) + 1, et exitvs est q=−4q = -4, r=1r = 1. Haec est qvae in mathematica traditvr, in lectione «Divisibilitas et divisio cvm residvo» cvrsvs Algebra et Geometria I.

Secvnda specificatio: qvotiens est eventvs divisionis cvm decimalibvs, decimalibvs abiectis, id est ad nihilvm versvs rotvndatvs; residvvm est qvod deest, et signvm dividendi habet. Tvm −7/2=−3,5-7 / 2 = -3{,}5 ad −3-3 trvncatvr, et −7=2⋅(−3)+(−1)-7 = 2 \cdot (-3) + (-1): exitvs est q=−3q = -3, r=−1r = -1.

Ambae a=b⋅q+ra = b \cdot q + r implent; differvnt condicione qvae residvo imponitvr. Nevtra error est, sed programma qvod alteram adhibet credens se alteram adhibere cvm negativis falsos eventvs dabit. Rem in antecessvm dicamvs: C++ secvndam adoptat, vt in lectione Arithmetica videbitvr; qvi primam exspectat mirabitvr.

Est tertia optio, qvae in vsv freqventissima est: casvm per praecondicionem exclvdere. Si specificatio a≥0a \geq 0 exigit, problema negativorvm evanescit, non qvia solvtvm sit, sed qvia qvi solvtione vtitvr se id non propositvrvm spopondit. Qvod fieri non potest est qvaestionem indecisam relinqvere. Et eadem de cavsa specificatio b>0b > 0 exigit: cvm b=0b = 0 non exsistvnt qq et rr qvi relationem impleant, et pactvm id dicere debet.

Error freqvens est per exemplvm specificare: «exitvs ex 17 et 5 est 3 et 2». Exemplvm illvstrat, sed non specificat, qvia non dicit qvid ceteris introitibvs accidat; infinitae relationes diversae in vno casv congrvvnt. Specificatio vt condicio generalis scribitvr, et exempla postea ad eam examinandam servivnt.

Algorithmi

Problemate specificato, qvaeritvr methodvs qva solvatvr. Algorithmvs est series instrvctionvm qvae, cvilibet introitvi praecondicionem implenti applicata, nvmero finito gradvvm exitvm prodvcit qvi postcondicionem implet. Definitio tres postvlationes continet.

  • Finitas. Algorithmvs nvmero finito instrvctionvm scribitvr et, pro qvolibet introitv admissibili, desinit postqvam nvmervm finitvm earvm peregit. Processvs qvi pro aliqvo introitv in perpetvvm pergit pro illo introitv algorithmvs non est.
  • Praecisio. Qvaeqve instrvctio vnam tantvm significationem habet, et qvi eam exseqvitvr omni momento scit qvid faciendvm sit et qvae instrvctio seqvatvr. Nvlla decisio arbitrio exseqventis relinqvitvr.
  • Generalitas. Algorithmvs problema pro omnibvs introitibvs admissibilibvs solvit, non pro vno tantvm casv.

Aliqva cvm libertate, algorithmvs etiam appellatvr processvs praecisvs et qvi desinit, sed qvi pro aliqvo introitv admissibili postcondicionem non implet: stricte loqvendo est algorithmvs pro alio problemate, et dicetvr non rectvs pro problemate specificato. Sic loqventvr problemata hvivs lectionis, qvae algorithmos non rectos exemplo contrario refellvnt.

Praescriptvm cvlinarivm algorithmo simile est, et ideo comparatio vsitata est; sed paene nvllvm algorithmvs est. «Pvgillvm salis addere» praecisvm non est, qvia pvgillvs qvantitas non est; «in fvrno coqvere donec avratvm sit» ex ivdicio pendet qvod dvae personae diverse facerent; «saepivs agitare» non dicit qvot vicibvs. Coqvvs has lacvnas sva experientia explet; compvtatrvm nvllam habet. Inde seqvitvr postvlatio qvae totvm cvrsvm regit: algorithmvm seqvi posse debet etiam qvi problema non intellegit, nihil divinando. Si, vt gradvm exseqvaris, scire oportet ad qvid serviat, gradvs male scriptvs est.

Algorithmi hvivs cvrsvs primvm gradibvs nvmeratis scribvntvr, Latine, cvm qvibvsdam conventionibvs. Data qvae dvrante algorithmo mvtantvr litteris vel verbis nominantvr, vt qq vel rr, et variabiles appellantvr. Scribitvr «rr valorem r−br - b accipit» vt dicatvr r−br - b compvtari cvm valore praesenti ipsivs rr et eventvm fieri novvm valorem ipsivs rr; valor prior amittitvr. In forma contracta, qvae in notis capiendis adhibetvr, eadem instrvctio sagitta sinistrorsvm versa scribitvr, qvae in claviatvra est r <- r - b. Instrvctiones ordine nvmerorvm svorvm peragvntvr, nisi vna earvm alivd dicat.

ExemplvmDivisio per svbtractiones svccessivas

Problema est id qvod svpra specificatvm est: introitvs, dvo integri a≥0a \geq 0 et b>0b > 0; exitvs, dvo integri qq et rr cvm a=b⋅q+ra = b \cdot q + r et 0≤r<b0 \leq r < b. Idea est distribvendi: ex aa avfervntvr acervi magnitvdinis bb dvm fieri potest, acervi ablati nvmerantvr, et qvod svperest residvvm est.

  1. qq valorem 00 accipit, et rr valorem aa accipit.
  2. Dvm r≥br \geq b valet, gradvs 3 et 4 repete; cvm valere desinit, ad gradvm 5 perge.
  3. rr valorem r−br - b accipit.
  4. qq valorem q+1q + 1 accipit; ad gradvm 2 redi.
  5. Redde qq et rr, et desine.

Gradvs 2 qvaestio est qvae qvoqve tempore ponitvr: ante primvm gyrvm et post vnvmqvemqve. Gradvs 3 et 4 corpvs repetitionis efficivnt, id qvod repetitvr. Nihil arbitrio exseqventis relinqvitvr: omni momento vna tantvm instrvctio seqvens est.

Algorithmvs lentvs est (vt decies centena milia per tria dividat, plvs qvam trecenta milia gyrorvm facit), et methodvs scholastica divisionis mvlto celerior est; sed rectvs est, et simplicitas eivs evm aptissimvm reddit vt de algorithmis ratiocinari discatvr. Cvrsvs ad discrimen inter algorithmvm rectvm et efficientem redibit in lectione Svmptvs algorithmi.

Deniqve expedit algorithmvm a scriptvra sva seivngere. Algorithmvs divisionis per svbtractiones idem est sive Latine scribitvr, sive in diagrammate, sive in C++ sive in alia qvavis lingva programmandi: qvod evm definit est series operationvm, non verba. Programma est scriptvra algorithmi in lingva qvam machina exseqvi potest, et lectio Programmata, compilatores et C++ explicabit qvomodo ea exsecvtio fiat. Qvae si ita svnt, programma dvobvs modis valde diversis vitiosvm esse potest: qvia algorithmvs non rectvs est, et tvm nvlla lingva evm servat, avt qvia algorithmvs rectvs est sed male scriptvs. Vtrvmqve casvm distingvere dimidivm est laboris emendandi, et ideo cvrsvs semper primvm algorithmvm scribit.

Algorithmvm manv perseqvi

Algorithmvm legere non svfficit vt sciatvr qvid faciat; exseqvendvs est. Evm manv perseqvi, vt machina faceret, nec gradvs omittendo nec eventvs divinando, facvltas est programmatoris vtilissima: ea algorithmvs examinatvr anteqvam scribatvr, exitvs programmatis praedicitvr anteqvam exseqvatvr, et error invenitvr in eo qvod deficit.

Instrvmentvm est tabvla vestigii: colvmna pro nvmero gradvs qvi peragitvr, vna colvmna pro qvaqve variabili et, si expedit, vna pro condicionibvs qvae aestimantvr; et vnvs ordo pro qvoqve gradv peracto. In qvoqve ordine notatvr novvs valor variabilis qvae eo gradv mvtata est, et vacvvm relinqvitvr qvod non mvtatvm est, ita vt valor praesens variabilis sit vltimvs in eivs colvmna scriptvs. Condiciones cvm svo eventv notantvr.

ExemplvmVestigivm divisionis 17 per 5

Divisionem per svbtractiones svccessivas perseqvimvr cvm a=17a = 17 et b=5b = 5. Sagitta figvrae gradvm modo peractvm indicat; linea pvnctata admonet gradvm 4 ad gradvm 2 redire.

Demonstratio

  1. (q,r)=(0,17)(q, r) = (0, 17)

    Gradvs 1: valores initiales dantvr. Introitvs praecondicionem implet, qvia 17≥017 \geq 0 et 5>05 > 0.

  2. (q,r)=(1,12)(q, r) = (1, 12)

    Primvs gyrvs. In gradv 2 confirmatvr 17≥517 \geq 5, itaqve corpvs peragitvr: gradvs 3 acervvm qvinqve avfert et gradvs 4 evm nvmerat.

  3. (q,r)=(2,7)(q, r) = (2, 7)

    Secvndvs gyrvs: 12≥512 \geq 5, et corpvs itervm peragitvr.

  4. (q,r)=(3,2)(q, r) = (3, 2)

    Tertivs gyrvs: 7≥57 \geq 5, et corpvs itervm peragitvr.

  5. 17=5⋅3+2,0≤2<517 = 5 \cdot 3 + 2, \quad 0 \leq 2 < 5

    In gradv 2 condicio deficit, qvia 2<52 < 5: algorithmvs ad gradvm 5 pergit et reddit q=3q = 3 et r=2r = 2. Exitvs postcondicionem implet.

Tabvla integra dvodecim ordines habet: gradvm 1, tres gyros ternorvm ordinvm (gradvs 2, 3 et 4), examinationem qvae deficit et redditionem.

Dvae observationes de tabvla. Prima: nvmervs gyrorvm qvotienti aeqvalis est, 33, et gradvs 2 semel saepivs qvam corpvs peractvs est, 44 vicibvs; qvod semper fit in repetitione hvivs formae, qvia vltima examinatio ea est qvae deficit. Secvnda: vestigivm aliqvid docet qvod textvs algorithmi primo aspectv non dicit; si a<ba < b, exempli gratia a=3a = 3 et b=5b = 5, condicio prima vice deficit, corpvs nvlla vice peragitvr, et exitvs est q=0q = 0, r=3r = 3, qvi rectvs est, qvia 3=5⋅0+33 = 5 \cdot 0 + 3. Casvm oblivisci qvo repetitio non peragitvr vnvs ex erroribvs freqventissimis est in algorithmis designandis, et vestigivm cvm introitibvs parvis evm detegit.

Vestigivm vnivs casvs non demonstrat algorithmvm rectvm esse: vnvm casvm examinat. Sed vestigivm bene electvm (casvs commvnis, casvs marginalis, casvs qvo repetitio non peragitvr) plerosqve errores detegit, et qvod deficit ostendit vbi sint. Lectio Circvitvs rectos designare docebit qvomodo a casibvs ad demonstrationem transeatvr.

Seqventia, decisio et repetitio

Prope inspecti, algorithmi pavcissimis elementis constrvvntvr. Svnt instrvctiones elementares (variabili valorem dare, eventvm reddere) et tres modi eas conivngendi.

  • Seqventia: instrvctio post instrvctionem, ordine. Gradvs 3 et 4 divisionis seqventia svnt: primvm svbtrahitvr, deinde nvmeratvr.
  • Decisio: provt condicio impletvr necne, membrvm vnvm vel altervm peragitvr (vel membrvm vel nihil). «Si y>my > m, mm valorem yy accipit» decisio est.
  • Repetitio: dvm condicio impletvr, membrvm itervm atqve itervm peragitvr. Gradvs 2 divisionis, cvm svo corpore, repetitio est.

Qvaeqve forma vnvm aditvm et vnvm egressvm habet, et interivs eivs rvrsvs qvaelibet ex tribvs esse potest: corpvs repetitionis decisiones continere potest, ramvs decisionis repetitionem continere potest, et sic deinceps. Qvae si ita svnt, tribvs formis algorithmi cvivsvis complexitatis constrvvntvr, sicvt pavcis elementis inter se congrventibvs qvodvis aedificivm constrvitvr. Eas svfficere ad omnem algorithmvm exprimendvm notvm est theoriae programmandi effatvm (id demonstravervnt Corrado Böhm et Givseppe Iacopini anno 1966); hic non demonstratvr, sed totvs cvrsvs id confirmat: programmata qvae in eo scribentvr, qvamvis longa, nihil alivd adhibebvnt qvam has tres formas, in C++ scriptas vt if pro decisione et while vel for pro repetitione, in lectionibvs Decisiones et Circvitvs.

Notatio vtilis ad formam algorithmi videndam est diagramma flvxvs: qvaeqve instrvctio est rectangvlvm, qvaeqve condicio rhombvs cvm dvobvs egressibvs (impleta, qvam figvra signo 11 notat, et non impleta, 00), et sagittae dicvnt qvis gradvs seqvatvr. Notatio est, non finis: servit ad parvvm algorithmvm vno obtvtv inspiciendvm, sed ad magnitvdinem non accommodatvr, et nemo programma magnvm pingendo scribit.

ExemplvmTres formae earvmqve compositio

Figvra tres formas pingit cvm instrvctionibvs genericis AA et BB et condicione cc, deinde eas componit in diagrammate divisionis per svbtractiones svccessivas.

Demonstratio

  1. A;BA ; B

    Seqventia: peragitvr AA et deinde BB; vnvs aditvs est et vnvs egressvs.

  2. c=1⇒A,c=0⇒Bc = 1 \Rightarrow A, \quad c = 0 \Rightarrow B

    Decisio: si cc impletvr, peragitvr AA; sin minvs, BB. Ambo rami in vnvm egressvm convenivnt.

  3. c,A,c,A,…,cc, A, c, A, \ldots, c

    Repetitio: aestimatvr cc; si impletvr, peragitvr AA et itervm aestimatvr cc; sin minvs, exitvr. Condicio semel saepivs qvam corpvs aestimatvr.

  4. a=b⋅q+r,0≤r<ba = b \cdot q + r, \quad 0 \leq r < b

    Compositio: divisio per svbtractiones svccessivas est seqventia (valores initiales, repetitio, redditio) cvivs repetitio pro corpore aliam seqventiam habet (svbtrahere, nvmerare).

Tres formas in processv sermone cotidiano scripto distingvere primvs gradvs est ad evm convertendvm. Signvm decisionis est «si», «si forte» vel «provt»; repetitionis, «dvm», «donec», «pro qvoqve» vel «tot vicibvs qvot». Processvs sine vllo horvm verborvm seqventia est, et si introitvs magnitvdinis variabilis tractare debet (indicem nvmerorvm, textvm), ei deest repetitio.

Desinitne?

Finitas ad definitionem algorithmi pertinet, et repetitio solvs locvs est in qvo amitti potest: seqventia qvinqve gradvvm qvinqve gradvs peragit, et decisio vnvm ex ramis svis peragit; sed repetitio corpvs svvm tot vicibvs peragit qvot condicio impletvr, nec qvicqvam in antecessvm praestat eam impleri desitvram esse.

Vt ostendatvr repetitionem desinere, qvaeritvr qvantitas, ex variabilibvs compvtata, qvae dvas condiciones impleat: nvmervs natvralis est (integer nec negativvs) dvm repetitio pergit, et in qvoqve gyro stricte decrescit. Qvae si ita svnt, repetitio desinit: series natvralivm stricte decrescens infinita esse non potest, qvia qvisqve gyrvs eam saltem vno minvit et a natvrali nn non plvres qvam nn descensvs ad nihilvm svnt. Haec qvantitas varians vel fvnctio marginis appellatvr, et lectio Circvitvs rectos designare ea ratione certa et constanti vtetvr.

ExemplvmVarians divisionis per svbtractiones

In divisione per svbtractiones svccessivas varians est rr. Dvm repetitio pergit, r≥b>0r \geq b > 0, itaqve rr natvralis est. In qvoqve gyro rr valorem r−br - b accipit, et qvia b>0b > 0 (praecondicio), novvs valor stricte minor est. Ergo repetitio desinit, et id facit svmmvm post aa gyros (immo prorsvs post qq gyros, qvotientem).

Animadvertatvr vbi praecondicio b>0b > 0 adhibita sit. Si algorithmvs cvm b=0b = 0 peragitvr, gradvs 3 relinqvit rr immvtatvm, condicio r≥0r \geq 0 semper impletvr et repetitio nvmqvam desinit: algorithmvs non est vitiosvs, sed ei datvs est introitvs qvem pactvm exclvdebat. Et si bb negativvs esset, rr in qvoqve gyro cresceret. Praecondicio non est ornamentvm: est prorsvs id qvod reqviritvr vt ratiocinatio procedat.

Ambae condiciones variantis necessariae svnt, et facile est in vtralibet errare. Consideretvr hic processvs, qvi decernere vvlt vtrvm natvralis nn par sit: «dvm n≠0n \neq 0, nn valorem n−2n - 2 accipit; si ad nihilvm pervenitvr, nn par erat». Qvantitas nn in qvoqve gyro decrescit, et tamen processvs non desinit si nn impar est: cvm n=5n = 5 per 33, 11, −1-1, −3-3 transit, et condicio n≠0n \neq 0 nvmqvam deficit. Qvod non impletvr est altera condicio: nn natvralis esse desinit, qvia condicio repetitionis non impedit qvominvs infra nihilvm descendat. Correctio est repetere dvm n≥2n \geq 2 et in fine decernere secvndvm valorem qvi manet, 00 vel 11; nvnc nn in qvoqve gyro natvralis est, qvia tantvm svbtrahitvr cvm n≥2n \geq 2, et decrescit: processvs desinit.

Decernere vtrvm repetitio desinat non semper facile est. Exemplvm celebre: a natvrali n≥1n \geq 1 incipiendo, dvm n≠1n \neq 1, si nn par est per dvo dividitvr, et si impar est per 3n+13n + 1 svbstitvitvr. Cvm n=6n = 6 series est 6,3,10,5,16,8,4,2,16, 3, 10, 5, 16, 8, 4, 2, 1, et desinit. Nemo invenit nn pro qvo non desinat, et compvtatris pro ingenti copia valorvm confirmatvm est; sed nemo demonstrare potvit eam semper desinere: est coniectvra Collatz, problema apertvm mathematicae. Nvlla qvantitas nota in qvoqve gyro decrescit. Doctrina pro eo qvi programmat modesta et firma est: algorithmvs cvivs finem qvis ostendere nescit absolvtvs non est.

Errores freqventes

  • Gradvs ambigvi. «Saepivs repetere», «donec bene sit», «nvmervm idonevm svmere». Qvisqve gradvs peragi posse debet sine problemate intellecto; sin minvs, male scriptvs est.
  • Casvm oblivisci qvo repetitio non peragitvr. Omnis repetitio cvm condicione in initio corpvs svvm nvlla vice peragere potest. Semper qvaerendvm est qvid algorithmvs eo casv reddat, et vestigivm cvm introitv minimo respondet.
  • Per exemplvm specificare. «Pro 17 et 5 dat 3 et 2» specificatio non est; relatio vt condicio generalis scribitvr, et exemplvm eam illvstrat.
  • Algorithmvm cvm programmate svo confvndere. Programma qvod deficit vitivm habere potest in algorithmo avt in eivs scriptvra. Qvi algorithmvm antea non scripsit nescit vtrvm qvaerat.
  • Finem pro certo habere. Qvantitatem decrescere non svfficit: praeterea natvralis esse debet dvm repetitvr.

Problemata solvta

Problema solvtvm 1Maximvs trivm nvmerorvm, cvm aeqvalitatibvs

Algorithmvm scribere qvi specificationem maximi trivm nvmerorvm initio lectionis positam impleat, evmqve manv perseqvi pro introitibvs (7,2,5)(7, 2, 5) et (4,9,9)(4, 9, 9).

Solvtio

  1. m=xm = x

    Idea: introitvs percvrritvr et maximvs adhvc visvs in variabili mm servatvr. Primvs gradvs: mm valorem xx accipit. Post evm mm maximvm est datorvm visorvm, qvae svnt tantvm xx.

  2. m=max⁡(x,y,z)m = \max(x, y, z)

    Secvndvs gradvs: si y>my > m, mm valorem yy accipit. Tertivs gradvs: si z>mz > m, mm valorem zz accipit. Qvartvs gradvs: redde mm. Tres svnt instrvctiones in seqventia, qvarvm dvae decisiones svnt sine ramo alternativo.

  3. (x,y,z)=(7,2,5)⇒m=7(x, y, z) = (7, 2, 5) \Rightarrow m = 7

    Vestigivm pro (7,2,5)(7, 2, 5): post primvm gradvm m=7m = 7; in secvndo, 2>72 > 7 falsvm est et mm non mvtatvr; in tertio, 5>75 > 7 falsvm est et mm non mvtatvr. Redditvr 77.

  4. (x,y,z)=(4,9,9)⇒m=9(x, y, z) = (4, 9, 9) \Rightarrow m = 9

    Vestigivm pro (4,9,9)(4, 9, 9): post primvm gradvm m=4m = 4; in secvndo, 9>49 > 4 et mm valorem 99 accipit; in tertio, 9>99 > 9 falsvm est et mm non mvtatvr. Redditvr 99, qvod rectvm est: aeqvalitas tractationem propriam non exigit.

  5. m≥x,m≥y,m≥zm \geq x, \quad m \geq y, \quad m \geq z

    Ratio: post qvemqve gradvm mm vnvm ex datis visis est nec vllvm eorvm id svperat. Vervm est post primvm, et qvaeqve decisio id conservat: si datvm novvm maivs est, fit mm; sin minvs, mm non svperat. In fine tria visa svnt, et mm postcondicionem implet.

  6. (x,y,z)=(4,9,9)⇒p∈{2,3}(x, y, z) = (4, 9, 9) \Rightarrow p \in \{2, 3\}

    Si y≥my \geq m pro y>my > m scriptvm esset, eventvs idem esset, qvia in aeqvalitate valor aeqvalis assignatvr. Electio inter >> et ≥\geq momentvm haberet si etiam positio maximi peteretvr: cvm >> prima positionvm aeqvalivm redditvr, cvm ≥\geq vltima; formvla positionem appellat pp.

Problema solvtvm 2Annvs bissextilis, exemplo contrario correctvs

In calendario Gregoriano annvs bissextilis est si per 44 divisibilis est, exceptis iis qvi per 100100 divisibiles svnt, qvi tantvm bissextiles svnt si praeterea per 400400 divisibiles svnt. Discipvlvs algorithmvm proponit: «si annvs per 44 divisibilis est, redde ita; sin minvs, redde non». Annvm invenire qvo deficit et algorithmvm rectvm scribere, cvm sva specificatione.

Solvtio

  1. (4∣n∧¬(100∣n))∨400∣n(4 \mid n \wedge \neg (100 \mid n)) \vee 400 \mid n

    Specificatio. Introitvs: integer n≥1583n \geq 1583 (calendarivm Gregorianvm ab Octobri mense anni 1582 viget). Exitvs: ita vel non. Relatio: exitvs est ita prorsvs cvm nn per 44 divisibilis est nec per 100100, vel per 400400 divisibilis est.

  2. 1900=4⋅475,1900=400⋅4+3001900 = 4 \cdot 475, \quad 1900 = 400 \cdot 4 + 300

    Algorithmvs propositvs in plerisqve annis recte respondet, et ideo rectvs videtvr. Ad evm refellendvm svfficit annvs per 100100 nec per 400400 divisibilis: 19001900 per 44 divisibilis est, et algorithmvs dicit ita; sed annvs 19001900 bissextilis non fvit.

  3. 400∣n,100∣n,4∣n400 \mid n, \quad 100 \mid n, \quad 4 \mid n

    Algorithmvs correctvs, tribvs decisionibvs concatenatis. Gradvs 1: si nn per 400400 divisibilis est, redde ita et desine. Gradvs 2: si nn per 100100 divisibilis est, redde non et desine. Gradvs 3: si nn per 44 divisibilis est, redde ita; sin minvs, redde non.

  4. 2000,1900,2024,20232000, \quad 1900, \quad 2024, \quad 2023

    Ordo qvaestionvm essentialis est: a regvla maxime particvlari ad maxime generalem procedvnt. Si primvm de divisore 44 qvaereretvr, annvs 19001900 ita acciperet anteqvam ad exceptionem perveniretvr. Vestigivm pro qvattvor annis, vno pro qvoqve casv: 20002000 (gradvs 1: ita), 19001900 (gradvs 2: non), 20242024 (gradvs 3: ita), 20232023 (gradvs 3: non).

  5. 4∣1900∧¬(400∣1900)4 \mid 1900 \wedge \neg (400 \mid 1900)

    Docvmentvm non tantvm ad calendaria pertinet: algorithmvs vno exemplo contrario refellitvr, et exempla contraria in marginibvs regvlarvm qvaervntvr, non in casibvs commvnibvs. Annos 20242024, 20202020 et 20162016 temptare nihil detexisset.

Problema solvtvm 3Qvot gyros divisio per svbtractiones faciat

Divisionem per svbtractiones svccessivas manv perseqvi cvm a=20a = 20 et b=5b = 5, et cvm a=0a = 0 et b=7b = 7. Deinde ostendere pro omni introitv admissibili algorithmvm post prorsvs qq gyros desinere eivsqve exitvm postcondicionem implere.

Solvtio

  1. 20=5⋅4+020 = 5 \cdot 4 + 0

    Vestigivm cvm a=20a = 20, b=5b = 5: rr per 2020, 1515, 1010, 55, 00 transit, et qq per 00, 11, 22, 33, 44. Qvinta examinatio, 0≥50 \geq 5, deficit. Exitvs: q=4q = 4, r=0r = 0. Hic casvs marginalis est divisio exacta: qvartvs gyrvs fit qvia 5≥55 \geq 5, et ideo condicio esse debet ≥\geq et non >>.

  2. 0=7⋅0+00 = 7 \cdot 0 + 0

    Vestigivm cvm a=0a = 0, b=7b = 7: prima examinatio, 0≥70 \geq 7, deficit; corpvs nvlla vice peragitvr. Exitvs: q=0q = 0, r=0r = 0, qvi rectvs est.

  3. b⋅(q+1)+(r−b)=b⋅q+r=a\dato{conserva}{b \cdot (q + 1) + (r - b) = b \cdot q + r = a}

    Relatio qvae conservatvr. Ante primvm gyrvm, b⋅q+r=b⋅0+a=ab \cdot q + r = b \cdot 0 + a = a. In qvoqve gyro rr deminvitvr valore bb et qq avgetvr valore 11, ita vt b⋅q+rb \cdot q + r non mvtetvr. Ergo aeqvalitas post qvemqve gyrvm valet.

  4. r0>r1>r2>⋯≥0r_0 > r_1 > r_2 > \cdots \geq 0

    Finis. Dvm repetitvr, r≥b>0r \geq b > 0, et rr natvralis est; in qvoqve gyro deminvitvr valore b≥1b \geq 1. Series natvralivm stricte decrescens finita est: repetitio desinit.

  5. a=b⋅q+r,0≤r<ba = b \cdot q + r, \quad 0 \leq r < b

    Cvm desinit, condicio defecit: r<br < b. Praeterea r≥0r \geq 0, qvia bb tantvm svbtrahitvr cvm r≥br \geq b. Vna cvm relatione qvae conservatvr, exitvs postcondicionem implet; et qvia qq gyros nvmerat, nvmervs gyrorvm qvotiens est.

Exercitationes in linea

Exercitatio 1Gyros nvmerare

Algorithmvm seqventem manv perseqvi et in capsa valorem qvem reddit scribere, solvm nvmervm.

  1. nn valorem 2929 accipit, et kk valorem 00 accipit.
  2. Dvm n>1n > 1 valet, gradvs 3 et 4 repete; cvm valere desinit, ad gradvm 5 perge.
  3. Si nn par est, nn valorem n/2n / 2 accipit; si impar est, nn valorem n+1n + 1 accipit.
  4. kk valorem k+1k + 1 accipit; ad gradvm 2 redi.
  5. Redde kk.

Navigatrvm responsvm tvvm statim inspicit, neqve aestimat.

Indicivm

Tabvlam fac: nn in primo gyro a 2929 ad 3030 transit. Vnvm gyrvm nvmera pro qvaqve mvtatione ipsivs nn, donec nn valorem 11 habeat.

Exercitatio 2Condicio qvae deest

Algorithmvs seqvens, forma contracta scriptvs, qvotientem et residvvm divisionis per svbtractiones svccessivas compvtare debet, sed ei deest condicio repetitionis. Seriem lineolarvm infimarvm condicione recta svbstitvere, nihil alivd mvtando.

Navigatrvm responsvm tvvm statim inspicit, neqve aestimat.

Indicivm

Algorithmvm manv perseqvere cvm a=10a = 10 et b=5b = 5: secvndvs gyrvs fieri debet qvamvis residvvm prorsvs 55 valeat.

Problemata proposita

Cviqve problemati indicivm est, qvod non nisi post conatvm aperire expedit, et responsvm, qvod indicio aperto apparet.

Problema propositvm 1Ordinem trivm nvmerorvm specificare

Specificationem problematis «tres nvmeros ordinare» scribere (introitvm, exitvm et relationem) et indicare qvas decisiones capere cogat qvas envntiatio non capiebat. Deinde confirmare specificationem pro introitv (5,2,5)(5, 2, 5) hos dvos exitvs reicere, (2,5,6)(2, 5, 6) et (2,5,5,5)(2, 5, 5, 5), et admittere (2,5,5)(2, 5, 5).

Indicivm

Exitvs «ordinatvs» nihil cvm introitv commvne habere potest. Qvae condicio nvmeros exitvs cvm nvmeris introitvs conivngit, repetitis inclvsis? Crescens an decrescens? Strictvs an non?

Responsvm

Introitvs: tres nvmeri xx, yy, zz. Exitvs: tres nvmeri uu, vv, ww. Relatio: u≤v≤wu \leq v \leq w, et (u,v,w)(u, v, w) est permvtatio ipsivs (x,y,z)(x, y, z), id est eosdem valores cvm eisdem repetitionibvs continet. Decisiones qvas envntiatio non capiebat: directio (hic a minimo ad maximvm); ordinem non esse strictvm (≤\leq et non <<, qvia cvm valoribvs repetitis ordo strictvs fieri non potest); et exitvm permvtationem esse debere. (2,5,6)(2, 5, 6) ordinatvs est sed 66 continet qvi non aderat; (2,5,5,5)(2, 5, 5, 5) qvattvor valores habet; (2,5,5)(2, 5, 5) vtramqve condicionem implet. Sine condicione permvtationis, (0,0,0)(0, 0, 0) exitvs rectvs pro qvolibet introitv esset.

Problema propositvm 2Cifrae nvmeri, a dextra ad sinistram

Algorithmvm gradibvs nvmeratis scribere qvi natvralem nn accipiat et cifras eivs ab vltima ad primam reddat (pro 40724072 reddit 22, 77, 00, 44), solvm qvotiente et residvo divisionis per 1010 vtendo. Evm manv perseqvi pro 40724072 et pro 00, et ostendere evm pro omni nn desinere.

Indicivm

Residvvm divisionis per 1010 vltima cifra est, et qvotiens est nvmervs sine ea. Decerne vtrvm condicio ante an post cifram redditam qvaeratvr, et vide qvid fiat cvm n=0n = 0, qvi vnam cifram habet.

Responsvm

Algorithmvs rectvs: (1) redde residvvm divisionis ipsivs nn per 1010; (2) nn valorem qvotientis divisionis ipsivs nn per 1010 accipit; (3) si n>0n > 0, ad gradvm 1 redi; sin minvs, desine. Qvaestio post corpvs ponitvr, ita vt corpvs saltem semel peragatvr: pro n=0n = 0 reddit 00, qvae vnica eivs cifra est. Si in initio qvaereretvr («dvm n>0n > 0»), pro n=0n = 0 nihil redderetvr; is est error casvm obliviscendi qvo repetitio non peragitvr. Vestigivm pro 40724072: reddvntvr 22, 77, 00, 44, et nn per 407407, 4040, 44, 00 transit. Finis: varians est nn, natvralis; si ad gradvm 1 reditvr, id fit qvia n>0n > 0, et pro n≥1n \geq 1 qvotiens per 1010 stricte minor est qvam nn, ita vt nn in qvoqve gyro stricte decrescat.

Problema propositvm 3Nvmmi pro pecvnia reddenda

Praesto svnt nvmmi 5050, 1010 et 11 vnitatvm, copia illimitata. Specificatio: introitvs, natvralis mm; exitvs, tres natvrales c50c_{50}, c10c_{10}, c1c_1 cvm 50c50+10c10+c1=m50 c_{50} + 10 c_{10} + c_1 = m et minimo nvmero nvmmorvm, c50+c10+c1c_{50} + c_{10} + c_1. Qvaedam persona algorithmvm seqventem proponit. Introitvm invenire qvo deficit, qvodqve vitivm explicare et corrigere.

  1. c50c_{50}, c10c_{10} et c1c_1 valorem 00 accipivnt.
  2. Si m≥50m \geq 50, c50c_{50} valorem c50+1c_{50} + 1 accipit et mm valorem m−50m - 50 accipit.
  3. Dvm m>10m > 10: c10c_{10} valorem c10+1c_{10} + 1 accipit et mm valorem m−10m - 10 accipit.
  4. Dvm m>0m > 0: c1c_1 valorem c1+1c_1 + 1 accipit et mm valorem m−1m - 1 accipit.
  5. Redde c50c_{50}, c10c_{10} et c1c_1.
Indicivm

Svmma nvmmorvm semper est mm; qvod deficere potest est eorvm nvmervs. Tempta mvltiplvm exactvm ipsivs 1010 et svmmam maiorem qvam 100100, et te ipsvm interroga qvo modo gradvs conivngendi gradvs 2 vtatvr et qvo vti debeat.

Responsvm

Dvo vitia svnt. Primvm, gradvs 3 adhibet m>10m > 10: cvm m=10m = 10 nvllvm nvmmvm 1010 reddit et decem nvmmos 11 reddit, pro vno. Secvndvm, gradvs 2 decisio est vbi repetitio reqviritvr: cvm m=120m = 120 algorithmvs, vt scriptvs est, vnvm nvmmvm 5050, sex 1010 et decem 11 reddit (septendecim nvmmos), et etiam gradv 3 iam correcto vnvm 5050 et septem 1010 redderet (octo), pro dvobvs 5050 et dvobvs 1010 (qvattvor). Introitvs m=100m = 100 ambo vitia ostendit: algorithmvs vnvm 5050, qvattvor 1010 et decem 11 reddit, qvindecim nvmmos, pro dvobvs. Correctio: gradvs 2, «dvm m≥50m \geq 50, …»; gradvs 3, «dvm m≥10m \geq 10, …». Sic correctvs algorithmvs semper maximvm nvmmvm qvi capitvr svmit, et cvm his tribvs nvmmis id minimvm nvmervm dat: cifra vnitatvm ipsivs mm nvmmis 11 tantvm solvi potest, et ex eo qvod restat expedit qvam plvrimvm nvmmis 5050 solvere, qvia qvinqve 1010 tantvm valent qvantvm vnvs 5050. Cvm aliis nvmmis, exempli gratia 11, 33 et 44 pro m=6m = 6, semper maximvm svmere minimvm iam non dat (4+1+14 + 1 + 1 contra 3+33 + 3).