Головна

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

  1. II. Основні методи збору соціологічної інформації, їх коротка характеристика.
  2. II. Теоретична частина.
  3. V. КЛАСИФІКАЦІЯ І СУЧАСНИЙ СТАН НАДЗВИЧАЙНИХ СИТУАЦІЙ
  4. В. 2. КОРОТКА ІСТОРИЧНА ДОВІДКА І МАТЕМАТИЧНИЙ АПАРАТ ТЕОРІЇ НАДІЙНОСТІ
  5. Вступ. Історична довідка.
  6. Гемотрансфузіологіі. Визначення поняття, спеціальність. коротка історія
  7. Геологія як наука. Коротка історія її виникнення та розвитку. Зв'язок з іншими науками.

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

int x [5] [7]; // Двовимірний масив цілих чисел (5 рядків по 7 елементів)

Для використання одного елемента двовимірного масиву необхідно вказати обидва індекси (індекс рядка і індекс стовпця), наприклад,

x [2] [4] = 5; // Четвертому елементу другого рядка присвоюється 5

Особливим для мови Сі є те, що можна отримати покажчик на одновимірний масив, що входить до складу двовимірного масиву. Наприклад, адреса початку другого масиву буде виглядати так:

x [2].

Той же самий адресу другого масиву можна представити у вигляді

(X + 2).

Тут x - адреса початку двовимірного, а зсув на 2 щодо цього початку дає збільшення адреси на 14 байтів (розмір одновимірного масиву дорівнює 7, а після множення на 2 і отримуємо число 14).

Використовуючи оператор разименованія, за адресою масиву можна отримати звернення до другої рядку двовимірного масиву

 * (X + 2).

Ну а тепер, якщо згадати тему № 5, легко отримати інший варіант запису привласнення четвертому елементу другого рядка значення 5

 * (* (X + 2) +4) = 5// Четвертому елементу другого рядка присвоюється 5.

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

Для використання всього того, що зроблено в роботі по темі №5, можна просто копіювати функції з файлу рішення задачі по темі №5, а можна використовувати інший прийом. Алгоритм наступний:

1.Створимо новий проект, наприклад, з ім'ям 7.

2.Копіюємо в робочий каталог проекту 7 файл з рішенням завдання по темі №5, але з ім'ям 5.h.

3.Редагуємо файл 5.h, залишаючи тільки заголовки функцій, наприклад, вийде наступне вміст

// 1. Ініціалізація генератора випадкових чисел

void Randomize ();

// 2. Генератор випадкового числа в діапазоні від 0 до range

int Random (int range);

// 3. Перевірка повторення випадкового числа

// C - покажчик початку масиву, n - індекс нового елементу

int Test_Repetition (int * c, int n);

// 4. Додати новий елемент

// З - покажчик початку масиву, n - номер нового елемента

// Range1, range2 - ліва і права межі діапазону

void New_Item (int * c, int n, int range1, int range2);

// 5. Заповнення одновимірного масиву

// C - масив, n - кількість елементів

void Filling (int * c, int n, int range1, int range2);

// 6. Роздруківка одновимірного масиву

void Print (int * c, int n);

// 7. Пошук мінімального значення

// З - покажчик на початок одновимірного масиву,

// N - кількість елементів масиву,

// Index - покажчик на індекс мінімуму

int Min (int * c, int n, int * index);

// 8. Створення дубліката масиву в динамічної пам'яті

int * Copy (int * c, int n);

// 9. Обмін елементів місцями в масиві

void Exchange (int * c, int n, int k);

// 10. Сортування методом прямого пошуку

void SearchSort (int * c, int n);

4.Копіюємо в робочий каталог проекту 7 файл з рішенням завдання по темі №5, але з ім'ям 5.c.

5.редагуємо файл 5.c і отримуємо

#include

#include

#include

#include

// 1. Ініціалізація генератора випадкових чисел

void Randomize ()

{

 srand (time (0));

}

// 2. Генератор випадкового числа в діапазоні від 0 до range

int Random (int range)

{

 return (rand ()% range);

}

// 3. Перевірка повторення випадкового числа

// C - покажчик початку масиву, n - індекс нового елементу

int Test_Repetition (int * c, int n)

{Int x, j;

 x = 0; // Вважаємо, що значення нове

 // Цикл порівняння з усіма попередніми

 for (j = 0; j

 if (* (c + n) == * (c + j))

{

 x = 1; // Елементи збіглися

 break;

}

 return x;

}

// 4. Додати новий елемент

// З - покажчик початку масиву, n - номер нового елемента

// Range1, range2 - ліва і права межі діапазону

void New_Item (int * c, int n, int range1, int range2)

{Int x = 0; // Елементи масиву різні

 do

{

 c [n] = Random (range2 - range1) + range1; // Нове значення

 x = Test_Repetition (c, n); // Перевірка на повторення

}

 while (x == 1); // Повторювати, коли елементи збіглися

}

// 5. Заповнення одновимірного масиву

// C - масив, n - кількість елементів

void Filling (int * c, int n, int range1, int range2)

{Int i;

 c [0] = Random (range2 - range1) + range1; // Елемент з індексом 0.

 // Цикл заповнення масиву

 for (i = 1; i

 New_Item (c, i, range1, range2);

}

// 6. Роздруківка одновимірного масиву

void Print (int * c, int n)

{Int i;

 for (i = 0; i

 printf ( "% 4d", c [i]);

 puts ( ""); // Перехід на новий рядок

}

// 7. Пошук мінімального значення

// З - покажчик на початок одновимірного масиву,

// N - кількість елементів масиву,

// Index - покажчик на індекс мінімуму

int Min (int * c, int n, int * index)

{Int i, min;

 min = c [0]; // Початкове значення мінімуму

 (* Index) = 0; // Початкове значення індексу мінімуму

 for (i = 1; i

 if (c [i]

{

 min = c [i];

 (* Index) = i;

}

 return min;

}

// 8. Створення дубліката масиву в динамічної пам'яті

int * Copy (int * c, int n)

{Int * m, i;

// Резервування пам'яті під дублікат масиву

 m = (int *) malloc (sizeof (int) * n);

 // Копіювання масиву

 for (i = 0; i

 // Функція повертає адресу нового масиву

 return m;

}

// 9. Обмін елементів місцями в масиві

void Exchange (int * c, int n, int k)

{Int tmp; // Змінна для тимчасового зберігання даних

 tmp = c [n];

 c [n] = c [k];

 c [k] = tmp;

}

// 10. Сортування методом прямого пошуку

void SearchSort (int * c, int n)

{Int i, min, indexMin; int * p;

 for (i = 0; i

 {P = (c + i); // Задати адресу початку масиву

 min = Min (p, n-i, & indexMin); // Знайти мінімум в масиві

 // Обміняти місцями мінімальний елемент з першим

 Exchange (p, 0, indexMin); }

}

6.Включаємо файли 5.h і 5.c в проект.

7.Копіюємо в робочий каталог проекту 7 файл з рішенням завдання по темі №5, але з ім'ям main.c. Редагуємо файл до наступного вигляду (зверніть увагу на стрку #include "5.h")

#include

#include

#include

#include "5.h"

#define N 15

inline void Rus () // Русифікація виведення в консольне вікно

{

 setlocale (LC_CTYPE, ".1251");

}

void Title ()

{

 puts ( "Лабораторна робота №5");

 puts ( "Завдання:");

 puts ( "1. Заповнити масив неповторяющимися числами");

 puts ( "в діапазоні від -30 до +70.");

 puts ( "2. Роздрукувати одновимірний масив.");

 puts ( "3. Знайти мінімальне значення в масиві і його індекс.");

 puts ( "4. Зробити дублікат масиву в динамічної пам'яті.");

 puts ( "5. Провести сортування масиву-дубліката методом");

 puts ( "прямого пошуку");

 puts ( "6. Роздрукувати результат сортування.");

 puts ( "7. Видалити дублікат з динамічної пам'яті. \ n");

}

// Головна функція

int main ()

{

 int m [N];

 int min, IndexMin;

 int * Duplicate;

 Rus ();

 Randomize ();

 Title ();

 puts ( "\ nЗаполненіе масиву");

 Filling (m, N, -30,70);

 puts ( "\ nРаспечатка масиву \ n");

 Print (m, N);

 puts ( "\ nМінімальное значення масиву \ n");

 min = Min (m, N, & IndexMin);

 printf ( "min =% d його індекс =% d \ n", min, IndexMin);

 puts ( "\ nСозданіе дубліката масиву \ n");

 Duplicate = Copy (m, N);

 puts ( "\ nРаспечатка дубліката масиву \ n");

 Print (Duplicate, N);

 puts ( "\ nСортіровка дубліката методом прямого пошуку");

 SearchSort (Duplicate, N);

 puts ( "\ nРаспечатка дубліката масиву після сортування \ n");

 Print (Duplicate, N);

 puts ( "\ nУдаленіе дубліката");

 free (Duplicate);

 return 0;

}

8.Компілюємо і запускаємо цю програму на виконання, щоб переконатися, що всі перетворення зроблені правильно.

Тепер в будь-якій програмі можемо використовувати функції обробки одновимірних масивів, підключивши до програми підготовлені файли 5.h і 5.c, що і зробимо в наступних прикладах.



Приклад виконання лабораторного завдання № 6 | Приклади функцій для роботи з двовимірним масивом

Міністерство освіти і науки Російської федерації | Коротка теоретична довідка та рекомендації щодо виконання | Приклад виконання завдання по темі № 1 | Формули для вирішення завдань | Приклад виконання лабораторного завдання № 2 | Блок-схема вибору функції | Приклади виконання завдання по темі №3. | Приклад рішення задачі по темі №3 з використанням функцій. | Коротка теоретична довідка та рекомендації щодо виконання | Приклади функцій для роботи з одновимірними масивами |

© um.co.ua - учбові матеріали та реферати