Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Динамическое розподіл памяти

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Щоб переконатися що кожного з однобайтовых даних купи виділено 16 байт тобто. 1 параграф потрібно порівняти три адреси, які появяться на екран в рез-те дії програмних засобів. Якщо вересня цих адреси які стоять до двокрапки увеличиваютя (від першого до останнього) на еденичку, це означатиме що у кожен блок виділено один параграф купи = 16 байт. Для отримання цих адрес в отладчике досить натиснути… Читати ще >

Динамическое розподіл памяти (реферат, курсова, диплом, контрольна)

Міністерство вищої й фахової освіти РФ.

Уральський державний технічний университет.

Радіотехнічний факультет.

Кафедра «Автоматика і інформаційні технологии».

Динамічний розподіл памяти.

Курсова робота з дисципліни основи алгоритмізації і программирования.

Выполнил:студент Золін О.С. група Р-290Б.

Перевірив: Трофимов С.П.

Дата:

Єкатеринбург 2000.

Содержание Содержание 2.

Запровадження 3.

Керівництво користувача 4.

Завдання № 2 4 Завдання № 6 4 Завдання № 8 4 Завдання № 10 4 Завдання № 12 4 Завдання № 14 4 Завдання № 16 4.

Руководство програміста 5.

Завдання № 2 5 Завдання № 6 5 Завдання № 8 6 Завдання № 10 8 Завдання № 12 10 Завдання № 14 11 Завдання № 16 12.

Библиографический список 15.

Метою роботи є підставою демонстрація роботи з динамічної пам’яттю з прикладу програм розроблених до завданням 2, 6, 8, 10, 12, 14, 16 з методичного вказівки [1].

Динамічний розподіл пам’яті надає програмісту великі можливості при зверненні до ресурсів пам’яті у процесі виконання програми, і коректна робота програми з динамічної пам’яттю істотно залежить від знання функцій до роботи з ней.

Керівництво пользователя.

Завдання № 2.

Щоб переконатися що кожного з однобайтовых даних купи виділено 16 байт тобто. 1 параграф потрібно порівняти три адреси, які появяться на екран в рез-те дії програмних засобів. Якщо вересня цих адреси які стоять до двокрапки увеличиваютя (від першого до останнього) на еденичку, це означатиме що у кожен блок виділено один параграф купи = 16 байт. Для отримання цих адрес в отладчике досить натиснути Alt+F4 (як отладчика) потім у який з’явився запиті запровадити *x з’явиться меню, вгорі якого і буде потрібний адресу, аналогічно для *y, *z.

Завдання № 6.

Програма виділяє пам’ять під 20 змінних типу int, заповнює їх випадковими числами з інтервалу [-3;7] і виводить на экран.

Завдання № 8.

Програма зберігає матриці як двох структур:

Struct Matr1{int m, n; int *ptr};

Struct Matr2{int m, n; int **ptr};

І виділяє пам’ять під їх із допомогою наступних функций:

Int DinMatr1(Matr1 *matr);

Int DinMatr2(Matr2 *matr);

Завдання № 10.

Програма отримує з клавіатури натуральні числа, зберігаючи їх купи, кінець введення — число 0. Після закінчення введення числа виводяться на экран.

Завдання № 12.

Програма обчислює октоэдрическую норму матриці довільних размеров.

Завдання № 14.

Програма обчислює загальний розмір вільної кучи.

Завдання № 16.

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

Керівництво программиста.

У розділі буде приведено листинги програм з комментариями.

Завдання № 2.

#include #include #include int main (void) { char *x,*y,*z; //Оголошення змінних x=(char *)malloc (sizeof (char)); //Виділення динамічної пам’яті для *x y=(char *)malloc (sizeof (char)); // —//— *y z=(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.

free (x); // —//— *x /*.

Щоб переконатися що кожного з однобайтовых даних купи виділено 16 байт тобто. 1 параграф потрібно порівняти три адреси, які співаючивяться на екран в рез-те дії програмних засобів. Якщо вересня цих адреси які стоять до двокрапки увеличиваютя (від першого до останнього) на еденичку, це означатиме що у кожен блок виділено один параграф купи = 16 байт.

Для отримання цих адрес в отладчике досить натиснути Alt+F4 (як отладчика) потім у який з’явився запиті запровадити *x з’явиться меню, вгорі якого і буде потрібний адресу, аналогічно для *y, *z. */ return 0; }.

Завдання № 6.

#include #include #include #include #include //N_var — число елементів масиву #define N_var 20 main () { 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); }.

Завдання № 10.

#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.

{ if (c==13) //При натисканні Enter виділення пам’яті { //під нове число mas[m][n]=0; m++; if (!(mas=(char **)realloc (mas, sizeof (char *)*(m+1)))).

{ printf («Бракує памятиn »); exit (1);

} n=0; putch (10); //Переклад карретки і переклад рядки putch (13); //при виведення на екран } if ((з «9 »)) continue; //Перевірка на введення лише цифр if ((!n)&&(m)) //Виділення пам’яті під перші { //наступного числі if (!(mas[m]=(char *)malloc (sizeof (char)))).

{ printf («Бракує памятиn »); exit (1);

} } mas[m][n]=c; //Занесення цифри на потрібну позицію n++; //до if (n) //Виділення пам’яті під таку { //позицію у числі if (!(mas[m]=(char *)realloc (mas[m], sizeof (char)*(n+1)))).

{ printf («Бракує памятиn »); exit (1);

} } putch (з); //Висновок цифри на екран }.

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; }.

Завдання № 14.

#include #include #include #include.

void main (void) { long N=1; char *A; A=(char *)calloc (N, 1024); //Виділення купи места.

do { free (A); //Звільнення массива.

A=(char *)calloc (N, 1024); //Виділення пам’яті під більший массив.

N++; //Збільшення лічильника } while (A≠NULL); //Продовжувати поки пам’ять виділяється printf («nMaximum size of heap N=%iKb », N);//Вывод результатів }.

Завдання № 16.

#include.

#include.

#include.

#include.

#include struct MATR.

{ int n, m; double **ptr; int read_(char name[80]).

{.

FILE *pf; int i=0,j=0; char з; 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).

{ if (((з>= «0 »)&&(cn) n=i; if (j>m) m=j;

} n—; fclose (pf); return 1;

} void free_().

{ for (int i=0;i.

Показати весь текст
Заповнити форму поточною роботою