class promptools; begin % ************************************************************ % * * % * Denne klassen inneholder verkt|y (prosedyrer) som * % * kan brukes til } lese inn enkle verdier (tall, tegn, * % * sannhetsverdier) som brukeren blir bedt om } skrive. * % * * % * F|lgende prosedyrer er deklarert: * % * * % * integer procedure be_om_int(prompt); text prompt; * % * ; * % * real procedure be_om_real(prompt); text prompt; * % * ; * % * character procedure be_om_char(prompt); text prompt; * % * ; * % * Boolean procedure be_om_bool(prompt); text prompt; * % * ; * % * text procedure be_om_text(prompt); text prompt; * % * ; * % * * % * Desuten fins de samme prosedyrene med engelske navn * % * og feilutskrifter: * % * * % * integer procedure ask_for_int(prompt); text prompt; * % * real procedure ask_for_real(prompt); text prompt; * % * character procedure ask_for_char(prompt); text prompt; * % * Boolean procedure ask_for_bool(prompt); text prompt; * % * text procedure ask_for_text(prompt); text prompt; * % * * % * Laget til bruk i undervisningen i IN105 * % * Programmerer: Bj|rn Kirkerud * % * * % ************************************************************ % Prosedyrer for } lese heltall: integer procedure be_om_int(prompt); text prompt; begin character c; integer tegn; ask(prompt); c := inchar; while c = ' ' do c := inchar; tegn := if c = '-' then -1 else +1; if c = '-' or c = '+' then c := inchar; if not digit(c) then begin message("Ulovlig tegn i heltall: '", c, "'. Pr|v p} nytt!"); be_om_int := be_om_int(prompt); end else begin sysin.setpos(sysin.pos - 1); be_om_int := tegn*inint; end; end; integer procedure ask_for_int(prompt); text prompt; begin character c; integer tegn; ask(prompt); c := inchar; while c = ' ' do c := inchar; tegn := if c = '-' then -1 else +1; if c = '-' or c = '+' then c := inchar; if not digit(c) then begin message("Illegal character in integer: '", c, "'. Try once more!"); ask_for_int := ask_for_int(prompt); end else begin sysin.setpos(sysin.pos - 1); ask_for_int := tegn*inint; end; end; % Prosedyrer for } lese reelle tall: real procedure be_om_real(prompt); text prompt; begin character c; integer tegn; ask(prompt); c := inchar; while c = ' ' do c := inchar; tegn := if c = '-' then -1 else +1; if c = '-' or c = '+' then c := inchar; if not (digit(c) or c = '.') then begin message("Ulovlig tegn i tall: '", c, "'. Pr|v p} nytt!"); be_om_real := be_om_real(prompt); end else begin sysin.setpos(sysin.pos - 1); be_om_real := tegn*inreal; end; end; real procedure ask_for_real(prompt); text prompt; begin character c; integer tegn; ask(prompt); c := inchar; while c = ' ' do c := inchar; tegn := if c = '-' then -1 else +1; if c = '-' or c = '+' then c := inchar; if not (digit(c) or c = '.') then begin message("Illegal character in number: '", c, "'. Try once more!"); ask_for_real := ask_for_real(prompt); end else begin sysin.setpos(sysin.pos - 1); ask_for_real := tegn*inreal; end; end; % Prosedyrer for } lese enkelt-tegn: character procedure be_om_char(prompt); text prompt; begin character c; ask(prompt); c := inchar; while c = ' ' and sysin.more do c := inchar; be_om_char := c; end; character procedure ask_for_char(prompt); text prompt; ask_for_char := be_om_char(prompt); % Prosedyrer for } lese sannhetsverdier: Boolean procedure be_om_bool(prompt); text prompt; begin character c; ask(prompt); c := inchar; while c = ' ' and sysin.more do c := inchar; be_om_bool := not(c = 'n' or c = 'N'); end; Boolean procedure ask_for_bool(prompt); text prompt; ask_for_bool := be_om_bool(prompt); % Prosedyrer for } lese tekst: text procedure be_om_text(prompt); text prompt; begin ask(prompt); be_om_text :- intext(80).strip; end; text procedure ask_for_text(prompt); text prompt; ask_for_text :- be_om_text(prompt); % To hjelpeprosedyrer: procedure ask(prompt); text prompt; begin outtext(prompt); breakoutimage; inimage; end; procedure message(t1, c, t2); text t1, t2; character c; begin outtext(t1); outchar(c); outtext(t2); outimage end; end promptools;