Bost aukerako menu baten bitartez gidatzen den programa bat daukagu. Aukerak hautatzeko karaktereak erabiltzen dira eta bostetatik aukera batek programa bukarazten du. Hautatutako aukerari esker CASE-OF agindu baten bitartez gidatzen da programaren exekuzioa. Menua aurkezteko eta aukeraren bat hautatzeko lana fncAukeraHautatu funtzio honek egiten du:
Programa nagusia, funtsean, prozesu errepikakor bat da, errepikapenak eteteko eta programatik irteteko I edo i karakterea sartu behar da. Deskriba ditzagun, banan-banan gainerako lau aukerak, eta ikus dezagun ere programaren kodea.
fncAukeraHautatu funtzioan irakurritako A edo a karakterea programa nagusira helduko da eta programa nagusian DiagonalkiPantailaratu prozeduraren sarrrera den karakterea irakurriko da (prozedura horrek datu bakar bat behar du, alfabeto larriaren letra bat). DiagonalkiPantailaratu prozedurak jarraian erakusten den mezua emateko gai da:
fncAukeraHautatu funtzioan irakurritako B edo b karakterea programa nagusira helduko da eta programa nagusian TaulaPantailaratu prozeduraren sarrrera den zenbaki osoa irakurriko da (prozedura horrek datu bakar bat behar du, 0 eta 9 arteko zenbaki osoa). TaulaPantailaratu prozedurak jarraian erakusten den mezua emateko gai da:
fncAukeraHautatu funtzioan irakurritako C edo c karakterea programa nagusira helduko da eta programa nagusian fnrErroKuboaKalkulatu funtzioaren sarrrera den zenbaki erreala irakurriko da (funtzio horrek datu bakar bat behar du, zenbaki erreala eta positiboa). fnrErroKuboaKalkulatu funtzioaren deia egin ondoren, programa nagusian jarraian erakusten den mezuaren bezalakoak agertuko dira:
fncAukeraHautatu funtzioan irakurritako D edo d karakterea programa nagusira helduko da eta programa nagusian fnboFibonaccikoaDa funtzioaren sarrrera den zenbaki erreala irakurriko da (funtzio horrek datu bakar bat behar du, 3 eta 17000 arteko zenbaki osoa). fnboFibonaccikoaDa funtzioaren deia egin ondoren, programa nagusiari balio boolear itzuliko dio eta balio boolear horren arabera programak honelako mezuak erakutsiko ditu:
Hona hemen MenuBatAzpiprogramaz.pas adibidearen iturburu-programa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | program MenuBatAzpiprogramaz ; uses crt ; function fncAukeraHautatu: char ; var cHautapena: char ; begin writeln ( '==========================Menua==========================' ) ; writeln ( ' A Alfabeto zatia diagonalki' ) ; writeln ( ' B Biderkatzeko taula marraztu' ) ; writeln ( ' C Zenbaki baten erro kuboa Newton-Raphson bitartez' ) ; writeln ( ' D Zenbaki bat Fibonacciren sekuentziakoa da?' ) ; writeln ; writeln ( ' I Programatik irten' ) ; writeln ( '=========================================================' ) ; write ( ' Zure aukera: ' ) ; repeat cHautapena := readkey ; cHautapena := upcase(cHautapena) ; writeln (cHautapena) ; if (cHautapena < 'A' ) or (cHautapena > 'D' ) and (cHautapena <> 'I' ) then begin write ( 'Aukera ez da ondo hautatu. Berriro aukeratu: ' ) ; end ; until (cHautapena >= 'A' ) and (cHautapena <= 'D' ) or (cHautapena = 'I' ) ; fncAukeraHautatu := cHautapena ; end ; procedure DiagonalkiPantailaratu(cLetra: char ) ; var k: char ; iNon: integer ; begin writeln ( 'Alfabeto zatia diagonalki pantailaratu:' ) ; iNon := 15 ; for k:= 'A' to cLetra do begin writeln (k:iNon) ; iNon := iNon + 1 ; end ; writeln ; end ; procedure TaulaPantailaratu(iZbk : integer ) ; var k: integer ; begin writeln (iZbk, ' zenbakiaren biderkatzeko taula:' ) ; for k:= 1 to 10 do begin writeln (k: 35 , ' x ' , iZbk, ' = ' , k*iZbk: 2 ) ; end ; writeln ; end ; function fnrErroKuboaKalkulatu(rZbk: real ): real ; var rEpsilon, rKuboa, rAurrekoa : real ; begin rEpsilon := 0.000000001 ; rKuboa := rZbk / 3.0 ; (* lehendabiziko hurbilketa *) repeat rAurrekoa := rKuboa ; rKuboa := (rZbk / (rAurrekoa*rAurrekoa) + 2 *rAurrekoa) / 3 ; rKuboa := rAurrekoa - (rAurrekoa*rAurrekoa*rAurrekoa - rZbk) / ( 3 *rAurrekoa*rAurrekoa) ; //writeln('rAurrekoa =':14, rAurrekoa:22:16, 'rKuboa =':20, rKuboa:22:16) ; until abs (rKuboa - rAurrekoa) <= rEpsilon ; fnrErroKuboaKalkulatu := rKuboa ; end ; function fnboFibonaccikoaDa(iZbk: integer ): boolean ; var iFibo1, iFibo2, iFibo3: integer ; begin iFibo1 := 0 ; iFibo2 := 1 ; iFibo3 := iFibo1 + iFibo2 ; while iFibo3 < iZbk do begin iFibo1 := iFibo2 ; iFibo2 := iFibo3 ; iFibo3 := iFibo1 + iFibo2 ; writeln ( 'iFibo3 = ' : 20 , iFibo3) ; end ; if iFibo3 = iZbk then fnboFibonaccikoaDa := TRUE else fnboFibonaccikoaDa := FALSE ; end ; { ----------------------PROGRAMA NAGUSIA---------------------- } var cAukera, cItxoin, cLetra: char ; iZbk: integer ; rZbk, rKuboa: real ; begin repeat clrscr ; cAukera := fncAukeraHautatu ; writeln ; case cAukera of 'A' : begin repeat write ( 'A eta Z arteko letra bat eman: ' ) ; readln(cLetra) ; cLetra := upcase(cLetra) ; until (cLetra >= 'A' ) and (cLetra <= 'Z' ) ; DiagonalkiPantailaratu(cLetra) ; end ; 'B' : begin repeat write ( '0 eta 9 arteko zenbaki osoa eman: ' ) ; readln(iZbk) ; until (iZbk >= 0 ) and (iZbk <= 9 ) ; TaulaPantailaratu(iZbk) ; end ; 'C' : begin repeat write ( 'Zenbaki erreala eta positiboa eman: ' ) ; readln(rZbk) ; until rZbk >= 0.0 ; rKuboa := fnrErroKuboaKalkulatu(rZbk) ; writeln (rZbk: 0 : 5 , '-ren erro kuboa: ' , rKuboa: 0 : 5 ) ; end ; 'D' : begin repeat write ( '3 eta 17000 arteko zenbaki osoa eman: ' ) ; readln(iZbk) ; until (iZbk >= 3 ) and (iZbk <= 17000 ) ; if fnboFibonaccikoaDa(iZbk) then writeln (iZbk , ' Fibonacciren sekuentziakoa da' ) else writeln (iZbk , ' ez da Fibonacciren sekuentziakoa' ) end ; 'I' : begin writeln ( 'Programa amaitzera doa. Edozein tekla sakatu.' ) ; end ; end ; cItxoin := readkey ; (* emaitzak ikusi ahal izateko itxaron *) writeln (cItxoin) ; (* konpilazio abisua kentzeko *) until cAukera= 'I' ; end . |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.