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. Ikusi ditzagun, banan-banan gainerako lau aukerak.
A aukera
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:
B aukera
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:
C aukera
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:
D aukera
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:
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