GeoSELECT.ru



Программирование / Реферат: Динамическое распределение памяти (Программирование)

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

Реферат: Динамическое распределение памяти (Программирование)



Министерство высшего и профессионального образования РФ
Уральский государственный технический университет
Радиотехнический факультет
Кафедра “Автоматика и информационные технологии”



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



Курсовая работа по дисциплине
основы алгоритмизации и программирования



Выполнил:студент Золин А.С.
группа Р-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 ((c'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 (c); //Вывод цифры на
экран
}

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 (((c>='0')&&(cn) n=i;
if (j>m) m=j;
}
n--;
fclose (pf);
return 1;
}
void free_()
{
for(int i=0;i

Новинки рефератов ::

Реферат: Проблеми та перспективи розвитку страхового ринку України (Страхование)


Реферат: Культура Доколумбовой Америки (Культурология)


Реферат: Эффект Ганна и его использование, в диодах, работающих в генераторном режиме (Радиоэлектроника)


Реферат: Ислам (Религия)


Реферат: Сократ (Философия)


Реферат: Разработка методики программного тестирования цифровых устройств с помощью программного пакета Design Center (Радиоэлектроника)


Реферат: Культура Ацтеков (Культурология)


Реферат: Профессиональная Терминология (Масс-медиа и реклама)


Реферат: Вопросы повышения экономической эффективности деятельности предприятия с использованием информационных технологий (Менеджмент)


Реферат: Взаимосвязь психической атмосферы в семье и уровня психического развития ребенка (Психология)


Реферат: Комплекс древнерусских боевых средств в IX-XII веках (История)


Реферат: Восприятие (Психология)


Реферат: Чарты магазина Питч (Музыка)


Реферат: MYSQL server (Программирование)


Реферат: Размещение промышленности в городе (Архитектура)


Реферат: Бухгалтерский баланс (Бухгалтерский учет)


Реферат: Анализ хозяйственной деятельности предприятия (Бухгалтерский учет)


Реферат: Группа сверстников как институт социализации (Психология)


Реферат: Схема технологии возделывания озимой пшениы (Сельское хозяйство)


Реферат: Коллективизация в России (История)



Copyright © GeoRUS, Геологические сайты альтруист