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
- Ordinem argvmentorvm partis describere et explicare qvid qvaeqve lectio seqventi conferat.
- 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.
- Exemplo explicare iter qvod pars percvrrere docet: ab envntiatione ad specificationem, a specificatione ad algorithmvm et ab algorithmo ad programma qvod compilatvr et exseqvitvr.
- 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.
Antequam vnitatem incipias, pvnctvm vnde proficisceris metire. Brevis est sui ipsivs probatio: non aestimatvr, et eivs exitvs in solo tvo navigatro servatvr.
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?
Est divisio cvm decimalibvs, non integra: folia non dividvntvr, et qvaestio qvaerit qvot svpersint.Qvotientem svrsvm rotvndare folia postvlat qvae non svnt; residvvm divisionis integrae nvmqvam negativvm est cvm dividendvs et divisor positivi svnt.Residvvm cvm portione decimali qvotientis confvndit: residvvm foliis nvmeratvr, non fractionibvs orbis.Est divisio integra: qvotiens est maximvs nvmervs orbivm integrorvm, et residvvm qvod svperest, qvod semper minvs est qvam divisor. Cvrsvs ea a primo programmate vtitvr, et in C++ operatores proprios habet.Repete: A problemate ad algorithmvm
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?
Ordo envmerationis non est ordo exsecvtionis: eo servato epistvla mitteretvr anteqvam exsisteret.Eventvs ex ordine pendet: qvod post missionem adivngitvr non pervenit.Epistvlam sine accipiente et sine adivncto mittit; gradvs posteriores eam iam non mvtant.Qvidam gradvs ex aliis pendent (nec epistvlae non apertae qvicqvam adivngi potest, nec iam missa compleri), alii non. Has dependentias agnoscere primvm est qvod scriptio algorithmi postvlat.Repete: A problemate ad algorithmvm
Qvaestio 3Ex vnitatibvs prioribvsPlica servata est in
C:\Users\ana\programas\suma.cpp. Qvod est eivs nomen, qvae extensio, et in qvo receptacvlo est?Receptacvlvm qvod plicam continet cvm ipsa plica confvndit: nomen est vltimvm viae membrvm.Extensio ad nomen pertinet; qvaedam systemata eam sva sponte celant, et cvrsvs postvlat vt ostendatvr, qviasuma.cppetsuma.exeplicae admodvm diversae svnt.C:est discvs in qvo via incipit, non extensio.Via receptacvla a radice vsqve ad plicam envmerat; extensio, id qvod vltimvm pvnctvm nominis seqvitvr, dicit qvale contentvm plica habeat:.cppest codex fontis C++. Vt compiletvr, terminale in eo receptacvlo consistere debet vel viam integram accipere.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?
Qvaestionem cvivs responsio est «non» non nvmerat, qvae et ipsa fit: sine ea nemo sciret aqvam addere desinendvm esse.Textvm processvs cvm eivs exsecvtione confvndit: condicio semel scripta est, sed in qvoqve orbe aestimatvr.Intervalla inter cochlearia nvmerat, non qvaestiones.In omni repetitione qvae ante actionem qvaerit, condicio semel plvs qvam corpvs aestimatvr: vltima qvaestio est ea qvae exire sinit. Processvm manv perseqvi, nvmerando, id sine ambigvitate ostendit.Repete: A problemate ad algorithmvm
Qvaestio 5Qvod ex his praeceptis qvilibet homo, vel machina, eodem prorsvs modo seqvi potest?
Ex gvstv exseqventis pendet: dvae personae id diverse seqverentvr, et machina gvstvm non habet.Non dicit qvoties neqve qvid sit bene se habere: condicio finis examinari non potest.Nvmeros non figit: «magnvs» non est qvantitas, et divisor nihil esse posset.Dicit qvae operatio fiat, qvo dato et vbi eventvs maneat; nihil ex ivdicio exseqventis pendet. Haec praecisio vna est ex tribvs algorithmi postvlationibvs.Repete: A problemate ad algorithmvm
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?
Compilator textvm convertit, non exseqvitvr, et data qvae vsor scribet non novit.Conivnctor membra programmatis conivngit; nec calcvlos facit nec data videt.Cvm aliis datis eadem plica exsecvtabilis fvngitvr: vitivm est in eo qvod programma cvm illo dato facit, non in instrvmentis.Qvod ex solo textv programmatis pendet compilando vel conivngendo detegitvr; qvod ex datis, solvm exseqvendo. Ideo programma qvod compilatvr non eo ipso erroribvs caret.Repete: Programmata, compilatores et C++
Qvaestio 7
Visual Studio Codecvm extensione sva C++ institvtvm est, et cvmg++ --versionin terminali petitvr, id respondet seg++non agnoscere. Qvid maxime verisimile est?Extensio compilatorem non continet neqve in eo qvod terminale invenit intervenit.Mandatvmg++ --versionnvllvm programma compilat: solvm versionem rogat, et terminale ne invenit qvidem qvem rogaret.Editor nihil refert: qvod deest est compilator, in qvolibet editore.Editor non compilat: compilatorem separatvm vocat, qvi institvtvs esse et a terminali inveniri debet. Extensio C++ ad codicem scribendvm adivvat, sed compilatorem non affert.Repete: Instrvmentarivm institvere in Windows, macOS et Linux
Qvaestio 8Compilator nvntivm scribit qvod incipit a
warning:et, eo non obstante, plicam exsecvtabilem efficit. Qvid significat?Id esset error (error:), et tvm nvlla plica exsecvtabilis esset.Cvm datis temptatis fvngi nihil de ceteris ostendit; monitvm neglectvm saepe est error crastinvs.Plica exsecvtabilis normalis est; dvbivm est qvod programma in loco indicato facit.Error impedit qvominvs plica exsecvtabilis obtineatvr; monitvm id sinit, sed codicem svspectvm indicat. Mvlta monita vitia vera prodvnt, et ideo cvrsvs programmata postvlat qvae sine vllo compilentvr.Qvaestio 9Vbi incipit exsecvtio programmatis C++?
Primvs versvs plervmqve est directiva#include, qvae ante compilationem tractatvr neqve exseqvitvr.Ordo in plica pvnctvm ingressvs non decernit; id decernit nomenmain.Norma nomen pvncti ingressvs figit; non eligitvr in mandato compilationis.mainest pvnctvm ingressvs: systema eam vocat cvm programma incohat, et programma desinit cvm illa desinit. Programma sinemaincompilatvr, sed non conivngitvr.Repete: Anatomia programmatis
Qvaestio 10Programma
int age{};declarat,std::cin >> age;exseqvitvr vt aetatem legat, et vsorabcscribit. Qvid accidit?Non consistit: pergit qvasi lectvra bene cessisset, et ideo vitivm pericvlosvm est.Variabilisintsolos integros servat; litterae neqve in nvmervm convertvntvr neqve servantvr.Lectvra non iterat: semel deficit et flvxvm in errore relinqvit.Lectvra integri deficit cvm in litteram incidit; norma dicit variabilem 0 accipere et lectvras seqventes nihil facere donec error tractetvr. Si programma lectvram non examinat, conclvsiones falsas sine vllo signo scribit.Repete: Introitvs, exitvs et errores
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 Codecvm 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
mainet nvmervs exitvs, spativm nominvmstd, 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::printetstd::println, cvm specificationibvs formae ad latitvdinem et digitos decimales, et legit perstd::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 , residvo minore qvam divisore . 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.
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: , vnde 2 horae et 184 secvndae prodevnt; , 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 est svmma, , vbi et . Secvnda est algorithmvs: gradvs praecisi qvi, pro qvolibet introitv admissibili, evm exitvm efficivnt.
- valorem accipit qvotientis per .
- valorem accipit qvotientis per residvi per .
- valorem accipit residvi per .
- Scribere , dvo pvncta, dvobvs digitis, dvo pvncta et 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.
#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);}7384Dvratio in secvndis: 7384 s = 2:03:04Versvs 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.