Міністерство вищої та професійної освіти РФ  p> 
 Уральський державний технічний університет  p> 
 Радіотехнічний факультет  p> 
 Кафедра "Автоматика та інформаційні технології"  p> 
 Динамічний розподіл пам'яті  p> 
 Курсова робота з дисципліни основи алгоритмізації і програмування  p> 
 Виконав: студент Золін А.С. група Р-290Б  p> 
 Перевірив: Трофимов С.П.  p> 
 Дата:  p> 
 Єкатеринбург 2000  p> 
 Зміст  p> 
 Зміст 2  p> 
 
Вступ 3  p> 
 
Керівництво користувача 4  p> 
 Завдання № 2 4 
 Завдання № 6 4 
 Завдання № 8 4 
 Завдання № 10 4 
 Завдання № 12 4 
 Завдання № 14 4 < br> Завдання № 16 4  p> 
 Керівництво програміста 5  p> 
 Завдання № 2 5 
 Завдання № 6 5 
 Завдання № 8 6 
 Завдання № 10 8 
 Завдання № 12 10 
 Завдання № 14 11 
 Завдання № 16 12  p> 
 Бібліографічний список 15  p> 
 Введення  p> 
 Метою роботи є демонстрація роботи з динамічноїпам'яттю на прикладі програм розроблених до завдань 2, 6, 8, 10, 
12, 14, 16 з методичного вказівки [1].  P> 
 Динамічний розподіл пам'яті надає програмістувеликі можливості при зверненні до ресурсів пам'яті в процесівиконання програми, і коректна робота програми з динамічнимпам'яттю в істотному ступені залежить від знання функцій для роботиз нею.  p> 
 Керівництво користувача  p> 
 Завдання № 2  p> 
 Для того щоб переконатися що для кожного з однобайтових данихв купі виділено 16 байт тобто 1 параграф потрібно порівняти три адреси,які з'являться на екран у рез-ті дії цієї програми. Якщочисла в цих адресах стоять до двокрапки увелічіваютя (від першогоостанній) на еденічку, то це означає що на кожен блоквиділений один параграф в купі = 16 байт. Для отримання цих адресв відладчик досить натиснути Alt + F4 (в режимі відладчика) потім вщо з'явилося запиті ввести * x з'явиться меню, вгорі якого ібуде потрібну адресу, аналогічно для * y, * z.  p> 
 Завдання № 6  p> 
 Програма виділяє пам'ять під 20 змінних типу int, заповнюєїх випадковими числами з інтервалу [-3; 7] і виводить їх на екран.  p> 
 Завдання № 8  p> 
 Програма зберігає матриці у вигляді двох структур:  p> 
 Struct Matr1 (int m, n; int * ptr);  p> 
 Struct Matr2 (int m, n; int ** ptr);  p> 
 І виділяє пам'ять під них за допомогою наступних функцій:  p> 
 Int DinMatr1 (Matr1 * matr);  p> 
 Int DinMatr2 (Matr2 * matr);  p> 
 Завдання № 10  p> 
 Програма отримує з клавіатури натуральні числа, зберігаючи їхв купі, кінець вводу - число 0. Після закінчення введення числа виводятьсяна екран.  p> 
 Завдання № 12  p> 
 Програма обчислює октоедріческую норму матриці довільнихрозмірів.  p> 
 Завдання № 14  p> 
 Програма обчислює загальний розмір вільної купи.  p> 
 Завдання № 16  p> 
 Програма виконує зчитування матриці довільних розмірів зфайлу (роздільниками є пробіли), висновок цієї матриці наекран, а також запис у файл.  p> 
 Керівництво програміста  p> 
 У цьому розділі будуть приведені листинги програм зкоментарями.  p> 
 Завдання № 2  p> 
 
# include 
# include 
# include int main (void) 
(Char * x, * y, * z;// Оголошення змінних x = (char *) malloc (sizeof (char));// Виділення динамічноїпам'яті для * xy = (char *) malloc (sizeof (char));// --//-- * yz = (char *) malloc (sizeof (char));// --//-- * z clrscr ();// Очищення екрану printf ( "Adress of * x =% pn", x);// Вивід на екран адресипочатку блоку для * x printf ( "Adress of * y =% pn", y);// --//-- * y printf ( "Adress of * z =% pn", z);// -// - * z free (z);// Звільнення блокувиділеного для * z free (y);// --//-- * y  p> 
 free (x);// --//-- * x 
/*  p> 
 Для того щоб переконатися що для кожного з однобайтових данихв купі виділено 16 байт тобто 1 параграф потрібно порівняти три адреси,які поя-вяться на екран у рез-ті дії цієї програми. Якщо числа вцих адресах стоять до двокрапки увелічіваютя (від першого до останнього) наеденічку, то це означає що на кожен блок виділений один параграф в купі = 
16 байт.  P> 
 Для отримання цих адрес в відладчик досить натиснути Alt + F4 
(в режимі відладчика) потім у запиті, що з'явилося, ввести * x з'явиться меню,вгорі якого і буде потрібну адресу, аналогічно для * y, * z. 
 */return 0; 
)  p> 
 Завдання № 6  p> 
 
# include 
# include 
# include 
# include 
# include 
//N_var - число елементів масиву 
# define N_var 20main () 
(clrscr (); 
//Ініціалізація генератора случ. чиселrandomize ();int * mas; 
//Виділення пам'яті під масивif (! (mas = (int *) malloc (sizeof (int) * N_var))) 
(printf ( "Не достатньо пам'яті для виділення массіваn");exit (1); 
) 
//Заповнення масиву случ. числами в діапазоні від -3 до 7 зодночасним 
//виводом на екранfor (int i = 0; iptr) = (int *) malloc (sizeof (int) * (matr-> m) * (matr-> n))))return 0; return 1; 
)int DinMatr2 (Matr2 * matr) 
(If (! (Matr-> ptr = (int **) malloc (sizeof (int *) * (matr-> m)))) return 
0; for (int i = 0; im; i + +) 
 (if (! (Matr-> ptr [i] = (int *) malloc (sizeof (int) * (matr-> n)))) return 
0; 
) return 1; 
)void FreeMatr1 (Matr1 * matr) 
(If (matr-> ptr) free (matr-> ptr); 
)void FreeMatr2 (Matr2 * matr) 
(For (int i = 0; im; i + +) 
 (if (matr-> ptr [i]) free (matr-> ptr [i]); 
) if (matr-> ptr) free ( matr-> ptr); 
)  p> 
 Завдання № 10  p> 
 
# include 
# include 
# include 
# include main () 
(Clrscr (); char ** mas; int c, m = 0, n = 0; mas = (char **) malloc (sizeof (char *));// Виділення пам'яті підперше число mas [0] = (char *) malloc (sizeof (char));// Виділення пам'яті підпершу позицію 
//цифри в числі printf ( "Intputn"); while ((c = getch ())-' 0 ')// Ще не ввели 0  p> 
 (if (c == 13)// При натисканні 
Enter виділення пам'яті 
 (//під новечисло mas [m] [n] = 0; m + +; if (! (mas = (char **) realloc (mas, sizeof (char *) * (m +1 )))) p> 
 ( printf ( "Не вистачає памятіn"); exit (1);  p> 
) n = 0; putch (10);// Переклад карреткі іпереклад рядка putch (13);// при виведенні наекран 
) if ((c'9 ')) continue;// Перевірка на введеннятільки цифр if ((! n) & & (m))// Виділення пам'яті підпершу позицію 
 (//в наступномучислі if (! (mas [m] = (char *) malloc (sizeof (char))))  p> 
 (printf ( "Не вистачає памятіn"); exit (1);  p> < p>) 
) mas [m] [n] = c;// Занесення цифрина потрібну позицію n + +;// в число if (n)// Виділенняпам'яті під наступну 
 (//позицію вчислі if (! (mas [m] = (char *) realloc (mas [m], sizeof (char) * (n +1 )))) p> 
 (printf ( "Не вистачає памятіn") ; exit (1);  p> 
) 
) putch (c);// Вивід цифри наекран 
)  p> 
 printf ( "Outputn"); for (int i = 0; im))))return 0; for (int i = 0; im; i + +) 
 (if (! (matr-> ptr [i] = (double *) malloc (sizeof (double) * (matr-> n))))return 0; 
) return 1; 
)void FreeMatr (Matr * matr) 
(For (int i = 0; im; i + +) 
 (if (matr-> ptr [i]) free (matr-> ptr [i]); 
) if (matr-> ptr) free ( matr-> ptr); 
)void Setelem (Matr * matr, double M [3] [3]) 
(For (int i = 0; im; i + +) 
 (for (int j = 0; jn; j + +) (matr-> ptr [i] [j]) = M [i] [j]; 
) 
)double OctNorm (Matr * matr) 
(Double max = 0; double a = 0; for (int i = 0; im; i + +) 
 (max + = matr-> ptr [i] [0]; 
) for (int j = 0; jn; j + +) 
 (for (i = 0; im; i + +) 
 (a + = matr-> ptr [i] [j]; 
) if (a> max) max = a; a = 0; 
) return max; 
)  p> 
 Завдання № 14  p> 
 
# include 
# include 
# include 
# include  p> 
 void main (void) 
(Long N = 1; char * A; 
 A = (char *) calloc (N, 1024);// Виділення в купі місця  p> 
 do 
 (free (A);// Звільнення масиву  p> 
 A = (char *) calloc (N, 1024);// Виділення пам'яті під більшиймасив  p> 
 N + +;// Збільшення лічильника 
) while (A! = NULL);// Продовжувати поки пам'ять виділяється printf ( "nMaximum size of heap N =% iKb", N);// Висновок результатів 
)  p> 
 Завдання № 16  p> 
 # include  p> 
 # include  p> 
 # include  p> 
 # include  p > 
 # include struct MATR  p> 
 (int n, m; double ** ptr; int read_ (char name [80])  p> 
 ( p> 
 FILE * pf; int i = 0, j = 0; char c; char num [10]; int pos = 0, flag = 1; m = 0; n = 0; if (! (pf = fopen (name, " rt "))) return 0; ptr = (double **) malloc (sizeof (double *)); ptr [0] = (double *) malloc (sizeof (double)); while ((c = fgetc (pf) )! = EOF)  p> 
 (if (((c> = '0')&&( cn) n = i; if (j> m) m = j;  p> 
) n -; fclose (pf); return 1;  p> 
) void free_ ()  p> 
 (for (int i = 0; i  p>