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.