Svmmarivm
Lectio Circvitvs docvit qvomodo repetitio scribatvr; haec docet qvomodo bene scribatvr et qvomodo sciatvr cvr recta sit. Incipit a formis ex qvibvs plvrimi circvitvs constrvvntvr (nvmerator, accvmvlator, maximvm et minimvm, excvbitor et vexillvm), qvarvm qvaeqve definitvr eo qvod variabilis eivs post qvemqve gyrvm significat. Haec observatio ad notionem centralem dvcit: invariantem, envntiationem de variabilibvs qvae ante primvm gyrvm et post qvemqve valet, et qvae, cvm condicione exitvs conivncta, eventvm implicat. Est indvctio in nvmero gyrorvm, et per eam circvitvs retrorsvm designatvr: primvm id qvod in fine valere debet, deinde invarians, postremo corpvs. Terminatio per variantem ivstificatvr, iam in lectione A problemate ad algorithmvm praesentatvm, et lectio tres circvitvs ostendit qvi non desinvnt: vnvm cvm condicione de nvmeris realibvs, vnvm cvm nvmeratore sine signo, vnvm cvivs nvmerator cvm signo exvndat, qvod est modvs agendi indefinitvs. Conclvditvr primo contactv cvm emendatore Visual Studio Code, qvi programma in versv sistit et variabiles eivs gyro post gyrvm ostendit.
Proposita discendi
- In circvitv formas nvmeratoris, accvmvlatoris, maximi et excvbitoris agnoscere, et eis vti ad novos circvitvs designandos.
- Invariantem circvitvs simplicis envntiare et confirmare evm in qvolibet gyro conservari.
- Terminationem circvitvs per qvantitatem integram ivstificare qvae decrescit et finita est.
- Exsecvtionem circvitvs cvm emendatore
Visual Studio Codeperseqvi, cvm pvncto interrvptionis et conspectv variabilivm.
Formae
Qvid variabilis significet
Plvrimi circvitvs non invenivntvr: componvntvr ex pavcis membris qvae in omnibvs programmatibvs redevnt. Qvodqve membrvm est variabilis cvm initialisatione ante circvitvm, renovatione intra evm et, praesertim, significatione qvae post qvemqve gyrvm valet. Membra per significationem, non per formam, cognoscere id est qvod sinit ea sine errore conivngere.
- Nvmerator valet qvot data tractata sint (vel qvot condicioni satisfaciant). Initialisatvr ad 0, qvia ante primvm gyrvm nvllvm tractatvm est, et renovatvr per
++count, tantvm cvm aliqvid nvmerandvm est. - Accvmvlator valet conivnctionem datorvm tractatorvm: svmmam eorvm, prodvctvm. Initialisatvr ad elementvm nevtrvm operationis (0 pro svmma, 1 pro prodvcto), qvia svmma nvllorvm datorvm est 0 et prodvctvm nvllorvm datorvm est 1.
- Maximvm valet maximvm datorvm tractatorvm, et minimvm, minimvm. Maximvm nvllorvm datorvm non exstat: ideo initialisatvr primo dato, non nvmero temere electo.
- Excvbitor est valor introitvs qvi non est datvm, sed signvm data finita esse. Forma postvlat vt semel ante circvitvm legatvr et itervm in fine corporis, vt fecit lectio Circvitvs vsqve ad nihilvm svmmans, ita vt condicio qvemqve valorem examinet anteqvam tractetvr, et excvbitor nvmqvam pro dato nvmeretvr.
- Vexillvm est
boolqvod indicat vtrvm aliqvid vmqvam inter data tractata acciderit. Initialisatvr adfalseet intruetransit primo cvm accidit; nvllvs gyrvs posterior id adfalseredvcit.
Exemplvm cvm omnibvs membris
Diarivm plvviae millimetra singvlis diebvs delapsa notat. Programma primvm limen legit, deinde mensvras plvrivm diervm, nvmero negativo terminatas, qvi mensvra possibilis non est et excvbitoris loco est; scribit qvot mensvrae sint, mediam earvm, maximvm, qvot dies limen svperaverint et vtrvm aliqvis dies sine plvvia fverit.
#include <iostream>#include <print>int main(){ double threshold{}; std::cin >> threshold; int count{0}; // nvmerator: mensvrae tractatae int aboveCount{0}; // nvmerator: mensvrae svpra limen double total{0.0}; // accvmvlator: svmma mensvrarvm double largest{0.0}; // maximvm: valet tantvm si count > 0 bool dryDay{false}; // vexillvm: dies sine pluvia fvit double value{}; std::cin >> value; while (std::cin && value >= 0.0) { if (count == 0 || value > largest) { largest = value; } ++count; total += value; if (value > threshold) { ++aboveCount; } if (value == 0.0) { dryDay = true; } std::cin >> value; } if (count == 0) { std::println("Nvllae mensvrae."); } else { std::println("Mensvrae: {}; media: {:.2f} mm", count, total / count); std::println("Maximvm: {:.1f} mm; dies svpra {:.1f} mm: {}", largest, threshold, aboveCount); std::println("Dies sine pluvia: {}", dryDay ? "ita" : "non"); }}104.5 0 12.5 21.5 7.5 -1Mensvrae: 5; media: 9.20 mmMaximvm: 21.5 mm; dies svpra 10.0 mm: 2Dies sine pluvia: itaQvattvor decisiones commentarivm merentvr. Condicio count == 0 || value > largest maximvm primo dato initialisat sine lectvra separata: in primo gyro nvmerator 0 valet et assignatio semper fit; in seqventibvs, tantvm si datvm maximvm svperat. Comparatio value == 0.0 exacta est, qvia valor lectvs est, non compvtatvs: cifra 0 in nihilvm exactvm convertitvr, et cavtio lectionis Nvmeri virgvlae flvitantis contra == ad eventvs operationvm pertinet. Condicio circvitvs std::cin continet, vt introitvs qvi sine excvbitore deficit etiam circvitvm finiat. Et media tantvm compvtatvr si mensvrae svnt: cvm count aeqvali 0, total / count esset , qvod in virgvla flvitante non est error, sed valor «non nvmervs», qvem programma sine monito scriberet.
Demonstratio
Ante circvitvm: limen est 10, nvmeratores et accvmvlator valent 0, vexillvm falsvm est, et prima mensvra, 4.5, iam lecta est. Maximvm valet 0, sed hic valor nihil significat dvm
count0 est.Primvs gyrvs:
countest 0, ita vt 4.5 maximvm fiat; nvmerator ad 1 ascendit et svmma ad 4.5. Legitvr 0.Secvndvs gyrvs: 0 maximvm non svperat, sed vexillvm tollit. Legitvr 12.5.
Tertivs gyrvs: 12.5 novvm maximvm est et limen svperat:
aboveCountad 1 ascendit. Legitvr 21.5.Qvartvs gyrvs: 21.5 novvm maximvm est et limen qvoqve svperat. Legitvr 7.5.
Qvintvs gyrvs: 7.5 nec maximvm nec
aboveCountmvtat; svmma ad 46 pervenit. Legitvr .Condicio examinat, qvi negativvs est: circvitvs finitvr sine eo tractato. Media est .
Animadvertendvm est in qvoqve ordine figvrae qvamqve variabilem significationem svam servare respectv mensvrarvm eatenvs tractatarvm: total est svmma earvm, largest maximvm earvm, dryDay indicat vtrvm nihilvm inter eas fverit. Haec proprietas, qvae post qvemqve gyrvm valet, nomen habet.
Argvmentvm oneratvr…