Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 914
от 22.11.2007, 14:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 479, Экспертов: 75
В номере:Вопросов: 6, Ответов: 13


Вопрос № 109696: Всем добрый день! Вопрос - как можно определить объем оперативной памяти занимаемый приложением (внутри этого приложения)? Заранее спасибо....
Вопрос № 109738: Товарищи эксперты помогите очень нада. Мне нужен работоспособный просмоторщик файлов ( браузер ). Пишу на WTL. Только нужно что бы все действия были в контролах типа CTreeViewCtrl, CListViewCtrl,... Искал в инете не нашол - может плохо искал. Пом...
Вопрос № 109770: Здравствуйте, ув. эксперты. У меня к вам два вопроса. 1) Если в файле n строчек. Почему данный цикл выполняется n+1 раз? while(!fin.eof()) { fin >> var; avrval += var; count++; } В итоге в переменную avrv...
Вопрос № 109791: Здравствуйте, эксперты! Как исправить следующую программу (по возможности только конструктор копии и деструктор), чтобы деструктор освобождал память. Нужно сделать так чтобы память очищалась в классе, а не int main() программе....
Вопрос № 109812: Здрасте. Как правильно в C++ Builder программно создать массив TImage. Делал так: TImage *Im[5]; Im[0]->Picture->LoadFromFile("2.gif"); При компиляции выдает ошибку. Обязательно ли указывать Parent этого массива? И как...
Вопрос № 109844: Здрасте!!Я не пойму для чего нужны бинарные деревья???неужели только для сортировки???И я вообще не могу понять как они работают... программным путем...ни в одной из книг,которые я читаю не приведено даже валюсенького кусочка кода.... вразумите п...

Вопрос № 109.696
Всем добрый день! Вопрос - как можно определить объем оперативной памяти занимаемый приложением (внутри этого приложения)? Заранее спасибо.
Отправлен: 16.11.2007, 14:24
Вопрос задал: Чечулин Андрей (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Ю.В.
Здравствуйте, Чечулин Андрей!

Неплохо было бы в первую очередь обратиться к MSDN за вопросом;)
Ну да ладно, подскажу. Получить инфо об использовании памяти процессом (как в менеджере задач) можно с помощью стандартной ф-ии GetProcessMemoryInfo().

Описание:
BOOL WINAPI GetProcessMemoryInfo(
HANDLE Process, //Дескриптор нужного нам процесса
PPROCESS_MEMORY_COUNTERS ppsmemCounters, // Указатель на структуру, в которую будет возвращена инфо
DWORD cb //размер передаваемой структуры
);

Вот что нам может рассказать структура:

typedef struct _PROCESS_MEMORY_COUNTERS {
DWORD cb;
DWORD PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;

Из всех полей, вам нужно WorkingSetSize - размер занимаемой процессомпамяти в БАЙТАХ. Описание остальных полей вы легко найдете в MSDN.

Пример функции, возвращающей объем занимаемой памяти текущего процесса в приложении...

P.S. Не забудьте подключить к проекту psapi.h и прилинковать psapi.lib

Успехов!

Приложение:

Ответ отправил: Лучников Ю.В. (статус: 1-ый класс)
Ответ отправлен: 16.11.2007, 21:06


Вопрос № 109.738
Товарищи эксперты помогите очень нада. Мне нужен работоспособный просмоторщик файлов ( браузер ). Пишу на WTL. Только нужно что бы все действия были в контролах типа CTreeViewCtrl, CListViewCtrl,...
Искал в инете не нашол - может плохо искал. Помогите.
Отправлен: 16.11.2007, 19:19
Вопрос задал: Abdyla_v (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лясин Александр Владимирович
Здравствуйте, Abdyla_v!

Я почти не работаю в Windows, но тема заинтересовала, да и в интернет я искать умею - посмотрите здесь, возможно это вам поможет
Link...

Отредактирована длинная ссылка. Остальное-на усмотрение специалистов данной рассылки.
-----
∙ Отредактировал: Климова Марина Александровна (*Мастер-Эксперт)
∙ Дата редактирования: 17.11.2007, 00:37
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 16.11.2007, 23:31


Вопрос № 109.770
Здравствуйте, ув. эксперты. У меня к вам два вопроса.
1) Если в файле n строчек.
Почему данный цикл выполняется n+1 раз?
while(!fin.eof()) {
fin >> var;
avrval += var;
count++;
}
В итоге в переменную avrval последнее число (из файла) записывается два раза.

2) Не подскажите ли функцию на с++ с помощью, которой можно начать считывание файла заново. А то уже надоело открывать и закрывать файл по несколько раз.
Отправлен: 17.11.2007, 00:12
Вопрос задал: Никитаев Константин Александрович (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: CruelHity
Здравствуйте, Никитаев Константин Александрович!
1) ненаю все правильно у вас написано
вы показываете не весь код может там ошибка??
у мя все работает см приложения
2)с помощью функции seekg(позиция файла), см приложения!!!!

Приложение:

Ответ отправил: CruelHity (статус: 5-ый класс)
Ответ отправлен: 17.11.2007, 01:16
Оценка за ответ: 4
Комментарий оценки:
"вы показываете не весь код может там ошибка?"
Я же в своём вопросе указывал, что данный цикл работает некорректно, причём здесь остальной код.

Ещё хотелось бы видеть комментарии в коде.

Отвечает: Лясин Александр Владимирович
Здравствуйте, Никитаев Константин Александрович!
Попробуйте следующим образом
for (;;) {
fin>>var;
if (fin.eof()) break;
avrval+=var;
count++;
}
Вы используете STL, эта библеотека
может иметь несколько различные (несильно отличающиеся) реализации
у разных производителей. Видимо вы работаете с ifstream классом, который при считывании
файла "не знает", что файл закончился - пока не считает из потока сам символ EOF и
"не заглянет" за конец файла.

Для того, чтбы начать чтение файла сначала - можете использовать метод
того же класса seekg
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 17.11.2007, 13:56
Оценка за ответ: 4
Комментарий оценки:
Из файла считывается неизвестное количество строчек (чисел), а переменная count в моем примере является счетчиком. Не совсем понимаю как можно это реализовать через цикл for().

Отвечает: kool
Здравствуйте, Никитаев Константин Александрович!
1) Скорее всего последняя строка пустая
2) fseek() - позиционирует указатель файла куда нужно
Удачи!


---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 17.11.2007, 14:15
Оценка за ответ: 4
Комментарий оценки:
Проверял, последняя строчка в файле точно не пустая.

Отвечает: Ross
Здравствуйте, Никитаев Константин Александрович!

Видимо вы используете компилятор, в котором немного своебразно реализован класс ifstream (Turbo C++ или Borland C++), т.к у меня ваш код работает без проблем. Могу предложить такое решение:
while(!(fin >> var).eof())
{
avr_val += var;
++count;
}

---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 19.11.2007, 15:51


Вопрос № 109.791
Здравствуйте, эксперты!
Как исправить следующую программу (по возможности только конструктор копии и деструктор), чтобы деструктор освобождал память.
Нужно сделать так чтобы память очищалась в классе, а не int main() программе.

Приложение:

Отправлен: 17.11.2007, 07:05
Вопрос задал: Tito (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: V1s0r
Здравствуйте, Tito!

Страшные вещи у вас происходят... особенно в Long::Long(const Long &ob), Long :: operator + (Long &op2)

Советую почитать в книге Страуструпа "Язык С++" про реализацию класса String и всё встанет на свои места.
Ответ отправил: V1s0r (статус: 4-ый класс)
Ответ отправлен: 17.11.2007, 12:50
Оценка за ответ: 4

Отвечает: CruelHity
Здравствуйте, Tito!
Как я понял вам надо удалить содержимое объектов х и y до завершения программы! тогда деструтктор вам не полдходит потомучто деструктор вызываеться только в конце тела! вам нужно создать две функции удаления памяти и резервирования!
И вообще у вас очень много ошибок! вызабыли перегрузить оператор =, и много другого!
См приложения! Я переделал вашу програму!
Удачи!
Разбирайте и спрашивайте что не понятно!

Приложение:

Ответ отправил: CruelHity (статус: 5-ый класс)
Ответ отправлен: 17.11.2007, 13:16
Оценка за ответ: 5


Вопрос № 109.812
Здрасте. Как правильно в C++ Builder программно создать массив TImage. Делал так:
TImage *Im[5];
Im[0]->Picture->LoadFromFile("2.gif");
При компиляции выдает ошибку.
Обязательно ли указывать Parent этого массива? И как правильно указать для массива?
Отправлен: 17.11.2007, 10:12
Вопрос задал: RussianGM
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Ю.В.
Здравствуйте, RussianGM!

Ну еще б не выдавал ошибку:)) Вы создали массив указателей объектов TImage и пытаетесь к этим объектам обратиться) Предварительно НЕ создав ни один из них))
Грубо говоря адресуемся туда, не знаем куда)

Предварительно вам все таки нужно эти 5 объектов создать и присвоить им владельца (хотя тут не обязательно) ;)

Второй шаг, раз TImage являются визуальными объектами, им само собой следует присвоить родителя (Parent), чтобы эти компоненты отрисовались, иначе вы их нигде не увидите;)

Ну а далее - стандартные манипуляции...

З.Ы. Освобождать память из под них (delete) НЕ нужно, т.к. родитель их сам удалит, при уничтожении самого себя. (особенности VCL).

Пример в приложении...

Успехов!

Приложение:

Ответ отправил: Лучников Ю.В. (статус: 1-ый класс)
Ответ отправлен: 17.11.2007, 12:16
Оценка за ответ: 5

Отвечает: kool
Здравствуйте, RussianGM!
Можно попробывать так
TImage Im[5];
Im[0].Picture->LoadFromFile("2.gif");
Удачи!


---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 17.11.2007, 14:15
Оценка за ответ: 3

Отвечает: Лясин Александр Владимирович
Здравствуйте, RussianGM!
Не зависимо от того, с помощью какого инструментария вы собираете программу на C++,
все массивы в С++ объявляются одинаково. Массив вы указали совершенно правильно,
указав тип, идентификатор и размер массива. И компилятор "ругается" не по этому.
Вы объявили массив указателей на класс TImage. Но не создали сами объекты данного
типа. Специфика библиотеки VCL (основная библиотека BCB) в том, что компилятор не
размещает в памяти статические объекты этой библиотеки. Вы можете объявлять
только указатели на типы (классы) и затем выделять под них память с помощью оператора
new. Вот так может выглять ваш рабочий пример:

TImage *Im[5];
// выделяем память под все объекты типа TImage
for (int i=0; i<sizeof(Im)/sizeof(Im[0]); i++) {
// здесь в конструкторе указываем указатель на объект класса - "oтветственного"
Im[i]= new TImage(Form1);
// за уничтожение объекта TImage
Im[i]->Parent=Form1; // если хотим - чтобы картинка показалась на форме Form1
... // здесь можно вставить код, в котором укажем координаты картинки // и др.
}
Im[0]->Picture->LoadFromFile("2.gif");

А вообще настоятельно посоветовал бы вам почитать любую литературу по C++, в том числе и по работе в Builder.
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 17.11.2007, 14:27
Оценка за ответ: 5


Вопрос № 109.844
Здрасте!!Я не пойму для чего нужны бинарные деревья???неужели только для сортировки???И я вообще не могу понять как они работают... программным путем...ни в одной из книг,которые я читаю не приведено даже валюсенького кусочка кода....
вразумите пожалуйста мою неграмотность)))
Отправлен: 17.11.2007, 14:23
Вопрос задала: lyubkin (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: V1s0r
Здравствуйте, lyubkin!

Можно и для сжатия данных - поищи в интернете что-нибудь типа "сжатие по хаффману", сразу же найдёшь его классический алгоритм с бинарным деревом и, конечно же, программный код. Можешь почитать про бинарные деревья в любой книге по алгоритмам.
Ответ отправил: V1s0r (статус: 4-ый класс)
Ответ отправлен: 17.11.2007, 14:34
Оценка за ответ: 3

Отвечает: Гальцов Андрей
Здравствуйте, lyubkin!

Бинарное дерево - это упорядоченное дерево, которое удовлетворяет след. условию: для каждого узла дерева все ключи в левой ветви меньше, а в правой ветви больше или равны значению ключа данного узла. А применяются такие деревья для более быстрого поиска.
Ссылки по теме:
Двоичное дерево поиска
Двоичные деревья и методы работы с ними
Бинарные деревья
Динамические структуры данных: двоичные деревья
---------
"The more you know, the less you need to show"
Ответ отправил: Гальцов Андрей (статус: Студент)
Ответ отправлен: 18.11.2007, 00:49


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.63 от 22.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное