function suvat(v,i){  if(i==0)return showterms([[1,v]]);  switch(v){case "s": return "the distance travelled";case "u": return "the initial velocity";case "v": return "the final velocity";case "a": return "the acceleration";case "t": return "the time of travel";}};var equns=new Array(5);equns["s"]=showterms([[1,'v']," = ",[1,'u'],[1,Var('a t')]]);equns["a"]=onelinemid(showterms([[1,'s']," = "]),Frac(showterms([[1,'u'],[1,'v']]),showNB(2)),  showterms([[1,'t']]));equns["v"]=onelinemid(showterms([[1,'s']," = ",[1,Var('u t')]," + "]),Frac(1,2,"polysmall"),  showterms([[1,Var('a t'),2]]));equns['t']=showterms([[1,'v',2]," = ",[1,'u',2],[2,Var('a s')]]);equns["u"]=onelinemid(showterms([[1,'s']," = ",[1,Var('v t')],minusch2]),Frac(1,2,"polysmall"),  showterms([[1,Var('a t'),2]]));function units(x,desc){//alert("eval "+x+"="+eval(x));  if(arguments.length==1)desc=descp;  var vl=eval(x);	switch(x){	case "s":return desc==0?showterms([[' m',1]],"polysmall"):" metre"+(vl==1?"":"s");	case "u":case "v":return (desc==0?showterms([[' ms',1,-1]],"polysmall"):" metre"	  +(vl==1?"":"s")+" per second");	case "t":return (desc==0?showterms([[' s',1]],"polysmall"):" second"+(vl==1?"":"s"));	case "a":return (desc==0?showterms([[' ms',1,-2]],"polysmall"):" metre"+(vl==1?"":"s")	  +" per second per second");	}};function shwevl(s,e){ this.shw=s;this.evl=e };var A,B,C,solvequad=false,twosolns=false,oneroot=false;function rearr(missvar,findvar,bef,aft){//alert("mising="+missvar+" find="+findvar);   if(arguments.length<4)aft="";   if(arguments.length<3)bef="";   switch(missvar){    case "s":switch(findvar){       case "v":return new shwevl(showterms([[1,'v']," = ",[1,'u'],[1,'a t']]),u+a*t);break;       case "u":return new shwevl(showterms([[1,'u']," = ",[1,'v'],[-1,Var('a t')]]),         v-a*t);break;       case "a":return new shwevl(onelinemid(showterms([[1,'a']," = "]),            Frac(showterms([[1,'v'],[-1,'u']]),showterms([[1,'t']]))),            (v-u)/t);break;       case "t":return new shwevl(onelinemid(showterms([[1,'t']," = "]),            Frac(showterms([[1,'v'],[-1,'u']]),showterms([[1,'a']]))),         (v-u)/a);break;       };break;    case "a":switch(findvar){        case "s":return new shwevl(onelinemid(showterms([[1,'s']," = "]),           Frac(showterms([[1,'u'],[1,'v']]),showNB(2)),            showterms([[1,'t']])),(u+v)*t/2);break;        case "t":return new shwevl(onelinemid(showterms([[1,'t']," = "]),            Frac(showterms([[2,'s']]),showterms([[1,'u'],[1,'v']]))),2*s/(u+v));break;        case "u":return new shwevl(onelinemid(showterms([[1,'u']," = "]),               Frac(showterms([[2,'s']]),showterms([[1,'t']])),showterms([[-1,'v']])),            2*s/t-v);break;        case "v":return new shwevl(onelinemid(showterms([[1,'v']," = "]),               Frac(showterms([[2,'s']]),showterms([[1,'t']])),showterms([[-1,'u']])),             2*s/t-u);break;        };break;    case "v":switch(findvar){        case "s":return new shwevl(onelinemid(showterms([[1,'s']," = ",[1,Var('u t')]," + "]),             Frac(1,2,"polysmall"),showterms([[1,Var('a t'),2]])),u*t+a*t*t/2);break;        case "u":return new shwevl(onelinemid(showterms([[1,'u']," = "]),              Frac(showterms([[1,'s']]),showterms([[1,'t']])),spn(minusch2),              Frac(1,2,"polysmall"),showterms([[1,Var('a t')]])),              s/t-a*t/2);break;        case "a":return new shwevl(onelinemid(showterms([[1,'a']," = "]),           Frac(showterms([[2,1],"( ",[1,'s'],[-1,Var('u t')]," )"]),           showterms([[1,'t',2]]))), 2*(s-u*t)/t/t);break;        case "t": solvequad=true;twosolns=true;A=a/2;B=u;C=-s;               oneroot=equals(B*B-4*A*C,0);              return new shwevl(onelinemid(Frac(1,2,"polysmall"),                   showterms([[1,Var('a t'),2],[1,Var('u t')],[-1,'s']," = ",[0,1]])),                  [(-B+Math.sqrt(B*B-4*A*C))/2/A,(-B-Math.sqrt(B*B-4*A*C))/2/A]);break;        };break;     case "t":switch(findvar){        case "v":twosolns=!equals(u*u+2*a*s,0);           return new shwevl(showterms([[1,'v']," = ","&plusmn;&radic;( ",[1,'u',2],           [2,Var('a s')]," )"]),           [Math.sqrt(u*u+2*a*s),-Math.sqrt(u*u+2*a*s)]);break;        case "u":twosolns=!equals(u*u+2*a*s,0);           return new shwevl(showterms([[1,'u']," = ","&plusmn;&radic;(",[1,'v',2],           [-2,Var('a s')]," )"]),           [Math.sqrt(v*v-2*a*s),-Math.sqrt(v*v-2*a*s)]);break;        case "a":return new shwevl(onelinemid(showterms([[1,'a']," = "]),            Frac(showterms([[1,'v',2],[-1,'u',2]]),showterms([[2,'s']]))),            (v*v-u*u)/2/s);break;        case "s":return new shwevl(onelinemid(showterms([[1,'s']," = "]),             Frac(showterms([[1,'v',2],[-1,'u',2]]),showterms([[2,'a']]))),             (v*v-u*u)/2/a);break;        };break;     case "u":switch(findvar){        case "s":return new shwevl(onelinemid(showterms([[1,'s']," = ",[1,Var('v t')],        minusch2]),Frac(1,2,"polysmall"),          showterms([[1,Var('a t'),2]])),v*t-a*t*t/2);break;        case "v":return new shwevl(onelinemid(showterms([[1,'v']," = "]),             Frac(showterms([[1,'s']]),showterms([[1,'t']])),spn(" + "),             Frac(showterms([[1,Var('a t')]]),spn(2))           ),s/t+a*t/2);break;        case "a":return new shwevl(onelinemid(showterms([[1,'a']," = "]),            Frac(showterms([[2,1],"( ",[1,Var('v t')],[-1,'s']," )"]),showterms([[1,'t',2]]))),           2*(v*t-s)/t/t);break;        case "t":solvequad=true;twosolns=true;A=a/2;B=-v;C=s;             oneroot=equals(B*B-4*A*C,0);            return new shwevl(onelinemid(Frac(1,2,"polysmall"),                showterms([[1,Var('a t'),2],[-1,Var('v t')],[1,'s']," = ",[0,1]])),               [(-B+Math.sqrt(B*B-4*A*C))/2/A,(-B-Math.sqrt(B*B-4*A*C))/2/A]);break;        };break;      } }; if(args.suvatFind||args.suvatMiss){   givenf="suvat";   if(args.suvatFind){findvar=args.suvatFind;     if("suvat".indexOf(findvar)==-1)halt("suvatFind URL parameter must be 1 of s,u,v,a and t");    }else{findvar=""};   givenf=givenf.replace(findvar,"")   if(args.suvatMiss){missvar=args.suvatMiss;     if("suvat".indexOf(missvar)==-1)halt("suvatMiss URL parameter must be 1 of s,u,v,a and t");    }else{missvar=""};   givenf=givenf.replace(missvar,"");   if(findvar==""){findvar=randelt(givenf);givenf=givenf.replace(findvar,"")};   if(missvar==""){missvar=randelt(givenf);givenf=givenf.replace(missvar,"")};   //alert("find="+findvar+" miss="+missvar);   // alert(givenf+" find="+findvar+" miss="+missvar);   givenf=(givenf+findvar+missvar); }else { givenf=newvars(5,"suvat").join("");        findvar=givenf.charAt(3);missvar=givenf.charAt(4)     };  //alert("givenf "+givenf+" findvar="+findvar+" missvar="+missvar);function given(v){return findvar!=v && missvar!=v};var descp=randint(0,1);function desc(x,d){if(arguments.length==1)d=descp;   return suvat(givenf.charAt(x),d) };function descp1(x){if(descp==0)return desc(x,0)  else return desc(x,1)+" ("+desc(x,0)+") "};function val(x,d){if(arguments.length==0)d=descp;  return (d==0?spn(" = "):" is ")+showterms([[eval(givenf.charAt(x)),1]])     +units(givenf.charAt(x),d)};function showval(x,d){if(arguments.length==1)d=descp; return desc(x,d)+val(x,d)};function showWorkedsuvatSOLN(){document.writeln( "We need a <i>suvat</i> equation with ",  desc(0,0),", ",desc(1,0),", ",desc(2,0)," as well as ",  desc(3,0),"; i.e. an equation with ",desc(4,0)," missing.<br>",  ("avu".indexOf(missvar)==-1?oneline:onelinemid)    ("So the  equation to use is:",equns[missvar]),  (' vss s'.charAt(1+"savtu".indexOf(missvar))!=findvar    ?"Rearranging to find "+desc(3,0)+(solvequad?" we get the quadratic equation:":"")+"<blockquote>"+      SOLN.shw+"</blockquote>"    :""  ),    "Substituting the values given for the variables we  ",    (solvequad?" can solve "+showterms([[A,Var(findvar),2],[B,Var(findvar)],[C,1]," = ",[0,1]])        +" to find "+(oneroot?"two equal":"two")+" real roots:<br>"    :twosolns    ? " have "+showterms([[1,findvar]," = ",[dps(SOLN.evl[0],3),1]])+" or "+showterms([[dps(SOLN.evl[1],3),1]])    : " have "+showterms([[1,findvar]," = ",[dps(SOLN.evl,3,'s'),1]])    ),    (twosolns?(oneroot?showterms([[1,findvar]," = ",[dps(SOLN.evl[0],3,'s'),1]])     :"<br>Either of the two values is correct: "+showterms([[dps(SOLN.evl[0],3),1]])+" and "+      showterms([[dps(SOLN.evl[1],3),1]])      ):""),    units(findvar,0), " to 3 dps."   );};