- •ВВЕДЕННЯ
- •Лабораторна робота № 1
- •1.1.Теоретична частина.
- •1.2. Запитання для контролю.
- •1.3. Завдання до лабораторної роботи № 1.
- •Лабораторна робота № 2
- •Лабораторна робота № 3
- •1.1.Теоретична частина.
- •1.2.Завдання до контрольної роботи № 3
- •Лабораторна робота № 4
- •1.1.Теоретична частина.
- •1.2. Запитання для контролю.
- •1.3. Запитання для контролю
- •1.4. Завдання до лабораторної роботи № 4
- •Лабораторна робота № 5
- •1.1.Теоретична частина
- •1.2 Запитання для контролю.
- •1.3.Завдання до контрольної роботи № 5
- •Лабораторна робота № 6
- •1.1.Теоретична частина
- •1.2.Запитання для контролю
- •1.3.Завдання до контрольної роботи № 6
- •Лабораторна робота № 7
- •1.1.Теоретична частина
- •1.2. Запитання для контролю
- •1.3. Завдання до лабораторної роботи№ 7
- •Лабораторна робота № 8
- •1.1.Теоретична частина
- •1.2. Запитання для контролю
- •1.3. Завдання для контрольної роботи № 8
- •Лабораторна робота № 9
- •1.1.Теоретична частина
- •Литература.
Лабораторна робота № 7
Обробка двовимірних масивів (з використанням покажчиків )
1.1.Теоретична частина
Покажчик - це адреса пам'яті, що розподіляється для розміщення ідентифікатора (як ідентифікатор може виступати ім'я перемінної, масиву, структури, строкового литерала). У тому випадку, якщо перемінна оголошена як покажчик, то вона містить адресу пам'яті, по якому може знаходиться скалярна величина будь-якого типу. При оголошенні перемінної типу покажчик, необхідно визначити тип об'єкта даних, адреса яких буде містити перемінна, і ім'я покажчика з попередньою зірочкою (або групою зірочок). Формат оголошення покажчика:
Специфікатор типу [ модифікатор ] * описувач .
Специфікатор типу задає тип об'єкта і може бути будь-якого основного типу, типу структури, суміші (про це буде сказано нижче). Задаючи замість специфікатора типу ключове слово void, можна своєрідним чином відстроїти специфікацію типу, на який посилається покажчик. Перемінна, що повідомляється як покажчик на тип void, може бути використана для посилання на об'єкт будь-якого типу. Однак для того, щоб можна було виконати арифметичні і логічні операції над покажчиками або над об'єктами, на які вони вказують, необхідно при виконанні кожної операції явно визначити тип об'єктів. Такі визначення типів може бути виконане за допомогою операції приведення типів.
Як модифікатори при оголошенні покажчика можуть виступати ключові слова const, near, far, huge. Ключове слово const указує, що покажчик не може бути змінений у програмі. Розмір перемінної оголошеної як покажчик, залежить від архітектури комп'ютера і від використовуваної моделі пам'яті, для якої буде компілюватися програма. Покажчики на різні типи даних не обов'язково повинні мати однакову довжину.
Приклади:
unsigned int * a; /* перемінна а являє собою покажчик
|
на тип unsigned int (цілі числа без знака) */ |
double * x; |
/* перемінна х указує на тип даних з |
|
крапкою подвоєної точності */ |
char * fuffer ; |
/* з'являється покажчик з ім'ям fuffer |
|
який указує на перемінну типу char */ |
double nomer; void *addres; addres = & nomer;
(double *)addres ++;
/* Перемінна addres оголошена як покажчик на об'єкт будь-якого типу. Тому їй можна привласнити адреса будь-якого об'єкта (& - операція обчислення адреси). Однак, як було відзначено вище, жодна арифмитическая операція не може бути виконана над покажчиком, поки не буде явно визначений тип даних, на які він указує. Це можна зробити, використовуючи операцію приведення типу (double *) для перетворення addres до покажчика на тип double, а потім збільшення адреси. */
Методи доступу до елементів масивів У мові Сі між покажчиками і масивами існує тісний зв'язок. Наприклад, коли
з'являється масив у виді int array[25], то цим визначається не тільки виділення пам'яті для двадцяти п'яти елементів масиву, але і для покажчика з ім'ям array, значення якого дорівнює адресі першого (нульового) елемента масиву, тобто сам масив залишається безіменним, а доступ до елементів масиву здійснюється через покажчик з ім'ям array. З погляду
синтаксису мови покажчик arrey є константою, значення якої можна використовувати у вираженнях, але змінити це значення не можна.
Оскільки ім'я масиву є покажчиком припустимо, наприклад, таке присвоювання: int arrey[25];
int *ptr; ptr=array;
Тут покажчик ptr установлюється на адресу першого елемента масиву, причому присвоювання ptr=arrey можна записати в еквівалентній формі ptr=&arrey[0].
Для доступу до елементів масиву їснує два різних способи. Перший спосіб зв'язаний з використанням звичайних індексних виражень у квадратних дужках, наприклад, А[16]=3 або В[і+2]=7. При такому способі доступу записуються два вираження, причому друге вираження полягає в квадратні дужки. Одне з цих виражень повинне бути покажчиком, а друге - вираженням цілого типу. Послідовність запису цих виражень може бути будь-якою, але в квадратних дужках записується вираження наступне другим. Тому записи array[16] і 16[array] будуть еквівалентними і позначають елемент масиву з номером шістнадцять. Покажчик використовуваний в індексному вираженні не обов'язково повинний бути константою, що вказує на який-небудь масив, це може бути і перемінна. Зокрема, після виконання присвоювання ptr=array доступ до шістнадцятого елемента масиву можна одержати за допомогою покажчика ptr у формі ptr[16] або 16[ptr].
Другий спосіб доступу до елементів масиву зв'язаний з використанням адресних виражень і операції разадресації у формі *(array+16)=3 або *(array+і+2)=7. При такому способі доступу адресне вираження рівне адресі шістнадцятого елемента масиву теж може бути записано різними способами *(array+16) або *(16+array).
При реалізації на комп'ютері перший спосіб приводиться до другого, тобто індексне вираження перетвориться до адресного. Для приведених прикладів array[16] і 16[array] перетворяться в *(array+16).
Для доступу до початкового елемента масиву (тобто до елемента з нульовим індексом) можна використовувати просте значення покажчика array або ptr. Кожне з присвоювань
*array = 2; array[0] = 2; *(array+0) = 2; *ptr = 2; ptr[0] = 2; *(ptr+0) = 2;
привласнює початковому елементові масиву значення 2, але швидше всего виконаються присвоювання *array=2 і *ptr=2, тому що в них не потрібно виконувати операції додавання.
Покажчики на багатомірні масиви Покажчики на багатомірні масиви в мові Сі - це масиви масивів, тобто такі масиви,
елементами яких є масиви. При оголошенні таких масивів у пам'яті комп'ютера створюється кілька різних об'єктів. Наприклад при виконанні оголошення двовимірного масиву int arr2[4][3] у пам'яті виділяється ділянка для збереження значення перемінної arr, що є покажчиком на масив з чотирьох покажчиків. Для цього масиву з чотирьох покажчиків теж виділяється пам'ять. Кожний з цих чотирьох покажчиків містить адресу масиву з трьох елементів типу int, і, отже, у пам'яті комп'ютера виділяється чотири ділянки для збереження чотирьох масивів чисел типу int, кожний з яких складається з трьох елементів.
Таким чином, оголошення arr2[4][3] породжує в програмі три різних об'єкти: покажчик з ідентифікатором arr, безіменний масив з чотирьох покажчиків і безіменний масив із дванадцяти чисел типу int. Для доступу до безіменних масивів використовуються адресні вираження з покажчиком arr. Доступ до елементів масиву покажчиків здійснюється з вказівкою одного індексного вираження у формі arr2[2] або *(arr2+2). Для доступу до
елементів двовимірного масиву чисел типу int повинні бути використані два індексних вираження у формі arr2[1][2] або еквівалентних їй *(*(arr2+1)+2) і (*(arr2+1))[2]. Варто враховувати, що з погляду синтаксису мови Сі покажчик arr і покажчики arr[0], arr[1], arr[2], arr[3] є константами і їхнього значення не можна змінювати під час виконання програми.
При розміщенні елементів багатомірних масивів вони розташовуються в пам'яті підряд по рядках, тобто швидше всього змінюється останній індекс, а повільніше - перший. Такий порядок дає можливість звертатися до будь-якого елемента багатомірного масиву, використовуючи адресу його початкового елемента і тільки одне індексне вираження.
Наприклад, звертання до елемента arr2[1][2] можна здійснити за допомогою покажчика ptr2, оголошеного у формі int *ptr2=arr2[0] як звертання ptr2[1*4+2] (тут 1 і 2 це індекси використовуваного елемента, а 4 це число елементів у рядку) або як ptr2[6]. Помітимо, що зовні схоже звертання arr2[6] виконати неможливо тому що покажчика з індексом 6 не існує.
1.2. Запитання для контролю
Як оголошується покажчик? Чим є ім'я масиву?
Як размещяются в пам'яті елементи багатомірного масиву?
1.3. Завдання до лабораторної роботи№ 7
Варіант |
Завдання |
Скласти схему алгоритму і програму рішення задачі з використанням підпрограми і покажчиків. Передбачити вивод вихідних даних і результатів.
1.Визначити суму S елементів цілого масиву А, розмірності 12, розташованих за 3 - м від’ємним елементом розділити отриману суму на 12! (факторіал). Факторіал обчислювати за допомогою підпрограми .
2.Дано матрицю М розмірності 5× 5. Визначити суму елементів усієї матриці , якщо перший рядок має менше 2 - х нульових елементів, в противному випадку видати відповідне повідомлення. Визначення суми здійснити за допомогою підпрограми.
3.У двовимірному масиві знайти рядок з найменшим добутком елементів. Розмірність масиву 5× 6. Добуток визначати за допомогою підпрограми
.
4.Дано масив з 10 чисел. Обчислити, скільки елементів у масиві перевищують число А, знайти максимальний елемент масиву і його номер. Максимальний елемент знаходити в підпрограмі .
5.Дано цілі числа А и масив х1 , х2 ,…х. 20 Якщо в послідовності Х є два елементи рівних А, то одержати суму елементів, що розташовані за другим таким елементом, у противному випадку визначити суму всіх елементів масиву Х. Суму обчислити використовуючи підпрограму .
6.Дано цілу квадратну матрицю А порядку 9. У рядках які починаються з від’ємних елементів, знайти суми елементів розташованих вище головної діагоналі. Для обчислення суми використовувати підпрограми .
7.Дано матрицю М розмірністю 6× 6. Рядки матриці, утримуючі хоча б один від’ємний елемент, упорядкувати по зростанню, інші по убуванню. Ці дії робити в підпрограмі.
8.У квадратній матриці А розмірністю 5× 5. Знайти максимальний елемент серед мінімальних по рядках. Пошук мінімальних елементів здійснювати за допомогою підпрограми .
9.У двовимірному масиві А(7,7) переставити місцями рядок, у якому знаходиться найбільша кількість від’ємних елементів, з рядком, у якому знаходиться найменша їх кількість. Підрахунок кількості від’ємних елементів виробляється в підпрограмі .
10.Скласти програму, що заміняє нульові елементи одного масиву черговим у порядку зростання індексів елементами другого. Утворити третій масив, елементами якого є суми відповідних елементів першого і другого масивів. Суми визначати в підпрограмі .
11.Обчислити значення функції Z = X K1 Y K2 (S1 +S 2 ), де S1і К2 – сума і кількість додатних елементів масиву
а1 ,а2 ,…a10 ;
S2 і K2 - сума і кількість додатних елементів масиву b1 , b 2 ,…b10 ; Х і Y -задані числа. Для обчислення S1, S2, K1,K2 використовувати підпрограму.
12.У двовимірному масиві А розмірності 5× 5 знайти рядок з найменшою кількістю нульових елементів. Визначити суму елементів цього рядка, використовуючи підпрограму
13.У заданій матриці Х розміром 4× 5. Визначити суму максимальних значень кожного рядка і порахувати кількість від‘ємних елементів у кожнім рядку, використовуючи підпрограму .
14.Дано квадратну матрицю А розмірністю 5. Розташувати елементи кожного рядка заданої матриці по убуванню. В отриманій матриці знайти максимальний елемент серед елементів, розташованих на головній діагоналі використовуючи підпрограму.
15.Дано масив з 10 чисел. Знайти максимальний елемент серед від’ємних елементів. Поміняти місцями максимальний і останній елементи. Максимальний елемент знаходити в підпрограмі .
16.Дано дві квадратні матриці А и В розмірністю 5× 5. Одержати дві
послідовності х={х1 , х2 ,…х5 } і y={у1 , у2 ,…у5 }, компонентами яких є:
а) для хk - найбільшi зі значень кожного рядка матриці А;
в) для в - число від’ємних елементів у кожнім рядку матриці В; пошук найбільшого елемента робити в підпрограмі .
17.У матриці А розмірністю 5× 5 знайти найбільший елемент серед елементів головної діагоналі і замінити їм усі від’ємні елементи. Порахувати кількість замін. Пошук найбільшого елемента робити в підпрограмі .
18.Задано чисельний масив а1 , а2 ,…а20 . Найменший елемент масиву замінити средньоарифметичним всіх елементів масиву. Середнє арифметичне обчислювати за допомогою підпрограми .
19.У матриці В розмірністю 5× 5, знайти рядок з найменшим добутком елементів. Добуток обчислювати за допомогою підпрограми.
20.Дано одномірний масив з 10чисел. Обчислити добуток додатних елементів масиву. Знайти максимальний елемент масиву і замінити їм усі від’ємніні елементи. Максимальний елемент знаходити за допомогою підпрограми .
21.Дано масив з 15 чисел. Якщо в масиві більше 3-х від’ємних чисел, обчислити середнє арифметичне цього масиву, якщо менше - обчислити суму додатних чисел і розділити її на максимальний елемент. Обчислення суми робити в підпрограмі .
22.Дано масив чисел з 10 елементів. Знайти максимальний і мінімальний елементи масиву і поміняти їх місцями. Знайти середнє арифметичне додатних елементів масиву за допомогою підпрограми.
23.Дано масив з 20 чисел. Знайти другий від’ємний елемент у масиві й обчислити суму елементів - перед ним. Якщо такого елемента нема, вивести відповідне повідомлення. Суму обчислювати в підпрограмі .
25.Задано двовимірний масив чисел А розмірністю 6× 6. Обчислити суму і кількість елементів розташованих між максимальним і мінімальним елементами матриці. Суму і кількість обчислювати в підпрограмі.
26.Дано одномірний масив чисел Х розмірністю 15. Якщо в масиві більше додатних елементів, то обчислювати суму всіх елементів масиву, якщо ж більше від’ємних, то обчислити суму перших 10 елементів. Для обчислення суми використовувати підпрограму .
27.Дано матрицю Z розмірністю 6× 6. Утворити одномірний масив Р розмірності 6, кожним елементом якого є добуток елементів стовпців матриці Z. Знайти в ньому максимальний елемент. Обчислити добуток за допомогою підпрограми .
28.У двовимірному масиві R розмірністю 6× 5 обчислити добутки тих рядків, що починаються з додатних елементів і суми елементів тих рядків, що починаються з від’ємних елементів. Обчислення суми і добутку робити в підпрограмі.
29.Задано двовимірний масив чисел Х розмірністю 5х4. Знайти рядок з найменшим елементом масиву й обчислити добуток її від’ємних елементів і їхню кількість. Добуток і кількість знайти за допомогою підпрограми.
30.Задано двовимірний масив чисел У розмірністю 6× 6. Обчислити три суми: елементів, розташованих на головній діагоналі, над нею і під нею. Визначити найбільшу з цих сум. Суми підрахувати в підпрограмі .
31.Задано два одномірних масиви чисел А розмірністю 10 і В розмірністю 15. Обчислити суму максимальних елементів цих масивів і добуток їхніх мінімальних елементів. Обчислення максимальних і мінімальних елементів робити в підпрограмі .
32.Задано одномірний масив А, розмірністю 12. Обчислювати суму всіх елементів масиву, якщо в ньому більше трьох від’ємних елементів, суму перших 10-ти елементів, якщо в ньому менше 3-х від’ємних елементів, і суму перших 7 елементів, якщо в ньому немає від’ємних елементів. Обчислення суми робити в підпрограмі .
33.Задано двовимірний масив чисел Z розмірністю 5× 5. Утворити новий масив А, елементами якого є максимальні елементи стовпців масиву Z. Використовуючи підпрограму обчислити суму і добуток елементів масиву А.
34.Задано двовимірний масив чисел А розмірністю 6× 6. Знайти мінімальний елемент серед елементів головної діагоналі і порахувати суму і кількість від’ємних елементів стовпця, у якому знаходиться цей мінімальний елемент. Суму і кількість обчислювати в підпрограмі .
35.У квадратній матриці Z розмірністю 5× 5 поміняти місцями стовпець, у якому знаходиться мінімальний елемент зі стовпцем, у якому знаходиться максимальний. Максимальний і мінімальний елементи знайти за допомогою підпрограми.
36.Задано два одномірних масиви чисел Р и R розмірністю 10. Обчислити суми додатних елементів цих масивів і їхню кількість. У масиві з більшою сумою елементів поміняти місцями максимальний і мінімальний елементи. Обчислення суми і кількості робити в підпрограмі .
37.Задано матрицю Z розмірністю 5× 6. Переставити стовпці матриці таким чином, щоб вони розташовувалися в порядку зростання в них кількості негативних елементів. Підрахунок кількості негативних елементів робити в підпрограмі .
38.Задано одномірний масив А з 15чисел. Обчислити суму і кількість елементів розташованих між першими й останнім від’ємними числами масиву. Упорядкувати елементи масиву в порядку зростання. Суму і кількість обчислювати в підпрограмі .
39.Задано дві квадратні матриці А и В розмірністю 3× 3. У матриці, у якої більше добуток елементів головної діагоналі, поміняти місцями рядки і стовпці, в іншій матриці поміняти місцями 1-й і 3-й стовпці. Добуток елементів обчислювати в підпрограмі .
40.Задано матрицю чисел А розмірністю 5× 6. Рядки, у яких кількість від’ємних елементів більше 2-х упорядкувати по убуванню, інші - по зростанню. Кількість від’ємних елементів підрахувати в підпрограмі .
41.Задано матрицю G розмірністю 4× 5. У кожнім стовпці матриці знайти максимальний елемент і замінити їм від’ємні елементи цього стовпця. Максимальний елемент знаходити за допомогою підпрограми .
42.Задано одномірний масив чисел Е(16). Утворити масив А, елементами якого будуть різниці сусідніх парних і непарних елементів масиву Е. У масиві А порахувати суму і кількість додатних елементів, використовуючи підпрограму .
43.Дано дійсний масив чисел з 15 елементів. Обчислити різницю між максимальним і мінімальним елементами в масиві і розділити її на добуток елементів, розташованих між ними. Добуток обчислювати в підпрограмі .
44.Дано одномірний масив чисел з 10 елементів. Обчислити середнє арифметичне додатних елементів масиву і кількість елементів більших цього середнього. Упорядкувати масив по зростанню. Середнє арифметичне обчислювати в підпрограмі .
45.У двовимірному масиві Z(5,6) переставити місцями стовпець, у якому знаходиться найбільша кількість нульових елементів зі стовпцем, у якому знаходиться найменша кількість нульових елементів. Підрахунок кількості нульових елементів обчислити в підпрограмі .
46.У двовимірному масиві А(4,5) знайти стовпець з найменшим добутком елементів і упорядкувати його по убуванню. Добуток обчислювати в підпрограмі .
47.Задано одномірний масив чисел У (12). Якщо в масиві менше чотирьох від’ємних чисел, обчислити середнє арифметичне цього масиву, якщо більше - обчислити добуток додатних чисел і розділити його на мінімальний елемент. Підрахунок кількості від’ємних чисел робити в підпрограмі .
48.Дано матрицю Х 3× 5. Обчислити добуток і кількість додатних елементів стовпців матриці. Стовпець, у якому найбільша кількість додатних елементів, переставити на місце 1-го стовпця. Добуток і кількість обчислювати в підпрограмі .
49.Задано одномірний масив чисел D(10). Обчислити суму і кількість елементів, що розташовані після 2-го від’ємного елемента. Якщо їх менше 5-и, упорядкувати елементи масиву по убуванню, якщо більше 5- ти - по зростанню. Суму і кількість обчислювати в підпрограмі.
50.Задано матрицю R (5× 5). Обчислити середнє арифметичне елементів матриці, розташованих нижче головної діагоналі і максимальний елемент серед елементів головної діагоналі. Рядок, де знаходиться максимальний елемент поміняти місцями з першим рядком матриці. Середнє арифметичне обчислювати в підпрограмі .
