Масиви та вказівники

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
Не вказано
Факультет:
РТ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2021
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Алгоритмізація та програмування

Частина тексту файла (без зображень, графіків і формул):

Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Алгоритмізація та програмування 1: Базові концепції програмування ЗВІТ до лабораторної роботи № 4(3) «Масиви та вказівники» Варіант № 13 Дата «09» листопада, 2021 р. Завдання до роботи: 1. Створити одновимірний та двовимірний масиви. 2. Виконати початкову ініціалізацію всіх елементів масиву. 3. Виконати маніпуляції з елементами масивів. У якості індивідуального завдання необхідно написати програму, в якій, на першому етапі, користувачем задається вимірність та розмірність масиву та спосіб ініціалізації (з клавіатури/консолі або випадковими числами) елементів масиву. На другому етапі необхідно скористатися варіантом індивідуального завдання з Додатку В-4. РЕЗУЛЬТАТ РОБОТИ ПОТРІБНО: 1. Роздрукувати (вивести на екран) значення всіх елементів масиву. 2. Відкритий для редагування програмний код розмістити на сайті https://replit.com/ (посилання через кнопку «+ Share»). 3. Звіт до комп’ютерного практикуму № 4 додати в свій Клас на ресурсі https://classroom.google.com/. / Таблиця 1 Індивідуальне завдання Вказівники та масиви Вказівники – це змінні, значеннями яких є адреси пам’яті. Якщо змінна безпосередньо посилається на своє значення, то вказівник посилається на значення змінної не безпосередньо або непрямо. Він тільки володіє значенням пам’яті імені відповідної йому змінної. Посилання на значення змінної через вказівник називається непрямою адресацією. Вказівники, перед тим як будуть використовуватися в ході програми, повинні бути визначені. Наприклад: int *countPtr, count; в визначенні вище визначається змінна countPtr типу int * (вказівник на цілочисельне значення). Крім того також визначається змінна count типу int, проте символ «*» відноситься тільки до змінної countPtr. Спочатку вказівник ініціалізується нульом, або макросом NULL, який знаходиться в директиві процесора стандартної бібліотеки С - <stddef.h>, яка включається в інші директиви, наприклад: в директиву <stdio.h>. Коли значення 0 присвоюється змінній-вказівнику то здійснюється його перетворення до вказівника відповідного типу і значення 0 – це єдине значення яке може бути присвоєне вказівнику безпосередньо. Операція взяття адреси «&» являється унарною, яка повертає адресу свого операнда. присвоїть змінній-вказівнику yPtr адресу змінної у. Така операція називається розіменуванням і повертає значення об’єкту на який посилається вказівник (операнд). В даному прикладі оператор printf ("%d", *yPtr); виведе значення змінної у рівне 5. При вказівниках операції «*» і «&» доповнюють одна одну. В такому разі установку адреси змінної можна здійснювати так: yPtr = &y; і лінійка програми printf ("вивід змінної yPtr\n", *&yPtr) виведе те саме значення вказівникової змінної. Передача масивів через вказівники За допомогою вказівників можна також передавати масиви. В цьому випадку розробники програм часто використовують функцію sizeof. Вказівник може бути інкрементований (++), декрементований (--), до вказівника може бути прибавлене ціле число (+ або +=) і з вказівника може бути відняте ціле число (- або -=). Для пояснення припустимо, що ми маємо справу із вказівником типу int, під який резервується 4 байти. Нехай вказівник yPtr приймає значення адреси пам’яті 3000. Тоді оператор yPtr +=2 дасть результат: 3000+2*4=3008. Дії ++yPtr або yPtr++ та -- yPtr або yPtr -- при застосуванні в масивах будуть давати можливість вказівнику отримувати значення пам’яті на наступний і попередній елементи масиву. Якщо ми маємо масив b[10] теж типу int, наприклад, то вказівник bPtr[1] буде вказувати на 1-ий елемент масиву b. Масиви також можуть складатися із вказівників, які часто можуть утворювати масив . При ініціалізації масиву: char *suit[4] = {"Hearts","Diamonds","Clubs","Spades"}; вираз suit[4] визначає масив з 4-х елементів. Специфікацією char * цей масив об’являється як масив вказівників на тип char. В масиві розміщені 4 значення: "Hearts", "Diamonds", "Clubs" і "Spades" як символьні лінійки, які зберігаються в пам’яті і в кінці яких значення «нуль» фіксує кінець кожної символьної лінійки. Тобто кожна лінійка вміщає на 1 символ більше. Відповідно, ці символьні лінійки займають в пам’яті 7, 9, 6, і 7 байт. Елементами масиву являються вказівники. Для прикладу наведемо програму перетворення нижнього регістру символів у верхній. Передача масивів через вказівники За допомогою вказівників можна також передавати масиви. В цьому випадку розробники програм часто використовують функцію sizeof. Вказівник може бути інкрементований (++), декрементований (--), до вказівника може бути прибавлене ціле число (+ або +=) і з вказівника може бути відняте ціле число (- або -=). Алгоритм роботи програми Програма має дві поведінки в залежності від вимірності масиву, яку обирає користувач. У випадку одновимірного масиву користувач має вибір або власноруч надати значення елементам масиву, або випадково заповнити масив. Після ініціалізації користувач вводить індекс елемента масиву, який буде видалений. Якщо обирається двовимірний масив, то користувач знов вибирає спосіб ініціалізації матриці, після чого вводить елементи нового рядка. Цей рядок додається до нової матриці, рядків якої m + 1. Отримаємо матрицю із доданим рядком. / Рисунок 1 Блок-схема / Рисунок 2 Результат 1 / Рисунок 3 Результат 2 Висновки: ознайомався із багатовимірними масивами та навчився маніпулювати ними за допомогою індексів та вказівників. За допомогою циклів навчився як записувати дані в масив, так і виводити значення елементів масиву. Отримано навички створення двовимірних масивів та маніпуляції над ними, як над матрицями, що є дуже важливим для засвоєння основ програмування. Додаток (програмний код) https://replit.com/join/snggwrnhik-tr-15-turlak-sergei int index; //індекс елементу, який треба видалити int new_arr[size - 1]; for (int i = 0; i < size; i++) { if (i < index) { *(new_arr + i) = arr[i]; } else if (i > index) { *(new_arr + i - 1) = arr[i]; } } //друге завдання int new_arr[m+1][n]; for (int i = 0; i < m+1; i++) { for (int j = 0; j < n; j++) { if (i == 0) { *(*(new_arr + i) + j) = new_row[j]; } else { *(*(new_arr + i) + j) = arr[i-1][j]; } } }
Антиботан аватар за замовчуванням

12.06.2023 15:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!