Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 14

Как нарисовать блок-схему для большой функции?

13.06.2015, 15:43. Показов 894. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ПРивет всем! помогите кто нибудь... схема алгоритма как мне нарисовать когда у меня такая программа. вот результат который дает:
MEM - показывает состояние памяти
MAP - карту памяти текущего процесса
LIST - список всех процессов
Спасибо за ранне
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#include <windows.h>
#include <tlhelp32.h>
#include <cstring>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
const ULONG MinUserAddress = 0x00000000;    // минимальный адрес виртуальной памяти процесса
const ULONG MaxUserAddress = 0x7FFF0000;    // максимальный адрес виртуальной памяти процесса (дальше идут системные адреса)
 
enum MemType        // тип участка памяти
{
  MemUnknown,       // неизвестный тип
  MemFree,          // область свободна
  MemReserve,       // область зарезервирована
  MemPrivate,       // область используется только одним процессом
  MemMapped,        // область отображена на файл данных
  MemImage,         // область отображена на файл образа задачи
};
 
void ShowMemoryStatus();                // выводит состояние памяти на консоль
void ShowMemType(MemType type);         // выводит название указанного типа памяти
void ShowMemoryMap(HANDLE hProcess, ULONG StartAddress, ULONG EndAddress);
     // выводит карту процесса hProcess, начиная от адреса StartAddress до адреса EndAddress
void ShowMemoryMap(HANDLE hProcess);    // выводит полную карту процесса hProcess
void ShowProcessList();                 // выводит список всех процессов и их идентификаторов
 
 
int main()
{
    setlocale(LC_ALL,"Russian");
    cout << "Лабораторная работа №4 Архитектура памяти Windows" << endl
         << endl
         << "Введите \'HELP\' для справки" << endl << endl;
    bool quitProgram = false;
    do
    {
         const char *spaceSymbols = " \t";      // символы, которые считаются пробельными
         const int commandLength = 255;         // максимальная длина введенной строки
         char command[commandLength];     // буфер, в который считывается введенная строка         
         cout << flush << "> ";
         cin.getline(command, commandLength);   // читаем строку
         char *cmd = command;
         while (*cmd == ' ' || *cmd == '\t')
            cmd++;
         if (*cmd == '\0')
            continue;
         char *arg1 = strupr(strtok(cmd, spaceSymbols));  // первый аргумент (сама команда)
         char *arg2 = strtok(NULL, spaceSymbols);   // второй аргумент (идентификатор процесса)
         if (!strcmp(arg1, "MEM"))              // выводит состояние памяти
            ShowMemoryStatus();
         else if (!strcmp(arg1, "MAP"))         // выводит карту процесса
         {
            if (arg2 == NULL)           // без аргумента - выводит карту текущего процесса
               ShowMemoryMap(GetCurrentProcess());
            else
            {
               char *endptr;
               ULONG id = strtoul(arg2, &endptr, 0);   // получаем число из строки
               if (*endptr == '\0')                    // если преобразование удалось
               {   // получаем дескриптор процесса по его идентификатору:
                   HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, true, id);
                   if (hProcess == NULL)
                   {
                       cout << "WinAPI Error #" << GetLastError();
                   }
                   else
                   {   // и вызываем функцию вывода карты памяти:
                       ShowMemoryMap(hProcess);
                       CloseHandle(hProcess);
                   }
               }
               else
               {
                   cout << "Error in argument \'" << arg2 << "\'!";
               }
            }
         }
         else if (!strcmp(arg1, "LIST"))          // вывести процессы и их идентификаторы
            ShowProcessList();
         else if (!strcmp(arg1, "HELP"))          // вывести список команд
            cout << "MEM    - показать состояние памяти" << endl
                 << "MAP    - показать карту памяти текущего процесса" << endl
                 << "MAP id - показать карту памяти процесса по его идентификатору \'id\'" << endl
                 << "LIST   - показать список всех процессов" << endl
                 << "EXIT   - выход из программы" << endl
                 << "HELP   - окно справки";
         else if (!strcmp(arg1, "EXIT"))          // выйти из цикла (и из программы)
            quitProgram = true;
         else                                     // неизвестная команда
            cout << "Unknown command \'" << arg1 << "\'. Type \'HELP\' for a command list.";
         cout << endl << endl;
    } while (quitProgram == false);
    return 0;
}
 
void ShowMemoryStatus()  // вывести состояние памяти
{
    MEMORYSTATUS memoryStatus;
    memoryStatus.dwLength = sizeof(memoryStatus);
    GlobalMemoryStatus(&memoryStatus);
    double memPhysFree = (double)memoryStatus.dwAvailPhys / memoryStatus.dwTotalPhys * 100; // процент свободной физической памяти
    double memPageFree = (double)memoryStatus.dwAvailPageFile / memoryStatus.dwTotalPageFile * 100; // процент свободного файла подкачки
    double memVirtFree = (double)memoryStatus.dwAvailVirtual / memoryStatus.dwTotalVirtual * 100; // процент свободной виртуальной памяти   
    double memTotalPageFile = (double)memoryStatus.dwTotalPageFile; // Размер в байтах файла подкачки
    cout << setiosflags(ios::uppercase | ios::fixed)   // теперь выводим все данные на консоль
         << "Total Memory Occupied: " << memoryStatus.dwMemoryLoad << '%' << endl
         << "Physical Memory: Free=" << setprecision(1) << memPhysFree << '%'
         << " (0x" << hex << memoryStatus.dwAvailPhys
         << " bytes), Total 0x" << hex << memoryStatus.dwTotalPhys << " bytes" << endl
         << "PageFile Memory: Free=" << setprecision(1) << memPageFree << '%'
         << " (0x" << hex << memoryStatus.dwAvailPageFile
         << " bytes), Total 0x" << hex << memoryStatus.dwTotalPageFile << " bytes" << endl
         << "Virtual  Memory: Free= " << setprecision(1) << memVirtFree << '%'
         << " (0x" << hex << memoryStatus.dwAvailVirtual
         << " bytes), Total 0x" << hex << memoryStatus.dwTotalVirtual << " bytes" << endl
         << "Total PageFile = " << setprecision(1) << memTotalPageFile /1024 /1024 << " Megabytes" << endl;
}
 
void ShowMemType(MemType type)  // вывести тип памяти на консоль
{
    switch (type)
    {
       case MemFree:           cout << "Free";    break;
       case MemReserve:        cout << "Reserve"; break;
       case MemPrivate:        cout << "Private"; break;
       case MemMapped:         cout << "Mapped";  break;
       case MemImage:          cout << "Image";   break;
       default:                cout << "Unknown"; break;
    }
}
 
void ShowMemoryMap(HANDLE hProcess, ULONG StartAddress, ULONG EndAddress)  // вывести карту памяти процесса
{
    DWORD exCurrentId = GetCurrentProcessId();
    printf("\nCurrent ID = %d", exCurrentId);
    MEMORY_BASIC_INFORMATION MBI; // структура, используемая при вызове функции WinAPI
    for (ULONG Address = StartAddress;    // текущий адрес
         Address < EndAddress && Address < MaxUserAddress;
         Address = DWORD(MBI.BaseAddress) + MBI.RegionSize)
    {
        int retSize = VirtualQueryEx(hProcess, (LPCVOID)Address, &MBI, sizeof(MBI));  // вызов функции WinAPI
        if (retSize != sizeof(MBI))    // если ошибка
        {
            cout << endl << "WinAPI Error #" << GetLastError();
            return;
        }
        MemType mtMemType;  // определяем тип области памяти, исходя из структуры MBI
        switch (MBI.State)
        {
          case MEM_FREE:    mtMemType = MemFree;
                            break;
          case MEM_RESERVE: mtMemType = MemReserve;
                            break;
          case MEM_COMMIT:  switch (MBI.Type)
                            {      
                              case MEM_IMAGE:   mtMemType = MemImage; break;
                              case MEM_MAPPED:  mtMemType = MemMapped; break;
                              case MEM_PRIVATE: mtMemType = MemPrivate; break;
                              default:          mtMemType = MemUnknown;
                            }
                            break;
          default:          mtMemType = MemUnknown;
        }
        DWORD MapAddress = DWORD(MBI.BaseAddress); // адрес начала блока памяти
        DWORD MapSize = MBI.RegionSize;            // размер блока памяти
        if (MapAddress < Address)                  // поправка для адреса и размера
        {
            MapSize -= Address - MapAddress;
            MapAddress = Address;
        }
        if (MapAddress + MapSize > EndAddress)     // еще одна поправка для размера
            MapSize = EndAddress - MapAddress + 1;
        if (MBI.RegionSize == 0)      // устанавливаем минимальный размер для увеличения адреса Address в цикле for
            MBI.RegionSize = 4096;
        cout << endl
             << setiosflags(ios::uppercase)
             << "Address=0x" << setw(8) << setfill('0') << hex << MapAddress
             << ", Size=0x"  << setw(8) << setfill('0') << hex << MapSize << " bytes"
             << ", Type="    << hex;
        ShowMemType(mtMemType);       // выводим на консоль тип области памяти в виде строки
    }
}
 
void ShowMemoryMap(HANDLE hProcess)   // выводим карту всего процесса
{
    ShowMemoryMap(hProcess, MinUserAddress, MaxUserAddress);
}
 
void ShowProcessList()                // выводим список процессов и их идентификаторов
{
    // делаем вызов функции ToolHelp32 - снимок всех процессов:
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 entry;             // структура, в которую будет помещаться информация об очередном процессе
    entry.dwSize = sizeof(PROCESSENTRY32);
    const int idFieldLength = 6;      // длина поля вывода идентификатора процесса
    // выводим шапку таблицы:
    cout << setiosflags(ios::right)
         << setw(idFieldLength) << setfill(' ') << "ID"
         << setw(0) << " | Process Name";
    for (bool fRepeat = Process32First(hSnapshot, &entry); // цикл по всем процессам из снимка hSnapshot
         fRepeat == true;
         fRepeat = Process32Next(hSnapshot, &entry))
    {    // выводим информацию об очередном процессе
         cout << endl
              << setiosflags(ios::right | ios::dec)
              << setw(idFieldLength) << setfill(' ') << entry.th32ProcessID
              << " | " << setw(0) << entry.szExeFile;
    }
    CloseHandle(hSnapshot);       // закрываем дескриптор снимка}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.06.2015, 15:43
Ответы с готовыми решениями:

А. Составить алгоритм и нарисовать блок-схему для вычисления функции y = f(x) (выражение имеет ограничения в области опр
1)Составить алгоритм и нарисовать блок-схему для вычисления функции y = f(x)(выражение имеет ограничения в области определения). Составить...

Вычислить значение функции, нарисовать блок-схему
Помогите пожалуйста сделать блок схему: С помощью оператора WHILE написать программу, для вычисления значений функции F(x) на отрезке с...

Нарисовать блок-схему для задачи
помогите плиз такая задача по инфе!!!! Цифры каждого элемента одномерного массива увеличить на 1, 9 заменить на 0 !!!!! блок схему надо!!!!

3
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
13.06.2015, 22:16
Вот это для меня остается загадкой, откуда вы такие адреса все берете: MinUserAddress = 0x00000000 и MaxUserAddress = 0x7FFF0000 ???
Я знаю только такие:

si.lpMinimumApplicationAddress: 0x00010000 // Указатели на младший
si.lpMaximumApplicationAddress: 0x7FFEFFFF // и старший адреса памяти доступные для приложений и библиотек DLL (выделил даже, чтоб не сливалось)

© Блок-схемник - 0.8
Миниатюры
Как нарисовать блок-схему для большой функции?   Как нарисовать блок-схему для большой функции?   Как нарисовать блок-схему для большой функции?  

Как нарисовать блок-схему для большой функции?   Как нарисовать блок-схему для большой функции?  
Изображения
 
1
0 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 14
13.06.2015, 22:29  [ТС]
было на документации оттуда взял результат получилось.)) а где именно нарисовали блок схема? какую программу использовал?
0
13.06.2015, 22:41

Не по теме:

Копирайтом обозначил.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2015, 22:41
Помогаю со студенческими работами здесь

Нарисовать блок-схему для программы
Program lab7; const m=5; n=6; var b:array of real; a:array of real; i,j:integer; begin randomize; ...

Нарисовать блок-схему для программки
var p1,p2,p3,dp,w,pMin,pMax:double; i,n,hits:integer; hit1,hit2:boolean; const T_LAPLACE=2.576; // function...

Нужно нарисовать блок-схему для программы
Помогите нарисовать блок-схему для данной программы! # include &lt;iostream&gt; using namespace std; void Input( int* array,...

Нарисовать блок схему для данного кода
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { float cost; cout &lt;&lt; &quot;Cost (rur/kg): &quot;;...

Нарисовать блок-схему для данной программки
var x, s, k, min: integer; begin k := 0; x := 3465; s := 0; min := 32767; writeln('Введите целое число , 0 -...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru