Uppgift 7 våren 2014Uppgiften ska lämnas till din övningsledare på övningen den 28/3 (27/3 för pallinda14).
Lämna in uppgiften med rätt försättsblad:
För godkänt måste du ha gjort samtliga deluppgifter. Det är tillåtet att göra enstaka fel och misstag men det är viktigt att du försöker lösa samtliga uppgifter. FöreberedelserDu kommer åt senaste versionen av Go (1.2.1) på skolans Ubuntudatorer genom att logga in på ditt konto och ge följande kommando i ett terminalfönster: module initadd go Om du vill så kan du enkelt installera Go på din egen dator. För den här kursen så räcker det om du känner till kommandona go run som kompilerar och kör ett Go-program samt go fmt som formatterar programmet. HemuppgiftBekanta dig med programspråket Go på sajten golang.org och ta en titt på Go for Java programmers, en snabbstart för Javaprogrammerare som vill komma igång med Go. Målet är att du ska skaffa dig en överblick, inte att du ska förstå allt på en gång. Läs avsnitt 1 och 2 i Fundamentals of concurrent programming. De här avsnitten ska du läsa noggrant. Överkurs
Om du vill skriva egna paket med tillhörande testkod så bör du
organisera din kod
på rätt sätt. Det viktigaste är att samla all kod på en plats,
till exempel i katalogen export GOPATH=$HOME/Private/mygo
i din initieringsfil (som heter Skriftlig uppgiftTa en tur med Go (sida 1-50) och lämna in korrekt formatterade skriftliga lösningar till följande uppgifter.
VäckarklockaSkriv en funktion Remind(text string, paus time.Duration) som skriver ut texten "Klockan är XX.XX: " + textom och om igen med en paus av given längd före varje påminnelse, XX.XX ska bytas ut mot den aktuella tiden.
Skriv sedan ett komplett program som går för evigt och skriver ut följande påminnelser:
För att undvika att huvudprogrammet avslutas kan du använda satsen select {} som gör att en gorutin stannar för evigt.
Den aktuella tiden får du från funktionen
time.Now().Format("15:04:05") Man beskriver alltså formatet genom att ange hur en viss förutbestämd tid, som måste vara Mon Jan 2 15:04:05 -0700 MST 2006, ska formatteras.
Lämna in koden för hela programmet.
Glöm inte att göra Summa i två delar
Gör klart programmet nedan. Det adderar alla tal i en vektor
genom att dela vektorn på mitten och låta två gorutiner
göra halva jobbet var. Delresultaten skickas över en kanal.
Lämna in koden för hela programmet.
Glöm inte package main // Add adds the numbers in a and sends the result on res. func Add(a []int, res chan<- int) { // TODO } func main() { a := []int{1, 2, 3, 4, 5, 6, 7} n := len(a) ch := make(chan int) go Add(a[:n/2], ch) go Add(a[n/2:], ch) // TODO: Get the subtotals from the channel and print their sum. } |