Нэг хэмжээст массив. Нэг хэмжээст массив c-д нэг хэмжээст массив үүсгэх

С++ хэлний үндсийг үргэлжлүүлэн сурцгаая. Энэ нийтлэлд бид массивуудыг авч үзэх болно.

Массивууд нь их хэмжээний өгөгдлийг тохиромжтой форматаар хадгалах боломжийг олгодог. Үнэндээ, массив Энэ нь олон утгыг нэг нэрээр хадгалдаг хувьсагч боловч утга тус бүрд өөрийн гэсэн индекс оноогдсон байдаг. индексүүд хандахад ашигладаг утгуудын жагсаалт юм.

Массивуудын танилцуулга

Та массивыг дараах байдлаар дүрсэлж болно.

Энэ бол нэг нэрээр ар араасаа хадгалагдаж буй зарим утгуудын багц юм. Эдгээр утгыг олж авахын тулд та шинэ хувьсагч үүсгэх шаардлагагүй, зөвхөн массив дахь утга хадгалагдаж буй индексийг зааж өгөх хэрэгтэй. Жишээлбэл, та покер тоглоход зориулж таван тоглоомын картыг тараах хэрэгтэй бөгөөд та эдгээр картуудыг массив болгон хадгалж, шинэ хувьсагч ашиглахын оронд зөвхөн индексийн дугаарыг өөрчилж, шинэ карт сонгох боломжтой. Энэ нь танд ижил кодыг ашиглан бүх картыг эхлүүлэх, дараах байдлаар бичих боломжийг олгоно.

Card1 = getRandomCard(); Card2 = getRandomCard(); Card3 = getRandomCard(); Card4 = getRandomCard(); Card5 = getRandomCard();

Учир нь (int i = 0; i< 5; i++) { card[i] = getRandomCard(); }

Одоо 100 хувьсагч байгаа бол ялгааг төсөөлөөд үз дээ!

Синтакс

Массив зарлахын тулд та хоёр зүйлийг (нэрээс гадна) зааж өгөх хэрэгтэй: массивын төрөл ба хэмжээ:

Int my_array[ 6 ];

Энэ мөр нь зургаан бүхэл утгын массивыг зарладаг. Массивын хэмжээг массивын нэрний дараа дөрвөлжин хаалтанд бичнэ гэдгийг анхаарна уу.

Та массивын элементүүдэд хандахын тулд дөрвөлжин хаалт ашигладаг боловч энэ удаад та хандахыг хүсэж буй элементийнхээ индексийг зааж өгнө:

Миний_массив[ 3 ];

Та энэ үйл явцыг дараах байдлаар дүрсэлж болно.


my_array нь бүхэл массивыг хэлдэг бол my_array нь зөвхөн эхний элементийг хэлдэг бол my_array нь дөрөв дэх элементийг хэлдэг. тэрийг тэмдэглэ индексжүүлэх массив дахь элементүүд 0-ээс эхэлдэг. Иймд массивын элементүүдэд хандах нь үргэлж офсеттэй байх болно, жишээлбэл:

Int my_array[ 4 ]; // массивын мэдэгдэл my_array[ 2 ] = 2; // гурав дахь (тухайлбал гурав дахь!) утгыг 2 болгож тохируулна

C++ хэл дээр олон хэмжээст массивыг зарлах

Массивыг шатрын самбар эсвэл tic-tac-toe гэх мэт олон хэмжээст өгөгдлийг төлөөлөхөд ашиглаж болно. Олон хэмжээст өгөгдлийг ашиглах үед массивын элементүүдэд хандахын тулд олон индексийг ашиглана.

Хоёр хэмжээст массивыг зарлахын тулд та хоёр хэмжээсийн хэмжээг зааж өгөх ёстой.

Int tic_tac_toe_board;

Элементүүдийн индекс бүхий массивын дүрслэл:

Ийм массивын элементүүдэд хандахын тулд танд хоёр индекс хэрэгтэй болно - нэг нь мөрөнд, нөгөө нь баганад. Зураг нь элемент бүрт хандахад шаардлагатай индексүүдийг харуулж байна.

Массив ашиглах

Массив ашиглах үед та . Давталтыг давахын тулд хувьсагчийг 0 болгож, массивын хэмжээнээс хэтрэх хүртэл нэмэгдүүлэхэд л хангалттай.

Дараах програм нь үржүүлэх хүснэгтийг үүсгэж, үр дүнг хоёр хэмжээст массив болгон хадгалахын тулд гогцоо ашиглахыг харуулж байна.

#оруулна namespace std ашиглах; int main() ( int массив; // (int i = 0; i) шатрын самбар шиг харагдах массивыг зарлана.< 8; i++) { for (int j = 0; j < 8; j++) { array[i][j] = i * j; // Задаем значения каждого элемента } } cout << "Multiplication table:\n"; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { cout << "[ " << i << " ][ " << j << "] = "; cout << array[i][j] << " "; cout << "\n"; } } }

Массивуудыг функцууд руу дамжуулах

Таны харж байгаагаар C++ хэлний өөр өөр элементүүд хоорондоо харилцан үйлчилдэг. Гогцоонуудын нэгэн адил массивуудыг -тэй хамт хэрэглэж болно.

Массивыг функц руу дамжуулахын тулд түүний нэрийг зааж өгөхөд л хангалттай.

Int утгууд[10 ]; нийлбэр_массив(утгууд);

Мөн функцийг зарлахдаа массивыг аргумент болгон зааж өгнө үү:

Int нийлбэр_массив(int утгууд);

Бид функцийн аргументуудад массивын хэмжээг заагаагүй бөгөөд энэ нь нэг хэмжээст массивын хувьд хэмжээсийг зааж өгөх шаардлагагүй гэдгийг анхаарна уу. Хэмжээг хэзээ зааж өгөх ёстой массивуудыг зарлах , учир нь Хөрвүүлэгч нь хэр хэмжээний санах ой хуваарилахаа мэдэх шаардлагатай. Функц руу шилжихдээ бид зүгээр л байгаа массивыг дамжуулдаг, учир нь хэмжээг зааж өгөх шаардлагагүй; Бид шинээр бий болгохгүй байна. Учир нь Бид функцэд массив дамжуулдаг, функц дотор бид чадах өөрчлөх, утгаар дамждаг энгийн хувьсагчдаас ялгаатай бөгөөд энэ утгыг функц дотор өөрчлөх нь анхны хувьсагчид ямар ч байдлаар нөлөөлөхгүй.

Функц доторх массивын хэмжээг бид мэдэхгүй байгаа тул хэмжээсийг хоёр дахь аргумент болгон дамжуулах хэрэгтэй.

Int sumArray(int утгууд, int хэмжээ) ( int нийлбэр = 0; хувьд (int i = 0; i)< size; i++) { sum += values[ i ]; } return sum; }

Бид олон хэмжээст массивыг дамжуулахдаа эхнийхээс бусад бүх хэмжээсийг зааж өгөх ёстой:

Int check_tic_tac_toe(int board);

Мэдээжийн хэрэг та эхний хэмжигдэхүүнийг зааж өгч болно, гэхдээ үүнийг үл тоомсорлох болно.

Энэ сэдвийг заагчийн тухай нийтлэлд илүү дэлгэрэнгүй авч үзэх болно.

Одоохондоо массивын элементүүдийн нийлбэрийг тооцоолох функц бичье.

#оруулна namespace std ашиглах; int sumArray(int утгууд, int size) ( int sum = 0; // i == хэмжээтэй үед давталт зогсох болно, учир нь сүүлийн элементийн индекс = size - 1 for (int i = 0; i)< size; i++) { sum += values[i]; } return sum; } int main() { int values; for (int i = 0; i < 10; i++) { cout << "Enter value "<< би <<": "; cin >> утгууд[i]; ) cout<< sumArray(values, 10) << endl; }

Массивыг эрэмбэлэх

Хэрэглэгчийн оруулсан 100 тооны массивыг эрэмбэлэх асуудлыг шийдье.

#оруулна namespace std ашиглах; int main() ( int утгууд[ 100 ]; хувьд (int i = 0; i)< 100; i++) { cout << "Enter value "<< би <<": "; cin >> утгууд[ i ]; ) )

Дууслаа, энэ массивыг эрэмбэлэх л үлдлээ :) Хүмүүс ихэвчлэн массивыг хэрхэн ангилах вэ? Тэд дотроос хамгийн жижиг элементийг хайж, жагсаалтын эхэнд тавьдаг. Дараа нь тэд дараагийн хамгийн бага утгыг хайж, эхнийхийнхээ дараа шууд тавьдаг гэх мэт.

Энэ бүх зүйл нь мөчлөг шиг харагдаж байна: бид эхний элементээс эхлэн массиваар гүйж, үлдсэн хэсгээс хамгийн бага утгыг хайж, эдгээр элементүүдийг солино. Эдгээр үйлдлийг гүйцэтгэхийн тулд код бичиж эхэлцгээе:

Хүчингүй эрэмбэлэх(int массив, int хэмжээ) ( for (int i = 0; i< size; i++) { int index = findSmallestRemainingElement(array, size, i); swap(array, i, index); } }

Одоо та findSmallestRemainingElement болон swap гэсэн хоёр туслах аргыг хэрэгжүүлэх талаар бодож болно. findSmallestRemainingElement арга нь массивыг давтаж, i индексээс эхлэн хамгийн жижиг элементийг олох ёстой:

Int findSmallestRemainingElement(int array, int size, int index) ( int index_of_smallest_value = index; for (int i = index + 1; i)< size; i++) { if (array[ i ] < array[ index_of_smallest_value ]) { index_of_smallest_value = I; } } return index_of_smallest_value; }

Эцэст нь бид swap функцийг хэрэгжүүлэх хэрэгтэй. Функц нь анхны массивыг өөрчлөх тул бид түр зуурын хувьсагч ашиглан утгуудыг солиход л хангалттай.

Хүчингүй своп(int массив, int эхний_индекс, int хоёр дахь_индекс) ( int temp = массив[ эхний_индекс ]; массив[ эхний_индекс ] = массив[ хоёр дахь_индекс ]; массив[ хоёр дахь_индекс ] = температур; )

Алгоритмыг шалгахын тулд массивыг санамсаргүй тоогоор дүүргэж, эрэмбэлэх хэрэгтэй. Бүх програмын код:

#оруулна #оруулна #оруулна namespace std ашиглах; int findSmallestRemainingElement(int массив, int хэмжээ, int индекс); хүчингүй своп(int массив, int эхний_индекс, int хоёрдугаар индекс); хүчингүй эрэмбэлэх(int массив, int хэмжээ) ( for (int i = 0; i< size; i++) { int index = findSmallestRemainingElement(array, size, i); swap(array, i, index); } } int findSmallestRemainingElement(int array, int size, int index) { int index_of_smallest_value = index; for (int i = index + 1; i < size; i++) { if (array[ i ] < array[ index_of_smallest_value ]) { index_of_smallest_value = i; } } return index_of_smallest_value; } void swap(int array, int first_index, int second_index) { int temp = array[ first_index ]; array[ first_index ] = array[ second_index ]; array[ second_index ] = temp; } // вспомогательная функция для вывода массива void displayArray(int array, int size) { cout << "{"; for (int i = 0; i < size; i++) { // если элемент не первый выведем запятую if (i != 0) { cout << ", "; } cout << array[ i ]; } cout << "}"; } int main() { int array[ 10 ]; srand(time(NULL)); for (int i = 0; i < 10; i++) { array[ i ] = rand() % 100; } cout << "Original array: "; displayArray(array, 10); cout << "\n"; sort(array, 10); cout << "Sorted array: "; displayArray(array, 10); cout << "\n"; }

Бидний сая үзсэн эрэмбэлэх алгоритмыг нэрлэсэн оруулах төрөл , энэ нь хамгийн хурдан алгоритм биш боловч ойлгох, хэрэгжүүлэхэд хялбар юм. Хэрэв та их хэмжээний өгөгдлийг ангилах шаардлагатай бол илүү төвөгтэй, хурдан алгоритмуудыг ашиглах нь дээр.

Массив гэдэг нь нэг нэрийн дор нэгдсэн нэг төрлийн нүднүүдийн бүлэг хэлбэрээр дүрслэгдсэн өгөгдлийн бүтэц юм. Массивууд нь ижил төрлийн их хэмжээний өгөгдлийг боловсруулахад ашиглагддаг. Массивын нэр нь заагч гэж юу болохыг би дараа нь хэлье. Массивын бие даасан өгөгдлийн нүдийг массив элемент гэж нэрлэдэг. Массивын элементүүд нь ямар ч төрлийн өгөгдөл байж болно. Массив нь нэг буюу хэд хэдэн хэмжээстэй байж болно. Хэмжээний тооноос хамааран массивыг нэг хэмжээст массив, хоёр хэмжээст массив, гурван хэмжээст массив гэх мэтээр n хэмжээст массив хүртэл хуваана. Нэг хэмжээст ба хоёр хэмжээст массивыг програмчлалд ихэвчлэн ашигладаг тул бид зөвхөн эдгээр массивуудыг авч үзэх болно.

C++ хэл дээрх нэг хэмжээст массив

Нэг хэмжээст массив нь нэг хэмжээст массивын элементийн тоог тодорхойлдог нэг параметртэй массив юм. Үнэн хэрэгтээ нэг хэмжээст массив нь зөвхөн нэг мөр, n тооны баганатай байж болох массив юм. Нэг хэмжээст массив дахь баганууд нь массивын элементүүд юм. Зураг 1-д бүхэл тоон нэг хэмжээст массивын бүтцийг харуулав а. Энэ массивын хэмжээ нь 16 нүд юм.

Зураг 1 - C++ хэл дээрх массивууд

Нэг хэмжээст массивын хамгийн их индекс гэдгийг анхаарна уу ань 15, харин массивын хэмжээ нь 16 нүд, учир нь массивын нүднүүдийн дугаарлалт үргэлж 0-ээс эхэлдэг. Нүдний индекс нь сөрөг биш бүхэл тоо бөгөөд үүгээрээ массивын нүд бүрт хандаж, түүн дээр ямар нэгэн үйлдэл хийх боломжтой ( эс).

//С++ хэл дээр нэг хэмжээст массив зарлах синтакс: /*өгөгдлийн төрөл*/ /*нэг хэмжээст массивын нэр*/; //1-р зурагт үзүүлсэн нэг хэмжээст массивыг зарлах жишээ: int a;

Энд, int нь бүхэл тоо;

A нь нэг хэмжээст массивын нэр;
16 нь нэг хэмжээст массивын хэмжээ, 16 нүд юм.

Үргэлж массивын нэрний дараа нэг хэмжээст массивын хэмжээг зааж өгсөн дөрвөлжин хаалтууд байдаг.

//нэг хэмжээст массивыг зарлах өөр арга int mas, a;

Mas ба a гэсэн хоёр нэг хэмжээст массивыг тус тус 10 ба 16 хэмжээтэй зарласан. Нэмж дурдахад, энэ мэдэгдлийн аргын хувьд бүх массив нь ижил төрлийн өгөгдлийн төрөлтэй байх болно, манай тохиолдолд - int.

// зарласан үед массивыг эхлүүлж болно: int a = ( 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 ); // нэг хэмжээст массивыг эхлүүлэх

Нэг хэмжээст массивын эхлэлийг тэмдгийн дараа буржгар хаалтанд хийнэ тэнцүү байна, массивын элемент бүр өмнөхөөсөө таслалаар тусгаарлагдана.

Int a=(5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15); // массивын хэмжээг тодорхойлохгүйгээр эхлүүлэх.

Энэ тохиолдолд хөрвүүлэгч өөрөө нэг хэмжээст массивын хэмжээг тодорхойлно. Массивыг ердийн байдлаар зарлахдаа массивын хэмжээг зааж өгөх ёстой. Нэг хэмжээст массивыг боловсруулах энгийн программыг боловсруулцгаая.

// array.cpp: Консолын програмын нэвтрэх цэгийг тодорхойлно. #include "stdafx.h" #include << "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } system("pause"); return 0; }

// код Код::Блок

// Dev-C++ код

// array.cpp: Консолын програмын нэвтрэх цэгийг тодорхойлно. #оруулна namespace std ашиглах; int main(int argc, char* argv) ( cout<< "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } return 0; }

IN мөр 10 - 11 array1 нэртэй бүхэл тоон нэг хэмжээст массивыг зарлаж, эхлүүлсэн бөгөөд хэмжээ нь 16 нүд, өөрөөр хэлбэл ийм массив нь 16 тоог хадгалах боломжтой. Аливаа массивын боловсруулалтыг зөвхөн гогцоотой хамт хийх боломжтой. Массивыг боловсруулахад аль давталтыг сонгох нь та өөрөө шийднэ. Гэхдээ энэ ажилд хамгийн тохиромжтой. Бид тоологч хувьсагчийн тоолуурыг ашиглан нэг хэмжээст массив1-ийн элементүүдэд хандах болно. Нэг хэмжээст массив1-д арван зургаа дахь индекс байхгүй тул for давталтыг үргэлжлүүлэх нөхцөл нь тэгш бус байдлын хатуу тэмдгийг агуулна. Мөн нүднүүдийн дугаарлалт нь 0-ээс эхэлдэг тул массив дотор 16 элемент байдаг.

Obrabotka massiva индексүүд massiva массив1 5 массив1 -12 массив1 -12 массив1 9 массив1 10 массив1 0 массив1 -9 массив1 -12 массив1 -1 массив1 23 массив1 65 массив1 614 массив114 үргэлжлүүлэхийн тулд дурын товчлуурыг дарна уу. . .

Зураг 2 - C++ хэл дээрх массивууд

C++ хэл дээр нэг хэмжээст массив боловсруулах өөр програм боловсруулъя. Програм нь гарнаас оруулсан арван тоог дараалан унших ёстой. Оруулсан бүх тоонуудыг нэгтгэж, үр дүн нь дэлгэц дээр гарч ирнэ.

// array_sum.cpp: Консолын програмын нэвтрэх цэгийг тодорхойлно. #include "stdafx.h" #include << "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> << "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; system("pause"); return 0; }

// код Код::Блок

// Dev-C++ код

// array_sum.cpp: Консолын програмын нэвтрэх цэгийг тодорхойлно. #оруулна namespace std ашиглах; int main(int argc, char* argv) ( int array1; // бүхэл тооны массивыг зарлах cout<< "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> массив1; // гараас оруулсан тоонуудыг уншина<< "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; return 0; }

Массивыг боловсруулахын өмнө үүнийг зарлах ёстой бөгөөд нэг хэмжээст массивын хэмжээ 10 байх ёстой, учир нь энэ нь даалгаврын нөхцөлөөр тодорхойлогддог. Сумын хувьсагчид бид нэг хэмжээст массивын элементүүдийн нийлбэрийг хуримтлуулах болно. Эхний for давталт нь зарлагдсан нэг хэмжээст массивыг гараас оруулсан тоогоор дүүргэнэ. мөр 12 - 13. Тоолуурын хувьсагч нь нэг хэмжээст массив1-ийн элементүүдэд 0 индексээс эхлээд 9-ийг багтаасан дарааллаар хандахад ашиглагддаг. Хоёрдахь for давталт нь массивын элементүүдийг харуулна. мөр 15 - 16. Гурав дахь for давталт нь нэг хэмжээст массивын элементүүдийг дараалан уншиж, нийлбэр дүнгээр нийлбэр хувьсагчид хуримтлагдана. мөр 17 - 18. Хөтөлбөрийн үр дүнг Зураг 3-т үзүүлэв.

Элементүүдийг оруулна уу: 0 1 2 3 4 5 6 7 8 9 массив1 = (0 1 2 3 4 5 6 7 8 9 ) нийлбэр = 45 Үргэлжлүүлэхийн тулд дурын товчлуурыг дарна уу. . .

Зураг 3 - C++ хэл дээрх массивууд

Эхлээд бүх 10 тоог дараалан оруулсны дараа нэг хэмжээст массив гарч, массив дахь тоонуудын нийлбэрийг хэвлэв.

C++ хэл дээрх хоёр хэмжээст массив

Энэ хүртэл бид нэг хэмжээст массивуудыг авч үзсэн бөгөөд үүнийг үргэлж хязгаарлаж болохгүй. Хүснэгтээс зарим өгөгдлийг боловсруулах хэрэгтэй гэж бодъё. Хүснэгт нь мөрийн тоо, баганын тоо гэсэн хоёр шинж чанартай байдаг. Мөн хоёр хэмжээст массивт массивын элементийн тооноос гадна хоёр хэмжээст массивын мөрийн тоо, баганын тоо зэрэг шинж чанарууд байдаг. Өөрөөр хэлбэл, хоёр хэмжээст массив нь мөр, багана бүхий ердийн хүснэгт юм. Үнэн хэрэгтээ хоёр хэмжээст массив нь нэг хэмжээст массивуудын нэг хэмжээст массив юм. m-ээс n хэмжээтэй a нэртэй хоёр хэмжээст массивын бүтцийг доор үзүүлэв (Зураг 4-ийг үз).

Зураг 4 - C++ хэл дээрх массивууд

Энд, m нь хоёр хэмжээст массивын эгнээний тоо;
n нь хоёр хэмжээст массивын баганын тоо;
m * n - массивын элементүүдийн тоо.

// хоёр хэмжээст массивыг зарлах синтакс /*өгөгдлийн төрөл*/ /*массивын нэр*/;

Хоёр хэмжээст массивыг зарлах, мөн нэг хэмжээст массивыг зарлахдаа юуны өмнө та дараах зүйлийг зааж өгөх хэрэгтэй.

  • өгөгдлийн төрөл;
  • массивын нэр.

Үүний дараа эхний дөрвөлжин хаалт нь хоёр хэмжээст массивын эгнээний тоог, хоёр дахь дөрвөлжин хаалт нь хоёр хэмжээст массивын баганын тоог заана. Хоёр хэмжээст массив нь нэг хэмжээст массиваас хоёр дахь хос дөрвөлжин хаалтаар ялгагдана. Хоёр хэмжээст массивыг зарлах жишээг авч үзье. Бид 15-тай тэнцүү тооны элементтэй хоёр хэмжээст массив зарлах хэрэгтэй гэж бодъё.Энэ тохиолдолд хоёр хэмжээст массив нь гурван мөр таван багана эсвэл таван мөр гурван баганатай байж болно.

// хоёр хэмжээст массивын зарлалын жишээ: int a;

  • a нь бүхэл тооны массивын нэр юм
  • эхний дөрвөлжин хаалтанд байгаа тоо нь хоёр хэмжээст массивын эгнээний тоог заана, энэ тохиолдолд 5 байна;
  • хоёр дахь дөрвөлжин хаалтанд байгаа тоо нь хоёр хэмжээст массивын баганын тоог заана, энэ тохиолдолд 3 байна.

// хоёр хэмжээст массивыг эхлүүлэх: int a = ( (4, 7, 8), (9, 66, -1), (5, -5, 0), (3, -3, 30), ( 1, 1, 1));

Энэ массив нь 5 мөр, 3 баганатай. оноох тэмдгийн дараа ерөнхий буржгар хаалтуудыг байрлуулж, дотор нь хоёр хэмжээст массив дахь шугам байх ёстой хэд хэдэн хос буржгар хаалтуудыг байрлуулж, эдгээр хаалтуудыг таслалаар тусгаарлана. Хос буржгар хаалт бүрт хоёр хэмжээст массивын элементүүдийг таслалаар тусгаарлан бичнэ. Бүх буржгар хаалтанд элементүүдийн тоо ижил байх ёстой. Массив дотор таван мөр байгаа тул дотоод таван хос хаалт байна. Баганын тоо гурван тул гурван элементийг дотоод хаалтанд бичнэ. Графикийн хувьд бидний массив хоёр хэмжээст хүснэгт шиг харагдах болно (Зураг 5-ыг үз).

Зураг 5 - C++ хэл дээрх массивууд

Хоёр хэмжээст массивын нүд бүрт аутгыг харуулсан бол энэ нүдний хаягийг баруун доод буланд харуулав. Хоёр хэмжээст массивын нүдний хаяг нь массивын нэр, мөрийн дугаар, баганын дугаар юм.

Хоёр хэмжээст массивыг боловсруулах энгийн программыг "Labyrinth" гэж нэрлэе. Лабиринт нь хоёр хэмжээст массивын үндсэн дээр баригдсан байх ёстой. Бид лабиринтын хэмжээг өөрийн үзэмжээр сонгох болно.

// array2.cpp: Консолын програмын нэвтрэх цэгийг тодорхойлно. #include "stdafx.h" #include < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) эс бөгөөс<< " "; // вывести два пробела cout << endl; } system("pause"); return 0; }

// код Код::Блок

// Dev-C++ код

// array2.cpp: Консолын програмын нэвтрэх цэгийг тодорхойлно. #оруулна namespace std ашиглах; int main(int argc, char* argv) ( // 1-нөхцөлтөөр “төөрдөг байшингийн хана” // 2-“зөв зам, төөрдөг байшингаас гарах” // 0-“худал зам” int mas = ( (1, 2,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,), // хоёр хэмжээст массивыг эхлүүлэх ( 1,2,1,0 ,0,1,0,1,2,2,2,1,1,1,1,0,0,0,0,1,), (1,2,1,1 ,0,1,0, 1,2,1,2,2,2,2,1,0,1,1,0,1,), (1,2,2,2,2,2,2, 1,2,1,1 ,1,1,2,1,0,0,1,0,1,), (1,1,1,1,1,1,2,1,2,1,0 ,0,1,2, 1,1,0,1,0,1,), (1,0,0,1,0,0,2,2,2,1,1,0,0,2, 0,0,0,1 ,0,1,), (1,0,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,1 ,0,1,), (1,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,0,0,0,1,), (1,1,1, 1,1,1,0,1,1,1,2,2,2,2,1,0,1,1,1,1,), (1,1,0, 0,0,1,0 ,0,1,1,2,1,1,1,1,0,0,0,0,1,), (1,0,0,1,0,0,0 ,0,0,1, 2,2,2,2,1,1,1,1,0,1,), (1,1,1,1,1,1,1,1,1,1, 1,1,1,2 ,1,0,0,0,0,1,), (1,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,1,0,1, 1,1,1,), (1,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0, 0,0,1,) , (1,2,1,0,0,0,1,2,2,2,1,0,0,0,0,0,1,1,0,1,) , (1,2,1 ,1,1,1,1,2,1,2,1,1,1,0,1,0,0,0,0,1,), (1,2,1 ,2,2,2, 1,2,1,2,2,2,1,1,1,1,1,1,1,1,), (1,2,1,2,1,2, 1,2,1,0 ,1,2,2,2,2,2,2,2,2,1,), (1,2,1,2,1,2,1,2,1,0 ,1,1,1, 1,1,1,1,1,2,1,), (1,2,1,2,1,2,1,2,1,0,0,0,0, 0,0,0,0 ,0,2,1,), (1,2,1,2,1,2,2,2,1,0,1,1,1,1,1,1,0 ,1,2,1, ), (1,2,1,2,1,1,1,1,1,0,0,0,1,0,1,0,0,1,2,1, ), (1,2, 1,2,2,1,0,0,1,1,1,0,0,0,1,0,1,1,2,1,), (1,2, 1,1,2,1 ,1,0,0,0,0,0,1,0,1,0,0,1,2,1,), (1,2,1,1,2,1 ,0,0,1, 1,1,1,1,1,1,1,1,1,2,1,), (1,2,1,1,2,1,1,0,1, 2,2,2,2 ,2,2,2,2,2,2,1,), (1,2,1,1,2,1,0,0,1,2,1,1,1 ,1,1,1, 1,1,1,1,), (1,2,1,1,2,1,0,1,1,2,1,1,1,1,1,1, 1,1,2,2 ,), (1,2,1,1,2,1,0,0,1,2,1,1,2,2,2,2,2,2,2,1 ,), (1,2 ,1,1,2,1,0,1,1,2,1,1,2,1,1,1,1,1,1,1,), (1,2 ,1,1,2, 1,0,0,1,2,1,1,2,1,0,0,0,1,0,1,), (1,2,2,2,2, 1,0,1,1 ,2,2,2,2,0,0,1,0,0,0,1,), (1,1,1,1,1,1,1,1,1 ,1,1,1, 1,1,1,1,1,1,1,1,) ); // хоёр гогцоо - дотоод ба гадаад, массивын элемент бүрт хандах (int i = 0; i)< 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) эс бөгөөс<< " "; // вывести два пробела cout << endl; } return 0; }

Зөв ба худал замыг ижил тоогоор, жишээлбэл, тэгээр тэмдэглэж болох боловч тодорхой болгохын тулд зөв замыг 2 тоогоор тэмдэглэсэн болно. Массивыг зөвхөн програмыг хялбарчлахын тулд гараар эхлүүлсэн. Програм нь хоёр хэмжээст массивыг боловсруулдаг тул хоёр хэмжээст массивын элементүүдийн хооронд шилжихэд хоёр гогцоо хэрэгтэй. Эхний for давталт нь хоёр хэмжээст массивын мөр хооронд шилжинэ. Хоёр хэмжээст массив 33 мөртэй тул тоолуурын хувьсагч i 0-ээс 33 хүртэл нэмэгдэнэ. мөр 46. Эхний гогцооны дотор хоёр хэмжээст массивын эгнээний элементүүдээр дамжих for давталт байна. Хоёрдахь for давталтын хэсэгт нэг төрлийн өгөгдлийн төрөл хувиргах үйлдлийг дотор нь гүйцэтгэдэг - static_cast<>() , тэмдэгтийн дугаар 176 хэвлэдэг. Төөрдөгний өргөнийг нэмэгдүүлэхийн тулд өгөгдлийн төрлийг хувиргах үйлдлийг давхардсан. Хөтөлбөрийн үр дүн (Зураг 6-г үз).

Зураг 6 - C++ хэл дээрх массивууд

Сүүлийн шинэчлэлт: 2017 оны 09/17

Массив нь ижил төрлийн өгөгдлийн багцыг илэрхийлдэг. Массивын албан ёсны тодорхойлолт нь дараах байдалтай байна.

Хувьсагчийн төрлийн массивын нэр [массивын_урт]

Хувьсагчийн төрлөөс хойш массивын нэр, дараа нь дөрвөлжин хаалтанд түүний хэмжээг бичнэ. Жишээлбэл, 4 тооны массивыг тодорхойлъё:

Int тоо;

Энэ массив дөрвөн тоотой боловч эдгээр бүх тоо тодорхойгүй утгатай байна. Гэсэн хэдий ч, бид эхлүүлэх тохиргоог хийж, буржгар хаалтаар эдгээр тоонуудын анхны утгыг оноож болно:

Int тоонууд = (1,2,3,4);

Буржгар хаалтанд байгаа утгыг мөн эхлүүлэгч гэж нэрлэдэг. Хэрэв массив дахь элементүүдээс цөөн эхлүүлэгч байгаа бол эхний элементүүдэд эхлүүлэгчийг ашиглана. Хэрэв массив дахь элементүүдээс олон эхлүүлэгч байгаа бол эмхэтгэх явцад алдаа гарна.

Int тоонууд = (1, 2, 3, 4, 5, 6);

Энд массив нь 4 хэмжээтэй боловч 6 утгыг түүнд дамжуулдаг.

Хэрэв массивын хэмжээг тодорхой заагаагүй бол эхлүүлэгчийн тооноос дүгнэнэ.

Int тоонууд = (1, 2, 3, 4, 5, 6);

Энэ тохиолдолд массив нь 6 элементтэй байна.

Тэмдэгтийн массивыг эхлүүлэх нь өөрийн гэсэн шинж чанартай байдаг. Бид тэмдэгтийн массив руу эхлүүлэгчийн багц болон мөрийг хоёуланг нь дамжуулж болно:

Char s1 = ("h", "e", "l", "l", "o"); char s2 = "дэлхий";

Түүнээс гадна, хоёр дахь тохиолдолд s2 массив нь 5 элемент биш, харин 6 элементтэй байх болно, учир нь тэмдэгтийн массивыг стрингээр эхлүүлэх үед "\0" хоосон тэмдэгт автоматаар нэмэгддэг.

Энэ тохиолдолд нэг массивыг нөгөө массив руу оноохыг зөвшөөрөхгүй:

Int тоонууд1 = (1,2,3,4,5); int тоонууд2 = тоонууд1; // алдаа тоо2 = тоо1; // алдаа

Массив тодорхойлогдсоны дараа бид түүний бие даасан элементүүдэд индексээр хандах боломжтой. Индексүүд тэгээс эхэлдэг тул эхний элементэд хандахын тулд бид 0 индексийг ашиглах ёстой. Элементэд индексээр хандсанаар бид түүний утгыг авах эсвэл өөрчлөх боломжтой:

#оруулна int main() ( int тоо = (1,2,3,4); int эхний_тоо = тоо; std :: cout<< first_number << std::endl; // 1 numbers = 34; // изменяем элемент std::cout << numbers << std::endl; // 34 return 0; }

Массивын элементүүдийн тоог мөн тогтмолоор тодорхойлж болно:

Const int n = 4; int тоонууд[n] = (1,2,3,4);

Массив дээр давталт хийх

Гогцоог ашигласнаар та массивыг бүхэлд нь давтаж, индексээр дамжуулан түүний элементүүдэд хандах боломжтой.

#оруулна int main() ( int тоо = (1,2,3,4); int хэмжээ = sizeof(тоо)/sizeof(тоо); for(int i=0; i< size; i++) std::cout << numbers[i] << std::endl; return 0; }

Массиваар давталт хийхийн тулд эхлээд массивын уртыг олох хэрэгтэй. Уртыг олохын тулд sizeof операторыг ашигладаг. Үндсэндээ массивын урт нь түүний элементүүдийн нийт урттай тэнцүү байна. Бүх элементүүд ижил төрлийг төлөөлж, санах ойд ижил хэмжээтэй байна. Иймд sizeof(тоо) илэрхийллийг ашиглан бид бүх массивын уртыг байтаар, sizeof(тоо) илэрхийллийг ашиглан нэг элементийн уртыг байтаар олно. Хоёр утгыг хуваах замаар та массив дахь элементийн тоог гаргаж болно. Дараа нь for давталт ашиглан бид i тоолуур массивын урттай тэнцүү болтол бүх элементүүдийг давтана. Үүний үр дүнд массивын бүх элементүүдийг консол руу гаргах болно:

Гэхдээ цуглуулгууд, тэр дундаа массивуудтай ажиллахад тусгайлан зориулагдсан for давталтын өөр нэг хэлбэр байдаг. Энэ маягт нь дараахь албан ёсны тодорхойлолттой байна.

For(хувьсагчийн төрөл: цуглуулга) ( заавар; )

Бид энэ маягтыг массиваар давтахдаа ашигладаг:

#оруулна int main() ( int тоо = (1,2,3,4); for(int тоо: тоо) std::cout<< number << std::endl; return 0; }

Массиваар давталт хийх үед давтагдсан зүйл бүрийг тоон хувьсагчид байрлуулж, утгыг нь консол дээр давталтаар хэвлэнэ.

Хэрэв бид массив дахь объектуудын төрлийг мэдэхгүй бол төрлийг тодорхойлохын тулд автомат тодорхойлогчийг ашиглаж болно:

For(авто дугаар: тоо) std::cout<< number << std::endl;

Олон хэмжээст массив

Нэг хэмжээст массиваас гадна C++ нь олон хэмжээст массивуудтай. Ийм массивын элементүүд нь өөрөө массивууд бөгөөд тэдгээрийн элементүүд нь массив байж болно. Жишээлбэл, тоонуудын хоёр хэмжээст массивыг тодорхойлъё:

Int тоо;

Ийм массив нь гурван элементээс бүрдэх ба элемент бүр нь хоёр элементийн массивыг төлөөлдөг. Ийм массивыг эхлүүлцгээе:

Int тоонууд = ( (1, 2), (4, 5), (7, 8) );

Оруулсан буржгар хаалт нь дэд массив бүрийн элементүүдийг заана. Ийм массивыг хүснэгт хэлбэрээр илэрхийлж болно:

1 2
4 5
7 8

Та мөн эхлүүлэх үед буржгар хаалтуудыг орхиж болно:

Int тоонууд = ( 1, 2, 4, 5, 7, 8 );

Бүх элементүүдийг биш, зөвхөн заримыг нь эхлүүлэх боломжтой:

Int тоонууд = ( (1, 2), (), (7) );

Мөн үүрлэсэн массивын элементүүдэд хандахын тулд танд хоёр индекс хэрэгтэй:

Int тоонууд = ( (1, 2), (3, 4), (5, 6) ); std :: cout<< numbers << std::endl; // 3 numbers = 12; // изменение элемента std::cout << numbers << std::endl; // 12

Хоёр хэмжээст массив дээр давталт хийцгээе:

#оруулна int main() ( const int мөр = 3, багана = 2; int тоо = ( (1, 2), (3, 4), (5, 6) ); for(int i=0; i< rows; i++) { for(int j=0; j < columns; j++) { std::cout << numbers[i] [j] << "\t"; } std::cout << std::endl; } return 0; }

Та мөн олон хэмжээст массивын элементүүдийг давтахын тулд for давталтын өөр хэлбэрийг ашиглаж болно:

#оруулна int main() ( const int мөр = 3, багана = 2; int тоо = ( (1, 2), (3, 4), (5, 6) ); for(авто & дэд дугаар: тоо) ( for(int тоо) : дэд дугаарууд) ( std :: cout<< number << "\t"; } std::cout << std::endl; } return 0; }

Массивт орсон массивуудыг давтахын тулд лавлагаа ашигладаг. Өөрөөр хэлбэл, гадаад гогцоонд for(авто & дэд дугаар: тоо) & дэд дугаар нь массив дахь дэд массивын лавлагааг илэрхийлнэ. for(int number: subnumbers) дотоод гогцоонд бид дэд дугааруудын дэд массив бүрээс түүний бие даасан элементүүдийг тооны хувьсагч руу авч, утгыг нь консол руу гаргана.

Массивууд нь ижил төрлийн олон утгыг хадгалах зориулалттай. Жишээлбэл, Фаренгейтээс Цельсийн хөтөлбөрт бид гурваас дундаж температурын утгыг тооцоолсон. Хэрэв гурван утга байхгүй, гэхдээ үүнээс хамаагүй илүү байвал та массив ашиглах хэрэгтэй болно.

Массив ашиглахын өмнө та үүнийг тодорхойлох хэрэгтэй. Массивын тодорхойлолт нь: массив дотор хадгалагдсан өгөгдлийн төрөл, массивын нэр, дөрвөлжин хаалт доторх массивын элементийн тоо.

int массив;

Энэ кодонд бид int төрлийн арван элементийн танигч (нэр) массив бүхий массивыг тодорхойлсон.
Энэ хэлбэрээр массивын бүх элементүүдийг эхлүүлээгүй хэвээр байна. Зарлагдсан үед тэдгээрийг эхлүүлэхийн тулд та дараах синтаксийг ашиглах хэрэгтэй.

int массив = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

Энэ тохиолдолд массивын эхний элементэд 0, сүүлчийнх нь 9 гэсэн утгатай байна.
Та массивын элементүүдэд утгыг оноохдоо гогцоо ашиглаж болно. Үүнд хамгийн тохиромжтой нь for гогцоо байх болно.

C++ код int массив; // массивын тодорхойлолт (int i = 0; i< 10; i++) { array[i] = i; }

Энд бид массивын элемент бүрд дөрвөлжин хаалтанд байгаа индексээр дамжуулан ханддаг. Давталтын давталт бүрт тэгээс 9 хүртэлх утгыг авна.

Индекс дугаарлалт нь тэгээс эхэлдэг гэдгийг анхаарна уу. Тиймээс индексийн тоо нь массивын элементүүдийн тооноос үргэлж нэгээр бага байдаг.

Дөрвөлжин хаалт ба дэд бичээсийг эс тооцвол массив элементийг ямар ч хувьсагчийн нэгэн адил ашигладаг.

Мөр

Өнөөг хүртэл бид зөвхөн тогтмол тэмдэгт дэх мөрүүдийг хадгалах боломжтой байсан: "Тогтмол мөрийн жишээ." Бид хувьсагчдад зөвхөн нэг тэмдэгт хадгалах боломжтой - char төрөлд. C++ нь char төрлийн элементийн массив ба str төрлийн хоёр төрлийн мөр ашигладаг. Одоогоор бид эхний хувилбарт анхаарлаа хандуулах болно.

Мөрийг хадгалахын тулд бидэнд массив хэрэгтэй. Энэ нь иймэрхүү харагдаж байна:

char string = ("s","t","p","o"."k","a");

Аз болоход хялбар арга байна :)

char string = "string";

Энэ тохиолдолд долоон элементийн массив автоматаар үүсгэгдэнэ. Яагаад долоон дээр вэ? Гол нь мөр бүр хоосон байтыг илэрхийлэх тэмдэгтийн тогтмол "\0"-ээр төгсөх ёстой.

Өмнөх жишээнүүдэд хэрэв бид зургаан тэмдэгтээс илүү тэмдэгт мөр оруулахыг оролдвол массив нь халих болно. Програм ажиллаж байх үед та массивын хэмжээг өөрчлөх боломжгүй (гэхдээ үргэлж биш):

тэмдэгт мөр; // мөр нь зургаан тэмдэгт болон "\0"-г хадгалах боломжтой

string = "string!"; // мөрөнд долоон тэмдэгт орно
Үүнийг хийхийг зөвлөдөггүй :)

Би та бүхний анхаарлыг татах гэсэн бас нэг зүйл байна. Хэрэглэгч стринг оруулах үед хоосон зайг "\0" гэж тооцно. Одоохондоо бид хөтөлбөрүүддээ мөрүүдийг оруулахгүй байгаа тул би энэ хэргийг нарийвчлан тайлбарлахгүй.

Массивын массив (хоёр хэмжээст массив)

За, эцэст нь бид энэ асуудлын хамгийн чухал зүйлд хүрлээ.

Стратегийн (зөвхөн биш) тоглоомуудын газрын зураг (RTS) нь нүдэнд хуваагддаг (англи хэлээр - хавтанцар). Эдгээр эсүүдийг хоёр хэмжээст массив ашиглан дүрслэх нь тохиромжтой.

Энэ жишээнд бид pseudo_game программтай үргэлжлүүлэн ажиллах бөгөөд хоёр хэмжээст массив ашиглан тоглогч хөдөлж болох газрын зургийг дуурайна. Өнөөг хүртэл "хөдөлгөөн"-ийг x, y координат ашиглан дүрсэлж байсан.

Бид нүднүүдийг тэмдэгтээр төлөөлөх болно. "Картын" хэмжээ нь 15х20 байна. Арван таван өндөр, хорин өргөн. Бид тоглогчийг Т тэмдгээр төлөөлнө.

Эхлээд толгой файлыг нэмнэ үү stdlib.h.

Сайжруулсан псевдо_тоглоом

Би зөвхөн кодыг өгөх болно. Таны нүдэн дээр бүрэн программтай байхыг зөвлөж байна. Та үүнийг "хөтөлбөрийн жагсаалт" хэсгээс олж болно - pseudo_game_0_2. Энэ нь эмхэтгэж, ажиллуулдаг. Зүгээр л IDE-ийн засварлагч руу хуулж, текстийг дагана уу.

Өгөгдөл эхлүүлэх:

C++ кодтэмдэгт үйлдэл; // хэрэглэгчийн оролтыг унших хувьсагч int ch; // хувьсагчийн бууруулсан утгыг хадгалах хувьсагч act int x = 0; // тоглогчийн координатыг хадгалах хоёр хувьсагч int y = 0; тэмдэгт газрын зураг; // тоглоомын картыг хадгалах массив // массивыг эхлүүлэх (int i = 0; i)< 15; i++) { for (int j = 0; j < 20; j++) { map[i][j] = " "; } } map = "T";

Энд бидний хувьд шинэ оператор бол хоёр хэмжээст массивын тодорхойлолт юм. Гэхдээ энэ нь нэг хэмжээстээс бараг ялгаагүй, зүгээр л өөр нэг хос дөрвөлжин хаалт нэмнэ. Эхний хаалтанд бид мөрийн тоог, хоёр дахь нь баганын тоог зааж өгсөн.

Үүний дараа хоёр гогцоонд бид массивын элемент бүрийг " " гэсэн утгатай эхлүүлнэ. Энэ нь зөвхөн хоосон зайны тэмдэгт юм. Нэгдүгээрт, гаднах гогцоонд бид бүх эгнээ дамждаг. Дотор гогцооны мөр бүрийн хувьд бид багануудыг "дамлан" явдаг.

Дэлгэрэнгүй жишээ хэлье: гадна давталтыг хэд хэдэн удаа давталсны дараа i тоологч 9-тэй тэнцэнэ. Гаднах гогцооны бие биелж эхэлнэ: j хувьсагч (дотоод давталтын тоолуур) тэг болж эхэлж, нөхцөлийг шалгаж, дотоод гогцооны биеийг гүйцэтгэнэ: map = " ";, Өөрөөр хэлбэл, арав дахь мөрийн эхний тэмдэгт (индекс тэг) (тоолголт тэгээс байгааг бүү мартаарай) зай онооно. Дараа нь j тоолуурт 1 оноогдсон, давталтын их биеийг гүйцэтгэнэ... гэх мэтээр j тоолуур 20-той тэнцүү болтол - нөхцөл хангагдаагүй, дотоод гогцооноос гарна. Дараа нь гадаад тоолуур нэмэгдэнэ. Одоо энэ нь 10-тай тэнцэж, гаднах гогцооны бие дахин гүйцэтгэгдэнэ ...

Зайгаар эхлүүлсний дараа бид тоглоомынхоо дүрийг эхний эгнээний эхний баганад байрлуулна.

Үндсэн давталтын эхэнд бид өмнөх гаралтын дэлгэцийг арилгахын тулд system() функцийг дууддаг.

Дараа нь эхлүүлэх мөчлөгтэй төстэй хоёр мөчлөг байдаг. Эдгээр нь массивын элементүүдийг дэлгэц дээр харуулахад ашиглагддаг. Цорын ганц чухал ялгаа нь эхний давталтын биеийн төгсгөлд шинэ мөрийн тэмдэгтийн гаралт юм.

За тэгээд аль товчийг дарах нь тодорхойлогддог салбарлалт байдаг. Сүүлчийн үеэс хойш салаалсан байдал нь өөрөө бага зэрэг өөрчлөгдсөн боловч блокуудын агуулгын хувьд ялгаатай байдаг: нэгдүгээрт, бид объектын байрлах координатуудад зай өгдөг. Энэ нь бид өмнөх газрыг цэвэрлэнэ гэсэн үг. Дараа нь бид координатуудын аль нэгийг өөрчилнө. Дараа нь шинэ индекс бүхий массивын элементэд бид "T" тэмдэгтийг онооно.

"75" кодын жишээ - зүүн тийш шилжих:

C++ код if else (ch == 75) ( map[x][y] = " "; y--; map[x][y] = "T"; )

За тэгээд л болоо. Одоогийн байдлаар бид 15х20 хэмжээтэй газрын зурагтай байгаа бөгөөд та "T" үсэг болох сумыг ашиглан тэмдэгтийг шилжүүлэх боломжтой. Зургаа дахь хичээлийн хувьд муу биш! Энэ програм нь манай бүх консол програмын үндэс суурь болно. График сайжруулалт байхгүй болно. Та зүгээр л DOS консолоос илүү ихийг авч чадахгүй бөгөөд бид Windows консолыг авч үзэхгүй. Энэ нь цаг хугацаа, хүчин чармайлтыг ихээхэн хэмнэх болно.

Би pseudo_game програмын талаар дэлгэрэнгүй тайлбар хийсэн бөгөөд та үүнийг ямар ч бэрхшээлгүйгээр ойлгох болно. Үгүй бол програмын жагсаалтыг дахин уншаарай, та үүнийг ойлгох хүртлээ энэ асуудлыг ойлгохгүй байх болно :). Дасгалууд нь материалыг нэгтгэхэд тусална. Дасгал хийх нь заавал байх ёстой. Хэрэв ямар нэг зүйл ойлгомжгүй байвал миний имэйл рүү бичээрэй - би туслахыг хичээх болно.

Дасгалууд:

1. Програмын бүрэн жагсаалтад би шилжүүлэгчийн салбарлалтыг ашигласан. Нэг if салбар блокийн кодыг мөн энд харуулав. Үлдсэн if блокуудыг нэмнэ үү.

2. Одоо программ нь байхгүй массивын элементүүдэд бичиж болно. Газрын зургийн хязгаарыг орхиж байгаа эсэхийг шалгана уу.

3. Дадлага хийхийн тулд дэлгэцэн дээр тэнгисийн цэргийн тулалдааны хоёр талбарыг зурсан программыг үүсгэ. Эхнийх нь тоглогчийн хувьд, хоёр дахь нь дайсанд зориулагдсан. Хоёрдахь талбар нь эхнийхээс баруун талд байрлах ёстой.
Дотор нүднүүдийг хоосон зайгаар дүүргэ. Хүрээ зурахдаа хасах ба шулуун хуваах шугамыг ашиглана: -, |, булангийн хувьд # хэш ашиглана. Талбар бүрийн зүүн талд тоонуудын багц байна; дээр нь үсэг байна.
Талбарыг бүхэлд нь эхлүүлэхийн тулд танд хэд хэдэн гогцоо шаардлагатай байж магадгүй юм. Хоёр дахь талбар дахь тоон баганыг дүүргэх код нь дараах байдалтай байна.

C++ код int мөр; // мөрүүдийг төлөөлөх хувьсагч int багана; // багануудыг төлөөлөх хувьсагч char зураглал; багана = 15; төлөө (мөр = 2; мөр< 12; string++) { map = string - 1; }

Бид ижил төрлийн их хэмжээний өгөгдөлтэй ажиллах хэрэгтэй гэж хэлье. Жишээлбэл, бид цаг хугацааны алхамтай дүүжингийн координатыг хэдэн мянган хэмждэг. Бүх утгыг хадгалахын тулд 1000 хувьсагч үүсгэх нь маш ... төвөгтэй юм. Үүний оронд ижил төрлийн олон өгөгдлийг нэг нэрээр нэгтгэж, тодорхой элемент бүрийг серийн дугаараар нь авч болно.
Си хэл дээрх массивыг дараах байдлаар тодорхойлно
<тип> <имя массива>[<размер>];
Жишээлбэл,
int a;
Бид нэртэй массив хүлээн авах болно а, нэг зуун төрлийн элементийг агуулсан int. Хувьсагчийн нэгэн адил массив нь хог хаягдал агуулдаг.
Эхний элементэд хандахын тулд түүний дугаарыг (индекс) дөрвөлжин хаалтанд бичнэ үү. Жишээлбэл

#оруулна #оруулна void main() ( int a; a = 10; a = 333; a = 234; printf("%d %d %d", a, a, a); getch(); )

Эхний элемент нь индексийн дугаар 0. Яагаад гэдгийг ойлгох нь чухал. Дараах зүйлд бид компьютерийн санах ойг соронзон хальс хэлбэрээр дүрслэх болно. Массивын нэр нь массивын элементүүд байрлаж буй санах ойн хаягийг заагч юм.

Цагаан будаа. 1 Массив нь эхний элементийн хаягийг хадгалдаг. i элементийн индекс нь эхнээсээ i*sizeof(төрөл) байтуудын шилжилт юм.

Массивын индекс нь хүссэн элементэд хандахын тулд массивын эхнээс хэдэн байт шилжих шаардлагатайг заадаг. Жишээлбэл, хэрэв массив Атөрөлтэй int, дараа нь A бид эхлэлтэй харьцуулахад 10*sizeof(int) байт шилжүүлсэн гэсэн үг. Эхний элемент нь хамгийн эхэнд байгаа бөгөөд 0*sizeof(int) офсеттэй байна.
Си хэл дээр массив нь хэмжээгээ хадгалахгүй бөгөөд массивын индексийг зөв эсэхийг шалгадаггүй. Энэ нь та массиваас гадуур гарч, массивын сүүлчийн элементээс хол (эсвэл ойр) санах ойд хандах боломжтой гэсэн үг юм.

Массивын анхны эхлэл.

Энгийн програм бичье. Массив үүсгээд түүний хамгийн их элементийг олъё.

#оруулна #оруулна void main() ( int a = (1, 2, 5, 3, 9, 6, 7, 7, 2, 4); тэмдэггүй i; int max; max = a; (i = 1; i)<10; i++) { if (a[i] >

Нэг жишээ авч үзье. Бид эхлээд массивыг үүсгэж, үүсгэсний дараа эхлүүлнэ. Үүний дараа бид хамгийн их олсон элементийг массивын эхний элементийн утгыг онооно.

Макс = a;

Дараа нь бид массиваар дамждаг. Нэгэнт бид эхний элементийг (энэ нь 1 индекстэй) үзсэн тул дахин харах нь утгагүй болно.
Үүнтэй ижил жишээ, зөвхөн одоо хэрэглэгч утгыг оруулж байна

#оруулна #оруулна void main() ( int a; тэмдэггүй i; int max; printf("10 тоо оруулна уу\n"); for (i = 0; i<10; i++) { printf("%d. ", i); scanf("%d", &a[i]); } max = a; for (i = 1; i<10; i++) { if (a[i] >max) ( max = a[i]; ) ) printf("хамгийн их элемент нь %d", max); getch(); )

Хэрэв эхлүүлэх явцад массивын хэмжээнээс цөөн утгыг зааж өгсөн бол үлдсэн элементүүдийг тэгээр дүүргэнэ.

#оруулна #оруулна void main() ( int a = (1,2,3); тэмдэггүй i; for (i = 0; i)<10; i++) { printf("%d ", a[i]); } getch(); }

Хэрэв та массивыг бүхэлд нь тэгээр дүүргэх шаардлагатай бол бичнэ үү

Int a = (0);

Жишээлбэл, та массивын хэмжээг тодорхой зааж өгөх шаардлагагүй

Int a = (1, 2, 3);

массив нь 3 хэмжээтэй байх болно

Массивын хэмжээ

Си хэл дээрх массив тогтмол хэмжээтэй байх ёстой. Энэ нь жишээ нь хэрэглэгчээс хэмжээ асууж, дараа нь массиваар энэ хэмжээг тохируулах боломжгүй гэсэн үг юм.

Printf("Масивын уртыг оруулна уу"); scanf("%d", & урт); (х хөвөх;)

Заагч болон санах ойтой ажиллахдаа динамик массив үүсгэх талаар цаашид авч үзэх болно.
Зарим тохиолдолд та функцийг ашиглан массивын хэмжээг мэдэж болно хэмжээ.

#оруулна #оруулна void main() ( int A; //sizeof нь массивын хэмжээг бүхэлд нь байтаар буцаана //Элементийн тоог тодорхойлохын тулд // массивын хэмжээг элементийн хэмжээнд хуваана int size = sizeof(A) / sizeof(int) printf("Масивын хэмжээ нь %d", size);

Гэхдээ энэ нь ашигтай байх магадлал багатай юм. Массивыг функцэд аргумент болгон дамжуулахад заагч дамжуулагдах тул массивын хэмжээ мэдэгдэхгүй.
Статик массив нь элементүүдийн тоог урьдчилан мэдэж байх үед ашигтай байдаг. Эдгээр нь элементүүдэд хурдан боловч найдвартай нэвтрэх боломжийг олгодог.

Массив халих

Энэ код танд байгаа гэж найдаж байна

Int A; int i; хувьд (i=0; i<=10; i++) { A[i] = 1; }

Энд нэг гогцоо байна төлөөалдаагаар тодорхойлсон. Хөрвүүлэгчийн зарим хуучин хувилбаруудад энэ код давтагдах болно. Гол нь хувьсагч бинь массивын дараа шууд эмхэтгэх явцад байрлаж байсан А. Массив хил хязгаараас хэтэрсэн үед тоолуурыг 1 болгосон.
Индекстэй буруу ажиллах нь санах ойн дурын хэсэг рүү нэвтрэхэд хүргэдэг тул массивууд нь аюултай (Онолын хувьд. Орчин үеийн хөрвүүлэгчид өөр хэн нэгний санах ойд гүн гүнзгий орохгүй байхыг өөрсдөө анхаардаг).
Хэрэв та массивтай ажилладаг бол тоолуур нь массивын хэмжээнээс хэтрэхгүй, сөрөг биш гэдгийг баталгаажуулах хэрэгтэй. Үүний тулд хамгийн багадаа

  • 1. Индексжүүлэхдээ size_t төрлийг ашиглана. Энэ нь таныг сөрөг утгаас хамгаалах бөгөөд ямар ч хэмжээтэй массивын хувьд үргэлж хангалттай байх болно.
  • 2. Массив тэгээс эхэлдэг гэдгийг санаарай.
  • 3. Массивын сүүлийн элемент нь индекстэй (массивын хэмжээ 1)
Бид массивын хязгаараас хэтэрсэн эсэхийг шалгах бүрэн арга байхгүй. Тиймээс бид түүний хэмжээг яг таг мэддэг, эсвэл бид үүнийг хувьсагчид хадгалж, шаардлагатай үед уншдаг.

Жишээ

Одоо массивтай ажиллах зарим ердийн жишээг энд оруулав
1. Массивыг эргүүлнэ.

#оруулна #оруулна //Энэ бол макро. Кодын SIZE-г 10u-аар солино #define SIZE 10u void main() ( int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); тэмдэггүй i, j; // тоологч unsigned хагас // массивын дунд unsigned tmp // утгыг солилцох түр хувьсагч = SIZE / 2 // Нэг тоолуур зүүнээс баруун тийш (i = 0,); j = SIZE - 1;< half; i++, j--) { tmp = A[i]; A[i] = A[j]; A[j] = tmp; } for (i = 0; i < SIZE; i++) { printf("%d ", A[i]); } getch(); }

Энд танд танил бус загвар байна

#ХЭМЖЭЭ 10u-г тодорхойлох

макро. Кодын туршид урьдчилсан процессор нь SIZE-ийн бүх тохиолдлыг автоматаар 10u-аар солино.
2. Хэрэглэгчийн сонгосон элементийг устгах.

#оруулна #оруулна #define SIZE 10u void main() ( int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); unsigned i; //counter int index; //хэрэглэгчийн оруулсан индекс / /Гаралтын массив (i = 0; i< SIZE; i++) { printf("(%d)=%d ", i, A[i]); } //Просим пользователя ввести валидный индекс while (1) { printf("\nEnter index of element to delete "); scanf("%d", &index); if (index >0 && индекс< SIZE) { break; } } //Копируем следующий элемент массива на место удаляемого //и так до конца for (i = index; i < SIZE-1; i++) { A[i] = A; } //Выводим результат for (i = 0; i < SIZE-1; i++) { printf("(%d)=%d ", i, A[i]); } getch(); }

Энэ тохиолдолд мэдээжийн хэрэг элемент устгагдахгүй. Массив өмнөх хэмжээтэй хэвээр байна. Бид устгаж буй элементийг дараагийнх нь дарж бичээд SIZE-1 элементийг гаргана.
3. Хэрэглэгч утгыг массив руу оруулна. Үүний дараа түүний оруулсан бүх утгыг хэвлэ.
Хэрэглэгчид хязгаарлагдмал тооны элементүүдийг оруулаарай, жишээ нь 10. Дараа нь хэрэглэгч тоо оруулах бүрт 10-аас илүүгүй өөр утгууд байх болно гэдгийг урьдчилан мэдэж болно ийм дугаар оруулсан эсэх.

#оруулна #оруулна #define SIZE 10u void main() ( int A = (0); unsigned i, j; int counter = 1; //хэчнээн өөр тоо оруулсан байна. Дор хаяж нэг. int оролт; int wasntFound; //Хэмжээг нь тэмдэглэнэ үү. оруулсан дугаар олдсонгүй //Эхний дугаарыг оруулна уу printf("0.");< SIZE; i++) { printf("%d. ", i); scanf("%d", &input); wasntFound = 1; //Проверяем, встречалось ли такое число. Если да, //то выставляем флаг и выходим из цикла for (j = 0; j <= counter; j++) { if (input == A[j]) { wasntFound = 0; break; } } //Если флаг был поднят, то заносим число в массив if (wasntFound) { A = input; counter++; } } for (i = 0; i < counter; i++) { printf("%d ", A[i]); } getch(); }

4. Хэрэглэгч тоо оруулдаг - хэмжилтийн тоо (2-оос 10 хүртэл). Үүний дараа бүх хэмжилтийг оруулна. Хөтөлбөр нь дундаж утга, хэлбэлзэл, алдааг харуулдаг.

#оруулна #оруулна #оруулна #define SIZE 20u void main() ( //Оюутны коэффициентүүд хоёр хэмжээсээс эхэлнэ const float student = (12.7, 4.3, 3.2, 2.8, 2.6, 2.4, 2.4, 2.3, 2.3); float A; тэмдэггүй i; тэмдэггүй хязгаар; float sum = .0f; float relError do (printf("Хэмжилтийн тоог оруулна уу"); scanf("%u", & хязгаар); if (хязгаарлалт > 1 && хязгаар;< 11) { break; } } while(1); for (i = 0; i < limit; i++) { printf("#%d: ", i); scanf("%f", &A[i]); sum += A[i]; } mean = sum / (float)limit; sum = .0f; for (i = 0; i < limit; i++) { tmp = A[i] - mean; sum += tmp * tmp; } disp = sum / (float)limit; absError = student * sqrt(sum / (float)(limit - 1)); relError = absError / mean * 100; printf("Mean = %.6f\n", mean); printf("Dispertion = %.6f\n", disp); printf("Abs. Error = %.6f\n", absError); printf("Rel. Error = %.4f%", relError); getch(); }

5. Массивын хөөс

#оруулна #оруулна #хэмжээг тодорхойлох 10 #худал 0ийг тодорхойлох #үнэнийг тодорхойлох !false void main() ( float a = (1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 0.0) f) float tmp; unsigned i, j;< SIZE; i++) { printf("%.3f ", a[i]); } printf("\n"); //Пока массив не отсортирован do { flag = false; //Проходим по массиву. Если следующий элемент больше предыдущего, то //меняем их местами и по новой проверяем массив for (i = 1; i < SIZE; i++) { if (a[i] >a) ( tmp = a[i]; a[i] = a; a = tmp; туг = үнэн; ) ) ) while(туг == үнэн); //(i = 0; i)-д эрэмбэлэгдсэн массивыг гарга< SIZE; i++) { printf("%.3f ", a[i]); } getch(); }

6. Массивыг холино. Үүний тулд алгоритмыг ашиглацгаая