Информатика · ҰБТ 2026 · 03. Компьютерлік ойлау
Алгоритмдер және программалау (Функция, Рекурсия, жолдармен жұмыс, файлдармен жұмыс
Тест тапсыру үшін жүйеге кіру немесе тіркелу керек.
Конспект
Оқулықтық тірек
- Қадырқұлов Р. Ә., Нұрмұханбетова Г. К. «Информатика. ЖМБ 10-сынып», 10-сынып, Алматыкітап баспасы, 2019, 1–31-беттер (§ 1–5)
- Мұхамбетжанова С. Т., Тен А. С., Голикова Н. Г. «Информатика», 9-сынып, Атамұра, 2019, 147–155-беттер
- Қадырқұлов Р. А., Рысқұлбекова Ә. Д., Нұрмұханбетова Г. К. «Информатика», 7-сынып, Алматыкітап баспасы, 2023, 105–114-беттер
- Wikipedia, Рекурсия: https://ru.wikipedia.org/wiki/Рекурсия
- MDN, Recursion: https://developer.mozilla.org/en-US/docs/Glossary/Recursion
Негізгі ұғымдар
- Модульдік программалау — есепті шағын тәуелсіз функцияларға бөлу.
- Функция мән қайтарады (
return), процедура — әрекет орындайды, мән қайтармайды (Python-даNone). - Жергілікті айнымалы функция ішінде ғана көрінеді, ауқымды — бүкіл программада.
- Жол (
str) — өзгермейтін тип; индекс 0-ден (соңынан −1-ден); қиюs[start:stop:step]. - Файл режимдері:
'r'— оқу,'w'— жазу (ескісін өшіреді),'a'— соңына қосу,'b'— екілік,'+'— оқу/жазу. - Қарапайым сұрыптаулар (көпіршікті, таңдау, кірістіру) — $O(n^2)$; жылдам (Хоар), біріктіру — $O(n \log n)$.
- Граф $G = (V, E)$: төбелер мен қабырғалар; BFS — кезек (FIFO), DFS — стек (LIFO) немесе рекурсия.
Теория
Функциялар. Жариялау: def name(param1, param2):, денесі шегініспен, нәтиже return арқылы қайтарылады. Функцияны шақырғанда аргументтер параметрлерге беріледі.
Жолдар. Негізгі амалдар: индекстеу s[0], s[-1]; қию s[2:5], s[::-1] (кері жол); біріктіру +; қайталау *; ұзындық len(s). Әдістер:
| Әдіс | Нәтижесі |
|---|---|
s.find(sub) |
алғашқы кездескен индекс, табылмаса $-1$ |
s.replace(old, new) |
барлық old-ты new-ге ауыстырады |
s.split(sep) |
жолды тізімге бөледі |
sep.join(list) |
тізімді жолға біріктіреді |
s.upper() / s.lower() |
бас / кіші әріпке түрлендіреді |
s.strip() |
басы мен соңындағы бос орындарды алады |
Жол өзгермейтін болғандықтан s[0] = 'A' қате береді; жаңа жол құру керек.
Файлдар. Жұмыс үш қадамнан тұрады: ашу → оқу/жазу → жабу. open("data.txt", "r", encoding="utf-8"). Оқу: read() — бүкіл файл бір жол ретінде, read(n) — $n$ таңба, readline() — бір жол, readlines() — жолдар тізімі. Жазу: write(text) — тек жолды жазады, сондықтан сан str() арқылы айналдырылады; жаңа жол — '\n'. seek(n) меңзерді $n$-позицияға қояды. close() жазылмаса деректер сақталмауы мүмкін; with менеджері файлды автоматты жабады. 'r' режимінде файл жоқ болса қате шығады.
Сұрыптау — элементтерді өсу не кему ретімен орналастыру; сұрыпталған массивте екілік іздеу $O(\log n)$ уақытта жүреді.
- Көпіршікті: көршілес элементтер салыстырылып ауыстырылады; әр өтуде ең үлкені соңына «қалқып шығады»; өтулер саны $n - 1$, салыстырулар $\dfrac{n(n-1)}{2}$.
- Таңдау: реттелмеген бөліктен ең кішісін тауып, оны бөліктің басына қояды.
- Кірістіру: кезекті элемент реттелген бөліктің тиісті орнына қойылады; жартылай реттелген деректерде тиімді.
- Тез сұрыптау (Хоар) — тірек элемент (pivot), «бөліп ал да билей бер»; біріктіру — кепілді $O(n \log n)$.
- Python:
a.sort()тізімнің өзін өзгертеді жәнеNoneқайтарады;sorted(a)жаңа тізім қайтарады, бастапқысы өзгермейді;reverse=True— кему ретімен.
Графтар. Бағытталған (орграф), бағытталмаған, салмақты графтар. Ұсыну тәсілдері: көршілестік матрицасы ($N \times N$) және көршілестік тізімі (сөздік, жадты үнемдейді). BFS бастапқы төбенің барлық көршілерін, содан кейін келесі деңгейді аралайды — салмақсыз графта ең қысқа жолды табады. DFS бір бағытпен тұйыққа дейін барып, кейін шегінеді — байланыстылық пен циклдарды іздеуде қолданылады.
def find_max(a, b):
if a > b:
return a
return b
print(find_max(15, 27)) # 27
text = "қазақ"
print(text == text[::-1]) # True — палиндром
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1):
for j in range(n - 1 - i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
print(bubble_sort([64, 25, 12, 22, 11])) # [11, 12, 22, 25, 64]
with open("Input.txt") as fin:
a, b = map(int, fin.read().split())
with open("Output.txt", "w") as fout:
fout.write(str(a + b) + '\n')
Рекурсия
Рекурсия — функцияның өзін-өзі шақыруы. Функцияда екі тармақ болады: базалық жағдай (рекурсияны тоқтатады) және рекурсивті тармақ. Базалық жағдай болмаса, шақырулар тоқтамайды және шақырулар стегі толып кетеді.
- Факториал: $n!=n\cdot(n-1)!$, $0!=1$ — базалық жағдай $n=0$.
- Фибоначчи сандары: $n$-мүше үшін $(n-1)$- және $(n-2)$-мүше есептеледі, яғни бір тармақта екі шақыру болады.
Мысалдар
[1, 6, 9, 7, 8, 3]тізімін көпіршікпен кему ретімен сұрыптағанда 1-өтуден кейін?[6, 9, 7, 8, 3, 1]— ең кішісі соңына жылжиды. Барлық салыстыру: $5 + 4 + 3 + 2 + 1 = 15$.s = "informatika";s.find("ma"),s[2:5]?5және"for".- Input.txt-те
12 15. Жоғарыдағы код Output.txt-ке не жазады?27. - Графта: A–B, A–C, B–D, C–E. A-дан BFS реті? A B C D E.
ҰБТ-дағы жиі қателер
'w'режимі файлды толықтырады деп ойлау: ол ескі мазмұнды өшіреді, толықтыратын —'a'.a = a.sort()жазу: нәтижесіNone, тізім жоғалады.s.find()табылмағанда қате береді деп санау: ол $-1$ қайтарады.write(5)жазу: тек жол жазылады,write(str(5))керек.- BFS пен DFS құралдарын шатастыру: BFS — кезек, DFS — стек/рекурсия.
- Қию
s[2:5]-ке 5-индекс кіреді деп ойлау.
Өзіңді тексер
- Мән қайтармайтын қосымша программа қалай аталады? — Процедура.
"abc" * 2нәтижесі? —"abcabc".- Файл соңына дерек қосу режимі? —
'a'. - Таңдау арқылы сұрыптаудың күрделілігі? — $O(n^2)$.
- Салмақсыз графта ең қысқа жолды қай алгоритм табады? — BFS (ені бойынша іздеу).