Ad argvmentvm transi
Topos Uranos

Svmmarivm

Haec lectio primam cvrsvs partem aperit, primis gradibvs in programmatione per C++ dedicatam. Explicat ad qvid pars valeat: evm qvi nvmqvam programmavit dvcere a problemate sermone commvni envntiato vsqve ad programma qvod compilatvr, exseqvitvr, data legit et eventvs scribit, ita vt sciat qvid qvodqve instrvmentvm in itinere fecerit; sex eivs lectiones exhibet et filvm qvo nectvntvr, ab algorithmo Latine scripto vsqve ad errorvm descriptionem; pavca qvae pro cognitis habentvr definit, id est arithmeticam scholarem, consvetvdinem praeceptis scriptis parendi et vsvm plicarvm ac receptacvlorvm; qvaestionem qvam pars solvit proponit, qvomodo calcvlvs qvem manv facere scimvs in processvm convertatvr qvem machina sine errore et sine lassitvdine exseqvitvr; et ostendit qvo dvcat, in partibvs seqventibvs et in cvrsv Programmatio Lingva C++ II.

Proposita discendi

  1. Ordinem argvmentorvm partis describere et explicare qvid qvaeqve lectio seqventi conferat.
  2. Cognitiones praevias qvas cvrsvs svpponit agnoscere (cvm integris et decimalibvs operari, qvotientem et residvvm compvtare, praeceptis scriptis parere, plicam in certo receptacvlo servare) easqve, si opvs est, repetere.
  3. Exemplo explicare iter qvod pars percvrrere docet: ab envntiatione ad specificationem, a specificatione ad algorithmvm et ab algorithmo ad programma qvod compilatvr et exseqvitvr.
  4. Agnoscere qvid fine partis facere scire exspectetvr, idqve ab eis distingvere qvae in partibvs seqventibvs discentvr.

Probatio initialis

Anteqvam pars percvrritvr, initivm ipsvm metiri expedit. Haec probatio est svi ipsivs exploratio: nvlli censvrae svbicitvr, et solvm eivs propositvm est stvdivm dirigere. Cvm haec prima cvrsvs pars sit, nvllae svnt qvaestiones de partibvs svperioribvs; earvm loco tres primae examinant qvae cvrsvs pro cognitis habet: qvotientem et residvvm divisionis integrae, ordinem gradvvm processvs, et nomen, extensionem et receptacvlvm plicae. Septem seqventes ordine ideas praecipvas sex lectionvm partis attingvnt. Qvi nvmqvam programmavit eas recte solvere ne exspectet, neqve id refert: qvaeqve responsio, recta vel non, rem explicat et lectionem nominat qvae eam tractat. Eaedem facvltates in fine itervm metivntvr, in lectione synthesis.

Probatio initialis

Antequam vnitatem incipias, pvnctvm vnde proficisceris metire. Brevis est sui ipsivs probatio: non aestimatvr, et eivs exitvs in solo tvo navigatro servatvr.

  1. Qvaestio 1Ex vnitatibvs prioribvs47 folia inter 6 personas aeqvis portionibvs integris distribvvntvr, et qvae ad orbem integrvm non svfficivnt servantvr. Qvot accipit qvaeqve persona et qvot servantvr?

  2. Qvaestio 2Ex vnitatibvs prioribvsVt plica adivncta per epistvlam electronicam mittatvr, qvattvor gradvs svnt: A, inscriptionem accipientis scribere; B, «Mitte» premere; C, novam epistvlam aperire; D, plicam adivngere. Qvi ordo idonevs est?

  3. Qvaestio 3Ex vnitatibvs prioribvsPlica servata est in C:\Users\ana\programas\suma.cpp. Qvod est eivs nomen, qvae extensio, et in qvo receptacvlo est?

  4. Qvaestio 4Praeceptvm covinarivm dicit: «Si massa sicca est, cochlear aqvae addere et svbigere; repetere donec non sit». Massa exacte tria cochlearia postvlat vt sicca esse desinat. Qvoties qvaeritvr vtrvm massa sicca sit?

  5. Qvaestio 5Qvod ex his praeceptis qvilibet homo, vel machina, eodem prorsvs modo seqvi potest?

  6. Qvaestio 6Programma sine erroribvs et sine monitis compilatvr, cvm mvltis datis bene exseqvitvr, et cvm vno certo nvntio «division by zero» consistit. Qvo tempore error ortvs est?

  7. Qvaestio 7Visual Studio Code cvm extensione sva C++ institvtvm est, et cvm g++ --version in terminali petitvr, id respondet se g++ non agnoscere. Qvid maxime verisimile est?

  8. Qvaestio 8Compilator nvntivm scribit qvod incipit a warning: et, eo non obstante, plicam exsecvtabilem efficit. Qvid significat?

  9. Qvaestio 9Vbi incipit exsecvtio programmatis C++?

  10. Qvaestio 10Programma int age{}; declarat, std::cin >> age; exseqvitvr vt aetatem legat, et vsor abc scribit. Qvid accidit?

Qvae vnitas continet

Pars sex lectiones habet, qvae ordine iter a problemate ad programma fvngens percvrrvnt. Qvaeqve svperiorem svpponit, et prima nihil de lingva svpponit.

  • A problemate ad algorithmvm. Cvrsvs sine codice incipit, qvia algorithmvs programma antecedit. Lectio docet problema specificare per introitvm, per exitvm et per relationem inter ea (praecondicionem et postcondicionem); algorithmvm gradibvs nvmeratis sine ambigvitate describere; evm manv perseqvi tabvla vestigii; in eo seqventiam, decisionem et repetitionem agnoscere; et ostendere repetitionem desinere, per qvantitatem qvae in qvoqve orbe decrescit.
  • Programmata, compilatores et C++. Algorithmvs machinae scriptvs programma est, et programma C++ non exseqvitvr vt scribitvr: praeprocessor, compilator et conivnctor id in plicam exsecvtabilem convertvnt. Lectio haec tria stadia percvrrit, distingvit qvod compilando detegitvr ab eo qvod solvm exseqvendo apparet, exemplar compilatvm cvm interpretato comparat et normas lingvae in tempore collocat, vsqve ad C++23, qva cvrsvs vtitvr, et C++26, cvivs ad effectvm addvctio in compilatoribvs fit.
  • Instrvmentarivm institvere in Windows, macOS et Linux. Tres dvctvs integri, vnvs pro qvoqve systemate, ad compilatorem C++23 capacem et editorem Visual Studio Code cvm extensione sva C++ institvendos, ad confirmandvm omnia programmate tentaminis fvngi, et ad defectiones freqventes solvendas: compilatorem qvem terminale non invenit, versionem antiqvam et normam non petitam.
  • Compilare, exseqvi et configvrare. Cvrsvs laboris, id est emendare textvm, servare, compilare, exseqvi et legere, ex terminali et ex editore, cvm mandato cvrsvs. Lectio errores, qvi plicam exsecvtabilem impedivnt, a monitis distingvit, qvae codicem svspectvm indicant; detectores accendit (errorvm memoriae, AddressSanitizer, et modi agendi indefiniti, UndefinedBehaviorSanitizer), qvi programma dvm cvrrit observant; et explicat cvr exitvs signa aliena pro accentibvs et littera ñ ostendat.
  • Anatomia programmatis. Programma minimvm, membrvm post membrvm: directiva inclvsionis et capita, fvnctio main et nvmervs exitvs, spativm nominvm std, sententiae, clavsvrae et commentarii. Lectio docet errores strvctvrae corrigere nvntios compilatoris a primo legendo, et praecepta stili cvrsvs statvit.
  • Introitvs, exitvs et errores. Programma cvm rebvs externis commvnicat: scribit per std::print et std::println, cvm specificationibvs formae ad latitvdinem et digitos decimales, et legit per std::cin. Lectio ostendit qvid accidat cvm introitvs formam exspectatam non habet et qvomodo lectvra examinetvr, et partem clavdit errorvm descriptione secvndvm tempvs eorvm: compilationis, conivnctionis, exsecvtionis et logicae.

Filvm qvo nectvntvr est ipsivs programmatis. Prima lectio id concipit, secvnda explicat in qvid convertatvr, tertia instrvmenta institvit qvae id convertvnt, qvarta docet eis vti et avdire qvae dicvnt, qvinta id dissecat et sexta id cvm vtente colloqvi facit. Qvod si ita est, in fine partis discipvlvs adhvc minimvm de C++ scit, sed scit qvomodo cvm ea laboretvr, et id est qvod reliqvvs cvrsvs svpponit.

Qvae pro cognitis habentvr

Cvrsvs nvllam praeviam programmandi experientiam svpponit. Svpponit avtem tres facvltates qvas nvnc repetere expedit, si probatio initialis aliqvod dvbivm ostendit.

Prima est arithmetica scholaris: cvm integris et cvm decimalibvs operari, ordinem operationvm servare (mvltiplicationem et divisionem ante additionem et svbtractionem, nisi parentheses obstant) et, praesertim, qvotientem et residvvm divisionis integrae compvtare. Haec postrema gravior est qvam videtvr. 47 folia inter 6 personas dividere singvlis 7 dat et 5 svpersvnt, qvod scribitvr 47=6⋅7+547 = 6 \cdot 7 + 5, residvo 55 minore qvam divisore 66. C++ vnvm operatorem pro qvotiente habet et alivm pro residvo, et magna portio calcvlorvm cvm integris (secvndas in horas convertere, digitos nvmeri separare, decernere vtrvm nvmervs par sit) ad eos redigitvr. Qvi eam diligenter stvdere vvlt, cvm demonstratione sva invenit in cvrsv Algebra et Geometria I: Nvmeri, Fvnctiones et Geometria Plani; hic satis est eam compvtare scire.

Secvnda est consvetvdo praeceptis scriptis ad verbvm parendi et agnoscendi qvando praeceptvm non svfficiat vt sciatvr qvid faciendvm sit. Non agitvr de cognitione, sed de habitv animi: legere «sal ad gvstvm addere» et animadvertere hoc praeceptvm ex exseqvente pendere. Prima lectio partis hvnc habitvm in methodvm convertit.

Tertia est vsvs fvndamentalis compvtatri: receptacvlvm creare, in eo plicam nomine electo servare, extensionem nominis agnoscere (.cpp, .txt, .exe) et scire in qvo receptacvlo qvaeqve plica sit. Expedit iam nvnc systema ita configvrare vt extensiones ostendat, qvas qvaedam systemata, vt Windows, sva sponte celant: codex fontis suma.cpp et plica exsecvtabilis suma.exe plicae admodvm diversae svnt, et eas confvndere fons est errorvm absvrdorvm. Pars etiam docet terminali vti, ita vt id antea scire non sit necesse; satis est paratvm esse mandata scribere potivs qvam pvlsabvla premere. Programmata institvere postvlat deniqve id in proprio compvtatro facere posse; lectio de institvtione alternativam in linea indicat ei qvi non possit.

Lingva Anglica non svpponitvr. Nvntii compilatoris Anglice scripti svnt, et cvrsvs docet eos campvm post campvm legere, ita vt qvod in eis refert (plica, versvs, species vitii) intellegatvr sine lingvae peritia. Neqve vlla mathematica vltra scholarem svpponitvr: exempla divisione, mediis, tabvlis mvltiplicationis, notationibvs diervm et horis vtvntvr.

Qvaestio qvam vnitas solvit

Calcvlvs qvem manv facere scimvs nondvm programma est. Distantia inter vtrvmqve est qvod pars percvrrere docet, et problema simplex eam metiri sinit.

ExemplvmDvratio in horis, minvtis et secvndis

Chronometrvm dvrationem cvivsqve actionis vt nvmervm secvndarvm notat, exempli gratia 7384, et eam scribere volvmvs forma vsitata horarvm, minvtorvm et secvndarvm, minvtis et secvndis semper dvobvs digitis: 2:03:04. Manv calcvlvs est catena divisionvm: 7384=3600⋅2+1847384 = 3600 \cdot 2 + 184, vnde 2 horae et 184 secvndae prodevnt; 184=60⋅3+4184 = 60 \cdot 3 + 4, vnde 3 minvta et 4 secvndae prodevnt. Pro vna dvratione minvto fit. Pro mille avtem dvrationibvs actorvm calcvlvs manv longvs est et erroribvs obnoxivs, et opvs aptvm est vt machina id exseqvatvr.

Atqvi machina explicationem svperiorem accipere non potest. Textvm accipit in lingva programmandi, et ad evm textvm scribendvm privs tres qvaestiones solvendae svnt qvas calcvlvs manv implicitas relinqvebat. Prima est specificatio: qvid intret (nvmervs integer secvndarvm, non negativvs), qvid exeat (tres integri, horae, minvta et secvndae) et qvae relatio ea conivngat: si tt est svmma, t=3600h+60m+st = 3600 h + 60 m + s, vbi 0≤m<600 \leq m < 60 et 0≤s<600 \leq s < 60. Secvnda est algorithmvs: gradvs praecisi qvi, pro qvolibet introitv admissibili, evm exitvm efficivnt.

  1. hh valorem accipit qvotientis tt per 36003600.
  2. mm valorem accipit qvotientis per 6060 residvi tt per 36003600.
  3. ss valorem accipit residvi tt per 6060.
  4. Scribere hh, dvo pvncta, mm dvobvs digitis, dvo pvncta et ss dvobvs digitis.

Tertia est scriptio algorithmi in C++, forma exacta qvam lingva postvlat, eivsqve translatio in plicam exsecvtabilem per instrvmenta idonea. Programma seqvens id facit. Mvlta continet qvae nondvm explicata svnt: variabiles (lectio 2.1), operatores / et %, qvi qvotientem et residvvm divisionis integrae dant (lectio 3.1), lectvram per std::cin et specificationes formae (lectio 1.6); specificatio {:02} hvivs programmatis, qvae nvmervm in dvobvs locis scribit cifris a sinistra complens, varietas est latitvdinis qvam illa lectio docet et qva lectio 3.1 vtetvr. Nvnc satis est in eo qvattvor gradvs algorithmi agnoscere.

Programma in C++
#include <iostream>#include <print>​int main(){    int total{};  // variabiles in lectione 2.1 explicabvntvr    std::print("Dvratio in secvndis: ");    std::cin >> total;    const int hours{total / 3600};    const int minutes{total % 3600 / 60};    const int seconds{total % 60};    std::println("{} s = {}:{:02}:{:02}", total, hours, minutes, seconds);}
Data programmati inserenda
7384
Exitvs
Dvratio in secvndis: 7384 s = 2:03:04

Versvs 9 ad 11 svnt gradvs 1 ad 3, et versvs 12 est gradvs 4. Qvod eventvs cvm eo manv compvtato congrvit non casv fit, sed est examinatio qva omne programma dignvm est: id primvm temptare cvm dato cvivs responsio cognita est.

Programma qvaestionem solvit, sed pars etiam docet ei diffidere. Si vsor abc loco nvmeri scribit, lectvra deficit, total in nihilo manet et programma scribit, sine vllo signo alarmi, dvrationem esse 0:00:00: conclvsio falsa specie verae. Si dvrationem negativam scribit, specificatio non dicit qvid fieri debeat, et eventvs sensv caret. Si total / 360 loco total / 3600 scribitvr, programma compilatvr, exseqvitvr et eventvm erratvm dat, et nvllvm instrvmentvm id animadvertit. Qvodqve ex his vitiis ad diversam speciem erroris pertinet, qvae diverso tempore detegitvr et diverso modo qvaeritvr; vltima lectio partis ea in species distribvit. Ex eo seqvitvr qvaestionem qvam pars solvit non solvm esse hoc programma scribendi, sed sciendi cvr fvngatvr, qvibvs datis fvngi desinat et qvod instrvmentvm de qvoqve vitio monebit, vel non.

Ergo, in fine partis discipvlvs programmata hvivs speciei scribere, compilare et exseqvi poterit: pavca data introitvs, pavcos calcvlos in seqventia et pavcos eventvs forma scriptos. Nondvm poterit in C++ decisiones capere neqve praecepta repetere (qvamqvam in algorithmo Latine scripto poterit), neqve genvs cvivsqve dati cvm ivdicio eligere; id est qvod partes seqventes affervnt.

Qvo dvcat

Pars limen cvrsvs est. Qvod in ea sine explicatione adhibetvr postea explicatvr, hoc ordine. Pars 2, «Data et genera», variabiles explicat et qvomodo in memoria serventvr, limites integrorvm (et cvr calcvlvs rectvs exvndare possit), rotvndationem nvmerorvm cvm decimalibvs et conversiones inter genera. Pars 3, «Expressiones et operatores», arithmeticam C++ explicat, cvm qvotiente et residvo negativorvm, logicam condicionvm et qvod norma in expressione indefinitvm relinqvit. Pars 4, «Moderatio flvxvs», decisiones et repetitiones qvas prima lectio Latine scribit in C++ transfert, et docet ostendere circvitvm rectvm esse et desinere. Pars 5 programmata in fvnctiones dividit; 6 data composita introdvcit (series, vectores, tabvlas et tabvlaria), cvm algorithmis inqvisitionis et ordinationis eorvmqve svmptv; 7 textvm, introitvm firmvm et plicas tractat; et 8 programmata plvrivm plicarvm, tentamina systematica et emendatorem.

Post cvrsvm, Programmatio Lingva C++ II pergit cvm eis qvae hic consvlto omittit: indicatoribvs et memoria dynamica, classibvs cvm methodis, exemplaribvs propriis, fvnctionibvs anonymis et exceptionibvs. Nvllvm horvm argvmentorvm necessarivm est ad problemata hvivs cvrsvs solvenda, et ea differre sinit animvm intendere in id qvod in qvalibet lingva valet: specificare, algorithmvm designare, evm clare scribere et confirmare rectvm esse. Lectio synthesis hvivs partis hanc ipsam distinctionem colliget, inter id qvod C++ proprivm est et id qvod in qvamlibet alivm lingvam transferetvr.