28 lines
		
	
	
		
			962 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			962 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
import math,strutils
 | 
						|
 | 
						|
proc fixedWidth(input: string, minFieldSize: int):string {.inline.} =
 | 
						|
  # Note that field size is a minimum- will expand field if input
 | 
						|
  # string is larger
 | 
						|
  if input.startsWith("-"):
 | 
						|
    return(input & repeatchar(count=(abs(minFieldSize-len(input))),c=' '))
 | 
						|
  else:
 | 
						|
    return(" " & input & repeatchar(count=(abs(minFieldSize-len(input))-1),c=' '))
 | 
						|
 | 
						|
template mathOnInterval(lowbound,highbound:float,counts: int,p:proc) =
 | 
						|
  block:
 | 
						|
    var step:    float = (highbound - lowbound)/(max(counts,1))
 | 
						|
    var current: float = lowbound
 | 
						|
    while current < highbound:
 | 
						|
      echo($fixedWidth($current,25) & ": " & $fixedWidth($p(current),25))
 | 
						|
      current += step
 | 
						|
 | 
						|
echo "Sine of theta from 0 to 2*PI by PI/12"
 | 
						|
mathOnInterval(0.0,2.0*PI,12,sin)
 | 
						|
echo("\n")
 | 
						|
echo "Cosine of theta from 0 to 2*PI by PI/12"
 | 
						|
mathOnInterval(0.0,2.0*PI,12,cos)
 | 
						|
 | 
						|
# The first example above is much the same as:
 | 
						|
# for i in 1..100:
 | 
						|
#   echo($sin( (float(i)/100.0) * 2.0*PI ))
 |