Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

Приклад

/* ЗАНЯТТЯ N 13

Розробив Петров Л.Д.

Оголосити масиви різної розмірності, виконати їхню ініціалізацію

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

елементів масивів з використанням різних синтаксичних

конструкцій. */

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

enum en{K = 2, N = 3, M = 4}; //Аналогічно #define K 5 #define N 5 #define M 4

typedef int mas1_int[N * M]; //Оголошення типу 1-мірний масив (вектор)

typedef int mas2_int[N][M]; //Оголошення типу 2-мірний масив

//(масив 1-мірних масивів) елементів типу int

typedef int mas3_int[K][N][M]; //Оголошення типу 3-мірний масив

//(вектор 2-мірних масивів) елементів типу int

int * matrix(int n_str, int m_stolb); //Функція ініціалізації масиву

//з застосуванням покажчиків і виділенням пам'яті для масиву в "купі"

void main( )

{ int d, a, b, i, j, k;

int *pi, *para, *c[N];

mas1_int mas1; mas2_int mas2; mas3_int mas3; //Оголошення масивів

clrscr( ); randomize( );

for(i = 0; i < N; i ++) c[ i ] = &mas2[ i ][ 0 ];

printf("\n Ініціалізація одномірного масиву: \n");

for(i = 0; i < N * M; i ++)

{ mas1[ i ] = random( 10 );

printf("mas1[%d] = %2d ", i, mas1[ i ] );

if (( i + 1) % 5 = = 0) printf("\n");

}

printf("\n Введіть індекс елемента одномірного масиву і < N: ");

scanf("%d", &і );

pi = mas1;

printf("mas1[%d] =%2d переміщення: %2d байт \n", і ,*( pi + і ),\

і * sizeof( int ));

getch( );

randomize( );

printf("Ініціалізація двовимірного масиву \n");

printf("з використанням масиву покажчиків: \n");

for(i = 0; i < N; i ++)

for(j = 0; j < M; j ++)

{ *(c[ i ] + j ) = random( 10 );

printf("c[%d][%d] = %2d ", i, j, *(c[ i ] + j ));

if ((j + 1) % M = = 0) printf("\n");

}

printf("\n Введіть індекси елемента двовимірного масиву і < N, j < M: ");

scanf("%d %d", &і, &j );

printf("mas2[%d][%d] = %2d переміщення: %2d байт \n", і, j, \

mas2[ і ][ j ], ( і * M + j ) * sizeof( int ));

printf("Інші форми запису доступу до елементів двовимірного масиву: \n");

printf(" *( *mas2 + i * M + j ) = %2d\n", *( *mas2 + i * M + j ));

printf(" ( *mas2)[ i * M + j ] = %2d\n", ( *mas2 )[ i * M + j ]);

printf(" *( *(mas2 + i ) + j ) = %2d\n", *( *(mas2 + i ) + j ));

printf(" *(c[ і ] + j ) = %2d\n", *(c[ і ] + j ));

getch( ); randomize( );

printf("\n Ініціалізація двовимірного масиву у функції \n");

printf("з виділенням пам'яті для масиву в \" купі \": \n");

para = matrix( N, M );

for(i = 0; i < N; i ++)

for(j = 0; j < M; j ++)

{ printf("mas2[%d][%d] = %2d ", i, j, *(para + i * M + j ));

if (( j + 1) % M = = 0) printf("\n");

}

printf("\n Введіть індекси елемента двовимірного масиву і < N, j < M: ");

scanf("%d %d", &і, &j );

printf("mas2[%d][%d] = %2d переміщення: %2d байт ", і, j, \

*( para + і * M+ j), (і*M+j)*sizeof(int));

free( para ); //Звільнення пам'яті, виділеної для масиву в "купі"

getch( ); randomize( );

printf("\n Ініціалізація тривимірного масиву: \n");

for(i = 0; i < K; i ++)

for(j = 0; j < N; j ++)

{ for(k = 0; k < M; k ++)

{ mas3[ i ][ j ][ k ] = random( 10 );

printf("mas3[%d][%d][%d] = %2d ", i, j, k, mas3[ i ][ j ][ k ] );

if ((k + 1) % 4 = = 0) printf("\n");

}

if ((j + 1) % N = = 0) printf("\n");

}

printf("\n Введіть індекси елемента тривимірного масиву і<K, j<N, k<M: ");

scanf("%d %d %d", &і, &j, &k);

printf("mas3[%d][%d][%d] = %2d переміщення: %2d байт \n", і, j, k,\

mas3[ і ][ j ][ k ], ( і * M * N + j * M + k ) * sizeof( int ));

printf("Інші форми запису доступу до елементів тривимірного масиву: \n");

printf(" *(**mas3+ i*M * N +j*M + k) = %2d\n", *( **mas3+i*M*N+j*M+k));

printf(" *( *( *(mas3+ i )+j)+k) = %2d\n", *( *( *(mas3 + i ) + j ) + k ));

getch( );

} //main( )

int * matrix(int n, int m)

{ int i, j; randomize( );

//Виділення пам'яті для масиву в "купі"

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

for( і = 0; і < n; і ++)

for( j = 0; j < m; j ++) //*(pa + і * m + j) - аналогічно pa[ і *m + j ]

{ *( pa + i * m + j ) = random( 51 ) - 25;

// printf("mas[%d][%d] = %2d ", i, j, pa[ i * m + j ] );

// if (( j + 1) % m = = 0) printf("\n");

}

return pa;

}

/* Ініціалізація одномірного масиву:

mas1[0] = 6 mas1[1] = 0 mas1[2]= 0 mas1[3]= 8 mas1[4]= 4

mas1[5] = 0 mas1[6] = 7 mas1[7]= 4 mas1[8]= 0 mas1[9]= 7

mas1[10] = 6 mas1[11] = 6

Введіть індекс елемента одномірного масиву і < N: 10

mas1[10]= 6 переміщення: 20 байт

Ініціалізація двовимірного масиву

з використанням масиву покажчиків:

c[0][0]= 7 c[0][1]= 0 c[0][2]= 0 c[0][3]= 1

c[1][0]= 3 c[1][1]= 8 c[1][2]= 6 c[1][3]= 3

c[2][0]= 6 c[2][1]= 9 c[2][2]= 6 c[2][3]= 1

Введіть індекси елемента двовимірного масиву і < N, j < M: 1 3

mas2[1][3] = 3 переміщення: 14 байт

Інші форми запису доступу до елементів двовимірного масиву:

*( *mas2 + i * M + j ) = 3

( *mas2)[ i * M + j ] = 3

*( *(mas2 + i ) + j ) = 3

*( c[ і ] + j ) = 3

Ініціалізація двовимірного масиву у функції

с виділенням пам'яті для масиву в "купі":

mas2[0][0]= 7 mas2[0][1]= - 1 mas2[0][2]= 19 mas2[0][3]= 15

mas2[1][0]= - 6 mas2[1][1]= - 15 mas2[1][2]= 2 mas2[1][3]= 11

mas2[2][0]= - 24 mas2[2][1]= 24 mas2[2][2]= 21 mas2[2][3]= - 6

Введіть індекси елемента двовимірного масиву і < N, j < M: 2 0

mas2[2][0]= - 24 переміщення: 16 байт

Ініціалізація тривимірного масиву:

mas3[0][0][0]= 1 mas3[0][0][1]= 9 mas3[0][0][2]= 3 mas3[0][0][3]= 1

mas3[0][1][0]= 8 mas3[0][1][1]= 7 mas3[0][1][2]= 3 mas3[0][1][3]= 8

mas3[0][2][0]= 0 mas3[0][2][1]= 3 mas3[0][2][2]= 9 mas3[0][2][3]= 0

mas3[1][0][0]= 8 mas3[1][0][1]= 6 mas3[1][0][2]= 8 mas3[1][0][3]= 5

mas3[1][1][0]= 2 mas3[1][1][1]= 6 mas3[1][1][2]= 5 mas3[1][1][3]= 5

mas3[1][2][0]= 4 mas3[1][2][1]= 9 mas3[1][2][2]= 5 mas3[1][2][3]= 4

Введіть індекси елемента тривимірного масиву і < K, j < N, k < M: 1 2 2

mas3[1][2][2] = 5 переміщення: 44 байт

Інші форми запису доступу до елементів тривимірного масиву:

*( **mas3 + i * M * N + j * M + k ) = 5

*( *( *(mas3 + i ) + j ) + k ) = 5 */

Хід роботи

  1. Вивчити теоретичні відомості.

  2. Відповідно до індивідуального завдання (таблиці 13.1) розробити алгоритм і програму з застосуванням покажчиків на масив і масив покажчиків для роботи з двовимірним і тривимірним масивом.

  3. Показати використання різних видів синтаксичних конструкцій включаючи індексні вирази і покажчики на тип елементів масиву для доступу до елементів масиву.

  4. Набрати і налагодити програму на комп'ютері.

  5. Вивчити роботу операторів.

  6. Одержати результати.

  7. Оформити звіт.

  8. Підготуватися до захисту роботи, вивчивши контрольні питання по даній темі.