Not logged in. Login

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.