Лабораторна робота №6-7
Тема: Масиви. та покажчики. Динамічні масиви.
Мета: отримання практичних навичок у роботі з масивами.
Контрольні запитання:
Оголошення масивів у С/С++.
Зв’язок між масивами та покажчиками.
Чи припустимо в С/C++? Якщо "так" - опишіть семантику кожної правильної дії (не приймаючи до уваги помилкові); якщо "ні" - поясніть чому.
a). . . .
int i, p, j, q;
p = &i; q = &p;
j = p = 1; q = p-1; p += 1;
i = ++q + p; q -= 1; i = q ++ + q;
cout<<"i=”<<i<<” j=”<< j<< “p=”<<p <<” q=”<< q;
b) . . .
int x = 1, y; char c = ‘a’;
int pi, qi; char pc;
pi = &x; pi = 3; y = pi; pi = c; qi = pi;
pc = qi; qi+=1; pi++; (- - pi) = 5; y = qi+1;
pc = &c; ++pc; (pc)++; pc++; pc+=1;
x = (int)pi; pi=(int)pc; pi=(int)x; x = 1+ pi; pc=(char)pi;
c = pc; pc = &y; x = qi – pi; qi = 0; qi+=pi;
y = π y = (int)π pi = pi +5; (pi+1)=0; pi=&(x+0);
Чи до будь-якого об'єкта в С/C++ можна застосовувати операцію узяття адреси & ?
Нехай цілочислений масив a містить 100 елементів. Чи вірно розв’язана задача: "написати фрагмент програми, що виконує підсумовування всіх елементів масиву a".
a) int a[100], sum, i;
sum = 0;
for ( i = 0; i < 100; ++i ) sum += a[i];
b) int a[100], p, sum;
sum = 0;
for ( p = a; p < &a[100]; ++p ) sum = sum + p;
c) int a[100], p, sum;
sum = 0;
for ( p = &a[0]; p < &a[100]; p++ ) sum += p;
d) int a[100], sum, i;
sum = 0;
for ( i = 0; i < 100; ++i ) sum += (a+i);
e) int a[100], sum, i;
sum = 0;
for ( i = 0; i < 100; ++a, ++i ) sum += a;
f) int a[100], p, sum, i;
sum = 0;
for ( i = 0, p = a; i < 100; ++i ) sum += p[i];
g) int a[100], p, sum, i;
sum = 0;
for ( i = 0, p = a; i < 100; ++i ) sum += (p+i);
Чи еквівалентні наступні фрагменти програми на С/C++?
a[ i ] /= k+m і a[ i ] = a[ i ]/k+m
a[ i ] /= k+m і a[ i ] = a[ i ]/(k+m)
a[ i++]+=3 і a[i++] = a[ i++]+3
a[ i++]+=3 і a[ i ] = a[ i++]+3
a[ i++]+=3 і a[ i++ ] = a[ i ]+3
a[ i++]+=3 і a[ i ] = a[ i ]+3; i++;
Опишіть визначення динамічного одновимірного масиву, способи звертання до його елементів, якщо масив оголошується так: int *a;.
Опишіть визначення динамічного двовимірного масиву, способи звертання до його елементів, якщо масив оголошується так: int *a;.
Опишіть визначення динамічного двовимірного масиву, способи звертання до його елементів, якщо масив оголошується так: int **a;.
Завдання:
Перевірити можливість доступу до елементів масиву з індексами, що виходять за межі індексу. ( наприклад, int a[4],b[5]; a[-1], a[5],b[-2] та ін.).
Дано масив, що складається з натуральних чисел
Визначити елементи масиву, що є подвоєними
непарними числами, та знайти їх суму.
Дано дві дійсні квадратні матриці порядку 4. Отримати нову матрицю множенням елементів кожного рядка першої матриці на найбільше із значень елементів відповідного рядка другої матриці.
Описати функції для визначення чи два вектори в n-мірному просторі колінеарні, перпендикулярні. У функції передаються масиви компонент векторів. Протестувати роботу цих функцій. Доступ до елементів масиву здійснювати за допомогою адресного виразу.
Описати функції для вводу( ініціалізаціі випадковими числами) елементів квадратної матриці , обчислення суми, добутку 2-х матриць, виконання дій над матрицею згідно із варіантом індивідуального завдання
Завдання для індивідуального виконання:
Вимоги до виконання завдання: масив має бути динамічним. При виконанні завдання з непарним номером динамічний двовимірний масив оголошувати як type * mas, з парним номером як type ** mas
№ |
Текст завдання |
|
1 |
Повернути матрицю на 90o за годинниковою стрілкою |
|
2 |
Відобразити матрицю симетрично відносно головної діагоналі.
|
|
3 |
Заповнити матрицю лінійною послідовністю, від верхнього лівого кута по спіралі вправо-вниз-вліво-вверх.. |
|
4 |
Заповнити матрицю ЛП, від центра по спіралі: вліво - вниз - вправо - вверх. |
|
5 |
Заповнити матрицю випадковими числами. На головній діагоналі розмістити суми елементів, які належать тому ж рядку і тому ж стовпцю. |
|
6 |
Заповнити матрицю ЛП, від лівого верхнього кута по діагоналі: вправо - вверх. |
|
7 |
Заповнити сектори матриці, які розміщені вліво и вправо від головної та побічної діагоналей, ЛП, від лівого верхнього кута вниз - вправо. Залишок матриці заповнити нулями. |
|
8 |
Заповнити матрицю випадковими числами. Відобразити симетрично відносно вертикальної осі сектори матриці, які лежать вліво и вправо від головної та побічної діагоналей |
|
9 |
Заповнити матрицю ЛП, від лівого нижнього кута по діагоналі: вліво - вверх. |
|
10 |
Заповнити матрицю випадковими числами. Розмістити на головній діагоналі суми елементів, які лежать на діагоналях, перпендикулярних до головної. |
|
11 |
Заповнити матрицю випадковими числами. Відобразити верхню половину матриці на нижню дзеркально симетрично відносно горизонтальної осі. |
|
12 |
Заповнити матрицю випадковими числами. Розбити матрицю на квадрати розміром 3х3. В центрі кожного квадрата помістити суму інших елементів квадрата. |
|
13 |
Заповнити матрицю випадковими числами. Розвернути матрицю на 90o проти годинникової стрілки. |
|
14 |
Заповнити сектори матриці, які розміщені вліво и вправо від головної та побічної діагоналі. |
|
15 |
Заповнити матрицю випадковими числами. Відобразити праву половину матриці у ліву дзеркально симетрично відносно вертикальної осі |
|
