Assignment 5 Solutions
Part A
Exercise 1
func Sqrt_a(x float64) float64 {
z := x/2
for i := 1; i <=10; i++ {
z = z - (z*z - x)/(2*z)
}
return z
}
func Sqrt_b(x float64) float64 {
z := x/2
delta := 0.0001
diff := 1.0
for math.Abs(diff) > delta {
diff = (z*z - x)/(2*z)
z = z - diff
}
return z
}
Exercise 2
func Pic(dx, dy int) [][]uint8 {
var pic [][]uint8
pic = make([][]uint8, dy)
for y := 0; y < dy; y++ {
pic[y] = make([]uint8, dx)
for x := 0; x < dx; x++ {
pic[y][x] = uint8((x + y)/2)
}
}
return pic
}
Exercise 3
func WordCount(s string) map[string]int {
words := make(map[string]int)
fields := strings.Fields(s)
for i := range fields {
fi := fields[i]
words[fi] = words[fi] + 1 // words[fi] initializes to 0
}
return words
}
Exercise 4
func fibonacci() func() int {
this := 1
next := 1
return func() int {
ret := this
this = next
next = next + ret
return ret
}
}
Part B
Exercise 1
func (i IPAddr) String() string {
str := fmt.Sprintf("%v", i[0])
for k := 1; k < 4; k++ {
str = str + fmt.Sprintf(".%v", i[k])
}
return str
}
Exercise 2
func (e ErrNegativeSqrt) Error() string {
ev := fmt.Sprint(float64(e))
return "cannot Sqrt negative number: " + ev
}
func Sqrt(x float64) (float64, error) {
if x < 0 {
return 0.0, ErrNegativeSqrt(x)
}
z := x/2
for i := 1; i <=10; i++ {
z = z - (z*z - x)/2*z
}
return z, nil
}
Exercise 3
func (mr MyReader) Read(b []byte) (int, error) {
for i := range b {
b[i] = 'A'
}
return len(b), nil
}
Exercise 4
package main
import (
"code.google.com/p/go-tour/pic"
"image"
"image/color"
)
type Image struct{
width, height int
}
func (img *Image) Bounds() image.Rectangle {
return image.Rect(0, 0, img.width, img.height)
}
func (img *Image) ColorModel() color.Model {
return color.RGBAModel
}
func (img *Image) At(x, y int) color.Color {
return color.RGBA{
128+uint8(x), 128+uint8(y), 0, 255}
}
func main() {
m := Image{100, 100}
pic.ShowImage(&m)
}
Updated Wed Dec. 09 2015, 14:44 by cameron.