- •О.Ф.Тарасов, о.В.Алтухов
- •1 Заняття № 1 Вивчення інтегрованого середовища с
- •1.1 Теоретичні відомості
- •1.2 Хід роботи
- •1.3 Вимоги до звітів
- •1.4 Питання для контролю і самостійної роботи
- •2 Заняття № 2 Функції введення/виведення даних printf( ), scanf( ). Лінійні обчислювальні процеси
- •2.1 Теоретичні відомості
- •2.2 Хід роботи
- •2.3 Індивідуальне завдання до заняття №2
- •2.4 Питання для контролю і самостійної роботи
- •3 Заняття № 3 Розробка програм зі скалярними типами даних
- •3.1 Теоретичні відомості
- •Приклад
- •3.2 Хід роботи
- •3.3 Індивідуальне завдання до заняття № 3
- •3.4 Питання для контролю і самостійної роботи
- •4 Заняття № 4 Розробка програм з циклічними обчислювальними процесами
- •4.1 Теоретичні відомості
- •Алгоритм роботи оператора циклу for ( )
- •4.2 Хід роботи
- •4.3 Індивідуальне завдання до заняття № 4
- •4.4 Питання для контролю і самостійної роботи
- •5 Заняття № 5
- •Розгалуження обчислювального процесу.
- •Оператори, які реалізують розгалуження: if... Else, switch,
- •Умовна операція ( ? : )
- •5.1 Теоретичні відомості
- •Умовна тернарна операція ( ? : )
- •Оператор варіанта switch
- •Приклад
- •5.2 Хід роботи
- •5.3 Індивідуальне завдання до заняття № 5
- •5.4 Питання для контролю і самостійної роботи
- •6 Заняття № 6 Операції с, їхні пріоритети і використання. Перетворення типів
- •Пріоритет операцій і порядок виконання (асоційованість)
- •(Новий_тип) Операнд
- •Приклад
- •6.2 Хід роботи
- •6.3 Індивідуальне завдання до заняття № 6
- •6.4 Питання для контролю і самостійної роботи
- •7 Заняття № 7
- •7.1 Теоретичні відомості
- •Оголошення функцій (створення прототипів)
- •([ Список_типів_параметрів ])
- •Синтаксис визначення функцій
- •[ Return Значення_типу_що_повертається ]
- •Використання локальних і глобальних перемінних у функціях. Виклик функції
- •Приклад
- •7.2 Хід роботи
- •7.3 Індивідуальне завдання до заняття № 7
- •7.4 Питання для контролю і самостійної роботи
- •8 Заняття № 8
- •8.1 Теоретичні відомості
- •Основні операції з покажчиками
- •Покажчики і цілі величини
- •Динамічне розміщення покажчиків у пам'яті
- •Приклад
- •Приклад
- •8.2 Хід роботи
- •8.3 Індивідуальне завдання до заняття № 8
- •8.4 Питання для контролю і самостійної роботи
- •9 Заняття № 9
- •9.1 Теоретичні відомості
- •Приклад
- •9.2 Хід роботи
- •9.3 Індивідуальне завдання до заняття №9
- •9.4 Питання для контролю і самостійної роботи
- •10 Заняття № 10
- •10.1 Теоретичні відомості
- •Приклад
- •10.2 Хід роботи
- •10.3 Індивідуальне завдання до заняття № 10
- •10.4 Питання для контролю і самостійної роботи
- •Заняття №11 Обробка символьних даних
- •Теоретичні відомості
- •Індивідуальне завдання до заняття №11
- •Питання для контролю і самостійної роботи
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Теоретичні відомості
- •Приклад
- •Індивідуальне завдання до завдання №13
- •Питання для контролю і самостійної роботи
- •Заняття № 14 Розробка програм зі складеними типами даних
- •Структури
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Заняття № 15 Використання покажчиків для роботи зі складеними типами даних (2години)
- •Теоретичні відомості
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Використання покажчиків для роботи з функціями
- •Покажчики як параметри функції
- •[Const ] Тип * Ім'я_покажчика
- •Приклад
- •Хід роботи
- •Індивідуальне завдання до заняття №16
- •Питання для контролю і самостійної роботи
- •Використання функцій високого і низького рівня для роботи з потоками (файлами)
- •Функції для роботи з файлами
- •Хід роботи
- •Індивідуальне завдання до заняття №17
- •Питання для контролю і самостійної роботи
- •Розробка програм із багатофайловою структурою. Заголовочні файли. Класи пам'яті перемінних і функцій
- •Керування многофайловими проектами
- •Використання адміністратора проектів
- •Приклад
- •Основний файл проекту
- •Заголовний файл
- •Хід роботи
- •Індивідуальне завдання до заняття №18
- •Питання для контролю і самостійної роботи
- •Графічні функції
- •Графічні примітиви
- •Хід роботи
- •Індивідуальне завдання до заняття №19
- •Питання для контролю і самостійної роботи
- •Заняття№20 Розробка програм з використанням класів
- •Теоретичні відомості
- •Оголошення і визначення класу
- •Тіло класу
- •Інкапсуляція. Керування доступом до членів класу
- •Використання даних-членів класу
- •Хід роботи
- •Індивідуальне завдання до заняття №20
- •Питання для контролю і самостійної роботи
- •Заняття№21 Використання конструкторів і деструкторів у класах
- •Теоретичні відомості
- •Ініціалізація об'єктів класу
- •Деструктори
- •Виклик деструкторів
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •"Друзі" класів (friend)
- •Хід роботи
- •Індивідуальне завдання до заняття №22
- •Контрольні питання для підготовки і самостійної роботи
- •Віртуальні базові класи
- •Віртуальні деструктори
- •Хід роботи
Приклад
/* ЗАНЯТТЯ 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 */
Хід роботи
Вивчити теоретичні відомості.
Відповідно до індивідуального завдання (таблиці 13.1) розробити алгоритм і програму з застосуванням покажчиків на масив і масив покажчиків для роботи з двовимірним і тривимірним масивом.
Показати використання різних видів синтаксичних конструкцій включаючи індексні вирази і покажчики на тип елементів масиву для доступу до елементів масиву.
Набрати і налагодити програму на комп'ютері.
Вивчити роботу операторів.
Одержати результати.
Оформити звіт.
Підготуватися до захисту роботи, вивчивши контрольні питання по даній темі.