esempio coniugazione verbi latini regolari:due varianti

program attivo1;
(* coniugazione verbi latini attivi turbo pascal v.3 *)
(* coniugazione automatica su richiesta tempo e modo *)

const des1:array[1..84] of string[10]=('o','as','at','amus','atis','ant',
           'abam','abas','abat','abamus','abatis','abant','abo','abis','abit',
           'abimus','abitis','abunt',
           'i','isti','it','imus','istis','erunt',
           'eram','eras','erat','eramus','eratis','erant',
           'ero','eris','erit','erimus','eritis','erint',
           'em','es','et','emus','etis','ent',
           'm','s','t','mus','tis','nt',
           'erim','eris','erit','erimus','eritis','erint',
           'issem','isses','isset','issemus','issetis','issent',
           'a','ate','ato','ato','atote','anto',
           'are','isse','urum esse','uram esse','urum esse',
           'uros esse','uras esse','ura esse','ans','antis',
           'urus','ura','urum','andi','ando','andum','ando','um');
const des2:array[1..84] of string[10]=('eo','es','et','emus','etis','ent',
           'ebam','ebas','ebat','ebamus','ebatis','ebant','ebo','ebis','ebit',
           'ebimus','ebitis','ebunt',
           'i','isti','it','imus','istis','erunt',
           'eram','eras','erat','eramus','eratis','erant',
           'ero','eris','erit','erimus','eritis','erint',
           'eam','eas','eat','eamus','eatis','eant',
           'm','s','t','mus','tis','nt',
           'erim','eris','erit','erimus','eritis','erint',
           'issem','isses','isset','issemus','issetis','issent',
            'e','ete','eto','eto','etote','ento',
           'ere','isse','urum esse','uram esse','urum esse',
           'uros esse','uras esse','ura esse','ens','entis',
           'urus','ura','urum','endi','endo','endum','endo','um');
const des3:array[1..84] of string[10]=('o','is','it','imus','itis','unt',
           'ebam','ebas','ebat','ebamus','ebatis','ebant','am','es','et',
           'emus','etis','ent',
           'i','isti','it','imus','istis','erunt',
           'eram','eras','erat','eramus','eratis','erant',
           'ero','eris','erit','erimus','eritis','erint',
           'am','as','at','amus','atis','ant',
           'm','s','t','mus','tis','nt',
           'erim','eris','erit','erimus','eritis','erint',
           'issem','isses','isset','issemus','issetis','issent',
            'e','ite','ito','ito','itote','unto',
           'ere','isse','urum esse','uram esse','urum esse',
           'uros esse','uras esse','ura esse','ens','entis',
           'urus','ura','urum','endi','endo','endum','endo','um');
const des4:array[1..84] of string[10]=('io','is','it','imus','itis','iunt',
           'iebam','iebas','iebat','iebamus','iebatis','iebant',
           'iam','ies','iet',
           'iemus','ietis','ient',
           'i','isti','it','imus','istis','erunt',
           'eram','eras','erat','eramus','eratis','erant',
           'ero','eris','erit','erimus','eritis','erint',
           'iam','ias','iat','iamus','iatis','iant',
           'm','s','t','mus','tis','nt',
           'erim','eris','erit','erimus','eritis','erint',
           'issem','isses','isset','issemus','issetis','issent',
            'i','ite','ito','ito','itote','iunto',
           'ire','isse','urum esse','uram esse','urum esse',
           'uros esse','uras esse','ura esse','iens','ientis',
           'urus','ura','urum','iendi','iendo','iendum','iendo','um');

type stringa35=string[35];
var   rad1,rad2,rad3,rad:string[12];
      finale:string[3];
      coniugazione,modo:string[35];
      infinito:string[20];
      t,numero,c,d1,d2,dx:integer;

procedure testo(x,y:integer;stringa:stringa35);  (* stampa testi vari *)
begin
 gotoxy(x,y);
 writeln(stringa);
end;

procedure presenta;          (* presentazione scopo programma *)
begin
 writeln('il programma permette di coniugare i verbi regolari latini');
 writeln('della 1,2,3,4 coniugazione attiva');
 writeln('----------------------------------------------------------');
 writeln('viene richiesto il paradigma del verbo da coniugare');
 writeln('scrivere tutto in minuscolo:');
 writeln('presente,infinito,perfetto,supino');
 writeln('es.laudo,laudare,laudavi,laudatum');
 writeln('----------------------------------------------------------');
 writeln('.... opzioni:');
 writeln('.....coniugazione automatica dei tempi richiesti');
 writeln('.....possibile richiedere tempi e modi in vario ordine');
 writeln;
 writeln('premi return,prego');
 readln;
 clrscr;
end;

procedure fine;               (* fine operazione *)
begin
clrscr;
writeln('fine prova:arrivederci');
writeln('premi return,prego');
repeat until keypressed;
halt;                         (* ritorna a turbo pascal *)
clrscr;
end;

procedure pausa;
begin
 gotoxy(2,22);
 writeln('premi return,prego');
 repeat until keypressed;
 clrscr;
end;

procedure paradigma;              (* richiesta paradigma verbo*)
var lunghezza:integer;
    perfetto,prima,supino:string[20];
    termine:string[3];

begin
 writeln('SCRIVI PARADIGMA VERBO LATINO REGOLARE,come richiesto');
 writeln;
 writeln('scrivi prima forma indicativo presente:es.laudo');
 readln(prima);
 lunghezza:=length(prima);
 termine:=copy(prima,lunghezza-1,2);
 if (termine='eo') then dx:=2
  else dx:=3;
  repeat
 writeln('scrivi infinito verbo latino regolare:es.laudare');
 writeln('se forma errata o non regolare,viene ripetuta la richiesta');
 readln(infinito);
 lunghezza:=length(infinito);
 rad1:=copy(infinito,1,lunghezza-3);
 finale:=copy(infinito,lunghezza-2,3);
 until (finale = 'are') or (finale = 'ere') or (finale = 'ire');
 writeln('scrivi perfetto indicativo:es.laudavi');
 readln(perfetto);
 lunghezza:=length(perfetto);
 rad2:=copy(perfetto,1,lunghezza-1);
 writeln('scrivi forma del supino:es.laudatum');
 readln(supino);
 lunghezza:=length(supino);
 rad3:=copy(supino,1,lunghezza-2);
end;

procedure analisi;         (* riconoscimento coniugazione 1 2 3 4 *)
begin
 if (finale='are') then c:=1
  else if (finale='ere') and (dx=2) then c:=2
   else if (finale='ere') and (dx=3) then c:=3
    else if (finale='ire') then c:=4;

 case c of
 1:  coniugazione:='prima coniugazione';
 2:  coniugazione:='seconda coniugazione';
 3:  coniugazione:='terza coniugazione';
 4:  coniugazione:='quarta coniugazione';
 end;
end;

procedure tempo;          (* indicazione tempo da coniugare *)
begin
 clrscr;
 textcolor(4);
 writeln('scrivere numero tempo da coniugare');
 writeln('1...presente        indicativo');
 writeln('2...imperfetto      indicativo');
 writeln('3...futuro          semplice');
 writeln('4...perfetto        indicativo');
 writeln('5...piuccheperfetto indicativo');
 writeln('6...futuro          anteriore');
 textcolor(2);
 writeln('7...presente        congiuntivo');
 writeln('8...imperfetto      congiuntivo');
 writeln('9...perfetto        congiuntivo');
 writeln('10..piuccheperfetto congiuntivo');
 textcolor(3);
 writeln('11..imperativo      presente');
 writeln('12..imperativo      futuro');
 writeln('13..infinito        presente');
 writeln('14..infinito        perfetto');
 writeln('15..infinito        futuro');
 writeln('16..participio      presente');
 writeln('17..participio      futuro');
 writeln('18..gerundio              ');
 writeln('19..supino                ');
 writeln;
 writeln('0...per finire');
 writeln('-------------------------------');
 readln(numero);
 if (numero=0) then fine;
 textcolor(14);
 clrscr;
end;


procedure coniuga1;   (* coniugazione automatica su richiesta tempo *)
var a:integer;
begin
 textmode(1);
 textcolor(2);
 testo(2,2,modo);
 testo(2,3,coniugazione);
 testo(2,4,'verbo:'+infinito);
 writeln('----------------------------------');
 textcolor(14);
 for a:=d1 to d2 do
 begin
 case c of
 1:writeln(rad,des1[a]);
 2:writeln(rad,des2[a]);
 3:writeln(rad,des3[a]);
 4:writeln(rad,des4[a]);
 end;
 end;
 writeln('-----------------------------------');
end;

procedure decide;     (* stabilisce desinenze e radici da usare *)
begin
 case numero of
 1:begin d1:=1;d2:=6;rad:=rad1;modo:='presente indicativo';end;
 2:begin d1:=7;d2:=12;rad:=rad1;modo:='imperfetto indicativo';end;
 3:begin d1:=13;d2:=18;rad:=rad1;modo:='futuro semplice';end;
 4:begin d1:=19;d2:=24;rad:=rad2;modo:='perfetto indicativo';end;
 5:begin d1:=25;d2:=30;rad:=rad2;modo:='piuccheperfetto indicativo';end;
 6:begin d1:=31;d2:=36;rad:=rad2;modo:='futuro anteriore';end;
 7:begin d1:=37;d2:=42;rad:=rad1;modo:='presente congiuntivo';end;
 8:begin d1:=43;d2:=48;rad:=infinito;modo:='imperfetto congiuntivo';end;
 9:begin d1:=49;d2:=54;rad:=rad2;modo:='perfetto congiuntivo';end;
 10:begin d1:=55;d2:=60;rad:=rad2;modo:='piuccheperfetto congiuntivo';end;
 11:begin d1:=61;d2:=62;rad:=rad1;modo:='imperativo presente';end;
 12:begin d1:=63;d2:=66;rad:=rad1;modo:='imperativo futuro';end;
 13:begin d1:=67;d2:=67;rad:=rad1;modo:='infinito presente';end;
 14:begin d1:=68;d2:=68;rad:=rad2;modo:='infinito perfetto';end;
 15:begin d1:=69;d2:=74;rad:=rad3;modo:='infinito futuro';end;
 16:begin d1:=75;d2:=76;rad:=rad1;modo:='participio presente';end;
 17:begin d1:=77;d2:=79;rad:=rad3;modo:='participio futuro';end;
 18:begin d1:=80;d2:=83;rad:=rad1;modo:='gerundio';end;
 19:begin d1:=84;d2:=84;rad:=rad3;modo:='supino';end;
 end;
end;

procedure programma;        (* programma e scelta opzioni *)

begin
 clrscr;
 numero:=1;
 writeln('    opzione possibile:');
 writeln('    coniugazione automatica,senza interazione');
 paradigma;   (* chiede presente infinito  perfetto supino*)
 analisi;     (* ricerca coniugazione 1 2 3 4 *)
 testo(2,20,coniugazione);

 while numero <> 0 do
  begin
  tempo;       (* chiede tempo da coniugare *)
  decide;      (* stabilisce desinenze e radici da usare *)
  coniuga1;    (* coniugazione automatica singoli tempi *)
  pausa;
  end;
 numero:=0;
end;

begin       (* programma principale *)
 clrscr;
 textmode(2);
 presenta;  (* presentazione scopo programma *)
 programma;
end.

program latino;
(* coniugazione verbi latini turbo pascal v.5 *)
(* scritto con turbo v.3 e poi leggermente modificato *)

uses crt,printer;   (* printer per stampare su carta LST *)

const des1:array[1..84] of string[10]=('o','as','at','amus','atis','ant',
           'abam','abas','abat','abamus','abatis','abant','abo','abis','abit',
           'abimus','abitis','abunt',
           'i','isti','it','imus','istis','erunt',
           'eram','eras','erat','eramus','eratis','erant',
           'ero','eris','erit','erimus','eritis','erint',
           'em','es','et','emus','etis','ent',
           'm','s','t','mus','tis','nt',
           'erim','eris','erit','erimus','eritis','erint',
           'issem','isses','isset','issemus','issetis','issent',
           'a','ate','ato','ato','atote','anto',
           'are','isse','urum esse','uram esse','urum esse',
           'uros esse','uras esse','ura esse','ans','antis',
           'urus','ura','urum','andi','ando','andum','ando','um');
const des2:array[1..84] of string[10]=('eo','es','et','emus','etis','ent',
           'ebam','ebas','ebat','ebamus','ebatis','ebant','ebo','ebis','ebit',
           'ebimus','ebitis','ebunt',
           'i','isti','it','imus','istis','erunt',
           'eram','eras','erat','eramus','eratis','erant',
           'ero','eris','erit','erimus','eritis','erint',
           'eam','eas','eat','eamus','eatis','eant',
           'm','s','t','mus','tis','nt',
           'erim','eris','erit','erimus','eritis','erint',
           'issem','isses','isset','issemus','issetis','issent',
            'e','ete','eto','eto','etote','ento',
           'ere','isse','urum esse','uram esse','urum esse',
           'uros esse','uras esse','ura esse','ens','entis',
           'urus','ura','urum','endi','endo','endum','endo','um');
const des3:array[1..84] of string[10]=('o','is','it','imus','itis','unt',
           'ebam','ebas','ebat','ebamus','ebatis','ebant','am','es','et',
           'emus','etis','ent',
           'i','isti','it','imus','istis','erunt',
           'eram','eras','erat','eramus','eratis','erant',
           'ero','eris','erit','erimus','eritis','erint',
           'am','as','at','amus','atis','ant',
           'm','s','t','mus','tis','nt',
           'erim','eris','erit','erimus','eritis','erint',
           'issem','isses','isset','issemus','issetis','issent',
            'e','ite','ito','ito','itote','unto',
           'ere','isse','urum esse','uram esse','urum esse',
           'uros esse','uras esse','ura esse','ens','entis',
           'urus','ura','urum','endi','endo','endum','endo','um');
const des4:array[1..84] of string[10]=('io','is','it','imus','itis','iunt',
           'iebam','iebas','iebat','iebamus','iebatis','iebant',
           'iam','ies','iet',
           'iemus','ietis','ient',
           'i','isti','it','imus','istis','erunt',
           'eram','eras','erat','eramus','eratis','erant',
           'ero','eris','erit','erimus','eritis','erint',
           'iam','ias','iat','iamus','iatis','iant',
           'm','s','t','mus','tis','nt',
           'erim','eris','erit','erimus','eritis','erint',
           'issem','isses','isset','issemus','issetis','issent',
            'i','ite','ito','ito','itote','iunto',
           'ire','isse','urum esse','uram esse','urum esse',
           'uros esse','uras esse','ura esse','iens','ientis',
           'urus','ura','urum','iendi','iendo','iendum','iendo','um');

type stringa35=string[35];
var   rad1,rad2,rad3,rad:string[12];
      finale:string[3];
      coniugazione,modo:string[35];
      infinito:string[20];
      t,yx,numero,c,d1,d2,dx,pro,rs,re:integer;

procedure testo(x,y:integer;stringa:stringa35);  (* stampa testi vari *)
begin
 gotoxy(x,y);
 writeln(stringa);
end;

procedure presenta;          (* presentazione scopo programma *)
begin
 writeln('il programma permette di coniugare i verbi regolari latini');
 writeln('della 1,2,3,4 coniugazione attiva');
 writeln('----------------------------------------------------------');
 writeln('viene richiesto il paradigma del verbo da coniugare');
 writeln('scrivere tutto in minuscolo:');
 writeln('presente,infinito,perfetto,supino');
 writeln('es.laudo,laudare,laudavi,laudatum');
 writeln('----------------------------------------------------------');
 writeln('si offrono varie opzioni:');
 writeln('1....coniugazione automatica dei tempi richiesti');
 writeln('2....coniugazione interattiva e correzione errori');
 writeln('3....coniugazione automatica e stampa su carta');
 writeln('4....coniugazione sequenziale tempi da 1 a 19 ');
 writeln('.....in questo caso,premere return invece di numero tempo');
 writeln;
 writeln('.....si deve scrivere la forma richiesta:se errata viene ');
 writeln('.....stampata la forma corretta:conteggio errori ');
 writeln;
 writeln('.....possibile richiedere tempi e modi in vario ordine');
 writeln('.....possibile cambiare verbo o modalita-auto-interattiva');
 writeln;
 writeln('premi return,prego');
 readln;
 clrscr;
end;

procedure fine;               (* fine operazione *)
begin
clrscr;
case pro of
1:writeln('fine prova:arrivederci');
2:begin writeln('totale risposte esatte.....',re);
        writeln('totale risposte errate.....',rs);
        writeln('totale risposte............',re+rs);
  end;
end;
writeln('premi return,prego');
readln;
halt;
clrscr;
end;


procedure pausa;
begin
 gotoxy(2,22);
 writeln('premi return,prego');
 readln;
 clrscr;
end;

procedure paradigma;              (* richiesta paradigma verbo*)
var lunghezza:integer;
    perfetto,prima,supino:string[20];
    termine:string[3];

begin
 writeln('SCRIVI PARADIGMA VERBO LATINO REGOLARE,come richiesto');
 writeln;
 writeln('scrivi prima forma indicativo presente:es.laudo');
 readln(prima);
 lunghezza:=length(prima);
 termine:=copy(prima,lunghezza-1,2);
 if (termine='eo') then dx:=2
  else dx:=3;
  repeat
 writeln('scrivi infinito verbo latino regolare:es.laudare');
 writeln('se forma errata o non regolare,viene ripetuta la richiesta');
 readln(infinito);
 lunghezza:=length(infinito);
 rad1:=copy(infinito,1,lunghezza-3);
 finale:=copy(infinito,lunghezza-2,3);
 until (finale = 'are') or (finale = 'ere') or (finale = 'ire');
 writeln('scrivi perfetto indicativo:es.laudavi');
 readln(perfetto);
 lunghezza:=length(perfetto);
 rad2:=copy(perfetto,1,lunghezza-1);
 writeln('scrivi forma del supino:es.laudatum');
 readln(supino);
 lunghezza:=length(supino);
 rad3:=copy(supino,1,lunghezza-2);
end;

procedure analisi;         (* riconoscimento coniugazione 1 2 3 4 *)
begin
 if (finale='are') then c:=1
  else if (finale='ere') and (dx=2) then c:=2
   else if (finale='ere') and (dx=3) then c:=3
    else if (finale='ire') then c:=4;

 case c of
 1:  coniugazione:='prima coniugazione';
 2:  coniugazione:='seconda coniugazione';
 3:  coniugazione:='terza coniugazione';
 4:  coniugazione:='quarta coniugazione';
 end;
end;

procedure tempo;          (* indicazione tempo da coniugare *)
begin
 clrscr;
 textcolor(4);
 writeln('scrivere numero per indicare tempo da coniugare');
 writeln('1...presente        indicativo');
 writeln('2...imperfetto      indicativo');
 writeln('3...futuro          semplice');
 writeln('4...perfetto        indicativo');
 writeln('5...piuccheperfetto indicativo');
 writeln('6...futuro          anteriore');
 textcolor(2);
 writeln('7...presente        congiuntivo');
 writeln('8...imperfetto      congiuntivo');
 writeln('9...perfetto        congiuntivo');
 writeln('10..piuccheperfetto congiuntivo');
 textcolor(3);
 writeln('11..imperativo      presente');
 writeln('12..imperativo      futuro');
 writeln('13..infinito        presente');
 writeln('14..infinito        perfetto');
 writeln('15..infinito        futuro');
 writeln('16..participio      presente');
 writeln('17..participio      futuro');
 writeln('18..gerundio              ');
 writeln('19..supino                ');
 writeln;
 writeln('0...per finire');
 writeln('-------------------------------');
 readln(numero);
 if (numero=0) then fine;
 textcolor(14);
 clrscr;
end;


procedure coniuga1;   (* coniugazione automatica su richiesta tempo *)
var a:integer;
begin
 textcolor(2);
 testo(2,2,modo);
 testo(45,2,coniugazione);
 testo(45,3,'verbo:'+infinito);
 writeln('---------------------------------------------');
 textcolor(14);
 for a:=d1 to d2 do
 begin
 case c of
 1:writeln(rad,des1[a]);
 2:writeln(rad,des2[a]);
 3:writeln(rad,des3[a]);
 4:writeln(rad,des4[a]);
 end;
 end;
 writeln('---------------------------------------------');
end;

procedure stampa;   (* coniugazione automatica e stampa *)
var a:integer;
begin
 textcolor(2);
 testo(2,2,modo);
 testo(45,2,coniugazione);
 testo(45,3,'verbo:'+infinito);
 writeln('---------------------------------------------');
 textcolor(14);
 for a:=d1 to d2 do
 begin
 case c of
 1:begin writeln(rad,des1[a]);writeln(lst,rad,des1[a]);end;
 2:begin writeln(rad,des2[a]);writeln(lst,rad,des2[a]);end;
 3:begin writeln(rad,des3[a]);writeln(lst,rad,des3[a]);end;
 4:begin writeln(rad,des4[a]);writeln(lst,rad,des4[a]);end;
 end;
 end;
 writeln('---------------------------------------------');
end;

procedure coniuga2;   (* coniugazione automatica sequenziale tempi *)
var a:integer;
begin
 textcolor(2);
 testo(2,2,modo);
 testo(45,2,coniugazione);
 testo(45,3,'verbo:'+infinito);
 writeln('---------------------------------------------');
 textcolor(14);
 for a:=d1 to d2 do
 begin
 case c of
 1:writeln(rad,des1[a]);
 2:writeln(rad,des2[a]);
 3:writeln(rad,des3[a]);
 4:writeln(rad,des4[a]);
 end;
 end;
 writeln('---------------------------------------------');
end;

procedure prova1;   (* coniugazione interattiva e correzione *)
var a:integer;
    r:string[15];
    persona:integer;
    cambio:string[4];
begin
 textcolor(2);
 testo(2,2,modo);
 testo(45,2,coniugazione);
 testo(45,3,'verbo:'+infinito);
 writeln('-------------------------------------------------------');
 textcolor(14);
 writeln('scrivi la forma esatta:tutto in minuscolo');
 writeln('altrimenti premi return:viene stampa forma richiesta');
 writeln('-------------------------------------------------------');
 yx:=12;
 persona:=1;
 for a:=d1 to d2 do
 begin
 str(persona,cambio);
 yx:=yx+1;
 persona:=persona+1;
 testo(2,yx,'forma esatta:'+cambio);gotoxy(20,yx);read(r);
 case c of
 1:if (r <> (rad+des1[a]))  then  testo(40,yx,rad+des1[a]);
 2:if (r <> (rad+des2[a]))  then  testo(40,yx,rad+des2[a]);
 3:if (r <> (rad+des3[a]))  then  testo(40,yx,rad+des3[a]);
 4:if (r <> (rad+des4[a]))  then  testo(40,yx,rad+des4[a]);
 end;
 case c of
 1:if (r <> (rad+des1[a]))  then  rs:=rs+1 else re:=re+1;
 2:if (r <> (rad+des2[a]))  then  rs:=rs+1 else re:=re+1;
 3:if (r <> (rad+des3[a]))  then  rs:=rs+1 else re:=re+1;
 4:if (r <> (rad+des4[a]))  then  re:=rs+1 else re:=re+1;
 end;
 writeln;
 readln;
 end;
 writeln('risposte esatte=',re,'....risposte errate=',rs,' su totale:',re+rs);
 writeln('------------------------------------------------------------------');
end;

procedure decide;     (* stabilisce desinenze e radici da usare *)
begin
 case numero of
 1:begin d1:=1;d2:=6;rad:=rad1;modo:='presente indicativo';end;
 2:begin d1:=7;d2:=12;rad:=rad1;modo:='imperfetto indicativo';end;
 3:begin d1:=13;d2:=18;rad:=rad1;modo:='futuro semplice';end;
 4:begin d1:=19;d2:=24;rad:=rad2;modo:='perfetto indicativo';end;
 5:begin d1:=25;d2:=30;rad:=rad2;modo:='piuccheperfetto indicativo';end;
 6:begin d1:=31;d2:=36;rad:=rad2;modo:='futuro anteriore';end;
 7:begin d1:=37;d2:=42;rad:=rad1;modo:='presente congiuntivo';end;
 8:begin d1:=43;d2:=48;rad:=infinito;modo:='imperfetto congiuntivo';end;
 9:begin d1:=49;d2:=54;rad:=rad2;modo:='perfetto congiuntivo';end;
 10:begin d1:=55;d2:=60;rad:=rad2;modo:='piuccheperfetto congiuntivo';end;
 11:begin d1:=61;d2:=62;rad:=rad1;modo:='imperativo presente';end;
 12:begin d1:=63;d2:=66;rad:=rad1;modo:='imperativo futuro';end;
 13:begin d1:=67;d2:=67;rad:=rad1;modo:='infinito presente';end;
 14:begin d1:=68;d2:=68;rad:=rad2;modo:='infinito perfetto';end;
 15:begin d1:=69;d2:=74;rad:=rad3;modo:='infinito futuro';end;
 16:begin d1:=75;d2:=76;rad:=rad1;modo:='participio presente';end;
 17:begin d1:=77;d2:=79;rad:=rad3;modo:='participio futuro';end;
 18:begin d1:=80;d2:=83;rad:=rad1;modo:='gerundio';end;
 19:begin d1:=84;d2:=84;rad:=rad3;modo:='supino';end;
 end;
end;

procedure programma;        (* programma e scelta opzioni *)
procedure scelta;
 var ch:char;
  begin
  textmode(2);
  numero:=0;
  writeln('per altra prova,premi S,per finire premi N');
  readln(ch);
  ch:=upcase(ch);
  if ch='S' then programma
   else fine;
  end;
begin
 clrscr;
 numero:=1;
 writeln('    opzioni possibili:');
 writeln('1...coniugazione automatica,senza interazione');
 writeln('2...coniugazione con interazione e correzione errori');
 writeln('3...coniugazione automatica e stampa su carta');
 writeln('4...coniugazione sequenziale tempi da 1 a 19 ');
 readln(pro);
 paradigma;   (* chiede presente infinito  perfetto supino*)
 analisi;     (* ricerca coniugazione 1 2 3 4 *)
 testo(2,20,coniugazione);

 while numero <> 0 do
 begin
 tempo;       (* chiede tempo da coniugare *)
 decide;      (* decide se automatica o interazione *)
 case pro of
 1:coniuga1; (* coniugazione automatica singoli tempi *)
 2:prova1;    (* coniugazione interattiva *)
 3:stampa;
 4:begin
   for t:=1 to 19 do
   begin
    numero:=t;
    decide;
    coniuga2;     (* coniugazione totale sequenziale *)
    pausa;
   end;
   numero:=0;
   end;
 end;
 pausa;
 end;
 numero:=0;
 scelta;     (* opzione per finire o altra prova *)
 clrscr;
end;

begin       (* programma principale *)
 clrscr;
 presenta;  (* presentazione scopo programma *)
 rs:=0;
 re:=0;
 programma;
end.

il programma permette di coniugare i verbi regolari latini
della 1,2,3,4 coniugazione attiva
----------------------------------------------------------
viene richiesto il paradigma del verbo da coniugare
scrivere tutto in minuscolo:
presente,infinito,perfetto,supino
es.laudo,laudare,laudavi,laudatum
----------------------------------------------------------
si offrono varie opzioni:
1....coniugazione automatica dei tempi richiesti
2....coniugazione interattiva e correzione errori
3....coniugazione automatica e stampa su carta
4....coniugazione sequenziale tempi da 1 a 19
.....in questo caso,premere return invece di numero tempo

.....si deve scrivere la forma richiesta:se errata viene
.....stampata la forma corretta:conteggio errori

.....possibile richiedere tempi e modi in vario ordine
.....possibile cambiare verbo o modalita-auto-interattiva


    opzioni possibili:
1...coniugazione automatica,senza interazione
2...coniugazione con interazione e correzione errori
3...coniugazione automatica e stampa su carta
4...coniugazione sequenziale tempi da 1 a 19

1
SCRIVI PARADIGMA VERBO LATINO REGOLARE,come richiesto

scrivi prima forma indicativo presente:es.laudo
laudo
scrivi infinito verbo latino regolare:es.laudare
se forma errata o non regolare,viene ripetuta la richiesta
laudare
scrivi perfetto indicativo:es.laudavi
laudavi
scrivi forma del supino:es.laudatum
laudatum

scrivere numero per indicare tempo da coniugare
1...presente        indicativo
2...imperfetto      indicativo
3...futuro          semplice
4...perfetto        indicativo
5...piuccheperfetto indicativo
6...futuro          anteriore
7...presente        congiuntivo
8...imperfetto      congiuntivo
9...perfetto        congiuntivo
10..piuccheperfetto congiuntivo
11..imperativo      presente
12..imperativo      futuro
13..infinito        presente
14..infinito        perfetto
15..infinito        futuro
16..participio      presente
17..participio      futuro
18..gerundio
19..supino

0...per finire
-------------------------------

 presente indicativo                        prima coniugazione
                                            verbo:laudare
---------------------------------------------
laudo
laudas
laudat
laudamus
laudatis
laudant
---------------------------------------------

 perfetto indicativo                        prima coniugazione
                                            verbo:laudare
---------------------------------------------
laudavi
laudavisti
laudavit
laudavimus
laudavistis
laudaverunt
---------------------------------------------
inizio