Програмування С, С++теорія та практика (частина 1)
1.10.1 Робота з великими масивами
Розмір одного масиву даних повинний бути не більше 64 Кб. Але в реальних задачах можуть використовуватися масиви, що вимагають ОП, більшої ніж 64 Кб. Наприклад, масив даних типу/Іоаі з 300 рядків і 200 стовпців потребує для розміщення 300 * 200 * 4 = 240000 байтів.
Для вирішення поставленої задачі можна використовувати масив покажчиків і динамічне виділення ОП для кожного рядка матриці. Рядок матриці не повинен перевищувати 64 Кб. У вищенаведеному прикладі ОП для рядка складає всього 800 байтів. Для виділення ОП з купи кожен рядок повинний мати покажчик. Для всіх рядків масиву треба оголосити масив покажчиків, по одному для кожного рядка. Потім кожному рядку масиву виділити ОП, привласнивши кожному елементу масиву покажчиків адресу початку розміщення рядка в ОП, і заповнити цей масив.
У запропонованому лістингу представлена програма для роботи з великим масивом цілих значень: з 300 рядків і 200 стовпців. Для розміщення він вимагає: 200 * 300 * 2 = 120000 байтів. При формуванні великого масиву використовується р - статичний масив покажчиків
При виконанні програми перебираються і-номери рядків масиву. Для кожного рядка за допомогою функції таІІос() виконується запит ОП з купи і формується р[і] - значення покажчика на дані і-рядки. Потім перебираються і-номери рядків від 1 до 200. Для кожного рядка перебираються ] -номери стовпчиків від 1 до 300. Для кожного і та ] за допомогою генератора випадкових чисел формуються і виводяться *(р[і] + _)) - значення елементів масиву. Після обробки масиву за допомогою функції &ее(р[і]) звільняється ОП виділена і-рядку масиву.
У наведеній нижче програмі використовуються звертання до Ау - елементів масиву у вигляді: *(р[і]+і), де р[і] +] - адреса Ау-елемента масиву.
#іпс1ийе <сопіо.Ь>
#іпс1ийе <з,Ьгі1іЬ.Ь>
#іпс1ийе <з,Ьгііо.Ь>
Vоій. таіп ()
{
іп£ *р[200], і, і; с1гзсг() ; гапйотіге();
£ог (і=0;і<200;і++)
/* Запит ОП для рядків великого масиву: */
р[і] = (іп£*) та11ос (300 * зігео£ (іп£)) ;
£ог (і = 0; і < 200; і++)
£ог (і = 0; і < 300; ]++ )
{
*(р[і] + і ) = гапйот(100) ; ргіп££("%3гі", * (р [і] + і )); і£ ( (і + 1) % 20 == 0 ) ргіп££ ("\п" ) ;
}
/* Звільння ОП рядків великого масиву: */
£ог ( і=0; і < 200; і++ )
£гее( р[і] );
}
У програмі використовується р - масив покажчиків.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
Схожі підручники
- Легкий способ бросить курить
- Міжнародні економічні зв’язки України та її інтеграція в європейські та інші світові структури
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 9) онлайн
- НАВЧАЛЬНИЙ ПОСІБНИК ГРОШІ ТА КРЕДИТ теорія і практика (частина 1)
- МЕТОДИЧНІ ВКАЗІВКИ ДO ВИКОНАННЯ ІНДИВІДУАЛЬНИХ ЗАВДАНЬ З КУРСУ «Професійна психологія та конфліктологія»
- Методичка з курсу Політологія
