Denove pri programada teknologio

    PRI LA STRUKTURO DE PROGRAMOJ

    Verkado de programoj ĉu por hejma komputero ĉu por pli granda oficeja aparato pli kaj pli okupas la homon en ĉiutaga laboro. Kutime la verkinto estas kontenta, se la programo funkcias. Profesia programisto devas pli forte antenti kelkajn aldonajn problemojn, ĉar li nur verkas la programon, li ne uzas ĝin, ofte eĉ ne plu zorgas pri ĝi. Aliaj tamen devas modifi ĝin, adapti ĝin al novaj cirkonstancoj aŭ forigi kaŝitajn erarojn. Sed ankaŭ amatoraj programistoj prefere konsideru bone legeblajn kaj kompreneblajn programojn, ĉar amatoro same transdonas sian programon al amiko, por ke tiu uzu ĝin, aŭ post kelka tempo volas aldoni iun alian funkcion. Tial mi volas skizi, kiel oni povas strukturigi siajn programojn kun la celo de pli facila legeblo.

    La ekzemplo, kiun mi uzas, estas triviala: La programo kalkulu, kiom da tagoj estas inter du tagoj, inkluzive de la limdatoj. Do la diferenco inter la 1-a de januaro kaj la 31-a de decembro estas 365 tagoj (se ne estas superjaro), inter la 10-a de aprilo kaj la 10-a de aprilo estas unu tago (!), inter la 30-a de aŭgusto kaj la 5-a de septembro estas 7 tagoj. La algoritmon montras fig. 1. en la formo de struktogramo.

    Tiu algoritmo estas facile transformebla en BASIC-programon. La linioj 610...690 en la ĉi-kuna programlisto montras ĝin.

    Sed videble mia programo estas multe pli longa ol tiu algoritmo. Mi dispartigas la programon en la jenajn segmentojn:

    • programkapo,
    • difina segmento,
    • teksta segmento,
    • procedura segmento.

    La procedura segmento estas plu disigebla en ĉef- kaj subproceduran segmentojn.

    La programkapo enhavas bazajn informojn pri la programo:

    • la nomon de la programo, eble kun aldonaj informoj pri la funkcio;
    • la nomon de la aŭtoro aŭ kolektivo;
    • la version (dato, versi-numero);
    • se necese, indikojn pri enigo, eligo, detektotaj eraroj, uzata operacia sistemo, eksteraj programoj ktp.

    La programkapo en mia programo troviĝas en la linioj 10...70. La nomita komputero atentigas pri la uzata BASIC-dialekto (la HC 900-BASIC permesas pli longajn variablonomojn, sed ne ordonon kiel "INPUT" A = "A").

    La difina segmento (linioj 90...160) listigas ĉiujn variablojn kaj konstantojn, en asembleraj programoj ankaŭ stor-adresojn.

    En PASCAL ĉiuj variabloj kaj konstantoj, eĉ subrutinoj devas esti difinitaj. Estas rekomendinde ankaŭ en BASIC-programoj noti kaj komentarii la variablojn, kvankam difino estas deviga nur por kampoj (DIM VE (12)).

    La tria segmento enhavas ĉiujn tekstojn. Ili ĉiam estas mesaĝo al homo. Tial oni preferu nacilingvajn tekstojn sen mallongigoj. Informo kiel ERR 13 estas pli-malpli neniondira. La teksta segmento en PASCAL apartenas al la difina parto, ĉar tekstoj estas traktataj kiel konstantoj. Oni estu ŝparema je mesaĝoj kadre de INPUT kaj OUTPUT-instrukcioj (en HC 900-BASIC ĉe INPUT-instrukcio ne eblas). Mi uzas la tekstojn en tiu programo kaj por la enigo (TT§, MT§) kaj por eraro-mesaĝoj (F§, TT§ kaj F§, MT§).

    Sekvas la esenca programo en la procedura segmento. Ĉi tie ni devas dispartigi la ĉefproceduron disde la subrutinoj. En PASCAL, kiel menciite, subrutinoj troviĝas devige en la difina segmento, do antaŭ la ĉefproceduro. En aliaj lingvoj oni metu ilin malantaŭ la ĉefproceduron. La diferenco-programo ne havas subrutinojn. La proceduro okupas la liniojn 230...780.

    La procedura segmento devas plenumi multajn taskojn prepare al kaj sekve de la ĉefa funkcio. Ĝi devas efektivigi la komunikadon inter homo kaj komputero (peti datumojn, aldonajn programdirektajn instrukciojn) kaj la komunikadon inter periferio kaj komputero (registri datumojn sur disko aŭ legi ilin, komuniki kun alia komputero, akcepti datumojn el uzina produktado...). En la aktuala programo estas demandataj la jaro (por ekkoni, ĉu estas superjaro) kaj la datoj, el kiuj la diferenco estu kalkulata. Tio estas plenumata en la linioj 300...310 kaj 410..:510. La linioj 730...780 direktas la programon, se la uzanto volas duafoje apliki ĝin. Tiam la jaro ne estas denove enigenda, sed plu uzata. Al la komunikado inter homo kaj komputero apartenas ankaŭ la eligo de rezultoj kaj aliaj mesaĝoj (linioj 550, 590 por erar-mesaĝoj, linio 720 por la rezulto).

    La ricevitajn datumojn la komputero devas (laŭ vojo ordonata de la programo!) kontroli pri eraroj kaj pri transpaso de limoj. Ekzemple ne ekzistas monato kun 35 tagoj, kaj ne eblas kalkuli "reen", do la diferencon inter la 4-a de aprilo kaj la 1-a de aprilo. Tion la komputero devas "scii". La erardetektado estas eksterordinare grava, kaj ne estas hazardo, ke ĝi eĉ en ĉi tiu eta programo okupas 9 liniojn. En la struktogramo (fig. 2.) mi apartigis la blokon de erardetektado por ĝin emfazi. Eraroj povas estiĝi kaj pro malĝustaj enigoj, kaj pro erara legado de-sur ekstera memorilo, kaj sekve de la algoritmo (dividado per nulo ks.); en ampleksaj kaj komplikaj programoj oni serĉas erarojn plurloke.

    La "resto" de la programo nun finfine prezentas la algoritmon mem. Tio estas la ŝarĝado de la vektoro kun la longecoj de la monatoj en la linioj 320...390 kaj la kalkulo de la diferenco (linioj 610...690). La struktogramo (fig. 1.) donas superrigardon kun la partoj proceduraj:

    • komunikado homo-komputero,
    • erardetektado,
    • algoritmo (ĉefa funkcio).

    Konklude ni memorigu jenon:

    Proceduro prezentata de grafika plano (struktogramo k.a.) kaj programo konsistas el pluraj egale gravaj funkcioj, kiuj speciale ĉe mikrokomputeroj elstaras ekster la originala tasko (komunikado, erar-detektado). Programo, kiu generas proceduron kaj estas redaktata de homo, havu strukturon, kiu amplekse permesas al alia fakulo rekapti la sencon kaj funkciadon de la programo.

    Michael LENNARTZ


    Fonto: revuo Fokuso, n-ro 1987/1, p. 37.

    Kunlaborinto: Vári Csilla
    STEB: http://www.eventoj.hu