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

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

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

Mas=(char *)malloc (sizeof (char)); //Виділення пам’яті під перший позицію //цифри в числе. Виділено 16 байт тобто. 1 параграф потрібно порівняти три адреси, які поя; Программа обчислює октоэдрическую норму матриці довільних размеров. Вяться на екран в рез-те дії цієї програми. Якщо вересня цих адресах. Потім у який з’явився запиті запровадити *x з’явиться меню, вверху. Для отримання цих адрес… Читати ще >

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

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

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

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

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

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

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

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

Целью роботи є демонстрація роботи з динамічної пам’яттю з прикладу програм розроблених до завданням 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 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).

{.

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

if (j>m) m=j;

}.

n—;

fclose (pf);

return 1;

}.

void free_().

{.

for (int i=0;i.

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