C++ екі өлшемді массивтер
Мазмұны
Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..3
I БӨЛІМ. C++ тіліндегі массивтер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4
1.1 Массивтермен жұмыс ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...4
1.1.1 Массивтерді қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .5
1.2 Екіөлшемді массивтер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 11
1.3 Сандық массивтерді қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .13
1.3.1 Сандық массивті өңдеу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 15
1.4 Массивтерді сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 16
II БӨЛІМ. Массивтің С++ тілінде қолданылуы ... ... ... ... ... ... ... ... ... ... ... ... ... .18
2.1 Екіөлшемді массивтің элементерінің қосындысын табу ... ... ... ... ... ... ... ... 18
2.1.2 Екіөлшемді бүтін сандар массивін кему ретімен орналастыру ... ... ... ... ...19
2.2 Екінші тәртіптегі шаршы матрицаның анықтауышын есептеу ... ... ... ... ... ..20
2.3 Элементтер қосындысы максимальды болатын шаршылы матрицаның жолының нөмірін анықтау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...21
2.4 Пернетақтадан енгізілген шаршылы матрица «сиқырлы шаршы» болып табылатынын немесе болмайтынын тексеру бағдарламасы ... ... ... ... ... ... ... ... .22
Қорытынды ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 25
Қолданылған әдебиеттер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..26
Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..3
I БӨЛІМ. C++ тіліндегі массивтер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4
1.1 Массивтермен жұмыс ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...4
1.1.1 Массивтерді қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .5
1.2 Екіөлшемді массивтер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 11
1.3 Сандық массивтерді қолдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .13
1.3.1 Сандық массивті өңдеу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 15
1.4 Массивтерді сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 16
II БӨЛІМ. Массивтің С++ тілінде қолданылуы ... ... ... ... ... ... ... ... ... ... ... ... ... .18
2.1 Екіөлшемді массивтің элементерінің қосындысын табу ... ... ... ... ... ... ... ... 18
2.1.2 Екіөлшемді бүтін сандар массивін кему ретімен орналастыру ... ... ... ... ...19
2.2 Екінші тәртіптегі шаршы матрицаның анықтауышын есептеу ... ... ... ... ... ..20
2.3 Элементтер қосындысы максимальды болатын шаршылы матрицаның жолының нөмірін анықтау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...21
2.4 Пернетақтадан енгізілген шаршылы матрица «сиқырлы шаршы» болып табылатынын немесе болмайтынын тексеру бағдарламасы ... ... ... ... ... ... ... ... .22
Қорытынды ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 25
Қолданылған әдебиеттер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..26
I БӨЛІМ. C++ тіліндегі массивтер
1.1 Массивтермен жұмыс
Массив (array) бір классқа жататын объектілер тобын құрайды, сонымен бірге кез-келген объектіге оның жолда орналасуы бойынша қолдана аласыз. Мысалы, егер гимнасттар бір қатарда тұрса, бірақ сіз олардың аты-жөндерін білмесеңіз, олардың қатардағы жағдайына сай сөйлеген ыңғайлы: бірінші, екінші, үшінші...
Массивтердің қасиеттерін түсінген маңызды. Ең қарапайым жағдайды қарастырайық, бес гимнастты жаттығуларды жасатқызатын бағдарлама жасау керек делік. Бұл бестікті құрдыңыз делік және келесі нұсқаулықтың көмегімен оларға: Athlete Julia, Andrea, Ricardo, Andy, Michael аттарын бердіңіз.
Сонан соң сіз олардың әрқайсысына бір жаттығуды орындауға бұйрық беруге мәжбүрсіз:
JumpJack(Julia);
JumpJack(Andrea);
JumpJack(Ricardo);
JumpJack(Andy);
JumpJack(Michael);
Бұл әрине, өте қиын емес, бірақ егер гимнасттар саны жүз болса, мың болса қиын болары сөссіз.
Бұл мәселені шешудің стандартты әдісі гимнасттардың бүкіл тобына атау беріп, содан кейін нақты бір гимнасттың әрқайсысын бірінші, екінші, үшінші... деп атауда жатыр.
Бұл шамамен былай болады:
Бес гимнасттан тұратын топты Guy атауымен белгілеу
Индекстің (index) мәнін 1-ден 5-ке дейін қайталау:
Guy элементіне индекс позициясында жаттығуды орындау.
Циклдерді оқу бойынша біз білеміз, компьютер топтың барлық мүшелері жаттығуды орындау керектгін түсінеді, бірақ енді 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(); //Әрбір жүгірушінің орын ауыстыруы
}
}
1.1.1 Массивтерді қолдану
Кез-келген типтегі объектілер массивтерін қолдануға болады: гимнасттардың, жүгірушілердің, роботтардың, шеңберлердің және тіпті қарапайым, мысалы массивтің элементтері болып int немесе float типтеріндегі айнымалылар бола алады. С++ тілінде массив элементтері индекстің бүтін мәндерімен (int) белгіленеді. Массивтің бірінші элементіне 0-ге тең индекс мәні, ал екіншісіне – 1 және т.б. мәндер қосылады.
Алдыңғы бағдарламада Guy массиві бес элементтен тұрды:
Элемент Guy[0] бірінші болды
Элемент Guy[1] екінші болды
Элемент Guy[2] үшінші болды
Элемент Guy[3] төртінші болды
Элемент Guy[4] бесінші болды
Элемент Guy[5] болған жоқ, себебі элементтер барлығы бесеу болды!
Массивті жариялау кез-келген басқа объектінің жариялауына ұқсас, бірақ массив атынан кейін тік жақшада оның элементтерінің саны көрсетіледі. Мысалы, келесі нұсқаулықты қарастырайық:
int points[10];
1.1 Массивтермен жұмыс
Массив (array) бір классқа жататын объектілер тобын құрайды, сонымен бірге кез-келген объектіге оның жолда орналасуы бойынша қолдана аласыз. Мысалы, егер гимнасттар бір қатарда тұрса, бірақ сіз олардың аты-жөндерін білмесеңіз, олардың қатардағы жағдайына сай сөйлеген ыңғайлы: бірінші, екінші, үшінші...
Массивтердің қасиеттерін түсінген маңызды. Ең қарапайым жағдайды қарастырайық, бес гимнастты жаттығуларды жасатқызатын бағдарлама жасау керек делік. Бұл бестікті құрдыңыз делік және келесі нұсқаулықтың көмегімен оларға: Athlete Julia, Andrea, Ricardo, Andy, Michael аттарын бердіңіз.
Сонан соң сіз олардың әрқайсысына бір жаттығуды орындауға бұйрық беруге мәжбүрсіз:
JumpJack(Julia);
JumpJack(Andrea);
JumpJack(Ricardo);
JumpJack(Andy);
JumpJack(Michael);
Бұл әрине, өте қиын емес, бірақ егер гимнасттар саны жүз болса, мың болса қиын болары сөссіз.
Бұл мәселені шешудің стандартты әдісі гимнасттардың бүкіл тобына атау беріп, содан кейін нақты бір гимнасттың әрқайсысын бірінші, екінші, үшінші... деп атауда жатыр.
Бұл шамамен былай болады:
Бес гимнасттан тұратын топты Guy атауымен белгілеу
Индекстің (index) мәнін 1-ден 5-ке дейін қайталау:
Guy элементіне индекс позициясында жаттығуды орындау.
Циклдерді оқу бойынша біз білеміз, компьютер топтың барлық мүшелері жаттығуды орындау керектгін түсінеді, бірақ енді 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(); //Әрбір жүгірушінің орын ауыстыруы
}
}
1.1.1 Массивтерді қолдану
Кез-келген типтегі объектілер массивтерін қолдануға болады: гимнасттардың, жүгірушілердің, роботтардың, шеңберлердің және тіпті қарапайым, мысалы массивтің элементтері болып int немесе float типтеріндегі айнымалылар бола алады. С++ тілінде массив элементтері индекстің бүтін мәндерімен (int) белгіленеді. Массивтің бірінші элементіне 0-ге тең индекс мәні, ал екіншісіне – 1 және т.б. мәндер қосылады.
Алдыңғы бағдарламада Guy массиві бес элементтен тұрды:
Элемент Guy[0] бірінші болды
Элемент Guy[1] екінші болды
Элемент Guy[2] үшінші болды
Элемент Guy[3] төртінші болды
Элемент Guy[4] бесінші болды
Элемент Guy[5] болған жоқ, себебі элементтер барлығы бесеу болды!
Массивті жариялау кез-келген басқа объектінің жариялауына ұқсас, бірақ массив атынан кейін тік жақшада оның элементтерінің саны көрсетіледі. Мысалы, келесі нұсқаулықты қарастырайық:
int points[10];
Қолданылған әдебиеттер
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 б.
Лабор В. В. Си Шарп: Создание приложений для Windows/ В. В. Лабор.— Минск.: Харвест, 2003. - 384 б.
10. Мик Б. и др. «Практическое руководство по программированию» М.: Радио и связь, 1986.
11. Фокс Дж. «Программное обеспечение и его разработка» М.: Мир, 1985.
12. Керниган Б. Ритчи Д. Фьюэр А. «Язык программирования Си» М.: Финансы и статистика, 1985.
13. Кондратюк Е. «С++ трюки и эффекты»
14. Атымтаева М.С. «Программалау тілінін алгоритмі» 2005.
15. Павловская Т.А. «С\С++ Структурное программирование» М.: 2005.
16. Уэит, Мартин Д. «Язык Си» М.:1988ж.
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 б.
Лабор В. В. Си Шарп: Создание приложений для Windows/ В. В. Лабор.— Минск.: Харвест, 2003. - 384 б.
10. Мик Б. и др. «Практическое руководство по программированию» М.: Радио и связь, 1986.
11. Фокс Дж. «Программное обеспечение и его разработка» М.: Мир, 1985.
12. Керниган Б. Ритчи Д. Фьюэр А. «Язык программирования Си» М.: Финансы и статистика, 1985.
13. Кондратюк Е. «С++ трюки и эффекты»
14. Атымтаева М.С. «Программалау тілінін алгоритмі» 2005.
15. Павловская Т.А. «С\С++ Структурное программирование» М.: 2005.
16. Уэит, Мартин Д. «Язык Си» М.:1988ж.
Пән: Информатика, Программалау, Мәліметтер қоры
Жұмыс түрі: Курстық жұмыс
Тегін: Антиплагиат
Көлемі: 22 бет
Таңдаулыға:
Жұмыс түрі: Курстық жұмыс
Тегін: Антиплагиат
Көлемі: 22 бет
Таңдаулыға:
I БӨЛІМ. C++ тіліндегі массивтер
1.1 Массивтермен жұмыс
Массив (array) бір классқа жататын объектілер тобын құрайды, сонымен
бірге кез-келген объектіге оның жолда орналасуы бойынша қолдана аласыз.
Мысалы, егер гимнасттар бір қатарда тұрса, бірақ сіз олардың аты-жөндерін
білмесеңіз, олардың қатардағы жағдайына сай сөйлеген ыңғайлы: бірінші,
екінші, үшінші...
Массивтердің қасиеттерін түсінген маңызды. Ең қарапайым жағдайды
қарастырайық, бес гимнастты жаттығуларды жасатқызатын бағдарлама жасау
керек делік. Бұл бестікті құрдыңыз делік және келесі нұсқаулықтың көмегімен
оларға: Athlete Julia, Andrea, Ricardo, Andy, Michael аттарын бердіңіз.
Сонан соң сіз олардың әрқайсысына бір жаттығуды орындауға бұйрық
беруге мәжбүрсіз:
JumpJack(Julia);
JumpJack(Andrea);
JumpJack(Ricardo);
JumpJack(Andy);
JumpJack(Michael);
Бұл әрине, өте қиын емес, бірақ егер гимнасттар саны жүз болса, мың
болса қиын болары сөссіз.
Бұл мәселені шешудің стандартты әдісі гимнасттардың бүкіл тобына атау
беріп, содан кейін нақты бір гимнасттың әрқайсысын бірінші, екінші,
үшінші... деп атауда жатыр.
Бұл шамамен былай болады:
Бес гимнасттан тұратын топты Guy атауымен белгілеу
Индекстің (index) мәнін 1-ден 5-ке дейін қайталау:
Guy элементіне индекс позициясында жаттығуды орындау.
Циклдерді оқу бойынша біз білеміз, компьютер топтың барлық мүшелері
жаттығуды орындау керектгін түсінеді, бірақ енді 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(); Әрбір жүгірушінің орын ауыстыруы
}
}
1.1.1 Массивтерді қолдану
Кез-келген типтегі объектілер массивтерін қолдануға болады:
гимнасттардың, жүгірушілердің, роботтардың, шеңберлердің және тіпті
қарапайым, мысалы массивтің элементтері болып 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]
Өрнек бүтін болып қала бергенше оны индекс ретінде көрсетуге болады:
o Guy[which] белгісі Guy массивінің нақты бір элементіне нұсқайды. Егер
which өрнек мәні белгілі болса, бұл элементті оңай анықтауға болады.
o 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] массивінің
элементінде нәтижені сақтаймыз. Сәйкесінше, бұл кескінді орындағаннан кейін
массив сандық мәндермен толығады, оларды содан кейін қайсыбір тәсілмен
пайдалануға болады.
Мысалы, массивтің әрбір элементінің мәнін ақпарттық қоршауда
көрсетуге болады:
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 – бұл массив және индекспен жалғасуы мүмкін екеніне нұсқау керек.
Осылайша, функция тақырыбы келесідей бола алады:
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]);
}
}
1.2 Екіөлшемді массивтер
Екіөлшемді массив бір өлшемді массив ретінде айтылады, оның
элементері элементерінің типі суреттеуде көрсетілген массив болып табылады.
Мысалы, оператор float R; бес элементтен тұратын массив жариялайды,
олардың әрқайсысы он мүліктік сандардан тұратын массив. Бұл массивтің бөлек
өлшемдері екі индексі бар атаулармен белгіленеді: R[0][0], R[0][1], ...,
R[4][9]. Индекстерді бір жақшаға біріктіруге болмайды, яғни R[2,3] жазуы
қате.
Үшөлшемді массивті суреттеудің мысалы:
double X[3][7][20];
Паскальдегідей көпөлшемді массивтің элементтерінің жадыдағы орналасу
тәртібі мынадай, ең алдымен соңғы индекс, содан кейін соңғысының алдындағы
және т.б. ауысады және тек бір-ақ рет өз мәндерін бірінші индекс өтіп
шығады.
Көпөлшемді массивтерді суреттеуде оларды инициализациялауға болады.
Мұны былай істеу ыңғайлы:
int M[3][3]={ 11,12,13,
21,22,23,
31,32,33 };
Екіөлшемді массивтерді инициализациялау толық және жекелей болуы мүмкін.
1. Толық инициализациялау жағдайында мәндердің толық тізімі өрнек
жақшаларда көрсетіледі. Әрбір жол өзінің өрнек жақшаларында
инициализацияланады.
int A [3][4]= { { 1,4,2,6},
{ 11,14,12,6},
{1,4,2,6}};
Массивтің бірінші өлшемін, яғни жолдардың санын толық инициализациялауда
көрсетпеуге болады.
int A[][4]={{1,4,2,6},
{11,14,12,16},
{1,4,2,6}};
Компилятор өзі үшін инициализацияның тізімі бойынша санды анықтайды.
Бағдарламалаушы бірінші өлшемді sizeof операциясы көмегімен таба алады.
Негізінен, sizeof(А) екіөлшемді массивің өлшемн байтта, ал sizeof(А[0]) жол
өлшемін байта қайтарады.
Мысалы,
int KolStrok=sizeof(A)sizeof(A[0]); 2482=3
2. Жекелей инициализациялау жағдайында массивтің барлық өлшемдері
және өрнек жақшада мәндердің толық емес тізімдері көрсетіледі.
intA[4][4]={{2,6},
{14,12,16},
{6}};
Егер инициализациялау тізімінің өлшемі массивтің ең болмаса бір
өлшемінен үлкен болса, компиляция қателігі пайда болады.
intA[2][4]={{1,4,4,7,2},
{1,4,4,2}}; Қате
Массивті инициализациясыз анықтау кезінде барлық өлшемдерді белгілі
түрде көрсету керек.
Екіөлшемді массивтерді функцияға беру үшін функцияның фактілік және
формальды өлшемдерінің типтерінің сәйкес келу тәртібін дәл сақтау керек.
Мысалдар.
1. Функция массивтегі максимальды элементті табады
int max(intA[][100], int KolStroc, int Kolstolb);
Берілген функция екінші өлшемі 100 болатын массивтер үшін ғана шақыра
алынады. Ола болмаған жағдайда, компиляция қателігі болады.
Мысалы, бұл функцияны тек жекелей инициализацияланған массив үшін
шақыруға болады.
intA [][100]={{1,3,5}, {15,2,3}};
int res=max(A,2,3);
2. Функция екіөлшемді массивтің элементтерінің қосындысын табады
Екіөлшемді массивті бері кезінде мұнда екіөлшемді массив типінің
бірөлшемді массив типіне анық қайта құрылуы пайдаланылған. Бұл кез-келген
екіөлшемді массивтер үшін функцияны шақыруға мүмкіндік береді.
int sum(intA[], int KolStroc, int KolStolb)
{int s=0;
for (int i=0; iKolStroc; i++)
for (int j=0; jKolStolb; j++)
s+=A[i*KolStolb+j];
return s;};
void main()
{int B[2][3]={{1,4,2}, {4,1,2}};
int res=sum((int*)A,2,3);
printf(“%d”,s);}
1.3 Сандық массивтерді қолдану
Көптеген жағдайда элементтері сандық мәндер болып табылатын массивтер
қажет. Бұл int, long, float немесе double типіндегі массивтер болуы мүмкін.
Массивтердің элементтері болып әр түрлі типтегі объектілер бола
алады. Бірақ элементтері массив болып табылатын массивтер бола ма деген
сұрақ туындайды.
Айталық, гимнасттардың бір тобы жаттығуға сағат сегізде келеді. Егер
топты массив деп алсақ, онда гимнасттарға 0,1,2,... индекстерін беру керек.
Енді гимнасттардың екінші тобы тоғызда келеді делік. Бұл топты да массив
ретінде қарастыруға болатыны анық.
Әрқайсысы массив болып табылатын гимнасттардың мұндай үш тобы бар делік:
o Топ 0 (сегізсағаттық).
o Топ 1 (тоғызсағаттық).
o Топ 2 (онсағаттық).
Бірақ енді аңғаруға болады: біз топ деп атап отырғанымыз массивтің элементі
болып табылады. Бұл жаңа массивтің әрбір тобында мысалы, төрт гимнасттан
жаттықсың.
Біз мұндай екіөлшемді массивті келесі түрмен хабарлай аламыз:
athlete Guy[3][4];
Осылайша, Guy объектісі үш элементтен тұратын массив болып табылады,
олардың әрқайсысы өз кезегінде төрт элементтен тұратын массив болып
табылады.
Массивті бергенде оның элементтерінде компьютер жадысында бұрынғы
бағдарламалардан қалған түрлі қоқыс болады. Бұл элементтер нөлдік немесе
кез-келген басқа белгілі мәндерге ие деп ойлаудың қажеті жоқ.
Барлық элементтерге мәндерді біртіндеп бағдарламаны орындау үрдісінде
немесе массивті хабарлау кезінде барлық бастапқы мәндерді беруге болады.
Бұл соңғы нұсқа әсіресе сандық массивтер үшін ыңғайлы. Бұл жағдайда
массивті хабарлағаннан кейін теңдік белгісі қойылып, өрнек жақшада үтір
арқылы барлық бастапқы мәндер аударылады. Бірінші мән бірінші элементке
(индексі 0), екінші мән – екінші элементке (индексі 1) және т.б. сәйкес
келеді.
int values[10]={9,8,7,6,5,4,3,2,1,0};
Жоғарыда келтірілген хабарлама [0] элементіне - 9 мәнін, [1] элементіне -
8 мәнін, [2] элементіне – 7 мәнін береді және т.б.
Синтаксистің келесі элементтерін белгілеңіз:
o Тік жақшалардан кейін теңдік белгісі.
o Бөлек элементтердің бастапқы мәндерінің арасында үтірлер.
o Барлық элементтердің бастапқы мәндері үшін ... жалғасы
1.1 Массивтермен жұмыс
Массив (array) бір классқа жататын объектілер тобын құрайды, сонымен
бірге кез-келген объектіге оның жолда орналасуы бойынша қолдана аласыз.
Мысалы, егер гимнасттар бір қатарда тұрса, бірақ сіз олардың аты-жөндерін
білмесеңіз, олардың қатардағы жағдайына сай сөйлеген ыңғайлы: бірінші,
екінші, үшінші...
Массивтердің қасиеттерін түсінген маңызды. Ең қарапайым жағдайды
қарастырайық, бес гимнастты жаттығуларды жасатқызатын бағдарлама жасау
керек делік. Бұл бестікті құрдыңыз делік және келесі нұсқаулықтың көмегімен
оларға: Athlete Julia, Andrea, Ricardo, Andy, Michael аттарын бердіңіз.
Сонан соң сіз олардың әрқайсысына бір жаттығуды орындауға бұйрық
беруге мәжбүрсіз:
JumpJack(Julia);
JumpJack(Andrea);
JumpJack(Ricardo);
JumpJack(Andy);
JumpJack(Michael);
Бұл әрине, өте қиын емес, бірақ егер гимнасттар саны жүз болса, мың
болса қиын болары сөссіз.
Бұл мәселені шешудің стандартты әдісі гимнасттардың бүкіл тобына атау
беріп, содан кейін нақты бір гимнасттың әрқайсысын бірінші, екінші,
үшінші... деп атауда жатыр.
Бұл шамамен былай болады:
Бес гимнасттан тұратын топты Guy атауымен белгілеу
Индекстің (index) мәнін 1-ден 5-ке дейін қайталау:
Guy элементіне индекс позициясында жаттығуды орындау.
Циклдерді оқу бойынша біз білеміз, компьютер топтың барлық мүшелері
жаттығуды орындау керектгін түсінеді, бірақ енді 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(); Әрбір жүгірушінің орын ауыстыруы
}
}
1.1.1 Массивтерді қолдану
Кез-келген типтегі объектілер массивтерін қолдануға болады:
гимнасттардың, жүгірушілердің, роботтардың, шеңберлердің және тіпті
қарапайым, мысалы массивтің элементтері болып 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]
Өрнек бүтін болып қала бергенше оны индекс ретінде көрсетуге болады:
o Guy[which] белгісі Guy массивінің нақты бір элементіне нұсқайды. Егер
which өрнек мәні белгілі болса, бұл элементті оңай анықтауға болады.
o 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] массивінің
элементінде нәтижені сақтаймыз. Сәйкесінше, бұл кескінді орындағаннан кейін
массив сандық мәндермен толығады, оларды содан кейін қайсыбір тәсілмен
пайдалануға болады.
Мысалы, массивтің әрбір элементінің мәнін ақпарттық қоршауда
көрсетуге болады:
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 – бұл массив және индекспен жалғасуы мүмкін екеніне нұсқау керек.
Осылайша, функция тақырыбы келесідей бола алады:
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]);
}
}
1.2 Екіөлшемді массивтер
Екіөлшемді массив бір өлшемді массив ретінде айтылады, оның
элементері элементерінің типі суреттеуде көрсетілген массив болып табылады.
Мысалы, оператор float R; бес элементтен тұратын массив жариялайды,
олардың әрқайсысы он мүліктік сандардан тұратын массив. Бұл массивтің бөлек
өлшемдері екі индексі бар атаулармен белгіленеді: R[0][0], R[0][1], ...,
R[4][9]. Индекстерді бір жақшаға біріктіруге болмайды, яғни R[2,3] жазуы
қате.
Үшөлшемді массивті суреттеудің мысалы:
double X[3][7][20];
Паскальдегідей көпөлшемді массивтің элементтерінің жадыдағы орналасу
тәртібі мынадай, ең алдымен соңғы индекс, содан кейін соңғысының алдындағы
және т.б. ауысады және тек бір-ақ рет өз мәндерін бірінші индекс өтіп
шығады.
Көпөлшемді массивтерді суреттеуде оларды инициализациялауға болады.
Мұны былай істеу ыңғайлы:
int M[3][3]={ 11,12,13,
21,22,23,
31,32,33 };
Екіөлшемді массивтерді инициализациялау толық және жекелей болуы мүмкін.
1. Толық инициализациялау жағдайында мәндердің толық тізімі өрнек
жақшаларда көрсетіледі. Әрбір жол өзінің өрнек жақшаларында
инициализацияланады.
int A [3][4]= { { 1,4,2,6},
{ 11,14,12,6},
{1,4,2,6}};
Массивтің бірінші өлшемін, яғни жолдардың санын толық инициализациялауда
көрсетпеуге болады.
int A[][4]={{1,4,2,6},
{11,14,12,16},
{1,4,2,6}};
Компилятор өзі үшін инициализацияның тізімі бойынша санды анықтайды.
Бағдарламалаушы бірінші өлшемді sizeof операциясы көмегімен таба алады.
Негізінен, sizeof(А) екіөлшемді массивің өлшемн байтта, ал sizeof(А[0]) жол
өлшемін байта қайтарады.
Мысалы,
int KolStrok=sizeof(A)sizeof(A[0]); 2482=3
2. Жекелей инициализациялау жағдайында массивтің барлық өлшемдері
және өрнек жақшада мәндердің толық емес тізімдері көрсетіледі.
intA[4][4]={{2,6},
{14,12,16},
{6}};
Егер инициализациялау тізімінің өлшемі массивтің ең болмаса бір
өлшемінен үлкен болса, компиляция қателігі пайда болады.
intA[2][4]={{1,4,4,7,2},
{1,4,4,2}}; Қате
Массивті инициализациясыз анықтау кезінде барлық өлшемдерді белгілі
түрде көрсету керек.
Екіөлшемді массивтерді функцияға беру үшін функцияның фактілік және
формальды өлшемдерінің типтерінің сәйкес келу тәртібін дәл сақтау керек.
Мысалдар.
1. Функция массивтегі максимальды элементті табады
int max(intA[][100], int KolStroc, int Kolstolb);
Берілген функция екінші өлшемі 100 болатын массивтер үшін ғана шақыра
алынады. Ола болмаған жағдайда, компиляция қателігі болады.
Мысалы, бұл функцияны тек жекелей инициализацияланған массив үшін
шақыруға болады.
intA [][100]={{1,3,5}, {15,2,3}};
int res=max(A,2,3);
2. Функция екіөлшемді массивтің элементтерінің қосындысын табады
Екіөлшемді массивті бері кезінде мұнда екіөлшемді массив типінің
бірөлшемді массив типіне анық қайта құрылуы пайдаланылған. Бұл кез-келген
екіөлшемді массивтер үшін функцияны шақыруға мүмкіндік береді.
int sum(intA[], int KolStroc, int KolStolb)
{int s=0;
for (int i=0; iKolStroc; i++)
for (int j=0; jKolStolb; j++)
s+=A[i*KolStolb+j];
return s;};
void main()
{int B[2][3]={{1,4,2}, {4,1,2}};
int res=sum((int*)A,2,3);
printf(“%d”,s);}
1.3 Сандық массивтерді қолдану
Көптеген жағдайда элементтері сандық мәндер болып табылатын массивтер
қажет. Бұл int, long, float немесе double типіндегі массивтер болуы мүмкін.
Массивтердің элементтері болып әр түрлі типтегі объектілер бола
алады. Бірақ элементтері массив болып табылатын массивтер бола ма деген
сұрақ туындайды.
Айталық, гимнасттардың бір тобы жаттығуға сағат сегізде келеді. Егер
топты массив деп алсақ, онда гимнасттарға 0,1,2,... индекстерін беру керек.
Енді гимнасттардың екінші тобы тоғызда келеді делік. Бұл топты да массив
ретінде қарастыруға болатыны анық.
Әрқайсысы массив болып табылатын гимнасттардың мұндай үш тобы бар делік:
o Топ 0 (сегізсағаттық).
o Топ 1 (тоғызсағаттық).
o Топ 2 (онсағаттық).
Бірақ енді аңғаруға болады: біз топ деп атап отырғанымыз массивтің элементі
болып табылады. Бұл жаңа массивтің әрбір тобында мысалы, төрт гимнасттан
жаттықсың.
Біз мұндай екіөлшемді массивті келесі түрмен хабарлай аламыз:
athlete Guy[3][4];
Осылайша, Guy объектісі үш элементтен тұратын массив болып табылады,
олардың әрқайсысы өз кезегінде төрт элементтен тұратын массив болып
табылады.
Массивті бергенде оның элементтерінде компьютер жадысында бұрынғы
бағдарламалардан қалған түрлі қоқыс болады. Бұл элементтер нөлдік немесе
кез-келген басқа белгілі мәндерге ие деп ойлаудың қажеті жоқ.
Барлық элементтерге мәндерді біртіндеп бағдарламаны орындау үрдісінде
немесе массивті хабарлау кезінде барлық бастапқы мәндерді беруге болады.
Бұл соңғы нұсқа әсіресе сандық массивтер үшін ыңғайлы. Бұл жағдайда
массивті хабарлағаннан кейін теңдік белгісі қойылып, өрнек жақшада үтір
арқылы барлық бастапқы мәндер аударылады. Бірінші мән бірінші элементке
(индексі 0), екінші мән – екінші элементке (индексі 1) және т.б. сәйкес
келеді.
int values[10]={9,8,7,6,5,4,3,2,1,0};
Жоғарыда келтірілген хабарлама [0] элементіне - 9 мәнін, [1] элементіне -
8 мәнін, [2] элементіне – 7 мәнін береді және т.б.
Синтаксистің келесі элементтерін белгілеңіз:
o Тік жақшалардан кейін теңдік белгісі.
o Бөлек элементтердің бастапқы мәндерінің арасында үтірлер.
o Барлық элементтердің бастапқы мәндері үшін ... жалғасы
Ұқсас жұмыстар
Пәндер
- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.
Ақпарат
Қосымша
Email: info@stud.kz