Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Ch3.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
608.77 Кб
Скачать

Лабораторна робота № 12. Використання покажчиків для обробки масивів

Мета роботи:

  • Навчитися обробляти одновимірні масиви, використовуючи покажчики.

  • Ознайомитися з особливостями обробки масивів символів з використанням покажчиків.

  • Навчитися оперувати з двовимірними масивами за допомогою покажчиків.

  • Створити програму для обробки різних типів масивів використовуючи покажчики.

Короткі теоретичні відомості

Можливість використання покажчиків для звертання до елементів масивів пов’язана з тим, що ім’я масиву є константним покажчиком на перший елемент масиву. Таким чином, якщо маємо оголошення масиву:

int a[10];

то звертання *а дає той самий результат, що й a[0]. Звертання *(а+3) дасть той самий результат, що й a[3].

11.1.6Приклад формування одновимірного масиву з використанням покажчиків

Нижче наведено приклад створення масиву для збереження чисел Фібоначчі, який розглядався у лабораторній роботі номер 7. Два перших числа Фібоначчі рівні 0 та 1, а кожне наступне дорівнює сумі двох попередніх. У програмі перші 2 елементи масиву заповнюються до циклу, решта - в циклі.

int a[10];

*a = 0;

*(a+1) = 1;

for (i=2 ; i<10; i++)

*(a+i) = *(a + i – 2) + *(a + i – 1);

У цьому прикладі доступ до елементів масиву здійснюється за допомогою покажчиків, але самі покажчики формуються за допомогою операцій адресної арифметики з використанням адреси масиву та індексу елементів i, що формується у циклі for.

Але частіше для обробки елементів масиву використовуються додаткові покажчики. За звичай один такий покажчик вказує на кінець масиву, а другий, поточний, формується у циклі for.

Нижче наведено такий варіант формування масив чисел Фібоначчі.

int n=10, a[n], *pCurrent, *pEnd;

pEnd = a+n;

pCurrent = a;

*pCurrent++ = 0;

*pCurrent++ = 1;

for ( ; pCurrent <pEnd; pCurrent ++)

* pCurrent = *( pCurrent – 2) + *( pCurrent – 1);

11.1.7Робота з масивами символів через покажчики

Так само як и у випадку числового масиву, ім’я символьного масиву є константним покажчиком на перший символ. Тому для обробки символьних рядків теж можна використовувати покажчики, так само, як і для масивів чисел. Обробка навіть дещо спрощується завдяки тому, що кожний рядок закінчується спеціальним символом ‘\0’.

У якості прикладу розглянемо функцію пошуку позиції, з якої комбінація символів sub знаходиться у рядку str:

int posInStr( char *str, char *sub){

char *p1, *p2, *p3;

for(p1=str; ; p1++){

for(p2=sub, p3=p1; *p2 != '\0' && *p3 != '\0' && *p2 == *p3 ; p2++, p3++);

if(*p2=='\0')return p1-str;

if(*p3=='\0')return -1;

}

}

В якості параметрів до цієї функції передаються покажчики на рядок і комбінацію символів.

Зовнішній цикл for забезпечує послідовне переміщення по символах рядка.

Внутрішній цикл, який не має тіла, забезпечує порівняння символів комбінації із символами рядка, починаючи з поточного. Він має три умови завершення.

Якщо поточні символи комбінації і рядка не співпадають, відбувається перехід до зовнішнього циклу.

Якщо під час цього порівняння знайдено кінець комбінації то це означає, що комбінація входить до складу рядка, і функція повертає відстань між поточним символом рядка і його початком.

Якщо знайдено кінець рядка, то повертається ознака того, що комбінація не входить до рядка.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]