С++ тіліндегі массивтер



КІРІСПЕ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..3

1 С++ ТІЛІНДЕГІ МАССИВТЕР
1.1 Массив түсінігі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..5
1.2. Массивтермен жұмыс ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..7
1.3.Масивтерді қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..8
1.4 Бір өлшемді массивтер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 9
1.5 Екі өлшемді массивтер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...10

2 МАССИВТІҢ С++ ТІЛІНДЕГІ ҚОЛДАНУЫ
2.1 Сандық массивтерду қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 19
2.2 Сандық массивті өндеу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...21
2.3 Массивтерді сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 22
2.4 Екі өлшемді бүтін сандар массивін кему ретімен орналастыру ... ... ... 23
2.5 Екі өлшемді массивтің элементерінің қосындысын табу ... ... ... ... ... ...24

ҚОРЫТЫНДЫ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 26
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР ... ... ... ... ... ... ... ... ... ... ... ... ... ... .27
Курыстық жұмыстың мақсаты:Осыған дейінгі қарастырылып келген мәлімет типтері қарапайым болып есептеледі. Себебі олар тек бір ғана обЪектіге яғни бір ғана санға немесе символға қатысты ғана қолданылады. C++-та бір типке жататын бірнеше элементтерден тұратын объектілерді де пайдалануға болады. Массив осындай бір типке жататын элементтерден құралатын құрылымдық тип болып табылады.
Курыстық жумыс мақсаты:Қарапайым типтер қатарына жататын стандартты (Integer,real) және қолданушылар (тізбектелген тип) типтерінде бір айнымалыны сақтау үшін, негізінен компьютер жадысының бір ғана ұяшығы қолданылады. Бірақ көптеген программалау есептерінің шешімін табу барысында әрбір элементтің деректерін жеке айнымалыға сақтау орнына, оларды тізбектеп бір жерде сақтау анағұрлым тиімді болып табылады.
Курстық жұмыстың міндеті:Бір типтес берілгендерден құралып, барлық элементтеріне бір ортақ атау берілген жиынды массив деп атаймыз. Массив құрылымдық типтер қатарына жатады. Массив элементтері нөмірленеді. Массивтің әрбір элементіне индексін көрсету арқылы жұмыс істеуге болады. Массивке мысал ретінде векторларды қарастыруға болаты. Егер массивке кестелік берілгендер жазылса (матрица), онда элементтері екі индекс бойынша нөмірленеді.
• Массив сипаттамалары:
• Типі – массив элементтерінің жалпы типі;
• Көлемі – массив индекстерінің саны;
• Шектелімі - әрбір индекстердің шектеу бойынша сәйкестігі;
• Пішімі – көлем және шектеулер жиындары.
Массивтер элементтерімен жұмыс жасау барысында, массив атауынан кейін міндетті түрде тік жақшаға алынған индекс көрсетіледі. Индекс ретінде сандар қолданылады.
Массивтің кез келген элементтерімен жұмыс істегенде программалау барысында олардың индексінің мәні типтер немесе айнымалылар бөлімінде сипатталған шектеуден аспауы тиіс. Егер массив индексвінің мәні сипатталған шектеуден асып кетсе онда, смнтаксистік қате тіркеліп экранда «Index type is not compatibie with declaration» деген сөз тіркесі шығарылады.
Зерттелу деңгейі:Массивтер қолданылатын программаларда «{R+}» директивасын жазу арқылы массивтің шектеулерін тексеруге болады. Егер программада «{R+}» директивасы беріліп, массив индексі шектеуден асып кетсе, онда экранға "Range check error” сөз тіркесі шығарылады. Массивтерді программада қолдану үшін С++ программалау тілінде оларды бірден var бөлімінде сипаттау жолы қарастырылған.
Дерек көздері:С++ программалау тілі бір өлшемді массивтермен қатар екі өлшемді және көп өлшемді массивтерді қолдануға мүмкіндіктер береді.
Екі өлшемді немесе көп өлшемді массивтермен жұмыс істеу үшін, олар сипаттау бөлімінде көрсетілуі тиіс. Екі өлшемді массивтерді тік төртбұрышты таблицалар немесе матрицалар деп қарастыруға болады. Сондықтан мұнда баған және жол ұғымдары өз мағыналарында қолданылады.
1. Культин Н. Б. C/C++ в задачах и примерах. — Санкт-Петербург: БХВ-Петербург, 2005. – 288б.
2. Семакин И. Г., Шестаков А. П. - Основы программирования: Учебник. — Москва.: Мастерство, 2002. – 432 б.
3. Круглински Д., Уингоу С., Шеферд Дж.. Программирование на Microsoft Visual C++ 6.0 для профессионалов Перевод с англ. - Санкт-Петербург, Москва.: Издательско-торговый дом «Русская Редакция», 2004. — 861 б.
4. С. Бобровский Самоучитель программирования на языке C++ в системе Borland C++Builder 5.0. Москва.: «I-Press» по заказу издательства «ДЕСС КОМ». 2001. – 272 б.
5. Секунов Н. Ю. Самоучитель Visual C++ .NET. — Санкт-Петербург.: БХВ-Петербург, 2002. — 736 б
6. Павловская Т.А., Щупак Ю.А.. С/С++. Структурное программирование: Практикум. - Санкт-Петербург.: Питер, 2003. – 240б.
7. Питер Торстеинсон, Роберт Оберг. Архитектура .NET и программирование с помощью Visual C++.: Перевод с англ. — Москва.: Издательский дом "Вильяме", 2002. — 656 б.
8. Майкл Хаймен, Боб Арнсон. Visual C++.NET для "чайников". : Перевод с англ. — Москва. : Издательский дом "Вильяме". 2002. — 288 б.
9. Дэвис, Стефан Р. C++ для "чайников", 4-е издание. : Перевод с англ. : — Москва. : Издательский дом "Вильяме", 2003. — 336 б.
10. Лабор В. В. Си Шарп: Создание приложений для Windows/ В. В. Лабор.— Минск.: Харвест, 2003. - 384 б.
11. Мик Б. и др. «Практическое руководство по программированию» М.: Радио и связь, 1986.
12. Фокс Дж. «Программное обеспечение и его разработка» М.: Мир, 1985.
13. Кондратюк Е. «С++ трюки и эффекты»
14. Атымтаева М.С. «Программалау тілінін алгоритмі» 2005.
15. Павловская Т.А. «С\С++ Структурное программирование» М.: 2005.

ЖОСПАР
КІРІСПЕ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... ... ... ..3

1 С++ ТІЛІНДЕГІ МАССИВТЕР
1.1 Массив
түсінігі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ..5
1.2. Массивтермен
жұмыс ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ..
... ... ...7
1.3.Масивтерді
қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... .8
1.4 Бір өлшемді
массивтер ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ..
... ... ... .9
1.5 Екі өлшемді
массивтер ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ..
... ... ... 10

2 МАССИВТІҢ С++ ТІЛІНДЕГІ ҚОЛДАНУЫ
2.1 Сандық массивтерду
қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .1
9
2.2 Сандық массивті
өндеу ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ..
... ... 21
2.3 Массивтерді
сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... 22
2.4 Екі өлшемді бүтін сандар массивін кему ретімен
орналастыру ... ... ... 23
2.5 Екі өлшемді массивтің элементерінің қосындысын
табу ... ... ... ... ... ...24

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

КІРІСПЕ
Курыстық жұмыстың мақсаты:Осыған дейінгі қарастырылып келген мәлімет
типтері қарапайым болып есептеледі. Себебі олар тек бір ғана обЪектіге яғни
бір ғана санға немесе символға қатысты ғана қолданылады. 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 Массив түсінігі

Паскаль тілінде типтер қарапайым және күрделі болып бөлінеді. Қарапайым
типке – стандартты, саналатын, шектейтін типтер жатады. Күрделі типке –
массивтер, жиындар, жазулар, жолдар және файлдар жатады. Күрделі типтің
элементтері қарапайым немесе күрделі типтер болуы мүмкін. Күрделі типті
енгізу программаны күшейтеді және күрделі есептерді шешуге мүмкіндік
береді.
Тұрмыста тізбектелген сандарды, кестелерді, фамилия тізімдерін көп
пайдаланамыз, олар бір өлшемді (жатық немесе тік жол), екі өлшемді
(матрица) массив болуы немесе жиын болуы мүмкін.
Паскаль тілінде жеке айнымалыларды ғана өңдеп қоймай, айнымалылардың
жиынын, тобын да өңдеуге болады.
Массив дегеніміз – бір типтегі берілгендер жиыны. Басқаша айтқанда,
массив – бір атауға біріктіріліген айнымалылардың реттелген тізбегі.
Айнымалылардың – массив элементтерінің типтері бірдей болады. Массив бір
ғана атпен беріледі. Сөйтіп, Паскаль тіліндегі массив ұғымы алгоритмдік
тілдегі кесте ұғымына сәйкес келеді.
Индекс типі стандартты, бүтін немесе нақты тип бола алмайды.
Программада индекс және индекстің типі .ғымдарын шатастыруға болмайды.
Индекс типі массивті бейнелегенде пайдаланылса, индекс массив
элементтерін белгілеу үшін операторлық бөлікте пайдаланылады. Индексті
бейнелегенде қандай тип берілсе, индекс сол типте ғана болуы тиіс.
Индекс өрнек, айнымалы немесе тұрақты болып берілуі мүмкін.
Сондықтан да көп жағдайларда массивтерді индексті айнымалылар деп те
атайды. Ал индекссіз айнымалыларды массивтерден ажырату үшін қарапайым
айнымалылар дейді. Базалық типтегі айнымалыларға қандай амалдар қолданылса,
массив элементтеріне де сондай амалдар қолдануға болады.
Егер массив атауында бір ғана индекс болса, онда ол массивті бір
өлшемді, ал екі индекс болса – екі өлшемді және т.с.с. 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].

1.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]

1.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]; Он бүтін саннан тұратын массивті
жариялау
for (int index=0; index=9; index++)
{
value[index]=9-index; Әрбір элементтің мәнін есептеу
}
Box Sal;
for (which=0; which=9; which++)
{
Sal.say(value[which]);
}
}
Біз массив элементін функция аргументі ретінде пайдаландық.
Массивтер және олардың элементтері сондай-ақ функцияның аргументтері
бола алады. Мұнда қандай объектінің қандай типін қолданып жатқанын білген
жөн. Мысалы, келесі жариялауды қарастырайық:
athlete Guy[10];
Бұл жариялауды есепке алғанда келесі екі нұсқаулық әр түрлілікті
білдіреді:
JumpJack(Guy);
JumpJack(Guy[1]);
Бірінші нұсқаулық мүлдем қате. JumpJack() функциясында athlete
типіндегі бар жоғы бір өлшем, бірақ Guy – бұл гимнасттардың массиві
(athlete типіндегі объектілердің массиві), ал бір гимнастты Guy[1]
аргументі білдіреді!
Себебі функцияның бұл нұсқасы бір мезгілде тек бір объектіні сұрыптауға
қабілетті. Сонда да біз JumpJack() функциясының тағы бір нұсқасын өлшем
ретінде гимнасттар массивімен анықтай аламыз. Бұл жағдайда келесі
нұсқаулық дұрыс:
JumpJack(Guy);
Функцияның өлшемі массив болғанда, функцияның тақырыпты осы фактті
көрсету керек. Мысалы:
void jumpjack(athlete eachone[10], int howmany_athletes)
{
for(int i=0; ihowmany_athletes; i++);
{
eachone[i]. ready();
eachone[i]. up();
eachone[i]. ready(0.);
}
}
JumpJack функциясының бұл нұсқасын гимнасттар массивімен аргумент
ретінде шақыруға болады. Егер гимнасттар саны үнемі 10 болатынына сенімді
болсаңыз, howmany_ahtletes аргументін алып тастауға болады.
Аталған жағдайда функция тақырыбында eachone массив болып табылатыны
анық көрсетілген. Бұл компиляторға индекстер онымен байланысты болуы керек
екеніне нұсқайды. Басқа бір қызықты факт - массивтің өлшемдерін бермеуге
болады. Соңғысы жарияланғандықтан (бағдарламаның бір басқа жерінде),
қайтадан оған жады аумағы (берілген жағдайда функцияда) бөлінбейді, себебі
С++-те қалыпты жағдайда массивтер сілтеу бойынша беріледі. Функцияға тек
eachone – бұл массив және индекспен жалғасуы мүмкін екеніне нұсқау
керек[6].
Осылайша, функция тақырыбы келесідей бола алады:
void jumpjack(athlete eachone[], int howmany_athletes)
c7jack.cpp бағдарламасы
Массивті жаттығуларды орындайтын гимнасттар массивінің мысалында
қолдану c7jack.cpp бағдарламасында көрсетілген.
c7jack.cpp
Массивтерді қолданудың иллюстрациясы
31.07.1994

#include "franca.h";
athlete Guy[7];
void jumpjack(athlete somebody)
{
somebody. up();
somebody. ready();
}
void mainprog()
{
for (int=0; i7; i++)
{
JumpJack(Guy[i]);
Guy[i].say("Done!");
}

}

Бұл бағдарлама гимнасттардың санына байланысты емес: біреу немесе
бірнешеу. Айырмашылық ондай үлкен болмайды:
• Элементтердің қажетті саны массивті жариялауда беріледі.
• Цикл нөлден басталып массивтің соңғы элементтің мәніне дейін болуы
керек.
Егер сіз жеті элементтен тұратын массивті жарияласаңыз, бірақ олардың
тек үшеуін қолдансаңыз, бағдарлама дұрыс жұмыс істейді. Жалғыз бір мәселе
бұл сіз компьютер жадысын өнімсіз алып отырсыз. Екінші жағынан, элементке
жарияланғаннан кейін үлкен индекспен көрсету қатеге алып келеді.
Массивтің өлшемін алдын-ала анықтау мүмкін емес жағдайлар жиі болады.
Мысалы, класстағы студенттердің жасын зерттейсіз. Егер класста 28 студент
болса, онда сіз дәл осы санға есептелген бағдарламаны құруға шешім
қабылдауыңыз мүмкін. Алайда басқа класста сіздің бағдарламаңыз жұмысқа
қабілетсіз болады.
Шешімнің бірі болып, массивті келесідей жариялауда жатыр:
int student_age[28];
Енді 28 мәнін кез-келген басқа мәнге өзгертуге болады, үлкен классқа
арналған 32-ге делік. Бірақ бұл ондай сәтті шешім емес, себебі
бағдарламаның басқа жерінде де студенттің саны қажет болуы мүмкін. Мысалы,
егер сіз студенттің орташа жасын есептейтін болсаңыз, сізде бағдарламаның
келесі кескіні бары анық.
sum=0;
for(int i=0; i28; i++);
{
sum=sum+student_age[i];
}
average=sum28;
Бағдарламаның екі жерінде 28-ді 32-ге ауыстыру керек. Бұл мысалда бұл
оңай, бірақ егер сізде ұзын бағдарлама болса, онда осындай орынның барлығын
табу қиынырақ болады. Мәселенің шешімі студенттер санын өз аты бар бөлек
айнымалы түрінде сақтауда жатыр.
int numder_of_students;
Бұл айнымалының мәнін пернетақтадан есептеуге немесе функцияның
аргументі ретінде беруге болады. Бұл жағдайда массив барлық мүмкін
нұсқаларды қарастыру үшін жеткілікті элементтер санымен жариялана алатын
еді. Мысалы:
int student_age[100];
Енді студенттердің орташа жасын есептеу бағдарламасының кескіні былай
болады:
sum=0;
for(int i=0; inumber_of_students; i++);
{
sum=sum+student_age[i];
}
average=sumnumber_of_students;
Массивтің өлшемін көрсету үшін массивті жариялауда айнымалыны
қолдануға болмайды. Бұл тек тұрақты бола алады, сонымен бірге бүтін
тұрақты. Мысалы, егер n – бұл тұрақты емес, онда келесі хабарлама дұрыс
емес:
athlete Guy[n];
Айнымалының мәні бағдарламаны орындау үрдісінде ғана белгілі болады.
Одан басқа, бағдарламаны орындау үрдісінде айнымалы өз мәнін өзгерте алады.
Бірақ бағдарламаны орындау басталар алдында, компилятор барлық
айнымалыларды (массив элементтерін қосқанда) сақтау үшін жады аумағын бөлуі
керек. Компилятор массивтің барлық элементтері үшін орындар алып қою үшін
олардың саны алдын-ала белгілі болуы қажет. бағдарламаны орындау кезінде
айнымалыларға олардың мәндері беріліп жатқанда, жадының бүкіл аумағы
таратылуы керек. Дәл осы себептен масс өлшемі тұрақты көмегімен беріледі.
Мысалы, массив өлшемін беру үшін атауы бар тұрақтыны хабарлауға болады:
const int arraysize;
float prices[arraysize];
arraysize тұрақты болғандықтан оның мәнін бағдарламада өзгертуге
болмайтынын ұмытпаған жөн.
Массивте топтың бес гимнастының жасын сақтағыңыз келеді делік.
Гимнасттардың массиві мен жастар массивін келесі түрмен хабарлай аласыз:
athlete guy[5];
int age[5];
Әрбір гимнаст өз нөмірін хабарласын, сізден өз жасын сұрасын және оны
айтсын.
c7age.cpp бағдарламасы
Жоғарыда аталған процедура c7age.cpp бағдарламасында жүзеге асырылған:
c7age.cpp
бүтінсандық массивтерді қолдану иллюстрациясы
31.07.1994
#include "franca.h"
athlete Guy[5];
void mainprog()
{
int age[5];
for (int i=0; i=4; i++)
{
Guy[i].ready();
Guy[i].say(i);
age[i]=Guy[i].ask("What is my age?");
}
for (i=0; i=4; i++)
{
Guy[i].say(age[i]);
}
} [7].

1.4 Бір өлшемді массив

Ең қарапайым файл типі мәтіндік файл болып табылады. Бұл файлдағы
мәліметтер типтік және типтік емес файлдардағыдай машиналық кодта емес,
сан, әріп және басқа пернетақта символдары түрінде (ASCII кодында)
беріледі. Сондықтан мұндай файлдар мазмұны оңай қаралады, оңай өзгереді
және оларды кез келген мәтіндік редактордың, соның ішінде Borland Pascal
ортасының да көмегімен өзгертуге болады. Өздеріңіз білетіндей 2.1.2.-ні
қара, мәтінді теру кезінде жаңа жолды енгізу үшін “Enter” пернесін басу
керек, осы кезде арнайы код гинерацияланады—ол жол соңы коды, ал файлды
сыртқы сақтау құрылғысына жазған кезде де арнайы код гинерацияланады—ол
файл соңы коды. Мәтіндік файлды оқығанда бұл кодтар көрінбейді.
Келесі есепті шешіп көрейік: Пернетақтадан бірнеше сандар енгізіп,
оларды “mayFile.in” атты мәтіндік типтегі файлға жазу керек.
Есепті кезеңдерге бөлейік:
1) пернетақтадан мәліметтерді енгізу
2) оларды “mayFile.in” атты файлға жазу керек.
Бірінші кезеңді орындау үшін:
• пернетақтадан енгізілетін сандардың мөлшерін (массив өлшемін) көрсету
керек
• Сан мөлшерін білген соң, параметрлі циклді қолдану арқылы массив
элементтеріне осы сандардың нақты мәндерін меншіктейміз
Осы әрекеттерді орындау үшін қолданылатын айнымалыларды сипаттаймыз.
Айталық, санымыз 100-ден көп емес және олар басқа да процедураларда
қолданылатындықтан, оларды ауқымды айнымалыларды баяндау блогында
сипаттаймыз.
рrogram Misal_F1;
var

San: array [1..100] of ... жалғасы

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