Advertisement
Erbureth

school.dve

May 26th, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. input byte questions = 5, students = 2, threshold = 4;
  2. channel cgrade;
  3. channel answer;
  4.  
  5. process professor {
  6. byte requirements[questions], qid, sid, grade, ans;
  7. state idle,prepare,examine, ask;
  8. init idle;
  9. trans
  10. idle -> prepare {effect qid = 0;}
  11. prepare -> prepare { guard qid < questions; effect requirements[qid] = requirements[qid] + 1; }
  12. prepare -> prepare { guard qid < questions; effect qid = qid + 1; }
  13. prepare -> examine { guard qid == questions; effect qid = 0, sid = 0, grade = 0; }
  14. examine -> examine { guard qid < questions, sid < students; sync answer?ans; effect grade = grade + ( ans - requirements[ qid ] ), qid = qid + 1; }
  15. examine -> examine { guard qid == questions, sid < students; sync cgrade!grade; effect qid = 0, grade = 0; sid = sid + 1; }
  16. examine -> idle { guard qid == questions, sid == students; }
  17. ;
  18. }
  19.  
  20. process student( key id, strategy, cheatFrom ) {
  21. byte learned[questions], qid, qval, grade;
  22. channel {byte,byte} cheatChan;
  23. state idle, study, answer, graded, passed;
  24. init idle;
  25. idle -> study { effect qid = 0;}
  26. study -> study { effect learned[qid] = learned[qid] + 1, qid = (qid + strategy) % questions; }
  27. study -> study { sync cheatChan!{qid, learned[qid]}; }
  28. study -> answer {}
  29. answer -> answer { guard id == professor->sid; sync answer!learned[ professor->qid ]; }
  30. answer -> answer { guard id != cheatFrom; sync student(cheatFrom)->cheatChan?{qid, qval}; effect learned[qid] = qval; }
  31. answer -> graded { sync cgrade?grade; }
  32. graded -> passed { guard grade >= threshold; }
  33. grade -> idle { guard grade < threshold; }
  34. ;
  35. }
  36.  
  37. for( i: 0..students-1 ) {
  38. process student(i, i+1 (i + 2) % students);
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement