#include rtupset.cam ; < tupset.cam #include mset.cam #include tex.cam ; < jno.cam _fn<-"sdoc.cam"; TYPE Bd :: P: Disciplinas D: Docentes Dp: Depts A: AriCient; Depts = Dep -> InfDep; InfDep :: N: Nome; Disciplinas = Disciplina-set; AriCient = ACien -> Nome; Docentes = IdDoc -> Docente; Docente :: N: Nome C: Cat D: Dep G:Grau Id:INT ASD: INT ACA:INT NrD:INT CH:INT NrE:INT NrT: INT OF: STR-set; AnoLec = INT; Disciplina = Obriga | Opcional | Estagio; Obriga :: A: Ano C: Curso AC: ACien N: Nome R: Regime E: Esc H: History; Opcional :: A: Ano C: Curso AC: ACien-set N: Nome R: Regime E: Esc O: Opcao-set; Opcao :: AC: ACien N: Nome H: History; Estagio :: A: Ano C: Curso R: Regime Al: Alunos; History = AnLec -> InfF; InfF :: D: EquDoc A: Alunos; Esc = TTPP -> INT; AnLec = STR; EquDoc :: R: IdDoc O: IdDoc -> ServDoc; ServDoc = TTPP -> Servico; Alunos :: In:INT Av:INT Ap:INT; Servico :: T: INT HLP:INT HLE:INT; Curso = STR; IdDoc = STR; Grau = STR; TTPP = STR; Cat = STR; Dep = STR; Ano = INT; ALect = INT; ACien = STR; Nome = STR; Regime = STR; STRs = STR-list; MapServDoc = IdDoc -> HorasDoc; HorasDoc = TTPP -> INT; ENDTYPE ;---- actions ----- FUNC XON():SYM RETURN let (p=DisciplinasFlat(P(bd)), ps=Semestre(p,"1"), ss=Semestre(p,"2")) in < dumpTupSet(MapServDoc2TupSet(CargaDocente(ps))), dumpTupSet(MapServDoc2TupSet(CargaDocente(ss))) >; FUNC YON():SYM RETURN let (p=DisciplinasFlat(P(bd)), D=todosDocentes(p)) in [ i -> { [ "Disciplina" -> N(d), "Curso" -> C(d), "Ano" -> itoa(A(d)), "Regime" -> strcat(R(d),"S"), "Servico" -> HorasDoc2STR(Obriga2MapServDoc(d)[i]) ] | d <- p: i in docentes(H(d)) } | i <- D ]; ;---- operators --- FUNC HorasDoc2STR(m:HorasDoc):STR RETURN Strcat(addStrSep(< strcat(itoa(m[k]),k) | k <- dom(m) >,"+")); FUNC docentes(a:History):IdDoc-set RETURN dom(O(D(the(ran(a))))); FUNC todosDocentes(a:Disciplinas):IdDoc-set RETURN let (b={ d | d <- a: is-Obriga(d) }, c=UNION({ O(d) | d <- a: is-Opcional(d) }), x={ H(d) | d <- b } U { H(d) | d <- c }) in UNION({ docentes(h) | h <-x }); MapServDocCUP(l) = MapServDocCup-orio([],l); FUNC MapServDoc2TupSet(m:MapServDoc):TupSet RETURN { [ "Doc." -> i ] + m[i] + [ "Tot." -> msetSumRan(m[i]) ] | i <- dom(m) }; FUNC MapServDocCup(m:MapServDoc,n:MapServDoc):MapServDoc RETURN m + n + [ i -> mcup(m[i],n[i]) | i <- dom(m)*dom(n) ]; FUNC Obriga2MapServDoc(d:Obriga):MapServDoc RETURN let (e=E(d), s=O(D(the(ran(H(d)))))) in [ i -> let (ss=s[i], sss=[k -> T(ss[k]) | k <- dom(ss) ]) in msetMul(sss,e) | i <- dom(s) ]; FUNC CargaDocente(p:Disciplinas):MapServDoc RETURN let (pp=DisciplinasFlat(p)) in MapServDocCUP(< Obriga2MapServDoc(d) | d <- pp >); FUNC Semestre(p:Disciplinas,r:Regime):Disciplinas RETURN let (pp=DisciplinasFlat(p)) in { d | d <- pp: R(d) in {r,"A"} }; FUNC DisciplinasFlat(p:Disciplinas):Disciplinas RETURN UNION( { if is-Obriga(d) then {d} else if is-Opcional(d) then let (n=N(d), o=O(d)) in { Obriga(A(d),C(d), "-", strcat(n," - ",N(x)),R(d),E(d),H(x)) | x <- o } else {} | d <- p }); FUNC CatRank(c:Cat):STR RETURN let (t=[ "P.Cat"->1, "P.Ass"->2, "P.Aux"->3, "Assis"->4, "Ass.C"->4, "A.Est"->5, "Monit"->6 ]) in if c in dom(t) then itoa(t[c]) else "9"; FUNC Discip2UC(d:Discip,s:INT):INT RETURN let (e=E(d), r=R(d), t= (if "T" in dom(e) then H(e["T"]) else 0).*10, tp=(if "TP" in dom(e) then H(e["TP"]) else 0).*10, p= (if "P" in dom(e) then H(e["P"]) else 0).*10, se=(if "SE" in dom(e) then H(e["SE"]) else 0).*10, v=((t .* s)./15.+(tp .* s)./22.+(p .* s)./40.+ se ./2)) in if r=="A" then 2.*v else v; FUNC DUMP_PE(al:INT):SYM RETURN let (D = {d | d <- P(bd): AL(d)== al }, ts = { [ "Ano" -> itoa(A(d)), "A.C." -> AC(d), "Disciplina" -> N(d), "Reg." -> R(d), "Esc.(T+TP+SE+P)" -> let (x=E(d), t=T(x), tp=TP(x), p=P(x), e=E(x)) in strcat(itoa(t),"+",itoa(tp),"+",itoa(p),"+",itoa(e)), "U.C." -> itoa(Discip2UC(d,14)./10) ] | d <- D }) in dumpTupSet(ts); FUNC BdNrDiscipPorAC():TupSet RETURN let (p=PlanoEstudosFlat(P(bd)), X={ AC(d) | d <- p }) in [ ac -> itoa(card({ d | d <- p : AC(d)==ac })) | ac <- X ]; FUNC BdTodosDeps():Dep-set RETURN let (d=D(bd), a=BdTodosDocentes()) in { D(d[i]) | i <- a }; FUNC PlanoEstudosNOp(p:PlanoEstudos):PlanoEstudos RETURN { if is-Obriga(d) then d else if is-Opcional(d) then let (n=N(d), o=O(d), x=choice(o)) in Obriga(A(d),AL(d),Set2STR(AC(d),"/"),n, R(d),E(x),D(x),Al(x)) else let (r=R(d),al=Al(d)) in Obriga(A(d),AL(d),"","Est'agio",r, ["SE"->InfEsc(30,0,0,0)],EquDoc("",{}),al) | d <- p }; FUNC Esc2List(e:Esc):INT-list RETURN < itoa(if "T" in dom(e) then H(e["T"]) else 0), itoa(if "TP" in dom(e) then H(e["TP"]) else 0), itoa(if "P" in dom(e) then H(e["P"]) else 0), itoa(if "SE" in dom(e) then H(e["SE"]) else 0) >; FUNC FICHAS_DI(): RETURN let (ds=D(bd), p=PlanoEstudosFlat(P(bd)), t= < let (ed=D(d), ac=AC(d), r=R(ed), ir=ds[r], a=O(ed), nr=N(ir), cr=C(ir), crc=if cr=="Ass.C" then "Assis" else cr, dep=D(ir)) in TeXCmd("fichaDi", < N(d), N(Dp(bd)[dep]), TeXCmd("TTpP",blast(Esc2List(E(d)))), TeXCmd("TTpP",<"","","">), "", < TeXCmd("Docente",) > ^ < let (ih=ds[h], cd=C(ih), cdc=if cd=="Ass.C" then "Assis" else cd) in TeXCmd("Docente",) | h <- a >, BdCristo(ac) >) | d <- p >) in strList2File("l96fdi.tex",TeX2StrList(t)); FUNC BdCristo(ac:ACien):Nome RETURN N(D(bd)[if (ac=="alg") then "r_ralha" else if (ac=="anl") then "r_ralha" else if (ac=="cc") then "vff" else if (ac=="ann") then "pjon" else if (ac=="ec") then "miguel" else if (ac=="ci") then "maribel" else if (ac=="-") then "miguel"]); FUNC MAPA_DOCS(d:Dep): RETURN let (f=D(bd), a=BdTodosDocentes(), b={ let (x=f[i]) in [ "Departamento" -> d, "Nome" -> N(x), "Categoria" -> C(x), "Grau Acad." -> G(x) ] | i <- a: D(f[i])==d }) in dumpTupSet(b); UC2STR(x) = INTasRealRound(x,1); UC2STR(x) = INTasReal2STR(x,1); FUNC PEtotais(pe:PlanoEstudos):FF RETURN MCUP(< let (r=R(d), e=E(d), ee= [ x -> H(e[x]) | x <- dom(e) ]) in [ "s1" -> SUM(< ee[n] | n <- dom(ee): (r=="A" || r=="1") >), "s2" -> SUM(< ee[n] | n <- dom(ee): (r=="A" || r=="2") >), "uc" -> Discip2UC(d,15) ] | d <- PlanoEstudosNOp(pe) >); FUNC AnoDoPE2TeXCmd(pe:PlanoEstudos,a:Ano):TeX RETURN let (p=< d | d <- pe: (A(d)==a) >, h=head(p), t=tail(p), tt=PEtotais(p) ;,z=princ(tt) ) in < PEObriga2TeXCmd(itoa(a),h) > ^ < PEObriga2TeXCmd("",d) | d <- t > ^ < TeXCmd("PEtotal",) > ^ < TeXCmd("hline",<>) >; FUNC PEObriga2TeXCmd(s:STR,d:Obriga): TeXCmd RETURN let (r=R(d), e=E(d), tt=PEtotais({d}), s1=tt["s1"], s2=tt["s2"], uc=tt["uc"], ucs=UC2STR(uc) ) in TeXCmd("PElinha", else if r=="1" then <"","X",""> else <"","","X">), TeXCmd("PEHL",Esc2List(e)^), ucs>); FUNC jj(t:STR,ff:FF):FF RETURN if ff==[] then [] else let(k=choice(dom(ff)), kk= strcat(t,k)) in [ kk -> ff[k] ] + jj(t,ff \ {k}); FUNC BdObriga2Tup(d:Obriga):Tup RETURN let ( ac=AC(d), docs=D(bd), r =R(d), al=Al(d), ed=D(d), do={R(ed)} U O(ed), e =E(d) ) in [ "N" -> N(d), "A" -> A(d), "R" -> if R(d)=="A" then "A" else "S", "OO"-> if ac=="-" then "Op" else "Ob", "In"-> In(al), "Av"-> Av(al), "Ap"-> Ap(al) ] + jj("T", [ x -> T(e[x]) | x <- dom(e) ]) + jj("HLP", [ x -> HLP(e[x]) | x <- dom(e) ]) + jj("HLE", [ x -> HLE(e[x]) | x <- dom(e) ]) ; + [ x -> T(e[x]) | x <- dom(e) ] + histograma("C", { let (d=docs[i]) in [ "N" -> N(d), "C"->C(d)] | i <- do }); FUNC BdObriga2TupExp(d:Obriga):Tup RETURN let ( a={"HLPT","HLPTP","HLPP"}, b={"HLET","HLETP","HLEP"}, c={"P.Cat","P.Ass","P.Aux","Assis","A.Est","Monit"}, t=BdObriga2Tup(d) ) in t + [ "HLPTo" -> msetSumRan(t / a) ] + [ "HLETo" -> msetSumRan(t / b) ] + [ "DocTo" -> msetSumRan(t / c) ]; FUNC TEX_TAB1(): RETURN let (p=PlanoEstudosFlat(P(bd)), ts= { BdObriga2TupExp(d) | d <- p }, a= <"N","A","R","OO">, b= <"In","Av","Ap","TT","TTP","TP", "HLPT","HLET","HLPTP","HLETP","HLPP","HLEP", "HLPTo","HLETo", "P.Cat","P.Ass","P.Aux","Assis","A.Est","Monit","DocTo" >, l= < TeXTabRow(fflist(t,a^b,"")) | t <- ts >, m=addSep(l,TeXCons("nl")) ^ < TeXCons("nl"), TeXCmd("tabelaUmTotal",<>), TeXCons("nl") >) in strList2File("_l96tab1.tex", TeXCmd2StrList(TeXdef("@tabelaUm",))); FUNC TEX_TAB1Old(): RETURN let (p=PlanoEstudosFlat(P(bd)), docs=D(bd), l= CONC(< let (a= A(d), al=AL(d), ac=AC(d), n =N(d), r =R(d), e =E(d), ed=D(d), do={R(ed)} U O(ed), al=Al(d), oo=if ac=="-" then "Op" else "Ob", ; aproveitamento ali=In(al), aliav=Av(al), aliap=Ap(al), ; turmas tt= if "T" in dom(e) then T(e["T"]) else 0, ttp=if "TP" in dom(e) then T(e["TP"]) else 0, tp= if "P" in dom(e) then T(e["P"]) else 0, ; horas htp= if "T" in dom(e) then HLP(e["T"]) else 0, hte= if "T" in dom(e) then HLE(e["T"]) else 0, htpp=if "TP" in dom(e) then HLP(e["TP"]) else 0, htpe=if "TP" in dom(e) then HLE(e["TP"]) else 0, hpp= if "P" in dom(e) then HLP(e["P"]) else 0, hpe= if "P" in dom(e) then HLE(e["P"]) else 0, htop=htp.+htpp.+hpp, htoe=hte.+htpe.+hpe, ; docentes h = histograma("C", { let (d=docs[i]) in [ "N" -> N(d), "C"->C(d)] | i <- do }), pca=if "P.Cat" in dom(h) then h["P.Cat"] else 0 , pas=if "P.Ass" in dom(h) then h["P.Ass"] else 0 , pau=if "P.Aux" in dom(h) then h["P.Aux"] else 0 , ass=if "Assis" in dom(h) then h["Assis"] else 0 , ase=if "A.Est" in dom(h) then h["A.Est"] else 0 , mon=if "Monit" in dom(h) then h["Monit"] else 0 , dtot=pca.+pas.+pau.+ass.+ase.+mon ;,x=princ(h) ) in < TeXCmd("discip",), TeXCmd("alunos",), TeXCmd("turmas",), TeXCmd("horas",), TeXCmd("docentes",), TeXCmd("nl",<>) > | d <- p >) ^ < TeXCmd("tabelaUmTotal",< TeXCmd("trip",<9,9,9>), TeXCmd("trip",<9,9,9>), TeXCmd("octt",<9,9,9,9,9,9,9,9>), TeXCmd("sept",<9,9,9,9,9,9,9>) >) >) in strList2File("_l96tab1.tex", TeXCmd2StrList(TeXdef("@tabelaUm",))); FUNC TEX_TAB2(): RETURN let (p=PlanoEstudosFlat(P(bd)), l= CONC(< let (a= A(d), al=AL(d), ac=AC(d), n =N(d), r =R(d), e =E(d), do=D(d), al=Al(d), oo=if ac=="-" then "Op" else "Ob", ; aproveitamento ali=In(al), aliav=Av(al), aliap=Ap(al), ; turmas tt= if "T" in dom(e) then T(e["T"]) else 0, ttp=if "TP" in dom(e) then T(e["TP"]) else 0, tp= if "P" in dom(e) then T(e["P"]) else 0 ;, x=princ(n,"\n") ) in < TeXCmd("sext",), TeXCmd("nl",<>) > | d <- p >) ^ < >) in strList2File("_l96tab2.tex", TeXCmd2StrList(TeXdef("@tabelaDois",))); FUNC TEX_RESP_POR_DIS(): RETURN let (ds=D(bd), p=PlanoEstudosFlat(P(bd)), l= < let (ed=D(d), ac=AC(d), r=R(ed), ir=ds[r], a=O(ed), nr=N(ir), cr=C(ir), crc=if cr=="Ass.C" then "Assis" else cr, dep=D(ir)) in TeXTabRow(< N(d), nr, cr, dep >) | d <- p >, t=addSep(l,TeXCons("nl"))^<>) in strList2File("_l96rpd.tex",TeXCmd2StrList(TeXdef("@ResPorDis",))); FUNC TEX_PESS_DOC(): RETURN let (a=D(bd), b=BdTodosDocentes(), c=index([ i -> let (x=a[i]) in strcat(CatRank(C(x)),N(x)) | i <- b ]), l= < let (x=a[i]) in TeXTabRow(map0s2("", )) | i <- c >, t=addSep(l,TeXCons("nl"))^) in strList2File("_l96pdo.tex", TeX2StrList() >)); FUNC TEX_PE_AC():TeX RETURN let (pe=P(bd), acs=A(bd), pno=PlanoEstudosNOp(pe), pob= PlanoEstudosNOp({ d | d <- pe: (is-Obriga(d) || is-Estagio(d)) }), pop= PlanoEstudosNOp({ d | d <- pe: is-Opcional(d) }), acob= { AC(d) | d <- pob }, acop= { AC(d) | d <- pop }, xob= [ ac -> PEtotais({ d | d <- pob: AC(d)==ac }) | ac <- acob ], xop= [ ac -> PEtotais({ d | d <- pop: AC(d)==ac }) | ac <- acop ], a= TeXdef("@UnidCredOb", < < TeXCmd("Trip",), acs[ac],UC2STR(xob[ac]["uc"])>) | ac <- dom(xob) > ^ < TeXCmd("total",))>) >>), b= TeXdef("@UnidCredOp", < < TeXCmd("Trip",), acs[ac],UC2STR(xop[ac]["uc"])>) | ac <- dom(xop) > ^ < TeXCmd("total",))>) >>) ) in strList2File("_l96ac.tex",TeX2StrList()); ;generalizar msetRanSUM(m)=SUM(< m[n] | n <- dom(m): m[n]>=0 >); FUNC TEX_INQ_DOCOld(): RETURN let (a=I(bd), b=< cXlist2XmsetList(L(a[i])) | i <- dom(a) >, c=MCUPLIST(b), d=< msetWam(m) | m <- c >, ; e=< INTasRealRound(i,1) | i <- d >, l=CONC(< mset2TeXbarenv(ms) ^ )> | ms <- c >), m=TeXdef("@InqDocTab",)>^^<"erro">)) in strList2File("_l96ido.tex",TeXCmd2StrList(m)); merge(l,m)= if l==<> then <> else cons(hd(l)+hd(m),merge(tl(l),tl(m))); FUNC TEX_INQ_DOC(): RETURN let (a=I(bd), b=< cXlist2XmsetList(L(a[i])) | i <- dom(a) >, bb=< let (l=T(a[i])) in cXlist2XmsetList(l) | i <- dom(a): SUM(T(a[i]))==100 >, c=MCUPLIST(b), cc=MCUPLIST(bb), d=<"1.1","1.2","1.3","1.4", "2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8", "3.1","3.2","3.3","3.4","3.5", "4.1","4.2" >, ; BUG? verificar erro no DOS x=sort(), x=INTset2INTlist(UNION({dom(m)|m<-cc})), xx=<"Quest~ao 4.3">^x, dd=<"--- Aulas", "--- I\\&D", "--- Admin.", "--- Alunos" >, e=< ["Q" -> x ] | x <- d >, ee=< ["Quest~ao 4.3" -> x ] | x <- dd >, f=merge(c,e), ff=merge(cc,ee), ; m=pp(ff), l= < TeXTabRow(fflist(t,<"Q",0,1,2,3,-1>,0)) | t <- f >, ll= < TeXTabRow(fflist(t,xx,0)) | t <- ff >, m=addSep(l,TeXCons("nl")), mm=addSep(ll,TeXCons("nl")) ) in strList2File("_l96ido.tex", TeX2StrList(), TeXdef("@InqDocTabBItens",<>), TeXdef("@InqDocTabB",) >)); FUNC LOTUS_INQ_DOC(): RETURN let (a=I(bd), b=CONC( < ^ <"\n"> | k<-dom(a) >)) in strList2File("_.prn",b); FUNC TEX_PE(): RETURN let (p=PlanoEstudosNOp(P(bd)), l=CONC(< AnoDoPE2TeXCmd(p,i) | i <- invl(inseq(5)) >), m=TeXdef("@PlanoEstudos",)) in strList2File("_l96pe.tex",TeXCmd2StrList(m)); FUNC INIT():SYM RETURN bd <- Bd( { Obriga(1,"lmcc","cc", "Paradigmas da Programa,c~ao I","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("prh", [ "prh"-> [ "T"-> Servico(1,0,0)], "jj" -> [ "P"-> Servico(3,0,0)] ]), Alunos(0,0,0)) ]), Obriga(1,"lmcc","cc", "Paradigmas da Programa,c~ao II","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("prh", [ "prh"-> [ "T"-> Servico(1,0,0)], "jj" -> [ "P"-> Servico(3,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lmcc","cc", "Paradigmas da Programa,c~ao III","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("fmm", [ "fmm"-> [ "T"-> Servico(1,0,0)], "anr"-> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lesi","cc", "Paradigmas da Programa,c~ao IV","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("fmm", [ "fmm"-> [ "T"-> Servico(1,0,0)], "af" -> [ "P"-> Servico(3,0,0)], "anr"-> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lmcc","cc", "Paradigmas da Programa,c~ao IV","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("fmm", [ "fmm"-> [ "T"-> Servico(1,0,0)], "anr"-> [ "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]), Obriga(1,"lesi","cc", "Paradigmas da Programa,c~ao I","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("prh", [ "prh"-> [ "T"-> Servico(1,0,0)], "jgr"-> [ "P"-> Servico(5,0,0)] ]), Alunos(0,0,0)) ]), Obriga(1,"lesi","cc", "Paradigmas da Programa,c~ao II","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("prh", [ "prh"-> [ "T"-> Servico(1,0,0)], "jgr"-> [ "P"-> Servico(5,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lesi","cc", "Paradigmas da Programa,c~ao III","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("fmm", [ "fmm"-> [ "T"-> Servico(1,0,0)], "amf"-> [ "P"-> Servico(3,0,0)], "ulisses" -> [ "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lesi","cc", "M'etodos de Programa,c~ao I","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("fmm", [ "fmm"-> [ "T"-> Servico(1,0,0)], "anr"-> [ "P"-> Servico(4,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lesi","cc", "M'etodos de Programa,c~ao II","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("fmm", [ "fmm"-> ["T"-> Servico(1,0,0)], "anr"-> ["P"-> Servico(2,0,0)], "ulisses" -> ["P"-> Servico(1,0,0)], "af" -> ["P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lmcc","cc", "M'etodos de Programa,c~ao I","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("fmm", [ "fmm"-> [ "T"-> Servico(1,0,0)], "ulisses" -> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lmcc","cc", "M'etodos de Programa,c~ao II","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("fmm", [ "fmm"-> [ "T"-> Servico(1,0,0)], "ulisses" -> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lmcc","cc", "Elementos L'ogicos da Programa,c~ao I","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jbb", [ "jbb"-> [ "T"-> Servico(1,0,0)], "jsp"-> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(2,"lmcc","cc", "Elementos L'ogicos da Programa,c~ao II","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jbb", [ "jbb"-> [ "T"-> Servico(1,0,0)], "jsp"-> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(3,"lmcc","cc", "Elementos L'ogicos da Programa,c~ao III","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jmv", [ "jmv"-> [ "T"-> Servico(1,0,0)], "jsp"-> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(3,"lesi","cc", "M'etodos de Programa,c~ao III","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jbb", [ "jbb"-> [ "T"-> Servico(1,0,0)], "jsp"-> [ "P"-> Servico(4,0,0)] ]), Alunos(0,0,0)) ]), Obriga(3,"lmcc","cc", "M'etodos de Programa,c~ao III","1", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jbb", [ "jbb"-> [ "T"-> Servico(1,0,0), "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(3,"lmcc","cc", "M'etodos de Programa,c~ao IV","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("lsb", [ "lsb"-> [ "T"-> Servico(1,0,0), "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(3,"lesi","cc", "Processamento de Linguagens I","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jgr", [ "jgr"-> [ "T"-> Servico(1,0,0) ], "jj" -> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(3,"lmcc","cc", "Processamento de Linguagens I","2", ["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jgr", [ "jgr"-> [ "T"-> Servico(1,0,0) ], "prh"-> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Obriga(4,"lmcc","cc", "M'etodos Formais de Programa,c~ao I","1",["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jno", [ "jno"-> [ "T"-> Servico(1,0,0), "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]), Obriga(4,"lmcc","cc", "M'etodos Formais de Programa,c~ao I","2",["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("jno", [ "jno"-> [ "T"-> Servico(1,0,0) ], "lsb"-> [ "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]), Opcional(4,"lesi",{"cc"}, "Op,c~ao I","1", ["T"->2,"P"->2], { Opcao("cc","M'etodos Formais de Programa,c~ao I", [ "9697" -> InfF(EquDoc("jno", [ "jno"-> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]) }), Opcional(4,"lesi",{"cc"}, "Op,c~ao II","2", ["T"->2,"P"->2], { Opcao("cc","M'etodos Formais de Programa,c~ao II", [ "9697" -> InfF(EquDoc("jno", [ "lsb"-> [ "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]) }), Opcional(4,"lesi",{"cc"}, "Op,c~ao T1","1", ["T"->2,"P"->2], { Opcao("cc","Multim'edia", [ "9697" -> InfF(EquDoc("af", [ "af"-> [ "T"-> Servico(1,0,0), "P"-> Servico(3,0,0)] ]), Alunos(0,0,0)) ]) }), Obriga(4,"lesi","cc", "Desenvolvimento de Sistemas de Informa,c~ao","2",["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("amf", [ "amf"-> [ "T"-> Servico(1,0,0), "P"-> Servico(2,0,0)] ]), Alunos(0,0,0)) ]), Opcional(4,"lmcc",{"cc"}, "Op,c~ao 2","2", ["T"->2,"P"->2], { Opcao("cc","Desenvolvimento de Sistemas de Informa,c~ao", [ "9697" -> InfF(EquDoc("amf", [ "amf"-> [ "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]) }), Opcional(5,"lesi",{"cc"}, "Op,c~ao T4","1", ["T"->2,"P"->2], { Opcao("cc","Criptografia Aplicada", [ "9697" -> InfF(EquDoc("jmv", [ "jmv"-> [ "T"-> Servico(1,0,0), "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]) }), Opcional(5,"lmcc",{"cc"}, "Op,c~ao 4","1", ["T"->2,"P"->2], { Opcao("cc","Compiladores", [ "9697" -> InfF(EquDoc("prh", [ "prh"-> [ "T"-> Servico(1,0,0), "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]) }), Opcional(5,"lmcc",{"cc"}, "Op,c~ao 5","1", ["T"->2,"P"->2], { Opcao("cc","L'ingua Natural", [ "9697" -> InfF(EquDoc("jj", [ "jj" -> [ "T"-> Servico(1,0,0), "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]) }), Opcional(5,"lmcc",{"cc"}, "Op,c~ao 6","1", ["T"->2,"P"->2], { Opcao("cc","Criptografia Aplicada", [ "9697" -> InfF(EquDoc("jmv", [ "jmv"-> [ "T"-> Servico(0,0,0), "P"-> Servico(1,0,0)] ]), Alunos(0,0,0)) ]) }), Obriga(1,"ge","cc", "Programa,c~ao e Inform'atica (Sem.1)","1",["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("hmm", [ "hmm"-> [ "T"-> Servico(1,0,0) , "P"-> Servico(3,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"ge","cc", "Programa,c~ao e Inform'atica (Sem.2)","2",["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("hmm", [ "hmm"-> [ "T"-> Servico(1,0,0) , "P"-> Servico(3,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"ap","cc", "Programa,c~ao e Inform'atica (Sem.1)","1",["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("hmm", [ "hmm" -> [ "T"-> Servico(0,0,0) ], "ana" -> [ "P"-> Servico(3,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"ap","cc", "Programa,c~ao e Inform'atica (Sem.2)","2",["T"->2,"P"->2], [ "9697" -> InfF(EquDoc("hmm", [ "hmm" -> [ "T"-> Servico(0,0,0) ], "ana" -> [ "P"-> Servico(3,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(3,"ge","cc", "Sistemas de Informa,c~ao","2",["P"->4], [ "9697" -> InfF(EquDoc("B", [ "B" -> [ "P"-> Servico(2,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(3,"ap","cc", "Sistemas de Informa,c~ao","2",["P"->4], [ "9697" -> InfF(EquDoc("B", [ "B" -> [ "P"-> Servico(1,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"mi","cc", "Especifica,c~ao e Desenvolvimento de Sw","1",["T"->2], [ "9697" -> InfF(EquDoc("jno", [ "jno"-> [ "T"-> Servico(1,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"mi","cc", "Tecnologia da Programa,c~ao","1",["T"->2], [ "9697" -> InfF(EquDoc("af", [ "af" -> [ "T"-> Servico(1,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"mi","cc", "L'ogica Computacional","1",["T"->2], [ "9697" -> InfF(EquDoc("jmv", [ "jmv" -> [ "T"-> Servico(1,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"mi","cc", "Processamento de Linguagens","1",["T"->2], [ "9697" -> InfF(EquDoc("jj" , [ "jj" -> [ "T"-> Servico(1,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"mi","cc", "Semin'arios de CC","2",["T"->2], [ "9697" -> InfF(EquDoc("jno", [ "jno" -> [ "T"-> Servico(1,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"mi","cc", "'Algebra de Processos","1",["T"->2], [ "9697" -> InfF(EquDoc("jmv", [ "jmv" -> [ "T"-> Servico(1,0,0) ] ]), Alunos(0,0,0)) ]), Obriga(1,"mi","cc", "Teoria da Reescrita","2",["T"->2], [ "9697" -> InfF(EquDoc("jbb", [ "jbb"-> [ "T"-> Servico(1,0,0) ] ]), Alunos(0,0,0)) ]) }, [ "miguel" -> Docente("Jo~ao Miguel L. Fernandes","Assis","DI","M", 28,5,1,4,8,0,0,{}), "aproenca" -> Docente("Alberto Jos'e C. Proen,ca","P.Ass","DI","D", 42,19,9,5,7,0,0,{"DU"}), "jmv" -> Docente("Jos'e Manuel Esgalhado Valen,ca","P.Cat","DI","D", 47,17,11,4,7,0,3,{"DD","DI"}), "r_ralha" -> Docente("Rui Manuel da S. Ralha","P.Aux","DM","D", 37,13,5,3,7,0,0,{}), "estrada" -> Docente("Maria Fernanda Estrada","P.Aux","DM","D", 65,36,5,2,7,0,1,{"DC"}), "elrv" -> Docente("Estelita Gra,ca R. Vaz","P.Ass","DM","D", 44,24,9,2,8,0,0,{}), "joana" -> Docente("Maria Joana E. Soares","P.Ass","DM","D", 39,18,5,4,7,0,0,{}), "vilar" -> Docente("Carlos Alberto da S. Vilar","P.Aux","DM","D", 62,30,7,3,7,0,0,{}), "rseverino" -> Docente("Ricardo Jos'e M. Severino","Assis","DM","M", 34,10,5,3,7,0,0,{}), "jneves" -> Docente("Jos'e Carlos Maia Neves","P.Ass","DI","D", 48,19,6,4,7,0,0,{}), "gui" -> Docente("Guilherme Augusto Pereira","Assis","DPS","M", 35,12,6,2,6,0,0,{}), "telhada" -> Docente("Jos'e Manuel H. Telhada","Assis","DPS","M", 31,6,2,1,6,0,0,{}), "pno" -> Docente("Pedro Nuno P. de Oliveira","P.Aux","DPS","D", 39,12,4,2,6,0,0,{"DD"}), "fsm" -> Docente("Francisco Coelho S. de Moura","P.Ass","DI","D", 41,18,1,3,8,0,3,{"DC"}), "jno" -> Docente("Jos'e Nuno Fonseca de Oliveira","P.Ass","DI","D", 40,18,7,4,8,0,2,{"DC"}), "mjf" -> Docente("Maria Jo~ao Gomes Frade","Assis","DI","M", 28,4,2,3,9,0,0,{}), "psantos" -> Docente("Lu'is Paulo P. dos Santos","Assis","DI","M", 29,6,2,7,7,0,0,{}), "jmac" -> Docente("Jos'e Manuel Ferreira Machado","Assis","DI","M", 33,8,3,3,7,0,0,{}), "amaral" -> Docente("Carlos Manuel S.C. Amaral","A.Est","DM","L", 40,8,1,3,9,0,0,{}), "pmartins" -> Docente("Maria Paula F. Martins","Assis","DM","M", 27,4,2,2,9,0,0,{}), "jmo" -> Docente("Jos'e Manuel Oliveira","A.Est","DM","L", 29,2,1,3,12,0,0,{}), "fpinto" -> Docente("Maria Fernanda Alves Pinto","Ass.C","DM","M", 36,12,8,2,12,0,0,{}), "lpinto" -> Docente("Lu'is Filipe Ribeiro Pinto","A.Est","DM","L", 25,1,1,3,9,0,0,{}), "cmendes" -> Docente("Carla Albertina Mendes","Assis","DM","M", 28,3,2,2,9,0,0,{}), "lantunes" -> Docente("Lu'is Filipe C. Antunes","A.Est","DM","L", 25,2,2,3,9,0,0,{}), "j_nuno" -> Docente("Jo~ao Nuno Oliveira","A.Est","DI","L", 29,5,5,2,9,0,0,{}), "anr" -> Docente("Ant'onio Nestor Ribeiro","A.Est","DI","L", 26,3,3,1,12,0,0,{}), "amf" -> Docente("Ant'onio Florido","A.Est","DI","M", 0,0,0,0,00,0,0,{}), "af" -> Docente("Ant'onio Ramires Fernandes","A.Est","DI","M", 30,2,2,2,12,0,0,{}), "maribel" -> Docente("Maribel Yasmina C. Alves","A.Est","DI","L", 28,4,4,3,10,0,0,{}), "vff" -> Docente("V'itor Francisco G. da Fonte","A.Est","DI","L", 26,3,3,1,12,0,0,{}), "hsantos" -> Docente("Henrique Manuel D. Santos","Assis","DI","M", 36,12,8,5,7,0,0,{}), "rco" -> Docente("Rui Carlos Mendes Oliveira","Assis","DI","M", 29,4,2,2,12,0,0,{}), "omp" -> Docente("Olga Maria Pacheco","Assis","DI","M", 31,6,3,4,10,0,0,{}), "jj" -> Docente("Jos'e Jo~ao G.D. Almeida","Assis","DI","M", 37,14,8,3,10,0,0,{}), "jas" -> Docente("Jos'e Alexandre Saraiva","Assis","DI","M", 29,3,3,2,12,0,0,{}), "jgr" -> Docente("Jorge Gustavo Rocha","Assis","DI","M", 27,4,1,2,9,0,0,{}), "fmm" -> Docente("Fernando M'ario J. Martins","Assis","DI","D", 41,16,1,6,11,0,2,{}), "pjon" -> Docente("Paulo Jorge F.O. Novais","Assis","DI","M", 29,4,4,3,9,0,0,{}), "pinj" -> Docente("Jos'e Eduardo Pina Miranda","Assis","DI","M", 28,4,2,2,7,0,0,{}), "prh" -> Docente("Pedro Rangel Henriques","P.Aux","DI","D", 41,15,3,4,11,0,5,{"DC"}), ; "apa" -> ; Docente("Ana Paula Amorim","Assis","DM","M", ; 0,0,0,0,0,0,0,{}), "atha" -> Docente("Maria Em'ilia F. Queiroz de Athayde","P.Aux","DM","D", 38,15,1,2,8,0,0,{}), "assis" -> Docente("Jos'e Assis Ribeiro de Azevedo","P.Ass","DM","D", 38,15,3,3,5,0,0,{"DD"}), "agr" -> Docente("Ant'onio Guimar~aes Rodrigues","P.Ass","DPS","D", 45,21,10,2,6,0,0,{"PE"}), "psmith" -> Docente("Maria Paula Marques Smith","P.Ass","DM","D", 39,18,7,3,7,0,1,{}), "mmargseq" -> Docente("Maria Margarida R. Sequeira","P.Aux","DM","D", 37,14,6,3,8,0,1,{}) ], [ "DM" -> InfDep("Departamento de Matem'atica"), "DI" -> InfDep("Departamento de Inform'atica"), "DPS" -> InfDep("Departamento de Produ,c~ao e Sistemas") ], [ "alg" -> "'Algebra e Teoria Alg'ebrica da Computa,c~ao", "anl" -> "An\'alise", "ann" -> "An'alise Num'erica, Estat'istica e Investiga,c~ao Operacional", "cc" -> "Ci^encias da Computa,c~ao", "ci" -> "Ci^encias da Informa,c~ao", "ec" -> "Engenharia de Computadores", "" -> "Est'agio", "cc/ci" -> "Ci^encias da Computa,c~ao / Ci^encias da Informa,c~ao" ]); FUNC STATS(): RETURN let (p=PlanoEstudosFlat(P(bd)), ts= { BdObriga2TupExp(d) | d <- p }, a= UNION({dom(x)|x<-ts}) - {"N","A","R","OO"}, b= [ at -> tupSetColSUM(at,ts) | at <- a ], c=ran(D(bd)), u= ["P.Aux"->"D", "P.Ass"->"D", "P.Cat"->"D", "Assis"->"ND", "A.Est"->"ND"], d= msetUnif(b,u), e= msetPerc(d), f=I(bd), g= [ i -> < if n == -1 then 0 else if n==0 then -2 else if n==1 then -1 else if n==2 then 1 else 2 | n <- L(f[i]) > | i <- dom(f) ], gg=< cXlist2XmsetList(g[i]) | i <- dom(g) >, h=MCUPLIST(gg), k=< ms \ {0} | ms <- h >, ns=< if 0 in dom(ms) then ms[0] else 0 | ms <- h >, l=< msetWam(ms,2) | ms <- k >, j=< let (l=T(f[i])) in cXlist2XmsetList(l) | i <- dom(f): SUM(T(f[i]))==100 >, k=MCUPLIST(j), o=< msetWam(m,0) | m <- k >, z=[ 'a1->970, 'a2->1222, 'a3->865, 'a4->524, 'a5->503, 'a6->1091, 'a7->870, 'a8->1183, 'a9->1036, 'a10->887, 'a11->499, 'a12->605, 'a13->1237], zz=[ 'b1->953, 'b2->432, 'b3->785, 'b4->539, 'b5->1395, 'b6->43, 'b7->841, 'b8->-38, 'b9->-96, 'b10->261 ], zzz= [ 'c1->-277, 'c2->-599, 'c3->-4, 'c4->295, 'c5->811, 'c6->432, 'c7->434, 'c8->758, 'c9->1406 ], t= [ "statIn" -> b["In"], "statAv" -> b["Av"], "statAp" -> b["Ap"], "statApVsAv" -> perc(b["Ap"],b["Av"]), "statApVsIn" -> perc(b["Ap"],b["In"]), "statTurTot" -> msetSumRan(b / {"TT","TTP","TP"}), "statTP" -> b["TTP"], "statAvVsIn" -> perc(b["Av"],b["In"]), "statDocDrs" -> d["D"], "statDocNDr" -> d["ND"], "statDNDper" -> e["D"], "statHEvsHP" -> perc(b["HLETo"],b["HLPTo"]), "statInDocA" -> INTasReal2STR(avg(subl(l,1,4),0),2), "statInDocB" -> INTasReal2STR(avg(subl(l,5,8),0),2), "statInDocC" -> INTasReal2STR(avg(subl(l,13,5),0),2), "statInDocD" -> INTasReal2STR(avg(subl(l,18,2),0),2), "statInDocK" -> 100 .- perc(SUM(subl(ns,1,4)),4.*card(dom(f))), "statInDocL" -> 100 .- perc(SUM(subl(ns,5,8)),8.*card(dom(f))), "statInDocM" -> 100 .- perc(SUM(subl(ns,13,5)),5.*card(dom(f))), "statInDocN" -> 100 .- perc(SUM(subl(ns,18,2)),2.*card(dom(f))), "statCHmed" -> INTasReal2STR(avg(< CH(d) | d <- c >,2),2), "statNrDmed" -> INTasReal2STR(avg(< NrD(d) | d <- c >,2),2), "statIdmed" -> INTasRealRound(avg(< Id(d) | d <- c >,2),2), "statAulas" -> nth(1,o), "statID" -> nth(2,o), "statAdmin" -> nth(3,o), "statAluno" -> nth(4,o), "statDiff" -> 100 .- SUM(o), "statNrDoc" -> card(BdTodosDocentes()) ]) in strList2File("_l96stat.tex", TeX2StrList(STRFF2TeX(t))); princ("Inicializacao automatica\n"); INIT(); princ("Servico docente OK \n"); a<-YON(); CD(i)=dumpTupSet(a[i]);