
- •Программалаудың парадигмалары: құрылымдық, модулдік және объектілі-бағытталған программалау.
- •2.Компьютердің логикалық схемасы. Программалау, компиляциялау және программаның орындалу орталары.
- •Программалау тілдерінің негізгі нысандары: типтер, тұрақтылар, айнымалылар, процедуралар. Олардың мақсатыжәне ара қатынасы.
- •5 Кіріс-шығыс операторлары.Кіріс-шығыс функциялары мен кітапханасы.
- •6.Функциялар және процедуралар, параметрлерді беру тәсілдері. Функция және процедура мысалдары.
- •10.2 Процедуралар
- •7.Циклды бағдарламалау орталары. Циклдан шығу әдістері. Цикл операторларына мысал. Рекурсивті функциялар.
- •8.Функциялар. Функцияның фактілі және формальды параметрлері. Айнымалы санды параметрлі функциялар. Рекурсивті функциялар.
- •9.Программаларды өңдеудің негізгі принциптері. Құрылымдық программалау, принциптері
- •10.Функциялар және көрсеткіштер. Көрсеткішпен жіберуде көрсеткіштерді функцияның нақты аргументі ретінде пайдалану.
- •12.Қолданбалы функцияларды құру.№есептеу үшін функцияларды тестілеу және анықтау. Көрсеткіш сілтемесімен берілетін фактілі аргументтер, функцияларды құру.
- •13.Алгоритм түсінігі. Алгоритмдерді талдау принциптері. O-нотация.
- •15,Сызықтық және циклдік тізімдер, стектер, дектер, кезек(файл) және екілік ағаштарды өңдеу, инициализациялау, хабарлау.
- •Сұрыптаудың негізгі алгоритмдері: қосу бойынша, таңдау бойынша сұрыптау.
- •18. Сұрыптаудың негізгі алгоритмдері: көпіршік бойынша сұрыптау. Сұрыптау алгоритмін талдау.
- •19.Сұрыптаудың негізгі алгоритмдері: шейкер сұрыптау, Шелл әдісі бойынша сұрыптау. Сұрыптау алгоритмін талдау.
- •20.Сұрыптаудың негізгі алгоритмдері: қосылу бойынша сұрыптау, тез сұрыптау. Сұрыптау алгоритмін талдау.
- •Жүктелуші модуль
- •Абсолютті модуль
- •24.Бағдарламаны тестілеу және қайта ретке келтіру.
- •Объектіге-бағытталған тілдер бағдарламасының негізгі конструкциялары. Операция және функцияларды қайта жүктеу түсінігі.
- •Объект және кластарды сипаттау. Конструктор және деструктор. Класс элементтеріне қол жетімділікті басқару сұрақтары.
- •Бірлік және көптік мұралау концепциялары. Туынды кластарды ашу және жабу.
- •Бірлік мұралау
- •Көптік мұралау
- •Полиморфизм принциптері. Абстрактілі кластар. Контейнерлі кластар.
- •29. Полиморфизм принциптері. Полиморфизм әр түрлілгі және оларды іске асыру.
- •Класс және функция шаблондары. Шешуші жағдайларда өңдеу және генерациялау.
- •Объектіге – бағытталған бағдарламалауды талдау және жобалау концерциялары. Бағдарламалық өнімдердің өмірлік циклдері.
- •Объектіге – бағытталған бағдарламалаудың құралдары және оларды объектіге – бағытталған талдауда қолдану.
20.Сұрыптаудың негізгі алгоритмдері: қосылу бойынша сұрыптау, тез сұрыптау. Сұрыптау алгоритмін талдау.
Тез сұрыптау бойынша тиімді болу үшін элементтердің ауысуын үлкен аралықтарда жасаған ыңғайлы.Кілттері бар n элементтер кері ретпен орналасқан болсын. Оларды сұрыптау n/2 ауысу орындауға болады, ол үшін алдымен ең сол жақ шеттегі және ең оң жақ шеттегі элементтерді орындарымен ауыстырып отырып, ақырындап ортасына дейін жету керек.
Бұл тек элементтердің қатаң түрде кері ретпен орналасқандығы кезінде жүзеге асады.
procedure quicksort;
procedure sort (l,r: index);
var i,j: index; x,w: item;
begin i := I; j : = r;
x := a[(l+r) div 2];
repeat
while a[i] .key < x .key do i := i+1;.
while x .key < a[j] .key do j := j—l;
if i < j then
begin w := a[i]; a[i] :*= a[j]; a[j] != w;
end
until i > j;
if l < j then sort(l,j)\
if i < r; then sort(i,r)
end ;
begin sort(l,ri)
end {quicksort}
Тез сұрыптау анализі. Тез сұрыптауды анализдеу үшін алдымен бөлу процесін зерттеп алу керек. Шекара х-ті таңдағаннан кейін бөлу процесіне барлық массив шалдығады. Осылайша n салыстыру орындалады. Алмасу санын келесі түсіндірме арқылы есептеуге болады. Бөлуге қажет деректер жиыны n кілттен1, ..., n, тұрсын, және біз х-ті шекара ретінде таңдадық. Бөлінгеннен кейін х массивте х-ші позицияны алады. Алмасу саны сол жақтағы х-1 элемент санының кілтті алмастырудың мүмкіндігіне көбейткенге тең. Кілт х-тен кіші болмаса алмастырылады.Оның ықтималдықы: (n — х+1)/n.
Күтілетін алмастыру саны шекара таңдаудың барлық мүмкін нұсқаларын қосып n-ге бөлгенге тең. :
Следовательно, ожидаемое число обменов равно приблизи-
приблизительно Күтілетін алмастыру саны шамамен n /6. Егер шекара ретінде әр кезде медиананы таңдайтын болсақ ол кездегі сұрыптауға қажет өту саны log n болады.Онда салыстырудың жалпы саны n-logn, ал алмасудың жалпы саны— (n/6) -logn. Медианаға түсу ықтималдығы өте аз болып келеді,ол 1/n ғана.Сұрыпталатын деректер сыртқы есте сақтау құрылғысында орналасатын болса, деректерді файл түрінде сипаттау керек. Бұл кезде Қосылу сұрыпталуы пайдаланылады. Қосылу бұл екі не одан да көп реттелген тізбектерді бір реттелген тізбекке осы моментте қолжетімді элементтерді цикл тұрінде таңдау көмегімен біріктіру.
.
a:array[l. .2*n]of item
i және j индекстері екі шығыс элементтерін нұсқайды,
k және l алмасу орындарн көрсетеді
а1, ..., аn элементтері шығыс деректері.
Очевидно, что нужна булевская переменная up бульдік айнымалысы деректерді қайта жіберу бағытын көрсету үшін қолданылады; up = true
а1, ..., аn компоненттері «жоғарыға» аn+1, ..., а2n айнымалысына қайта жіберілгендігін білдірсе, ал up =false болғанда что аn+1, ..., а2n компоненттері
«төменге» —а1, ..., аn айнымалысына қайта жіберіледі. Және р айнымалысы қосылатын тізбектер ұзындығын белгілеуде қолданылады(р-жиындар). Оның бастапқы мәні 1-ге тең. Және ол үрдіс барысында екі еселенеді. n-ді екінің дәрежесі деп есептейік:
procedure mergesort;
var i,j,k,l: index;
up: Boolean; p: integer;
begin up :== true; p ;= 1;
repeat [инициация индексов)
if up then
begin i :== 1;j:= n; k := n+1; l:= 2*n
end else
begin k :=1; l:= n; i=n+1; j:= 2*n
end;
«слияние р-наборов последовательностей i и j
в последовательности k и l»;
uр := –uр; p=2*p
until р =n
end.
Қосылу сұрыптауының анализі. Әр өткен кезде р екі еселенетіндіктен
р^n болғанда оған қажет өту саны [log2n] болады. Анықтама бойынша әр өту кезінде n элементтен тұратын барлық жиын тек бір рет көшіріледі. Осыдан қайта жіберудің жалпы саны: М = n* [log2 n].
21.Базалық іздеу алгоритмдері: сызықтық іздеу, екілік іздеу, қатардан іздеу.
Линейный поиск в массивах, или как его ещё называют, поиск в ЛОБ эффективен в массивах, с небольшим количеством элементов, причём элементы в таких массивах никак не отсортированы и не упорядочены. Алгоритм линейного поиска в массивах последовательно проверяет все элементы массива и сравнивает их с ключевым значением. Таким образом, в среднем необходимо проверить половину значений в массиве, чтобы найти искомое значение. Чтобы убедиться, в отсутствии искомого значения необходимо проверить все элементы массива. Разработаем программу, которая ищет минимальное значение в массиве. Поиск в программе реализован согласно алгоритму линейного поиска в массиве.
// min_max.cpp: определяет точку входа для консольного приложения. // поиск минимального значения в одномерном масиве
#include "stdafx.h" #include <iostream> #include <ctime> using namespace std;
int main(int argc, char* argv[]) { srand(time(0)); const int array_size = 25; // размер одномерного массива int array1[array_size]; // объявление одномерного массива for (int counter = 0; counter < array_size; counter++) { array1[counter] = rand() % 50 - rand() % 50; // заполняем массив случайными значениями в диапазоне от -49 до 49 включительно cout << array1[counter] << " "; // печать элементов одномерного массива array1 } int min = array1[0]; // переменная для хранения минимального значения for (int counter = 1; counter < array_size; counter++) { if ( min > array1[counter] ) // поиск минимального значения в одномерном массиве min = array1[counter]; } cout << "\nmin = " << min << endl; system("pause"); return 0; }
|
Двоичный(бинарный) поиск — алгоритм поиска элемента в отсортированном массиве. Бинарный поиск нашел себе применение в математике и информатике. Возможно, Вы не будете пользоваться алгоритмом двоичного поиска, но знать его принцип работы должны. Двоичный поиск можно использовать только в том случае, если есть массив, все элементы которого упорядочены (отсортированы). Бинарный поиск не используется для поиска максимального или минимального элементов, так как в отсортированном массиве эти элементы содержатся в начале и в конце массива соответственно, в зависимости от тога как отсортирован массив, по возрастанию или по убыванию. Поэтому алгоритм бинарного поиска применим, если необходимо найти некоторый ключевой элемент в массиве. То есть организовать поиск по ключу, где ключ — это определённое значение в массиве. Разработаем программу, в которой объявим одномерный массив, и организуем двоичный поиск.Объявленный массив нужно инициализировать некоторыми значениями, причём так, чтобы эти значения были упорядочены.
// binary_search.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h" #include <iostream> using namespace std;
int main(int argc, char* argv[]) { const int size_array = 10; int array_[size_array] = {-8, -7, -6, -6, -4, 2, 6, 7, 8, 15 }; // объявление одномерного массива cout << "array[" << size_array << "] = { "; for (int counter = 0; counter < size_array; counter++) { cout << array_[counter] << " "; // печать элементов одномерного массива array1 } cout << " }"; int average_index = 0, // переменная для хранения индекса среднего элемента массива first_index = 0, // индекс первого элемента в массиве last_index = size_array -1, // индекс последнего элемента в массиве //-------------------------------------------------------- search_value = 15; // искомое (ключевое) значение //-------------------------------------------------------- if (last_index == -1) cout << "\narray is empty" << endl; // массив пуст
while (first_index < last_index) { average_index = first_index + (last_index - first_index) / 2; // меняем индекс среднего значения search_value <= array_[average_index] ? last_index = average_index : first_index = average_index + 1; // найден ключевой элемент или нет } if ( array_[last_index] == search_value) cout << "\nvalue is found" << "\nindex = " << last_index << endl; else cout << "\nvalue is not found" << endl; system("pause"); return 0; } |
22.Бағдарламаны құру технологиялары және олардың орындалуы. Есептеу тиімділігі.
Есепті компьютерде шығару біраз бөлігі компьютерсіз жүзеге асырылатын мынадай негізгі кезеңдерден тұрады:
Есептің қойылуы:
есеп туралыақпараттарды жинау;
есептің шартын тұжырымдау;
есепті шығарудың ақтық мақсатын анықтау;
деректерді сипаттау ( олардың түрін, шамалардың ауқымын, құрлымын т.с.с. )
Есепті, моделдерді талдау және зерттеу:
есептің бар ұқсастарын талдау;
техникалық және программалық құралдарды талдау;
математикалық модельді жасақтау;
деректер құрлымын жасақтау.
Алгаритмді жасақтау:
алгоритмді жобалау тәсілдерін таңдау;
алгоритмді жазу пішінін ( блок-схема, мектептік алгоритмдік тіл . т.б. ) таңдау;
тестерді және тестілеу тәсілдерін таңдау;
алгоритмді жобалау.
Программалау:
программалау тілін таңдау;
деректерді ұйымдастыру тәсілдерін айқындау;
алгоритмді таңдалынып алынған программалау тілінде жазу.
5. Тестілеу және жөндеу:
синтаксистік жөндеу;
семантикалық және логикалық құрлымын жөндеу;
тестілік есептеулер және тестілеу нәтижелерін талдау;
программаны жетілдіру.
6. Есептің шешілу нәтижесін талдпу:
Қажет болатын болса 2-5 кезеңдерді қайтадан орындай отырып математикалық модельді айқындай түсу.
Программаны даярлау:
нақтылы есепті шығару үшін программаны жетілдіру;
есепті шешуге, математикалық модельге, алгоритмге, программаға, тестер жиынына, программаны пайдалану үшін құжаттар жасау.
23.Модульдік бағдарламалудың негізгі принциптері. Бағдарламалаудың құрылымдық технологиялары.
Басқа программалармен бірлесе отырып бірнеше рет жұмыс істеуге есептеліп жасалған, әрі тиісті түрде безендірілген программа модуль деп аталады.
Стандартты бағыныңқы программаның өзі модуль болып табылады, өйткені әрбір бағыныңқы программаны басқа программаны пайдалануға болады. Бағыныңқы программаның кемшілігі сонда, ол өзін шақырған программанмен ғана жұмыс істейді, ал бағыныңқы программаны орындалуына қажетті барлық информация сол шақырушы программа арқылы беріледі. Бұдан басқа кейбір жағдайларда бір программаның бірден бірнеше программамен бірге жұмыс істеу қажеттілігі пайда болады.
Модульдің бағыныңқы программадан айырмашылығы басқа модульдермен кеңінен жұмыс істеуге мүмкіндік береді. Бұл модуль ұғымы бағыныңқы программа ұғымының одан әрі дамытылуы деген сөз, ал соңғысы модульдің дербес жағдайы болып табылады.
Қазіргі заманғы программалау жүйелері осы модульді программалауды ескеріп құрылады. Программалау жүйесінде модульдің үш түрі қолданылады:
пайдаланушы модуль;
жүктелуші модуль;
абсолютті модуль.
Пайдаланушы модулі
Бұл үлгідегі модуль адамға ыңғайлы программалау тілінде жасалады.
Пайдаланушы модулі екі бөлімнен тұрады:
модуль денесі;
паспорт.
Модуль денесі модульдің мәнін анықтайтын оның негізгі бөлігі болып табылады, ал паспорт-бұл оны түсіндіруші бөлігі. Паспортта модульді келесі кезекте қалай пайдалану туралы қажетті қосымша информация болады.