Екі өлшемді массивтер



Жұмыс түрі:  Курстық жұмыс
Тегін:  Антиплагиат
Көлемі: 35 бет
Таңдаулыға:   
1 Қазақстан Республикасы Білім және ғылым министрлігі
Ш.Уалихаов атындағы Көкшетау мемлекеттік университеті.
ПОЛИТЕХНИКАЛЫҚ ФАКУЛЬТЕТІ

Ақпараттық жүйелер және есептеу техникасы
кафедрасы

" Объектіге бағытталған бағдарламалау I " пәні бойынша

Курстық жұмыс

Тақырыбы:"С++бағдарламалау тіліндегі массивті функцияға параметр ретінде беру "

ОРЫНДАДЫ:Қанайбек Нұрсұлтан
ҚОРҒАУҒА ЖІБЕРІЛДІ
ОҚЫТУШЫ:ЕСМАГАМБЕТОВА Г.К.

Көкшетау 2020
ЖОСПАР
КІРІСПЕ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4

1 С++Тілінің шығу тарихы
С++ Тілінің шығу тарихы ... ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ... ... 6
С++Тілінің ерекшеліктері ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ...7
С++Тіліндегі класстар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 8

2 С++ ТІЛІНДЕГІ МАССИВТЕР
2.1 Массив түсінігі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..13
2.2. Массивтермен жұмыс ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ...15
2.3.Масивтерді қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .16
2.4 Бір өлшемді массивтер ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ..22
2.5 Екі өлшемді массивтер ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ...25

3 МАССИВТІҢ С++ ТІЛІНДЕГІ ҚОЛДАНУЫ
3.1 Сандық массивтерду қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .27
3.2 Сандық массивті өндеу ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ..29
3.3 Массивтерді сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..30
3.4 Екі өлшемді бүтін сандар массивін кему ретімен орналастыру ... ... ... .31
3.5 Екі өлшемді массивтің элементерінің қосындысын табу ... ... ... ... ... ...32

ҚОРЫТЫНДЫ ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 33
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР ... ... ... ... ... ... . ... ... ... ... ... ... ... ... 35

КІРІСПЕ
Курыстық жұмыстың мақсаты:Осы уақытқа дейінгі қарастырылып келген мәлімет типтері қарапайым болып есептеледі. Себебі олар тек бір ғана объектіге ,бір ғана санға немесе символға қатысты ғана қолданылады. C++-та бір типке жататын бірнеше элементтерден тұратын объектілерді де пайдалануға болады. Массив осындай бір типке жататын элементтерден құралатын құрылымдық тип болып табылады.
Курыстық жумыс мақсаты: Қарапайым типтер қатарына жататын стандартты (Integer,real) және қолданушылар (тізбектелген тип) типтерінде бір айнымалыны сақтау үшін, негізінен компьютер жадысының бір ғана ұяшығы қолданылады. Бірақ көптеген программалау есептерінің шешімін табу үшін әрбір элементтің деректерін жеке айнымалыға сақтау орнына, оларды тізбектеп бір жерде сақтау анағұрлым тиімді болып табылады.
Курстық жұмыстың міндеті:Бір типтес берілгендерден құралып, барлық элементтеріне бір ортақ атау берілген жиынды массив деп атаймыз. Массив құрылымдық типтер қатарына жатады. Массив элементтері нөмірленеді. Массивтің әрбір элементіне индексін көрсету арқылы жұмыс істеуге болады. Массивке мысал ретінде векторларды қарастыруға болаты. Егер массивке кестелік берілгендер жазылса (матрица), онда элементтері екі индекс бойынша нөмірленеді.
Массив сипаттамалары:
Типі - массив элементтерінің жалпы типі;
Көлемі - массив индекстерінің саны;
Шектелімі - әрбір индекстердің шектеу бойынша сәйкестігі;
Пішімі - көлем және шектеулер жиындары.
Массивтер элементтерімен жұмыс жасау кезінде, массив атауынан кейін міндетті түрде тік жақшаға алынған индекс көрсетіледі. Индекс ретінде сандар қолданылады.
Массивтің кез келген элементтерімен жұмыс істегенде программалау барысында олардың индексінің мәні типтер немесе айнымалылар бөлімінде сипатталған шектеуден аспауы тиіс. Егер массив индексвінің мәні сипатталған шектеуден асып кетсе онда, смнтаксистік қате тіркеліп экранда Index type is not compatibie with declaration деген сөз тіркесі шығарылады.
Зерттелу деңгейі:Массивтер қолданылатын программаларда {R+} директивасын жазу арқылы массивтің шектеулерін тексеруге болады. Егер программада {R+} директивасы беріліп, массив индексі шектеуден асып кетсе, онда экранға "Range check error" сөз тіркесі шығарылады. Массивтерді программада қолдану үшін С++ программалау тілінде оларды бірден var бөлімінде сипаттау жолы қарастырылған.
Дерек көздері:С++ программалау тілі бір өлшемді массивтермен қатар екі өлшемді және көп өлшемді массивтерді қолдануға мүмкіндіктер береді
Екі өлшемді немесе көп өлшемді массивтермен жұмыс істеу үшін, олар сипаттау бөлімінде көрсетілуі шарт. Екі өлшемді массивтерді тіктөртбұрыштар
мен таблицалар немесе матрицалар деп қарастыруға болады. Сондықтан мұнда баған және жол ұғымдары өз мағыналарында қолданылады.
Екі өлшемді массив элементтері екі индекспен анықталады. Айталық mat[3,2]:=7 түріндегі өрнек mat матрицасының үшінші жолы мен екінші бағанының қиылысуындағы элементі 7-ге тең екенін білдіреді. Екі өлшемді массиверді енгізу үшін for...do цикл операторлары қолданылады.
Курстық жұмыстың құрылымы: Кіріспеден, 1 тараудан қорытынды жә
пайдаланған әдебиеттер тізімінен тұрады.

1 С++ ТІЛІНІҢ ШЫҒУ ТАРИХЫ
1.1 С++Тілінің шығу тарихы

С++ тілінің шығуы UNIX операциялық жүйесімен тығыз байланысты, себебі бұл ОС осы С тілінде жазылып шыққан. UNIXC жұмыс істеу ортасы Си тілін жүйелік программалау тілі ретінде елге таныстырды,ол компиляторлар мен ОС-тер жазу үшін қолайлы деп саналады. Бірақ Си тілі кез келген салада программалар жазуға да өте қолайлы тіл болып табылады.
Тұңғыш рет UNIX 1969 жылы Нью-Джерси штатындағы Белл фирмасының лабораториясында PDP-7 мини-ЭЕМ-інде жасалып шықты. UNIX PDP-7 компьютерінің ассемблер тілінде жазылды.Бұдан соң сол лабораторияның жетекшісі Кен Томпсон 1970 жылы В деп аталған жаңа тілге арнап компилятор жасап шықты. Осы тілді Си тілінің негізі деп атауға болады. Жалпы Си тілінің даму жолына қарасақ;
Алгол-60 1960-жылдың басында халықаралық комитет басып шығарды
CRL (Combined Programming Language) Кембриджде және Лондон университетінде 1960 ж.қатарласа жасалды.
BCPL (Basic Combined Programming Language) Кембриджде Мартин Ричардс 1967 ж. жасап шығарды.
В Bell Labs қызметкері Кен Томпсон 1970 жылы жасады
С Bell Labs қызметкері Дэннис Ритчи 1972 жылы жасады
Сонымен,1983 жылы С++ тілінің стандартын жасау мақсатында (ANSI C) Америка Ұлттық стандарттар институты (ANSI) құрылды.

1.1С++ тілінің ерекшеліктері
Көлемінің шағындығы
С++ тілінің синтаксистік ережелері басқа тілдерге қарағанда аз,оның компиляторын 256 Кб көлем арқылы-ақ жазып шығуға болады.Мұндағы операциялық әрекеттер,олардың комбинациясы жетерлік,бірақ қордағы түйінді сөздер саны да көп емес, Дэннис Ритчи жасаған алғашқы С++ тілінде тек 27 түйінді сөз болды,кейіннен ANSI C стандартында тағы бірнеше сөз қосылды.
Тілдің командалар жиыны
Microsoft СС++ нұсқасында тағы 19 командалар мен түйінді сөздер қосылды,соның нәтижесінде олар 66 болды.
Өзге программалау тілдердегі функциялар С++ тілінде жоқ,мысалы,енгізу-шығару операторлары да кездеспейді, оның есесіне кітапханалық әр түрлі функциялар саны жеткілікті.
Жылдам істейтіндігі
С++ компиляторлары жасаған программа кодтары ықшамды,әрі жылдам істейді,оның үстіне тілдің аппараттық құралдарға жақындығы ассемблер тіліменен қатар жылдамдықпен жұмыс істеуге мүмкіндік береді.
Типтері де күрделі емес(Язык со слабой типизацией)
Паскальға қарағанда,мәліметтерді типтендіру мұнда төменгі деңгейде ,ол типтерді бір-біріне жеңіл ауыстырады.Мұндай қасиет В тілінен келді.Мысалы,программаның бір жерінде айнымалы символдық болса,ал басқа жерде оны символдың
ASCI - коды (одан 32-ні алып) ретінде қарастыруға болады.
Құрылымды тіл болғандығы(Структурированный язык)
С++ тілінде қазіргі тілдерде болатын барлық басқару операторлары бар. 1971 жылдың өзінде-ақ жаңа ғана жасалған С++ тілі алғашқы құрылымдық программалау тілі ретінде танылған еді.Мұнда;for - цикл операторы, if және if-else конструкциясы, таңдау операторы (switch) және while циклы да бар.
Модульдік программалауды сүйемелдеуі
С++ тілінде жеке компиляциялау мен біріктіруден құралатын модульдік программалау концепциясы пайданылады.Мұнда тек программаның өзгертілген бөліктерін жеке компиляциялау мүмкіндігі бар.
Екілік разрядтағы өңдеуі
Жүйелік программалауда екілік разрядтарды өңдеу ісі жиі кездеседі.Әрине, UNIX операциялық системасымен тығыз байланыста пайда болған С++ тілінің екілік сандармен жұмыс істеу мүмкіндіктері өте зор.
Нұсқаушы айнымалылар
Операциялық жүйе тіліне қойылатын тағы бір талап -- ол жады аймақтарын адрестеу мүмкіндігінің болуы. Мұндй мүмкіндік программа орындалуын жылдамдатады. С++ тілінде мұндай істі нұсқаушылар (указатели) атқарады және олармен арифметикалық амалдарды орындауға болады.
Құрылымы икемді тіл
С++ тіліндегі барлық массивтер -- бір өлшемді. Көп өлшемді массивтер осы бір өлшемді массивтерден құрылады. Массивтер мен құрылымдар (жазбалар) бір - бірімен керекті түрде байланысып, мәліметтер базасын құрайды.

С++ тіліндегі класстар
С++ тілінде бағдарламалаушы берілгендердің бос типтердің енгізу мен класстар арқылы орындалатын операцияларды анықтау мүмкіндіктеріне ие.
Класс - бұл бар типтер негізіндегі туынды құрылымы бар (структурированный) тип. Класс ең жеңіл әдіспен келесі конструкция арқылы анықтауға болады:
Класс_кілті класс_аты{компоненттер тізімі};
Мұнда класс_кілті - class, struct,union қызметші сөздерінің бірі;
класс_аты еркімен таңдалатын идентификатор;
компоненттер тізімі классқа қатысты функциялармен типтелген берілгендерді сипаттаушылар мен анықтамалары. Компоненттер объект күйін және класс объектісінің тәртібін шартқа негіздейді. Класс компонеттері деректер, функциялар, класстар, санап шығулар, биттік өрістер, достасқан функциялар мен типтер атаулары бола алады. Мысалы:
Class Classid
{ int k; k, x, y жабық мүшелер - үнсіздік бойынша берілгендер
double x,y;
public: char lit,ch; lit,ch ашық мүшелер деректер
int f3(int, int); класстың ашық әдістері
int Get x (void) класстың орнына қою әдісі
{return x;}
private:
void f1 (void); жабық мүшелер - класс әдістері
int f2(int);
};
Қатынау спецификаторлары public: және private: қатынау спецификаторлары класс мүшелеріне өтуге мүмкіндік беретін режимді анықтайды: private - класс мүшелерін жабыққы айналдырады, ал public - ашық. Класстың жабық мүшелеріне тек берілген класс мүшелерінің қатынауға рұқсаты бар, сонымен қатар функциялардың - класс достары. Класстың ашық мүшелеріне кез келген функциялардың қатынауға мүмкіншіліктері бар.
Олар бар болып табылатын бағдарлама мен класс объектілерінің байланысы үшін арналған. Классты жобалап отырып, оның қай мүшесін ашық, ал қайсысын жабық етуді мұқият ойластырған жөн. Көптеген жағдайда класс анықтамасы блокта локализацияланбаған, және класс атауының іс -- әрекет облысы бүкіл файл болып табылады.
Жай класстық әдістерін анықтау класс анықтамасының ішінде болуы мүмкін және мұндай жағдайда олар автоматты түрде орын ауыстырғандар болып табылады. Орын ауыстыратын функцияларды егер функция қарапайым және қысқа болса, қолданған жөн, мысалы Get x () фукциясы.
Көп жағдайда, қауіпсіздікті жоғарлату мақсатымен классты мүше берілгендерін жалпыға бірдей рұқсат етілмейтін етеді және еркін бағдарлама ортасынан олармен тікелей байланысуға болмайды. Бірақ оған қарамастан олармен класстың барлығына рұқсат етілген әдістерін қолданып ерікті бағдарламалық ортадан да жұмыс істеуге болады (public:). Жоғарыда қарастырылған мысал үшін төмендегідей әдіс қолданылады:
int Get x (void)
return x;
жабық мүше мәнін берілген х қайтарады.
Арнайы түрде мұндай әдістердің жүдеу денелерін тиімділікті жоғарлату үшін орын ауыстырушы етіп класс анықтамасының ішінде енгізеді. Класс анықтамасынан тыс орналастыратын әдістерді анықтаған жағдайда әдістер тақырыбына inline спецификаторы қосылады.
Клиент - сервер технологиясы бойынша класс әдістерін анықтау класс анықтамасынан тыс орналастырған жөн. Көру облысының :: рұқсат ету операторы арқылы компиляторға берілген анықталатын әдіс қандай классқа қатысты екендігін хабарлайды, мысалы:
int Classid:: f2(int х)
{әдіс денесі}
Класс анықтамасы берілген класс объектілерін құрмайды. Объектілер оларды анықтау жолымен құрады, мысалы:
Classid obj1, obj2, obj Array
Класс объектісінің өлшемі класстың статистикалық емес мүше берілгендерінің өлшемдер қосындысымен жадыда анықталады.
Бірнеше файлдардан тұратын бағдарламалық жобалармен жұмыс жасау барысында класс анықтамасы берілген класс объектілері қолданатын немесе оның әдістері анықталатын файлдарда болуға міндетті. Сондықтан класс анықтамасын арнайы түрде ол қажет болып табылатын файлдарда #include дерективасы көмегімен қосылатын тақырыптық файлға (хедер - файл) орналастырылады.Егер класс әдісінің анықтамасы анықталудан тыс орналасса,онда ол міндетті түрде өзі қолданылатын файлдарда анықталған болуы керек.Мұндай әдістің анықтамасы класс анықтамасымен бірге тақырыптық файлда болуы керек.
Белгілі бір класс обьектісінің ашық мүшелеріне қатынауға рұқсат алуды тура . және жанама таңдау операторлары көмегімен жүзеге асырылады.
С++ тілінде обьектілерді жою иницализациялау жұмыстарын орындайтын, обьектлердің жойылуы мен құрылуы кезінде автоматты түрде шақырылатын, кластың арнайы әдістері сәйкесінше конструкторлар мен деструкторлар деп аталады. Класта бірнеше конструкторларды құруға болады. Әрбір конструкторлардың өзінің басқалардан айырмашылығы бар параметрлері болады.Параметрлері жоқ конструктор үнсіздік конструкторы.Десруктор әрқашан жалғыз және параметрлері болмайды.
Тек ашық мүшелері бар және конструкторы жоқ класс обьектісі мәндер тізімі арқылы жай құрылымдық айнымалы сияқты инициализациялануы мүмкін.
Егер класс конструкторларының біреуі де ашық функция --
Класс мүшесі болып табылмаса,онда мұндай класстың мүшелері құрыла алмайды.Олар басқа кластар үшін базалық кластар болып табылады.
Класс обьектісін құрған кезде ол үшін сәйкес келетін конструктор автоматты түрде шақырылады.
Конструктор параметрі өз класы бола алмайды,бірақ көшіру конструкторы сияқты оған жасалған сілтеме болуы мүмкін.
Кластын компанент берілгеннің жалғыз данасы болуы үшін және кластың әрбір обьектісінің құрылуы кезінде басып шығарылмауы үшін ол класты статикалық сияқты анықтау керек,яғни Static атрибуты болуы керек.
Кластың статикалық компаненттік функциялары нақты обьект атауы жоқ кластың Static берілгендеріне қатынасуды қамтамасыз етеді.Кластың Static функциялары жай (статикалық емес) компаненттік барлық негізгі ерекшеліктерін сақтайды.
Класқа қатысты функция нақты обьекттің берілгендерін өңдеу үшін шақырған кезде бұл функцияға автоматты және айқын емес функция шақырылған обьект көрсеткіші беріледі.Бұл көрсеткіштің бекітілген this аты бар бағдарламалаушы үшін байқаусыз кластың әрбір функциясы келесі түрде анықталған:
Класс- аты *const this = өңделетін-обьекттің - адресі;
This көрсеткішін қолдану тиімділігі көрінетін жағдайлар:
-берілген класс компанентінің аты класс функциясының формальды параметрінің атымен сәйкес келгенде;
-класс функциясының денесінде айқын түрде бұл функция шақырылған обьект адресін көрсету қажет болғанда;
-функция параметрі ретінде кластың атын жазған кезінде обьекттің нақты атына жол берілмегенде (керек обьектіге мұндай функция сілтемесін немесе көрсеткішін берудің орнына).
Класс достары. Кластарға арналған стандартты операцияларды қайта жүктеу
Кейбір жағдайларда класс мүшесі болмауына қарамастан функция бұл кластың жабық мүшелеріне деген қатынау мүмкіншілігіне (доступ ) ие болған жөн.С++ тілі осы әрекетті орындауға мүмкіндік береді,егер функция класс досы немесе мүшесі болып табылатын класты friend қызметші сөзі көмегімен жарияласа.
Дос функциялары мен класстарды қолданудың бірқатар маңызды қызық ерекшкліктерін көрсететін мысалды қарастырайық:
# include iostream.h.
class Class1; класты алдын ала жариялау
class Class2;
{public:void ff (Class 1 & ref);
};
class Class 1
{private: int x;
дос функциялары мен кластарға арналған жол беру спецификаторы
мәні жоқ
friend int main (void); main - достық функциясы бола алады
friend void f ( Class 1 f ref);
friend class Class3; Class3 барлық әдістері Class1 класына дос бола алады
friend void Class2: : ff (Class1 & ref);
}; Class1 анақтамасының соңы class Class3Class3-Class1 класына дос
{public: void func (Class1 & ref)
{ref.x=9;
return;
}
};
void Class2 : : ff (Class1 & ref)
{ref.x=11;
return;
}
f-Class1 класына дос қарапайым сыртқы функция
void f (Class1 & ref)
{ref.x=7;
return;
}
int main (void)
{Class1 obj1;
obj1.x=5;
cout "obj.1x="obj 1.xendl; x=5
f (obj1);
cout"objl.x="obj1.xendl; x=7
Class3 obj3;
Obj3 func(obj1)
Cout "obj1.x=" obj1.xend1; x=9
Class2 obj2;
Obj2.ff(obj1);
Cout "obj1.x=" obj1.xend1; x=11
Return 0;
} main соңы
Кластарға арналған операциялардың қайта жүктелуі
С++ тілінің көптеген @ операциялары қолданушы типтерінің объектілерімен жұмыс істеу үшін қайта жүктелуі мүмкін. Мұндай мүмкіндіктер объек кластар үшін де болады. @ операциясының қайта жүктелуі @ функция операциясы көмегімен жүзеге асырылады, оны класс мүшесі немесе достық функциясының айналдыруға (қажет емес) немесе жай функцияға айналдыруға болады.
Соңғы екі жағдайда функция - оператор ең болмаса бір сілтеме немесе көрсеткіш, класс типі бар аргументті қабылдау керек. Сыртқы функция операциясы үшін сәйкес класс мүшелерінің қатынауларын ескерген жөн.
Функция - оператор тауы operator қызметші сөзінен және одан кейін орналасқан қайта анықталатын операция белгісінен тұрады.
Операцияларды қайта жүктеу типті беру,функцияны шақыру ережелері ISOIES14882 халықаралық стандартында бетілген.
Көшіріп алу конструкторы. Беттік және тереңдетілген көшіріп алу
Класс құрамына арнаулы түр конструкторы - көшіріп алу конструкторы ене алады.Көшіріп алу конструкторы жалғыз параметрі ретінде осы класс обьектісіне сілтемені алады:
Classid:Classid (const Classid & obj)
{конструктор денесі}
Көшіріп алу конструкторы жаңа обьект класс типімен бар обьектіні көшіріп алу жолымен құрылған кезде шақырылады:
-сол типтің басқа бір обьектісімен оның инициализациясы және класс типі бар жаңа обьект анықтаған кезде;
-мән бойынша класс типі бар параметр-обьект класс әдісіне берілген кезде;
-return операторы арқылы класс типі бар обьект мәнін класс әдісінен қайтарылған кезде.
Егер бағдарламалаушы бірде бір көшіріп алу конструкторын құрмаса, онда компилятор автоматты түрде Үндемейтін көшіріп алу конструкторын құрады.Бұндай конструктор кластың мәліметтер өрістерінің элемент бойынша көшіріліуін орындайды.
Егер өрістердің ең болмаса біреуі динамикалық жадының белгілі бір облысына көрсеткіш болып табылмаса,онда үндемейтін конструкторды қолдану бағдарламаның дұрыс емес, бұрыс жұмысына әкеледі.Мұндай жағдайда үндемейтін көшіріп алу конструкторының орнына өз көшіріп алу конструкторын жобалап алған жөн:
-беттік көшіруді орындайтын конструктор (көрсеткіштің обьектке көшірілуі орындалады,ал обьект көшірмесі динамикалық жадыда құрылады);
-тереңдетілген көшіріп алуы бар конструктор(динамикалық жадыда обьект көшірмесі құрылады).
Қорытындысында мынаны қайталайық,егер класста динамикалық жадымен жұмыс орындалмаса және конструктор қажет болмаса,онда үнсіздік бойынша көшіріп алу конструкторын қолдану көмегімен көшіріп алу конструкторын анықтау керек емес.Осындай кластарды қолданылатын бағдарламалар дұрыс жұмыс істейді.
Мүмкіндігінше мән бойынша,класс типі бар параметрді кластың әдісіне және класс типі бар обьекттің мәнін емес,сілтемесін оған класс әдісіне қайтарудан аулақ болған жөн.Бұл жағдайда көшіріп алу конструкторы қажет емес болады,бұл қосымшаның шапшаңдығының жоғарылауына әкеледі.
Көрсетілген мақсатқа жету үшін келесі ережелерді қолданған жеткілікті:
-мән бойынша класс типі бар параметрді,класс әдісіне берудің орнына бұл параметрді сілтемемн берген жөн,ал сәйкес аргументтің модификациясын тоқтату үшін функцмя параметрін const модификаторымен қамтамасыз ету керек;
-класс типі бар обьектлер үшін арифметикалық операцияларды қайта жүктегенде қайта жүктеу әдісін обьектке қайтаратындай етіп жобалау керек.

2 С++ ТІЛІНДЕГІ МАССИВТЕР
2.1 Массив түсінігі

Паскаль тілінде типтер қарапайым және күрделі болып екіге бөлінеді. Қарапайым типке - стандартты, саналатын, шектейтін типтер жатады. Күрделі типке - массивтер, жиындар, жазулар, жолдар және файлдар жатады. Күрделі типтің элементтері қарапайым немесе күрделі типтер болуы мүмкін. Күрделі типті енгізу программаны күшейтеді және күрделі есептерді шешуге мүмкіндік береді.
Тұрмыста тізбектелген сандарды, кестелерді, фамилия тізімдерін көп пайдаланамыз, олар бір өлшемді (жатық немесе тік жол), екі өлшемді (матрица) массив болуы немесе жиын болуы мүмкін.
Паскаль тілінде жеке айнымалыларды ғана өңдеп қоймай, сондай-ақ айнымалылардың жиынын, тобын да өңдеуге болады.
Массив дегеніміз - бір типтегі берілгендер жиыны. Басқаша айтар болсақ, массив - бір атауға біріктіріліген айнымалылардың реттелген тізбегі. Айнымалылардың - массив элементтерінің типтері бірдей болады. Массив бір ғана атпен беріледі. Сөйтіп, Паскаль тіліндегі массив ұғымы алгоритмдік тілдегі кесте ұғымына сәйкес келеді.
Индекс типі стандартты, бүтін немесе нақты тип бола алмайды. Программада индекс және индекстің типі ұғымдарын шатастыруға болмайды.
Индекс типі массивті бейнелегенде пайдаланылса, индекс массив элементтерін белгілеу үшін операторлық бөлікте пайдаланылады. Индексті бейнелегенде қандай тип берілсе, индекс сол типте ғана болуы тиіс.
Индекс өрнек, айнымалы немесе тұрақты болып берілуі мүмкін.
Сондықтан да көп жағдайларда массивтерді индексті айнымалылар деп те атайды. Ал индекссіз айнымалыларды массивтерден ажырату үшін қарапайым айнымалылар дейді. Базалық типтегі айнымалыларға қандай амалдар қолданылса, массив элементтеріне де сондай амалдар қолдануға болады.
Егер массив атауында бір ғана индекс болса, онда ол массивті бір өлшемді, ал екі индекс болса - екі өлшемді және т.с.с. n инедексті болса, n өлшемді массив дейді. Бір өлшемді массив элементтері вектор, ал екі өлшемді массив элементтері матрица деп аталады.
Массив элементтерін кездейсоқ сандармен де енгізуге болады. Массивтерде қолданылатын амалдар:
:: массивті толтыру;
:: массив элементтерін алмастыру;
:: массив элементтерін өшіру;
:: массивке элементтер қосу;
:: массив элементтерін сұрыптау;
:: массивтерді түрлендіру.
ЭЕМ-нің жадында сандардың бір-бірімен байланысқан көптеген мәндерін сақтау үшін индексті айнымалылар, яғни массивтер қолданылады. Массив дегеніміз - бірыңғай шамалар тізбегінің бір атаумен аталып реттелген жиыны. Математикадағы вектор, матрица осы массивке мысал бола алады. Тізбектің айнымалылары бір индексті элементтерден тұрса, онда бір өлшемді массив болады. Олардың индекстері сандармен немесе белгілі бір әріптермен жақша ішінде жазылады, мысалы: А(1), С(12), К(100). Массивпен жұмыс істеу үшін оның әр элементінің мәні белгілі болуы тиіс. Сондай-ақ массивтің идентификаторы аты да жай айнымалының идентификаторы сияқты белгіленеді.
Паскаль тілінде массивтің номері индексі тік жақшаға алынып, жазылады, мысалы: 1,6; 4,9; 5; 8,9; 0,47 - мәндерінен тұратын А массивін былай жазамыз: А[1]=1,6; А[2]=4,9; А[3]=5; А[4]=8,9; А[5]=0,47. Егер есептеу барысында А1, А2, А3, ... А25 массиві кездессе, онда оны программа барысында А[25] түрінде жазамыз. Мұндағы А-массив аты болады, 25-оның индексінің қабылдайтын ең үлкен мәні болып есептеледі[1].
Паскаль тілінде массивті программада қолдану үшін алдымен оларды міндетті түрде арнаулы ARRAY ағылшын тілінен аударғанда -- массив -- операторы арқылы сипаттап жазу керек. Ол айнымалы - VAR немесе TYPE - тип бөлігінде көрсетіледі. VAR арқылы жазылуы:
VAR массив аты: ARRAY [бастапқы номері...соңғы номері] OF типі;
Көп жағдайда массивтің номері индексі 1-ден басталады, бірақ бұл көп жағдайда міндетті емес. Сондай-ақ массив символдық типтен де тұрады. Символдық жол - STRING үшін массив келесі түрде өрнектеледі:
TYPE
STRING: ARRAY [0..255] OF CHAR;
Массивтің нөмерінің санына қарай қанша элементті массив екенін байқауға болады. Егер бірнеше массивтер бір ыңғай типті және элементтер саны тең болса, онда оларды программада бір жолда сипаттауға болады, мысалы:
VAR A, B, C: ARRAY [1..25] OF REAL;
Мұнда А, В, С - массивтерінің мәндері 25 элементтен тұратын нақты сандар.
A[1], A[2], A[3], ... , A[25],
B[1], B[2], B[3], ... , B[25],
C[1], C[2], C[3], ... , C[25].
Паскаль тілінде массивтер арасында тең, тең емес немесе меншіктеу операторы амалдарын қолдануға болады. Мысалы, егер А және В массиві былай берілсе:
VAR
A, B: ARRAY [1..10] OF REAL;
Бұған үш амалды қолданғанда төмендегідей нәтиже береді:

Өрнек Нәтиже
А=В Егер әрбір А массиві элементінің мәні сәйкес В массиві элементтерінің мәніне тең болса.
АB Егер А массиві элементінің ең болмағанда бір мәні сәйкес В массиві элементінің мәні тең болмаса.
A:=B В массиві элементінің барлық мәні сәйкес массиві элементінің мәні меншіктеледі. В массиві элементінің мәндері өзгеріссіз қалады [2].

2.2 Массивтермен жұмыс

Массив (array) бір классқа жататын объектілер тобын құрайды, сонымен бірге кез-келген объектіге оның жолда орналасуы бойынша қолдана аласыз. Мысалы, егер гимнасттар бір қатарда тұрса, бірақ сіз олардың аты-жөндерін білмесеңіз, олардың қатардағы жағдайына сай сөйлеген ыңғайлы: бірінші, екінші, үшінші...
Массивтердің қасиеттерін түсінген маңызды. Ең қарапайым жағдайды қарастырайық, бес гимнастты жаттығуларды жасатқызатын бағдарлама жасау керек . Бұл бестікті құрдыңыз делік және келесі нұсқаулықтың көмегімен оларға: Athlete Julia, Andrea, Ricardo, Andy, Michael аттарын бердіңіз.
Содан соң сіз олардың әрқайсысына бір жаттығуды орындауға бұйрық беруге мәжбүрсіз:
JumpJack(Julia);
JumpJack(Andrea);
JumpJack(Ricardo);
JumpJack(Andy);
JumpJack(Michael);
Бұл әрине, өте қиын емес, бірақ егер гимнасттар саны жүз болса, мың болса қиын болары сөссіз.
Бұл мәселені шешудің стандартты әдісі гимнасттардың бүкіл тобына атау беріп, содан кейін нақты бір гимнасттың әрқайсысын бірінші, екінші, үшінші... деп атауда жатыр.
Бұл шамамен былай болады:
Бес гимнасттан тұратын топты Guy атауымен белгілеу
Индекстің (index) мәнін 1-ден 5-ке дейін қайталау:
Guy элементіне индекс позициясында жаттығуды орындау[3].
Циклдерді оқу бойынша біз білеміз, компьютер топтың барлық мүшелері жаттығуды орындау керектігін түсінеді, бірақ енді Guy массивінің қанша элементін қолданғыңыз келетініне қарамастан сізге кодтың мыңдаған жолын жазудың қажеті жоқ.
Енді бөлек гимнасттарға арналған бағдарлама мен гимнасттар массивіне арналған бағдарламаны салыстырайық:
void mainprog()
{
athlete Julia, Andrea, Ricardo, Andy, Michael;
JumpJack(Julia);
JumpJack(Andrea);
JumpJack(Ricardo);
JumpJack(Andy);
JumpJack(Michael);
}
void mainprog()
{
athlete Guy[5]; Бес гимнасттан тұратын массивті жариялау
for (int which=0; which=4; which++);
{
JumpJack(Guy[which]); Жаттығуд ы әрбір гимнасттың орындауы
}
}
Алғашқыға қарағанда соңғы бағдарламаға гимнастардың саны әсер етпейді (циклдің аяқталуы жағдайында айнымалының мәні ғана өзгереді).
Сіз массивтің бір класстың объектілерінен тұратынын ұмытқан жоқсыз ба? Осылайша, қалауыңызша сол бағдарламаны жүгірушілерге де қолдануға болады:
void mainprog()
{
runner Guy[5]; Бес жүгірушілерден тұратын массивті жариялау
for (int which=0; which=4; which++);
{
Guy[int which].run(); Әрбір жүгірушінің орын ауыстыруы
}
} [4]

2.3 Массивтерді қолдану

Кез-келген типтегі объектілер массивтерін қолдануға болады: гимнасттардың, жүгірушілердің, роботтардың, шеңберлердің және тіпті қарапайым, мысалы массивтің элементтері болып int немесе float типтеріндегі айнымалылар бола алады. С++ тілінде массив элементтері индекстің бүтін мәндерімен (int) белгіленеді. Массивтің бірінші элементіне 0-ге тең индекс мәні, ал екіншісіне - 1 және т.б. мәндер қосылады.
Алдыңғы бағдарламада Guy массиві бес элементтен тұрды:
Элемент Guy[0] бірінші болды
Элемент Guy[1] екінші болды
Элемент Guy[2] үшінші болды
Элемент Guy[3] төртінші болды
Элемент Guy[4] бесінші болды
Элемент Guy[5] болған жоқ, себебі элементтер барлығы бесеу болды!
Массивті жариялау кез-келген басқа объектінің жариялауына ұқсас, бірақ массив атынан кейін тік жақшада оның элементтерінің саны көрсетіледі. Мысалы, келесі нұсқаулықты қарастырайық:
int points[10];
Бұл нұсқаулықта 10 бүтін элементтен тұратын (0-ден 9-ға дейін нөмірленген) points атауы бар массив жарияланады.
Келесі нұсқаулықта 12 элементтен тұратын (0-ден 11-ге дейін нөмірленген) measurements массиві жарияланады:
float measurements[12];
массив атауы элементтердің бүкіл тобын білдіреді. Соңынан тік жақшада индекстің мәні көрсетілетін массив аты нақты бір элементті білдіреді. Мысалы, осы бөлімнің бірінші мысалы үшін идентификатор 10 элементтен тұратын топты білдіреді:
points
Ал топтың нақты бір элементіне (екіншісіне) келесі белгі қолданылады:
рoints[1]
Өрнек бүтін болып қала бергенше оны индекс ретінде көрсетуге болады:
Guy[which] белгісі Guy массивінің нақты бір элементіне нұсқайды. Егер which өрнек мәні белгілі болса, бұл элементті оңай анықтауға болады.
Guy[which-1] белгісі Guy массивінің басқа бір нақты элементіне нұсқайды.
Алайда, индекстің мәні массивтің жоқ элементіне нұсқай алмайды. Guy[which] белгісінде which мәндерініңауқымы 0 мен 4(қоса) арасында қлуы керек. Кез-келген басқа мән массивтің шекарасынан шығып кетеді. Массивтер шекарасының бұзылуын С++-те программист бақылауы керек.
Бағдарламалардағы қателердің басты себебі индекске бұрыс мәнді қосуда жатыр. Өрнек индекс ретінде қолдану жиі кездеседі. Бірақ мұнда бағдарламаны орындау кезінде бұл өрнек қандай мәндерге ие болатынын білмеуіңіз де мүмкін. Мысалы, 10 элементтен тұратын List массивін жарияладыңыз делік (0-ден 9-ға дейін нөмірленген). Әрі қарай бағдарламада сіз келесі нұсқаулықты қолданасыз делік:
list[(k-3)*j]=0;
k және j айнымалыларының мәндері индекстің мәнін анықтайды (0 және 9-ды қосқандағы интервалда болуы керек). Өз бағдарламаңызда k және j айнымалыларының мәндеріне әсер ететін барлық факторларды бақылай алмайтыңыз да мүмкін. Осылайша, өрнек орындау нәтижесі тік жақшада мысалы, 13 мәні болуы мүмкін.
Массив элементтері компьютер жадысында кезекпен орналасатындықтан, компилятор List[-13] массиві элементінің орнын міндетті түрде табады және сонда нөлді орналастырады. Нәтижелер әр түрлі болуы мүмкін.
Өрнекте әдетте сандық массивтер қолданылады, оның элементтері мысалы int және float типі мәндерінің сандары болып табылады. Мұндай массивтің әрбір элементі сан болып табылатындықтан, оның мәні өрнекке қойылады.
Бағдарламаның келлесі кескінін қарастырайық:
void mainprog()
{
int value[10]; Он бүтіннн тұратын массивті жариялау
for (int index=0; index=9; index++)
{
value[index]=9-index; Әрбір элементтің мәнін есептеу
}
Біз циклде 9 - index өрнегін есептейміз және value[index] массивінің элементінде нәтижені сақтаймыз. Сәйкесінше, бұл кескінді орындағаннан кейін массив сандық мәндермен толығады, оларды содан кейін қайсыбір тәсілмен пайдалануға болады [5].
Мысалы, массивтің әрбір элементінің мәнін ақпарттық қоршауда көрсетуге болады:
void mainprog()
{
int value[10]; Он бүтін саннан тұратын массивті жариялау
... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Бір өлшемді массивтер
С++ тіліндегі массивтер
Массив элементтерінің түрлеріне шектеулер
Массивтер жайлы
Символдық және көпөлшемді массивтертер
Бір және екі өлшемді массив элементтерін енгізу
Бір өлшемді массивтерді сұрыптау алгоритмдері
Турбо паскальда екі өлшемді массивтерді ұйымдастыру технологиясы
Delphi және PASCAL тілдерінде массив ұғымын түсіндіру және массивтерді өңдеу
Алгоритм түрлері және программалау
Пәндер