Tarkibga o'tish

16. Param — funksiyalarda murakkab turlar

Barcha masalalarda slice, satr, struct yoki funksiya turidagi ma'lumotlar funksiya parametri sifatida uzatiladi. Go'da slice o'z uzunligini biladi (len), shuning uchun uning o'lchami alohida parametr sifatida uzatilmaydi. Natija qaytariladigan qiymat orqali, zarur bo'lsa ko'rsatkich orqali beriladi.

Slice parametrlari

1. Butun sonlar slice'ini qabul qilib, uning barcha elementlarini joyida 2 baravar oshiruvchi funksiya yozing. Xuddi shu ishni massiv ([5]int) parametri bilan qilib ko'ring va farqini tushuntiring.
Misol: [1 2 3] → [2 4 6]; massiv uzatilsa, funksiya uning nusxasini o'zgartiradi va asl massiv o'zgarmaydi

2. Bir xil uzunlikdagi ikkita slice'ni qabul qilib, mos elementlar yig'indisidan iborat yangi slice qaytaruvchi funksiya yozing.
Misol: [1 2 3] va [10 20 30] → [11 22 33]

3. Slice va K sonini qabul qilib, uni joyida K pozitsiyaga dumaloq siljituvchi funksiya yozing.
Misol: [1 2 3 4 5], K = 2 → [4 5 1 2 3]

4. Slice'ni qabul qilib, uni musbat va manfiy elementlardan iborat ikkita yangi slice'ga ajratuvchi va ikkalasini qaytaruvchi funksiya yozing.
Misol: [3 -1 4 -5] → musbat [3 4], manfiy [-1 -5]

5. Slice va saralash tartibi (o'suvchi/kamayuvchi, kod sifatida) ni qabul qiluvchi universal saralash funksiyasini yozing.
Misol: [4 1 3], o'suvchi → [1 3 4]; kamayuvchi → [4 3 1]

6. Slice va K sonini qabul qilib, K-o'rindagi elementi o'chirilgan slice'ni qaytaruvchi funksiya yozing (s = f(s, k) ko'rinishida chaqirilsin).
Misol: [10 20 30 40], indeks 2 → [10 20 40]

7. Slice, K va X sonlarini qabul qilib, K-o'ringa X qo'shilgan slice'ni qaytaruvchi funksiya yozing.
Misol: [10 20 30], indeks 1, X = 15 → [10 15 20 30]

8. Slice va boshlang'ich indeks K ni qabul qilib, K-elementdan oxirigacha bo'lgan qismdagi eng katta elementning indeksini qaytaruvchi funksiya yozing. Undan foydalanib, slice'ni kamayish tartibida saralovchi funksiya yozing.
Misol: [3 9 2 7], K = 0 → 1; kamayish tartibida saralash → [9 7 3 2]

9. Ikkita slice'ni qabul qilib, ular teng ekanligini (uzunliklari va barcha mos elementlari teng) qaytaruvchi funksiya yozing.
Misol: [1 2 3] va [1 2 3] → true; [1 2] va [1 2 3] → false

10. Slice'ning L-elementidan R-elementigacha bo'lgan qismini teskari tartibga o'tkazuvchi funksiya yozing. Undan uch marta foydalanib, slice'ni K pozitsiyaga dumaloq siljituvchi funksiya yozing.
Misol: [1 2 3 4 5 6], L = 1, R = 3 (indeks) → [1 4 3 2 5 6]; [1 2 3 4 5], K = 2 → [4 5 1 2 3]

11. Slice'ni qabul qilib, takrorlanuvchi elementlari olib tashlangan slice'ni qaytaruvchi funksiya yozing (har bir qiymatning birinchi uchrashi qolsin).
Misol: [3 1 3 2 1] → [3 1 2]

12. Slice'ni qabul qilib, uning musbat elementlaridan iborat yangi slice qaytaruvchi funksiya yozing.
Misol: [3 -1 4 0 -5] → [3 4]

13. O'sish tartibida saralangan slice va X sonini qabul qilib, X saralanganlik saqlanadigan o'ringa qo'shilgan slice'ni qaytaruvchi funksiya yozing.
Misol: [1 3 5 7], X = 4 → [1 3 4 5 7]

Matritsa parametrlari

14. Matritsani ([][]float64) qabul qilib, uning transponirlangan nusxasini yangi matritsa sifatida qaytaruvchi funksiya yozing.
Misol: [[1 2 3] [4 5 6]] → [[1 4] [2 5] [3 6]]

15. Matritsani qabul qilib, qatorlar yig'indilaridan iborat slice qaytaruvchi funksiya yozing.
Misol: [[1 2 3] [4 5 6]] → [6 15]

16. Matritsa va K ni qabul qilib, K-qatori o'chirilgan matritsani qaytaruvchi funksiya yozing.
Misol: [[1 2] [3 4] [5 6]], indeks 1 → [[1 2] [5 6]]

17. Matritsa va K ni qabul qilib, K-ustuni o'chirilgan matritsani qaytaruvchi funksiya yozing.
Misol: [[1 2 3] [4 5 6]], indeks 1 → [[1 3] [4 6]]

18. Matritsa va ikki qator indeksi I, J ni qabul qilib, shu qatorlarni joyida o'rin almashtiruvchi funksiya yozing.
Misol: [[1 2] [3 4]], I = 0, J = 1 → [[3 4] [1 2]]

19. N×M va M×P o'lchamli ikki matritsani qabul qilib, ularning ko'paytmasini yangi matritsa sifatida qaytaruvchi funksiya yozing.
Misol: [[1 2] [3 4]] va [[5 6] [7 8]] → [[19 22] [43 50]]

20. N×M matritsani qator bo'yicha bir o'lchamli slice'ga aylantiruvchi hamda bir o'lchamli slice'dan N×M matritsa tiklovchi ikkita funksiya yozing.
Misol: [[1 2 3] [4 5 6]] → [1 2 3 4 5 6]; [1 2 3 4 5 6], N = 2, M = 3 → [[1 2 3] [4 5 6]]

21. Kvadrat matritsani qabul qilib, matritsa simmetrik ekanligini qaytaruvchi funksiya yozing.
Misol: [[1 2] [2 1]] → true; [[1 2] [3 4]] → false

22. Matritsani qabul qilib, eng katta element qiymatini hamda uning qator va ustun indekslarini (uchta natija) qaytaruvchi funksiya yozing.
Misol: [[1 9 3] [4 5 6]] → 9, qator 0, ustun 1

23. N×N matritsa va K (K ≤ N) ni qabul qilib, uning chap yuqori burchagidagi K×K o'lchamli qism matritsasini yangi matritsa sifatida qaytaruvchi funksiya yozing.
Misol: [[1 2 3] [4 5 6] [7 8 9]], K = 2 → [[1 2] [4 5]]

24. Kvadrat matritsani qabul qilib, determinantini Gauss usuli (uchburchak ko'rinishga keltirish) bilan hisoblovchi funksiya yozing.
Misol: [[1 2] [3 4]] → -2; [[2 1] [1 3]] → 5

Satr parametrlari

25. Satrni qabul qilib, undagi so'zlar sonini qaytaruvchi funksiya yozing.
Misol: "Go tili darslari" → 3

26. Satr va uni bo'luvchi belgi (masalan vergul) ni qabul qilib, satr qismlaridan iborat slice qaytaruvchi funksiya yozing.
Misol: "olma,anor,uzum", "," → [olma anor uzum]

27. Satrni qabul qilib, undagi eng uzun so'zni qaytaruvchi funksiya yozing.
Misol: "men Go tilini o'rganyapman" → o'rganyapman

28. Satrlar slice'ini qabul qilib, uni joyida satrlar uzunligi bo'yicha saralovchi funksiya yozing.
Misol: [gilos nok anor] → [nok anor gilos]

29. Satrni qabul qilib, uning "sarlavha uslubi"ga (har so'z bosh harfi katta) o'tkazilgan versiyasini qaytaruvchi funksiya yozing.
Misol: "go tili darslari" → "Go Tili Darslari"

30. Satrlar slice'ini qabul qilib, ular orasidagi palindromlardan iborat yangi slice qaytaruvchi funksiya yozing.
Misol: [radar salom non level] → [radar non level]

31. Satrni qabul qilib, uning boshidagi va oxiridagi bo'shliqlarni olib tashlovchi Trim funksiyasini yozing.
Misol: " salom dunyo " → "salom dunyo"

32. Satr va C belgisini qabul qilib, satrdagi barcha C belgilarini o'chirib tashlangan yangi satrni qaytaruvchi funksiya yozing.
Misol: "banana", 'a' → "bnn"

33. Satr va K sonini qabul qilib, satrdagi K-so'zni qaytaruvchi funksiya yozing (bunday so'z bo'lmasa, bo'sh satr qaytarilsin).
Misol: "bir ikki uch", K = 2 → "ikki"; K = 5 → ""

34. Satrlar slice'i va ajratgich satrini qabul qilib, slice elementlarini ajratgich bilan birlashtirgan bitta satrni qaytaruvchi Join funksiyasini yozing.
Misol: [a b c], "-" → "a-b-c"

35. Satrni teskari tartibga o'tkazuvchi funksiya yozing. Undan foydalanib, satrlar slice'idagi palindrom satrlar sonini qaytaruvchi funksiya yozing.
Misol: "salom" → "molas"; [abba abc xyx] → 2

36. Satr, uzunlik N, to'ldiruvchi belgi C va tomon kodi (1 — chap, 2 — o'ng) ni qabul qilib, satrni ko'rsatilgan tomondan C belgilari bilan N uzunlikkacha to'ldiruvchi funksiya yozing.
Misol: "42", 5, '0', 1 → "00042"; "42", 5, '0', 2 → "42000"

37. Ikki satrni qabul qilib, ularni leksikografik solishtiruvchi funksiya yozing: birinchisi kichik bo'lsa −1, teng bo'lsa 0, katta bo'lsa 1 qaytarilsin (tayyor solishtirish funksiyasisiz).
Misol: "olma", "anor" → 1; "anor", "olma" → -1; "go", "go" → 0

38. Bo'shliqlar bilan ajratilgan butun sonlardan iborat satrni qabul qilib, sonlarni butun sonlar slice'i sifatida qaytaruvchi funksiya yozing.
Misol: "10 -5 7" → [10 -5 7]

Struct bilan ishlash

39. "Talaba" struct turini (ism, uch fan bahosi) e'lon qiling va uning o'rtacha bahosini hisoblovchi funksiya yozing.
Misol: Talaba{"Ali", 5, 4, 3} → 4

40. "Nuqta" struct turini (x, y) e'lon qiling va ikkita nuqta orasidagi masofani hisoblovchi funksiya yozing.
Misol: (0, 0) va (3, 4) → 5

41. "Mahsulot" struct turini (nomi, narxi, soni) e'lon qiling va uning umumiy qiymatini (narx × son) hisoblovchi funksiya yozing.
Misol: Mahsulot{"Non", 4000, 5} → 20000

42. "Sana" struct turini (kun, oy, yil) e'lon qiling va ikki sanani solishtiruvchi (qaysi biri oldinroq ekanligini aniqlovchi) funksiya yozing.
Misol: 15.03.2024 va 20.02.2025 → birinchi sana oldinroq

43. "Vaqt" struct turini (soat, minut, sekund) e'lon qiling va ikki vaqt orasidagi farqni sekundlarda hisoblovchi funksiya yozing.
Misol: 10:00:00 va 12:30:15 → 9015 soniya

44. "To'g'ri to'rtburchak" struct turini (kengligi, balandligi) e'lon qiling va to'g'ri to'rtburchaklar slice'ini qabul qilib, eng katta yuzali to'g'ri to'rtburchakni qaytaruvchi funksiya yozing.
Misol: [{2 3} {4 5} {3 6}] → eng katta yuza 20 ({4 5})

45. «Kasr» struct turini (surat, maxraj) e'lon qiling. Ikki kasrni qo'shish, ko'paytirish va kasrni qisqartirish funksiyalarini yozing.
Misol: 1/2 + 1/3 → 5/6; 1/2 · 2/3 → 1/3; 6/8 qisqartirilsa → 3/4

46. «Kompleks son» struct turini (haqiqiy qism, mavhum qism) e'lon qiling. Kompleks sonlarni qo'shish, ko'paytirish va modulini hisoblash funksiyalarini yozing.
Misol: (1+2i) + (3+4i) → 4+6i; (1+2i) · (3+4i) → -5+10i; |3+4i| → 5

47. «Vektor» struct turini (x, y, z) e'lon qiling. Ikki vektorning skalyar va vektor ko'paytmasini hisoblovchi funksiyalarni yozing.
Misol: (1, 2, 3) va (4, 5, 6) → skalyar 32, vektor (-3, 6, -3)

48. «Nuqta» struct turidan foydalanib «Kesma» struct turini (ikki uchi) e'lon qiling. Kesma uzunligini va ikki kesma kesishishini tekshiruvchi funksiyalarni yozing.
Misol: (0, 0)–(3, 4) uzunligi 5; (0, 0)–(4, 4) va (0, 4)–(4, 0) → kesishadi; (0, 0)–(1, 1) va (2, 2)–(3, 3) → kesishmaydi

49. «Aylana» struct turini (markaz — «Nuqta», radius) e'lon qiling. Ikki aylananing o'zaro joylashuvini (kesishadi, urinadi, biri ikkinchisining ichida, kesishmaydi) aniqlovchi funksiya yozing.
Misol: (0, 0, 5) va (8, 0, 5) → kesishadi; (0, 0, 3) va (6, 0, 3) → urinadi; (0, 0, 10) va (1, 0, 2) → biri ichida; (0, 0, 2) va (10, 0, 3) → kesishmaydi

50. «To'g'ri to'rtburchak» struct turini (chap yuqori va o'ng pastki uchlar) e'lon qiling. Nuqta to'rtburchak ichida ekanligini tekshiruvchi va ikki to'rtburchak kesishmasini qaytaruvchi funksiyalarni yozing.
Misol: (0, 4)–(5, 0) va nuqta (2, 2) → true, nuqta (6, 2) → false; (0, 4)–(5, 0) va (3, 6)–(8, 2) → kesishma (3, 4)–(5, 2)

51. «Sana» struct turidan foydalanib, sana va K sonini qabul qilib, sanaga K kun qo'shilgandan keyingi sanani qaytaruvchi funksiya yozing.
Misol: 28.02.2024, K = 3 → 02.03.2024

Struct'lar slice'i bilan ishlash

52. "Talaba" struct'laridan iborat slice'ni qabul qilib, eng yuqori o'rtacha bahoga ega talabani qaytaruvchi funksiya yozing.
Misol: [{Ali 5 4 3} {Vali 5 5 4}] → Vali (o'rtachasi 4.67)

53. "Mahsulot" struct'laridan iborat slice'ni qabul qilib, umumiy qiymatni hisoblovchi funksiya yozing.
Misol: [{Non 4000 5} {Sut 9000 2}] → 38000

54. "Nuqta" struct'laridan iborat slice'ni qabul qilib, koordinata boshiga eng yaqin nuqtani qaytaruvchi funksiya yozing.
Misol: [(3, 4) (1, 1) (5, 0)] → (1, 1)

55. "Talaba" struct'laridan iborat slice'ni qabul qilib, uni joyida o'rtacha baho bo'yicha saralovchi funksiya yozing.
Misol: [{Ali 5 4 3} {Vali 5 5 4} {Sevara 3 4 4}] → o'sish tartibida [Sevara Ali Vali]

56. "Mahsulot" struct'laridan iborat slice'ni qabul qilib, narxi berilgan chegaradan qimmat bo'lganlaridan iborat yangi slice qaytaruvchi funksiya yozing.
Misol: [{Non 4000} {Sut 9000} {Go'sht 90000}], chegara 5000 → [Sut Go'sht]

57. "Xodim" struct'laridan (ism, lavozim, maosh) iborat slice'ni qabul qilib, berilgan lavozimdagi xodimlarning o'rtacha maoshini qaytaruvchi funksiya yozing.
Misol: [{Ali dasturchi 10000000} {Vali dasturchi 14000000} {Sevara dizayner 8000000}], "dasturchi" → 12000000

58. "Talaba" struct'laridan iborat slice va fan nomi (satr) ni qabul qilib, o'sha fandan eng yuqori bahoni olgan talabaning ismini qaytaruvchi funksiya yozing (Talaba struct'ida fan nomlari va baholar slice'i bo'lsin).
Misol: Ali — matematika 5, fizika 3; Vali — matematika 4, fizika 5: "fizika" → Vali; "matematika" → Ali

Fayl parametrlari

59. Ikkilik fayl nomini qabul qilib, undagi butun sonlar sonini qaytaruvchi funksiya yozing.
Misol: 4 ta int32 yozilgan fayl (16 bayt) → 4

60. Butun sonlar slice'ini ikkilik faylga yozuvchi va ikkilik fayldan slice'ga o'quvchi ikkita funksiya yozing (fayl nomi va slice parametrlar, xato error qiymati sifatida qaytarilsin).
Misol: [10 20 30] yozilib, qayta o'qilsa → [10 20 30] (xato bo'lmasa, error = nil)

61. Ikki fayl nomini qabul qilib, birinchi fayl mazmunini ikkinchisiga nusxalovchi funksiya yozing (xato error qiymati sifatida qaytarilsin).
Misol: a.txt mazmuni salom → b.txt mazmuni ham salom

62. Ikkilik fayl nomi va X sonini qabul qilib, X ni fayl oxiriga qo'shuvchi funksiya yozing.
Misol: fayldagi [1 2 3], X = 4 → fayl [1 2 3 4]

63. Matnli fayl nomini qabul qilib, uning qatorlarini satrlar slice'i sifatida qaytaruvchi funksiya yozing (qatorlar soni — slice uzunligi).
Misol: fayl: bir, ikki, uch (har biri alohida qatorda) → [bir ikki uch], uzunligi 3

64. «Talaba» yozuvlari (struct) saqlangan ikkilik fayl nomi va talaba ismini qabul qilib, shu talaba yozuvining fayldagi tartib raqamini qaytaruvchi funksiya yozing (topilmasa, 0).
Misol: fayldagi yozuvlar Ali, Vali, Sevara: "Vali" → 2; "Gulnora" → 0

Funksiyani parametr sifatida uzatish

65. f(x) funksiyasini, a, b chegaralarini va bo'laklar soni n ni parametr sifatida qabul qilib, [a, b] kesmada to'rtburchaklar usuli bilan aniq integralni taqribiy hisoblovchi funksiya yozing. Uni bir nechta turli funksiyalar uchun sinab ko'ring.
Misol: f(x) = x², [0, 1], n = 1000 → taxminan 0.333; f(x) = sin x, [0, π], n = 1000 → taxminan 2

66. f(x) funksiyasini, [a, b] kesmani va aniqlik eps ni qabul qilib, f(x) = 0 tenglamaning ildizini kesmani teng ikkiga bo'lish usuli bilan topuvchi funksiya yozing (f(a) va f(b) turli ishorali deb hisoblang).
Misol: f(x) = x² − 2, [0, 2], eps = 0.0001 → 1.4142

67. Slice va ikki elementni solishtiruvchi funksiyani parametr sifatida qabul qiluvchi universal saralash funksiyasini yozing. Uni o'sish, kamayish va modul bo'yicha saralash uchun ishlating.
Misol: [-5 3 -1 4]: o'sish → [-5 -1 3 4]; kamayish → [4 3 -1 -5]; modul bo'yicha → [-1 3 4 -5]

68. Slice va shart funksiyasini (func(int) bool) qabul qilib, shartni qanoatlantiruvchi elementlar sonini qaytaruvchi funksiya yozing.
Misol: [1 2 3 4 5 6], juftlik sharti → 3

69. Slice va f funksiyasini qabul qilib, slice'ning har bir elementiga f ni joyida qo'llovchi funksiya yozing (Map).
Misol: [1 2 3], f(x) = x·x → [1 4 9]

70. f(x) funksiyasini, [a, b] kesmani va n ni qabul qilib, kesmani n ta teng bo'lakka bo'luvchi nuqtalarda funksiya qiymatlari jadvalini chiqaruvchi hamda shu nuqtalardagi eng katta qiymatni qaytaruvchi funksiya yozing.
Misol: f(x) = x², [0, 2], n = 4 → jadval 0→0, 0.5→0.25, 1→1, 1.5→2.25, 2→4; eng katta qiymat 4