Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
supra_jdm
0 / 0 / 0
Регистрация: 25.04.2015
Сообщений: 54
#1

Прокомментируйте,пожалуйста, участки программы

28.10.2016, 15:26. Просмотров 125. Ответов 3
Метки нет (Все метки)

Здравствуйте! Кому не сложно, помогите, пожалуйста, прояснить некоторые части программы.
Суть программы заключается в следующем - программа моделирует динамическое распределение памяти в операционной системе. В качестве модели - байтовый массив.
Функции следующие:
1) выделяет участок заданного размера.
2) освобождает ранее выделенный участок.
3)получается информацию о свободных/занятых участках.
Я не очень понимаю,что за переменные cx,j? Почему block=(int)ceil((double)byte/3)? Это,получается, один блок состоит из 3х байт?
Непонятна эта запись
C++
1
2
3
4
5
switch(ram[i] | 0)
        {
            case 0: cx++; break;
            case 128: cx=0; break;
        }
Объясните, пожалуйста. Если можно - закомментируйте некоторые части программы.
ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
#include <cmath>
using namespace std;
 
char ram[256];
 
int get_mem(int byte)
{
 
    int block=1;
    int cx=0, result=0, j=0;
 
    block=(int)ceil((double)byte/3);
    if(block > 86) { cout <<"Error!!!" <<endl; return -1; }
 
    for(int i=0;i<256;i=i+3)
    {
        switch(ram[i] | 0)
        {
            case 0: cx++; break;
            case 128: cx=0; break;
        }
        if(cx==block)
        {
            result=i;
            break;
        }
        if(i==255 && cx!=block)
        {
            cout <<"Error!!!" <<endl;
            return -1;
        }
    }
    j=result;
    cx=0;
    while(cx!=block)
    {
        ram[j]=ram[j] | 128;
        //ram[j+1]=byte;
        cx++;
        if(cx==block) { ram[j+1]=byte; break; }
        j=j-3;
    }
    return j;
}
//---------------------------------------------
void del_mem(int address)
{
    int block, byte;
 
    byte=ram[address+1];
    block=(int)ceil((double)byte/3);
    for(int i=address;i<address+block*3;i=i+3)
        ram[i]=ram[i] & 0;
}
//-----------------------------------------
void inf()
{
    int block=0, free_block=0;
    int p, free_mem, nf_mem, i;
 
    for(int j=0;j<256;j=j+3)
    {
        if((ram[j] | 0) == 0 ) free_block++;
        else block++;
    }
 
    nf_mem=block*3;
    free_mem=free_block*3;
    cout <<"Число свободных блоков: " <<free_block <<endl;
    cout <<"Число занятых блоков: " <<block <<endl;
    i=0;
    while(i<256)
    {
        switch(ram[i] | 0)
        {
            case 0: i=i+3; break;
            case 128: p=(int)ceil((double)ram[i+1]/3);
                      cout <<"Адрес " <<i <<' ' <<"размером: " <<p*3 <<endl;
                      i=i+p*3;
                      break;
        }
    }
    cout <<"Количество свободной памяти: " <<free_mem <<" bytes" <<endl;
    cout <<"Количество занятой памяти: " <<nf_mem <<" bytes" <<endl;
}
//-----------------------------------------
int main()
{
    setlocale(LC_ALL, "Russian");
    int a, b;
    char choise='0';
 
    while(choise!=27)
    {
        cout <<"=====================================================" <<endl;
        cout <<"1. Получить память" <<endl;
        cout <<"2. Освободить память" <<endl;
        cout <<"3. Информация по памяти" <<endl;
        cout <<"Выход - Esc" <<endl;
        cout <<"Сделайте выбор: ";
        cin >>choise;
        cout <<"=====================================================" <<endl;
        switch(choise)
        {
            case '1': cout <<endl;
                      cout <<"Введите количество байт: ";
                      cin >>a;
                      b=get_mem(a);
                      break;
            case '2': cout <<endl;
                      cout <<"Введите адрес: ";
                      cin >>a;
                      del_mem(a);
                      break;
            case '3': inf();
                      break;
            default: break;
        }
    }
 
    return 0;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2016, 15:26
Ответы с готовыми решениями:

Прокомментируйте, пожалуйста, код программы.
Доброго дня всем! Перед Вами - 2 программы - 1 шифрует текст методом...

Объясните пожалуйста некоторые участки кода
Есть код (Идеально сбалансированное дерево): // #include &quot;stdafx.h&quot;...

Прокомментируйте пожалуйста
#include &quot;iostream&quot; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;stdio.h&gt;...

Прокомментируйте пожалуйста
Не до конца понимаю код программы. Прошу дать комментарии к коду. #include...

Прокомментируйте пожалуйста код
// Zadacha1.1.cpp: определяет точку входа для консольного приложения....

3
hoggy
Заблокирован
28.10.2016, 15:32 #2
Цитата Сообщение от supra_jdm Посмотреть сообщение
Если можно - закомментируйте некоторые части программы.
да хоть всю:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// #include <iostream>
// #include <cmath>
// using namespace std;
// 
// char ram[256];
// 
// int get_mem(int byte)
// {
// 
//     int block = 1;
//     int cx = 0, result = 0, j = 0;
// 
//     block = (int)ceil((double)byte / 3);
//     if (block > 86) { cout << "Error!!!" << endl; return -1; }
// 
//     for (int i = 0; i<256; i = i + 3)
//     {
//         switch (ram[i] | 0)
//         {
//         case 0: cx++; break;
//         case 128: cx = 0; break;
//         }
//         if (cx == block)
//         {
//             result = i;
//             break;
//         }
//         if (i == 255 && cx != block)
//         {
//             cout << "Error!!!" << endl;
//             return -1;
//         }
//     }
//     j = result;
//     cx = 0;
//     while (cx != block)
//     {
//         ram[j] = ram[j] | 128;
//         //ram[j+1]=byte;
//         cx++;
//         if (cx == block) { ram[j + 1] = byte; break; }
//         j = j - 3;
//     }
//     return j;
// }
// //---------------------------------------------
// void del_mem(int address)
// {
//     int block, byte;
// 
//     byte = ram[address + 1];
//     block = (int)ceil((double)byte / 3);
//     for (int i = address; i<address + block * 3; i = i + 3)
//         ram[i] = ram[i] & 0;
// }
// //-----------------------------------------
// void inf()
// {
//     int block = 0, free_block = 0;
//     int p, free_mem, nf_mem, i;
// 
//     for (int j = 0; j<256; j = j + 3)
//     {
//         if ((ram[j] | 0) == 0) free_block++;
//         else block++;
//     }
// 
//     nf_mem = block * 3;
//     free_mem = free_block * 3;
//     cout << "Число свободных блоков: " << free_block << endl;
//     cout << "Число занятых блоков: " << block << endl;
//     i = 0;
//     while (i<256)
//     {
//         switch (ram[i] | 0)
//         {
//         case 0: i = i + 3; break;
//         case 128: p = (int)ceil((double)ram[i + 1] / 3);
//             cout << "Адрес " << i << ' ' << "размером: " << p * 3 << endl;
//             i = i + p * 3;
//             break;
//         }
//     }
//     cout << "Количество свободной памяти: " << free_mem << " bytes" << endl;
//     cout << "Количество занятой памяти: " << nf_mem << " bytes" << endl;
// }
// //-----------------------------------------
// int main()
// {
//     setlocale(LC_ALL, "Russian");
//     int a, b;
//     char choise = '0';
// 
//     while (choise != 27)
//     {
//         cout << "=====================================================" << endl;
//         cout << "1. Получить память" << endl;
//         cout << "2. Освободить память" << endl;
//         cout << "3. Информация по памяти" << endl;
//         cout << "Выход - Esc" << endl;
//         cout << "Сделайте выбор: ";
//         cin >> choise;
//         cout << "=====================================================" << endl;
//         switch (choise)
//         {
//         case '1': cout << endl;
//             cout << "Введите количество байт: ";
//             cin >> a;
//             b = get_mem(a);
//             break;
//         case '2': cout << endl;
//             cout << "Введите адрес: ";
//             cin >> a;
//             del_mem(a);
//             break;
//         case '3': inf();
//             break;
//         default: break;
//         }
//     }
// 
//     return 0;
// }
0
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
28.10.2016, 15:33 #3
Цитата Сообщение от hoggy Посмотреть сообщение
да хоть всю

Не по теме:

и все равно я считаю, что на форум нужно добавить тег: "троллинг" :)))

0
supra_jdm
0 / 0 / 0
Регистрация: 25.04.2015
Сообщений: 54
28.10.2016, 15:33  [ТС] #4
Хорошо. Неправильно выразилась - ПРОкомментируйте))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2016, 15:33

Прокомментируйте код пожалуйста
#include&lt;iostream.h&gt; #include&lt;stdio.h&gt; #include&lt;conio.h&gt;...

Прокомментируйте пожалуйста код
Объясните пожалуйста как работает данный кусок кода: template &lt;typename T&gt;...

Прокомментируйте, пожалуйста рекурсию
Нашел в сети код прохождения доски шахм. конем. разобраться не очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru