Одновимірні і двовимірні масиви

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Кафедра: Автоматика та інформаційні технології
Одновимірних та двовимірних масивів

Зміст
1. Теоретична частина
1.1 Визначення масиву
1.2 Розташування в пам'яті
1.3 Звернення до елементу масиву
1.4 Ініціалізація масивів
1.4.1 Одновимірні масиви
1.4.2 Двовимірні масиви
1.5 Тип імені масиву
1.6 Передача одновимірних масивів у функцію
1.7 Передача двовимірних масивів у функцію
1.8 Тип і базовий тип покажчика
1.9 Правила визначення типу покажчиків
1.10 Покажчик на void
1.11 Константні покажчики
1.12 Адресна арифметика
1.13 Одинарний покажчик - це одновимірний масив
1.14 Одновимірний масив - це одинарний покажчик
1.15 Двовимірний масив - це подвійний покажчик.
1.16 Подвійний покажчик - це двовимірний масив
1.17 Перегляд покажчиків в відладчик
1.18 Контрольні питання.
2. Лабораторні завдання
2.1 Скалярний твір
2.2 Мінімакс
2.3 Масиви рядків
2.4 Тривимірний масив
3. Додаткові завдання
Бібліографічний список

1. Теоретична частина

1.1 Визначення масиву

Визначення. Масивом називається безліч елементів одного типу, розташованих в пам'яті послідовно один за одним.
При першій згадці про масив в програмі під нього відразу виділяється пам'ять. Тому правильно говорити не про оголошення масиву, а про визначення масиву.
Синтаксис визначення масиву має вигляд
Тип елемента ім'я масиву [n 1] [n 2 ]...[ n k];
де ім'я масиву - ідентифікатор, визначений у якості імені масиву, а n i - розміри масиву. Масив називається k-мірним масивом з елементами типу тип елемента. Елементи i-го вимірювання мають індекси від 0 до n i -1. Тип елемента масиву може бути одним з основних типів, типом покажчика (pointer), типом структури (struct) або типом об'єднання (union). Хоча елементи масиву не можуть бути функціями, вони можуть бути покажчиками на функції.
Нижче наведені деякі приклади визначень масиву:
int page [10]; / * одновимірний масив з 10 елементів типу int, пронумерований з 0 до 9 * /
char line [81]; / * масив символів або рядок, в яку можна записати не більше 80 символів * /
float big [10] [10], sales [10] [5] [8];

1.2 Розташування в пам'яті

Масиви можуть бути наступних видів:
1. Локальні. Розташовуються в стеці. Наприклад,
main () {
int A [10];
/ / ... ..
}
2. Статичні. Розташовуються в області даних, глобальних і статичних змінних. Наприклад,
main () {
static int A [10];
/ / ... ..
}
3. Глобальні. Розташовуються в області даних, глобальних і статичних змінних. Наприклад,
int A [10];
main () {
/ / ... ..
}
4. Дальні глобальні. Розташовуються в дальній області глобальних змінних. Наприклад,
far int A [10];
main () {
/ / ... ..
}
Двовимірні масиви розташовуються в пам'яті по рядках. Початкову рядок масиву називають нульовою рядком.
У загальному випадку, багатовимірні масиви розташовуються в пам'яті так, що при послідовному перегляді його елементів останні індекси змінюються швидше.
Наприклад, тривимірний масив int A [3] [4] [5] розташовується в пам'яті шарами A [0] [...] [...], ..., A [2] [...] [...].
Кожен шар, як двовимірний масив, розташовується по рядках. Наприклад, A [0] [0] [...], ..., A [0] [3] [...].
Масиви можуть розміщуватися тільки в межах одного сегмента, тобто загальний розмір масиву в байтах не перевищує 64К.

1.3 Звернення до елементу масиву

Елементи масиву можуть стояти в обох частинах операції привласнення, тобто є об'єктами Lvalue.
Завдання елемента k-мірного масиву реалізується послідовним застосуванням операцій індексації:
x [i 1] [i 2 ]...[ i k],
де i j - цілий вираз, при цьому 0 <= i j <= n j -1, де n j -1 - максимальне значення j-го індексу масиву. Наприклад:
page [5]
line [i + j-1]
big [i] [j]
Мова Сі не перевіряє вихід індексу масиву за діапазон. Звернення до неіснуючого елементу масиву є не синтаксичної, а "добре прихованої" логічною помилкою. Вона може призвести до непередбачуваних результатів.
Операція індексації є левоассоціатівной операцією, тобто виконується у вираженні зліва направо. Тому при зверненні до елементу масиву спочатку виконується ліва операція індексації []. До отриманого результату застосовується друга операція індексації [] і т.д.

1.4 Ініціалізація масивів

Ініціалізація масивів може бути повною і частковою.

 

1.4.1 Одновимірні масиви

1. У разі повної ініціалізації вказується повний список значень у фігурних дужках.
int A [4] = {1, 4, 2, 6};
Розміри масивів при повній ініціалізації можна не вказувати. Компілятор сам для себе визначить ці розміри і виділить відповідну пам'ять. Програміст може знайти розміри за допомогою операції sizeof. Операція повертає розмір всього, що завгодно в байтах. Зокрема, sizeof (A) повертає розмір масиву в байтах. Наприклад,
int A [] = {1, 4, 2, 6};
int Dim = sizeof (A) / sizeof (int); / / 8 / 2 = 4
Краще писати
int Dim = sizeof (A) / sizeof (A [0]); / / 8 / 2 = 4
2. У разі часткової ініціалізації вказується розмір масиву і неповний список значень у фігурних дужках. Неініціалізовані елементи отримують нульові значення. У випадку
int A [4] = {1, 4};
елементи A [0] і A [1] отримали значення, а в A [2] і A [3] записані нулі.
Якщо список ініціалізації більше розміру масиву, то виникне помилка компіляції.
/ / Int A [4] = {1, 4, 4, 7, 2}; Помилка

 

1.4.2 Двовимірні масиви

1. У разі повної ініціалізації вказується повний список значень у фігурних дужках. Кожен рядок ініціалізується в своїх фігурних дужках.
int A [3] [4] = {{1, 4, 2, 6},
{11, 1 4, 1 2, 1 6},
{1, 4, 2, 6}
};
Перший розмір масиву, тобто кількість рядків, при повній ініціалізації можна не вказувати.
int A [] [4] = {{1, 4, 2, 6},
{11, 1 4, 1 2, 1 6},
{1, 4, 2, 6}
};
Компілятор сам для себе визначить кількість за списком ініціалізації. Програміст може знайти перший розмір за допомогою операції sizeof. Зокрема, sizeof (A) повертає розмір двовимірного масиву в байтах, а sizeof (A [0]) повертає розмір рядка в байтах. Наприклад,
int KolStrok = sizeof (A) / sizeof (A [0]); / / 24/82 = 3
2. У разі часткової ініціалізації вказуються всі розміри масиву і неповні списки значень у фігурних дужках.
int A [4] [4] = {{2, 6},
{1 квітня, 1 2, 1 6},
{6}
};
Якщо розмір список ініціалізації більше хоча б одного розміру масиву, то виникне помилка компіляції.
/ / Int A [2] [4] = {{1, 4, 4, 7, 2},
{1, 4, 4, 2}}; Помилка
Увага. Допускається ініціалізація двовимірного масиву однією парою фігурних дужок
int A [2] [4] = {1, 4, 4, 7, 2, 1, 4, 4, 2};
Але такий спосіб чреватий логічною помилкою в разі часткової ініціалізації.
Увага. При визначенні масиву без ініціалізації всі розміри треба вказувати явним чином.

1.5 Тип імені масиву
Для одновимірних масивів типом імені масиву є тіп_елемента_массіва []
Приклади.
Ім'я А масиву char A [20]; має тип char [].
Ім'я В масиву float B [10] має тип float [].
Для двовимірних масивів типом імені масиву є тіп_елемента_массіва [] [розмір].
У типі імені масиву немає інформації про перший розмірі масиву - про кількість рядків.
Приклади.
Ім'я А масиву char A [10] [20]; має тип char [] [20].
Ім'я B масиву char B [100] [20] теж має тип char [] [20].
Ім'я C масиву char C [20] [10] має тип char [] [10], відмінний від типів А і В.

1.6 Передача одновимірних масивів у функцію

При передачі у функцію одновимірного масиву в списку фактичних аргументів указуються ім'я масиву та розмір масиву. В імені масиву немає інформації про розмір масиву. Компілятор на ім'я масиву може визначити тільки тип елементів масиву і адресу початкового елемента масиву.
У списку формальних аргументів вказуються тільки типи. Додавати розмір масиву марно.
Масиви передаються у функцію за адресою. Це означає, що функція працює з оригіналом масиву і може змінювати його елементи. Це твердження використовується для повернення масивів з функції. За допомогою оператора return масив повернути не можна.
Приклади прототипів
1. int max (int * A, int Dim);
Можна також писати
int max (int A [], int Dim);
Наступний запис логічно не вірна, тому що розмір одновимірного масиву не входить до тип імені масиву.
/ / Int max (int A [100]); помилка
У списку формальних параметрів запису int * A і int A [] рівносильні.
2. float scal (float A [], float B [], int Dim);
Приклад. Функція знаходить суму елементів одновимірного масиву типу int і програму.
int sum (int * A, int Dim); / / прототип функції
int sum (int * A, int Dim)
{
int S = 0;
for (int i = 0; i <Dim; i + +)
S + = A [i];
return S;
}
void main ()
{
int B [] = {1,2,3,4,5};
int N = sizeof (B) / sizeof (B [0]);
printf ("\ nСумма елементів дорівнює% d", sum (B, N));
}
Приклад. Функція знаходить всі парні елементи в одновимірному масиві.
int VseChot (int A [], int DimA, int Chot [], int DimChot);
Функція знаходить парні елементи масиву А і поміщає їх в масив Chot. При цьому треба стежити, щоб кількість парних елементів не перевищило розмір DimChot масиву Chot. Повертає кількість знайдених парних елементів. Якщо кількість парних елементів перевищило розмір DimChot, то повертається -1, а масив Chot повністю складається з парних елементів масиву А.
int VseChot (int A [], int DimA, int Chot [], int DimChot)
{
int count = 0;
for (int i = 0; i <DimA; i + +)
if (A [i]% 2 == 0) / / парне число
if (count <DimChot)
Chot [count + +] = A [i];
else
return -1;
}
void main ()
{
int A [] = {1, 2, 4, 6, 7, 5};
int B [4];
int res = VseChot (A, 6, B, 4);
if (res = -1)
{
printf ("\ n Знайдено не всі парні елементи масиву:");
for (int I = 0; I <4; i + +)
printf ("% d", B [i]);
}
else
{
printf ("\ n Перелік парних елементів масиву:");
for (i = 0; i <4; i + +)
printf ("% d", B [i]);
}
}

1.7 Передача двовимірних масивів у функцію

У разі двовимірних масивів потрібно точно дотримуватися збіг типів фактичних і формальних параметрів функції.
Приклади.
1. Функція знаходить максимальний елемент у масиві
int max (int A [] [100], int KolStroc, int KolStolb);
Дана функція може викликатися тільки для масивів, у яких другий розмір 100. В іншому випадку, буде помилка компіляції.
Наприклад, можна викликати цю функцію для частково ініціалізованої масиву
int A [] [100] = {{1,3,5}, {15,2,3}};
int res = max (A, 2, 3);
2. Функція знаходить суму елементів двовимірного масиву
При передачі двовимірного масиву тут використано явне перетворення типу двовимірного масиву до типу одновимірного масиву. Це дозволяє викликати функцію для будь-яких двовимірних масивів.
int sum (int A [], int KolStroc, int KolStolb)
{
int s = 0;
for (int i = 0; i <KolStroc; i + +)
for (int j = 0; j <KolSolb; j + +)
s + = A [i * KolSolb + j];
return s;
};
void main ()
{
int B [2] [3] = {{1,4,2}, {4,1,2}};
int res = sum ((int *) A, 2, 3);
printf ("% d", s);
}

1.8 Тип і базовий тип покажчика

Визначення. Покажчиком називається змінна, оголошена наступним чином
type * імя_указателя;
Визначення. Типом покажчика називається type *.
Визначення. Базовим типом покажчика називається тип type даного, на який вказує покажчик.
Приклади.
1. Одинарний покажчик int * pi має тип int * і базовий тип int.
2. Одинарний покажчик struct date * pd має тип date * і базовий тип date.
3. Подвійний покажчик float ** ppf має тип float ** і базовий тип float *.
4. Рідкісний потрійний покажчик char *** pppc має тип char *** і базовий тип char **.
Найбільш часто використовуються одинарні та подвійні покажчики, вкрай рідко потрійні покажчики. Покажчики з 4 зірочками - ознака помилкової ситуації.

1.9 Правила визначення типу покажчиків

· Застосування до будь-якої змінної name операції взяття адреси & name додає до типу результату одну *.
· Застосування до будь-якого вказівником ptr операції разименованія * ptr видаляє з типу результату одну *.
· Застосування до будь-якого вказівником ptr операції індексації ptr [0] видаляє з типу результату одну *.
Приклади.
int ** ptr; / / тип ptr - це int **
/ / Тип * ptr - це int *
/ / Тип ** ptr - це int
/ / Вираз *** ptr помилково
/ / Тип ptr [0] - це int *
/ / Тип ptr [3] [5] - це int
/ / Вираз ptr [1] [1] [1] помилково
/ / Тип * ptr [0] - це int
/ / Тип & (* ptr [0]) - це int *

1.10 Покажчик на void

Покажчик типу void * не має базової типу і для подальшої роботи з ним до нього треба застосувати операцію явного перетворення типу.
Покажчик типу void * вказує на все, що завгодно. Ключовим словом void тут приписується не значення "нічого", а протилежне значення "все, що завгодно". Під слово void підпадають базові типи, призначені для користувача типи, будь-які покажчики: одинарні, подвійні і т.д.
Таким чином, оголошення void ** ptr не має сенсу, хоча і не буде логічною помилкою. Треба писати void * ptr.
В операціях присвоювання покажчик на void може стояти в лівій частині. Це означає, що вказівником void * можна привласнити будь покажчик. При розміщенні покажчика void * в правій частині його треба перетворювати до вказівного типу лівій частині. Наприклад.
int i = 5, * pi = &i;
void * ptr;
ptr = pi;
/ / Pi = ptr; помилка
pi = (int *) ptr; / / правильно

1.11 Константні покажчики

При оголошенні покажчиків можна використовувати зарезервоване слово const. На відміну від звичайних констант і макроподстановок константні об'єкти розміщуються в пам'яті, але не є об'єктами Lvalue, тобто не можуть стояти в лівій частині операції привласнення.
Приклад 1.
int * Arr = {1,3,2,4,5}, * B = {1,1};
При цьому визначенні припустимі наступні два оператори
Arr [0] = 100;
Arr = B;
Приклад 2.
const int * Arr = {1,3,2,4,5}, * B = {1,1};
/ / Arr [0] = 100; помилка
Arr = B;
Приклад 3.
int * const Arr = {1,3,2,4,5}, * B = {1,1};
Arr [0] = 100;
/ / Arr = B; помилка
Приклад 4.
const int * const Arr = {1,3,2,4,5}, * B = {1,1};
/ / Arr [0] = 100; помилка
/ / Arr = B; помилка
Зазвичай константні покажчики використовують для рядків
const char * str = "Hello";
У цьому випадку захищається вміст текстових рядків.

1.12 Адресна арифметика

Присвоєння. Вказівником можна привласнити тільки адресу або покажчик того ж типу. Якщо все ж необхідно присвоїти адресу різних типів, то треба використовувати операцію явного перетворення типу. Для покажчиків неявне перетворення типу не працює.
Приклад.
1. int * A = (int *) malloc (20);
2. int ** A; char * c; A = (int **) c;
Операція разименованія * повертає значення, що зберігається в комірці за адресою, що міститься в покажчику.
Приклад.
int i = 5, * pi = &i;
* Pi = 10; / / i = 10
Отримання адреси покажчика. Подібно будь-яким змінним, змінна типу покажчик має адресу і значення. Операція & повідомляє нам, де знаходиться сам покажчик.
Операція & додає до типу результату одну *.
Приклад.
int n = 20, * pn = & n, ** ppn;
ppn = &pn;
Збільшення індексу. До покажчика ptr можна додавати і віднімати будь-яке ціле число n. При цьому покажчик змінюється на кількість байт рівне n, помноженому на розмір у байтах базового типу покажчика ptr.
Відповідно, до покажчиків застосовні операції інкремента + + і декремента --.
Приклад.
int n = 20, * pn = & n, ** ppn;
pn = pn + 5;
/ / Базовий тип pn - int, займає 2 байти, тому pn збільшиться на 10 байт.
ppn = & pn +5;
/ / Базовий тип вираження & pn - int *, займає 4 байти для моделі large, тому pn збільшиться на 20 байт.
Порівняння покажчиків на рівність і нерівність застосовується лише до покажчиків одного типу.
Різниця покажчиків. Можна знаходити різницю двох покажчиків одного типу. Результатом є кількість елементів базового типу, що знаходяться між цими покажчиками. Результат має тип int для ближніх покажчиків і тип long для далеких покажчиків.
Приклад.
int A [10];
int * px = & A [1], * py = & A [9];
int n;
n = (int) (py - px); / / n = 8

1.13 Одинарний покажчик - це одновимірний масив

Одинарний покажчик можна розглядати, як одновимірний масив і застосовувати до нього операцію індексації.
int n = 10, * pi;
pi = &i;
Тоді pi [0] - це змінна i,. pi [1] - це змінна типу int, розташована праворуч від i, pi [-1] - це змінна типу int, розташована ліворуч від i.

1.14 Одновимірний масив - це одинарний покажчик
Ім'я одновимірного масиву, взяте саме по собі, є сталою покажчиком на початковий елемент цього масиву. До імені масиву можна застосовувати операції вказівної арифметики, що не змінюють вміст покажчика.
int A [5];
Тип А - це int *, базовий тип - int.
Значення А є адресою елемента A [0], тому * A - це початковий елемент масиву А.
А +1 - це адреса елемента A [1], а разименованія * (А +1) - це A [1], * (А +4) - це останній елемент A [4], використання вираження * (А +5) в будь-якій частині операції привласнення є логічною помилкою виходу індексу масиву за діапазон.
Увага. Істотна відмінність між дороговказом і ім'ям масиву полягає в тому, що покажчик є змінною, що розміщується в ОЗУ. Покажчик сам має адресу і займає 2 або 4 байти в залежності від того, ближній це індикатор або дальній. Ім'я масиву є адресною константою, не має адреси і не займає місця в ОЗУ.

1.15 Двовимірний масив - це подвійний покажчик

Розглянемо визначення двовимірного масиву
int A [3] [5];
Масив має три рядки по п'ять елементів типу int. При цьому A [0] - це початкова, рядок з 5 елементів типу int, тобто одновимірний масив з 5 елементів типу int. Але тип імені одновимірного масиву не містить розміру цього масиву. Тому тип покажчика A [0] - це int *, а базовий тип int.
Відповідно, А [1] - це перший рядок масиву, тип А [1] - це int *. Фактично A [0] - це адреса початкового елемента нульової рядки, A [1] - це адреса початкового елемента першого рядка і т.д.
Зверніть увагу, тип A [0] не містить розміру 5.
Розглянемо ім'я двовимірного масиву А, взяте саме по собі. Ідентифікатор А - це адреса початкового рядка з 5 елементів типу int. Тип А - це int (*) [5]. У даному виразі беруть участь три операції: круглі дужки (), індексація [] і разименованія *. Перерахування операцій тут йде за спаданням пріоритету. Читати вираз int (*) [5] потрібно таким чином: покажчик на масив з п'яти елементів типу int.
Таким чином, тип покажчика А містить один з розмірів двовимірного масиву, а саме кількість стовпців. Звідси випливає, що два масиви
int B [10] [5], C [3] [20];
мають різні типи. Покажчик В має той же тип int (*) [5], а покажчик С має інший тип int (*) [20].
Далі, застосуємо до подвійного константними вказівником А вказівні операції.
A +1 - це адреса першого рядка з 5 елементів типу int. Тип A +1 - це int (*) [5], базовий тип - одновимірний масив з п'яти елементів типу int, тобто int *.
У загальному випадку, A + i це адреса i-го рядка з 5 елементів типу int. Тип A + i - це int (*) [5], базовий тип - одновимірний масив з п'яти елементів типу int, тобто int *.
* (A + i) - це сама i-ий рядок з 5 елементів типу int, тобто адресу нульового елемента першого рядка. Тип * (A + i) - це int *, базовий тип * (A + i) - це int.
* (A + i) + j - це адреса j-го елемента i-го рядка. Тип * (A + i) + j - це int *, базовий тип int.
* (* (A + i) + j) - це сам j-й елемент i-го рядка. Тип * (* (A + i) + j) - int
Таким чином, подвійна індексація A [i] [j] рівносильна запису
* (* (A + i) + j).

1.16 Подвійний покажчик - це двовимірний масив

Подвійні покажчики не так часто використовуються в якості двовимірного масиву.
Приклад. Розглянемо подвійний покажчик
int n = 5;
int * pi = &n;
int ** ppi = π
Побудуємо схему ОЗУ для всіх трьох змінних
SHAPE \ * MERGEFORMAT
5
n
pi
ppi
20
10

Рис.1.
Оператор
ppi [1] [1] = 10;
синтаксично правильний, але логічно помилковий. У даному випадку число 10 записано в навмання вибраної комірки ОЗУ, що може призводити час від часу до фатальних помилок.
Оператор
ppi [0] [1] = 20;
також синтаксично правильний, але логічно помилковий.
Приклад. Розглянемо масив рядків
char * Arr [] = {"Hello", "", "World!"};
Відповідно до пріоритету операцій тип Arr - це char * [], тобто масив типів char *, іншими словами масив рядків. Але рядок - це одновимірний масив елементів типу char, тобто тип рядки - це char *. Тому тип Arr - це також і char **. Таким чином, ми показали, що Arr - подвійний покажчик.

1.17 Перегляд покажчиків в відладчик

Для покажчика ptri, визначеного, як
int i = 4, * ptri;
ptri = &i;
вікно перегляду в відладчик по Alt-F4 має вигляд
Табліца.1.
8FAC: FFF2
п
Ds: FFF4
[0]
4 (0x0004)
int *
Тут зазначені:
· Адресу самої змінної ptri, рівний 8FAC: FFF2;
· Значення цієї змінної Ds: FFF4;
· А також вміст комірки за адресою Ds: FFF4, тобто значення i.
Для того, щоб дізнатися вміст комірок, що оточують змінну i, потрібно скористатися комбінацією клавіш Alt-I, ввести початковий індекс (Starting index) і число комірок (Count). Якщо, наприклад, введені числа -5 і 15, то можна в наведеному вище вікні можна переглянути елементи масиву
ptri [-5], ptri [-4], ..., ptri [10].

1.18 Контрольні питання

1. Як визначити розмір одновимірного масиву?
2. Які розміри можна опустити у масиву при його ініціалізації?
3. Намалюйте схему ОЗУ при виході за діапазон масиву int A [3] [4] у разі логічної помилку A [3] [4] = 0;
4. Визначте зсув у байтах елемента A [i] [j] щодо початку масиву float A [4] [5].
5. Напишіть програму, в якій знаходиться сума елементів першої та останньої рядка та стовпця матриці A [m] [n].
6. Оголошено змінні
char c;
int * pi;
float ** ppf;
Вкажіть типи та базові типи виразів, якщо вони існують
& C, * (& c), & pi [0], & (p +10), & & ppf, ppf [10], (* ppf) [3]
7. Є покажчик
int n = 5, m = 20;
int * const pi = &n;
Які оператори синтаксично невірні
* Pi = 10;
pi = &m;
* Pi + +;
(* Pi) + +;

2. Лабораторні завдання

2.1 Скалярний твір

Напишіть функцію, яка знаходить скалярний добуток двох векторів.

2.2 Мінімакс

Дві функції знаходять порядковий минимакс і порядковий максимин елементів прямокутної матриці цілих чисел. Під порядковим Мінімакс розуміється мінімальне з максимальних елементів у всіх рядках матриці.

2.3 Масиви рядків

Напишіть функцію, яка об'єднує масив рядків в один рядок, а також тест цієї функції.

2.4 Тривимірний масив

Знайдіть суму елементів тривимірного масиву з використанням тільки вказівної арифметики.

3. Додаткові завдання
1. Написати функцію, яка додає рядок до масиву рядків.
2. Написати функцію, яка перетворює в текст грошову суму.

Бібліографічний список
1. Керніган Б. Мова програмування Сі / Б. Керніган, Д. Рітчі. СПб.: Невський діалект, 2001. 352 с.
2. Подбельський В.В. Програмування на мові Сі / В.В. Подбельський, С.С. Фомін. М.: Фінанси і статистика, 2004. 600 с.
3. Програмування в Сі. Організація вводу-виводу: метод вказівки / сост. С.П. Трофімов. Єкатеринбург: УГТУ, 1998. 14 с.
4. Програмування в Сі. Динамічний розподіл пам'яті: метод. вказівки / сост. С.П. Трофімов. Єкатеринбург: УГТУ, 1998. 13 с.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лабораторна робота
52.4кб. | скачати


Схожі роботи:
Масиви Двовимірні масиви
Масиви в С З
Масиви в С З 2
Масиви
Масиви в СС
Болотні масиви
Програмування масиви та рядки
Масиви у мові Паскаль
Масиви та покажчики в мові програмування Сі
© Усі права захищені
написати до нас