Thuta Learning
ရှာဖွေရန်
ExercisesProgrammingbeginner

Exercises: Core Basics ပြန်လေ့ကျင့်ခန်း

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Exercises: Core Basics ပြန်လေ့ကျင့်ခန်း ကို ကိုယ်တိုင် လေ့ကျင့်ကြည့်မယ်
  • သင်ခဲ့ပြီးသား skill တွေကို practice လုပ်ပြီး ခိုင်မာအောင်လုပ်မယ်
  • အမှားရှာ၊ ပြင်တတ်၊ ကိုယ်တိုင် check လုပ်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ lesson က teaching content အသစ်မဟုတ်ဘဲ Basic နဲ့ Intermediate chapter မှာသင်ခဲ့ပြီးသား function, slice, map, loop skill တွေကို confidence ရှိအောင် ပြန်လေ့ကျင့်ဖို့ ရည်ရွယ်ထားပါတယ်။ Task တစ်ခုချင်းစီကို ကိုယ်တိုင် code ရေးပြီးမှ solution နဲ့ ယှဉ်ကြည့်ဖို့ အကြံပြုပါတယ်။ ဒီ practice set ကို ပြီးအောင်လုပ်နိုင်ရင် နောက် project chapter ကို ပိုအဆင်ပြေအောင် ဆက်လုပ်နိုင်ပါလိမ့်မယ်။ Difficulty level က medium လောက်ဖြစ်ပြီး slice manipulation နဲ့ map counting logic ကို အဓိကထားစမ်းသပ်ပါတယ်။

လေ့ကျင့်ခန်းများ

Task 1: int slice တစ်ခုလက်ခံပြီး element အားလုံးရဲ့ ပေါင်းလဒ် (sum) ကို return ပြန်တဲ့ sum(nums []int) int function ရေးပါ။ Task 2: string တစ်ခုလက်ခံပြီး string ထဲက character တစ်ခုချင်းစီ ဘယ်နှစ်ကြိမ်ပါလဲဆိုတာကို map[rune]int အနေနဲ့ count တွက်ပေးတဲ့ countChars(s string) map[rune]int function ရေးပါ။ Task 3: int slice ကို parameter အနေနဲ့ယူပြီး slice ထဲက even number တွေချည်းသာပါတဲ့ slice အသစ် return ပြန်တဲ့ filterEven(nums []int) []int function ရေးပါ။ Task 4: struct Person{Name string; Age int} တစ်ခုဖန်တီးပြီး Person slice ကို လက်ခံကာ Age အများဆုံးလူကို ရှာပြီး return ပြန်တဲ့ oldest(people []Person) Person function ရေးပါ။

Code နမူနာ

go
package main

import "fmt"

// Task 1
func sum(nums []int) int {
	// TODO: implement
	return 0
}

// Task 2
func countChars(s string) map[rune]int {
	// TODO: implement
	return nil
}

// Task 3
func filterEven(nums []int) []int {
	// TODO: implement
	return nil
}

// Task 4
type Person struct {
	Name string
	Age  int
}

func oldest(people []Person) Person {
	// TODO: implement
	return Person{}
}

func main() {
	fmt.Println(sum([]int{1, 2, 3, 4, 5}))
	fmt.Println(countChars("gopher"))
	fmt.Println(filterEven([]int{1, 2, 3, 4, 5, 6}))
	people := []Person{{"Aye", 25}, {"Bo", 30}, {"Cho", 22}}
	fmt.Println(oldest(people))
}
You should see
sum() က 15, filterEven() က [2 4 6], oldest() က {Bo 30} ဆိုပြီး terminal ပေါ်မှာ ပေါ်လာရမှာပါ (countChars output က character count map ဖြစ်ပါလိမ့်မယ်)။

၅ မိနစ် စမ်းကြည့်

5 minutes အတွင်း TODO comment 4 ခုကို ကိုယ်တိုင်ဖြည့်ပြီး go run ခေါ်ကာ output က မှန်ကန်မှန်းစစ်ကြည့်ပါ။

သတိလေးတစ်ချက်

Self-practice မှာ solution ကို ချက်ချင်းမကြည့်ဘဲ ကိုယ်တိုင် compile error၊ logic error တွေကို debug လုပ်ကြည့်ပါ - ဒါမှ concept တွေက စွဲမှာဖြစ်ပါတယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • filterEven() ထဲမှာ nil slice ကနေ append မလုပ်ပဲ index ကို တိုက်ရိုက် assign လုပ်ကြိုးစားပြီး index out of range panic တက်တတ်တာ
  • countChars() မှာ string ကို byte အနေနဲ့ loop လှည့်ပြီး Myanmar text လို multi-byte character ပါလာရင် character count မှားတတ်တာ - range loop နဲ့ rune အနေနဲ့ လှည့်ရမှာဖြစ်တယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

5 minutes အတွင်း TODO comment 4 ခုကို ကိုယ်တိုင်ဖြည့်ပြီး go run ခေါ်ကာ output က မှန်ကန်မှန်းစစ်ကြည့်ပါ။

You'll know it worked when: sum() က 15, filterEven() က [2 4 6], oldest() က {Bo 30} ဆိုပြီး terminal ပေါ်မှာ ပေါ်လာရမှာပါ (countChars output က character count map ဖြစ်ပါလိမ့်မယ်)။

Exercises: Core Basics ပြန်လေ့ကျင့်ခန်း | Thuta Learning