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.