ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

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

     

    Інформатика, програмування

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

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

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

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

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

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

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

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

    Дата:

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

    Зміст

    Зміст 2


    Вступ 3


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

    Завдання № 2 4
    Завдання № 6 4
    Завдання № 8 4
    Завдання № 10 4
    Завдання № 12 4
    Завдання № 14 4 < br> Завдання № 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));// Виділення динамічноїпам'яті для * 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

    free (x);// --//-- * x
    /*

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

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

    Завдання № 6


    # 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);
    )

    Завдання № 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); < p>)
    ) 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

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status