Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_3_mas_A.doc
Скачиваний:
14
Добавлен:
17.05.2015
Размер:
80.9 Кб
Скачать

Динамічні арифметичні масиви

Динамічний масив може бути будь-якій розмірності. За допомогою покажчиків можна формувати одновимірні і багатовимірні масиви з розміром, не заданим до виконання програми, і з даними будь-якого типу. При цьому розмір масиву визначається в процесі виконання програми, наприклад шляхом введення кількості його елементів з файлу з початковими даними або з клавіатури в режимі діалогу. Використовуючи тільки покажчик, можна обробляти значення одновимірних і багатовимірних масивів. Динамічні масиви арифметичних даних розглянемо на прикладах роботи з одновимірними і двовимірними масивами. Наприклад:

int *mi; // – покажчик на дані типу int

float *mf; // – покажчик на дані типу float

char *st; // – покажчик на дані типу char

Ці покажчики можна використовувати як для роботи з скалярними значеннями відповідного типу, так і з масивами наперед не певного розміру.

Приклад програми заповнення одновимірного динамічного масиву значеннями типу int представлений в лістингу 1. У ньому k – кількість елементів масиву визначається в режимі діалогу введенням з клавіатури. Після введення значення до за допомогою функції malloc виділяється ОП для масиву з до значень типу int. Потім i-елементи масиву заповнюються значеннями: 100* i. До i-елементу масиву можна використовувати звернення у вигляді *(а + i) або а[i].

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

#include <stdio.h>

#include <alloc.h>

#include <conio.h>

void main()

{ int i, k, *a; /* k – кількість елементів масиву,

а – покажчик на масив */

clrscr(); // – очистити екран

printf("Введіть кількість елементів масива:\n");

scanf (" %d", &k); // – введення значення k

а = (int *) malloc( k * sizeof(int)); // – запит ОП

// Заповнення масиву:

for ( i = 0; i < k; i++ ) { * (а + i) = 100 * i;

// або: а[i]= 100 * i;

printf( "а[%d] = %4d\n", i, а[i]); }

free (a); // – звільнення ОП

printf ("\nДля завершення програми натисніть будь-яку клавишу\n");

getch(); // – натиснути будь-яку клавішу

}

Приклад програми для роботи з динамічним масивом даних типу int приведений в лістингу 2. У програмі спочатку вводиться k – кількість елементів одновимірного масиву, а потім самі значення елементів вводяться і виводяться.

Лістинг 2. Робота з одновимірним динамічним масивом: введення даних і виведення його значень.

#include <stdio.h>

#include <alloc.h>

#include <conio.h>

Void main()

{ int i, k, *a; /* k – кількість елементів масиву, a – покажчик на масив */

clrscr(); // - очистити екран

printf("Введіть кількість елементів масива:\n");

scanf (" %d", &k); // - введення значення k

a=(int *) malloc(k*sizeof(int)); // - запрос ОП

// Заполнение массива:

for ( i = 0; i <k; i++ ) { * (a + i) = 100 * i;

// или: a[i] = 100 * i;

printf( "a[%d] = %4d\n", i, a[i] ); }

free (a); // - звільнення ОП

printf ("\nДля завершення програми натисніть будь-яку клавішу\n");

getch(); // - натиснути будь-яку клавішу

}

Початкові дані: 5 1 2 3 4 5

Результати виконання програми:

а[0] = 1 а[1] = 2 а[2] = 3 а[3] = 4 а[4] = 5

Аналогічно можна організувати роботу з масивами іншого типу, наприклад float, double або масиву структур.

У лістингу 3 приведений приклад програми для оголошення і роботи з одновимірним динамічним масивом даних типу int.

Лістинг 3. Робота з одновимірним динамічним масивом. Кількість і значення його елементів вводяться з клавіатури.

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

Соседние файлы в папке lexzii_08