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

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


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

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

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

Выпуск № 919
от 27.11.2007, 17:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 475, Экспертов: 69
В номере:Вопросов: 4, Ответов: 7


Вопрос № 110493: Есть класс Long - реализация длинной арифметики. Я добавил коментарии. Нужно оценить уровень, найти недочеты (если таковы имеются), чтобы можно было остановиться на этом классе как на базовом. Среда разроботки С++ Builder6. Сам ошибок не обнаружи...
Вопрос № 110524: Здравствуйте! Не поможете ли мне советом?... 1. Задача - данные программы имеют формат файла типа ini. Чтобы их считать, обычно достаточно воспользоваться методами TIniFile. 2. Но вот проблема, что храниться они должны на диске...
Вопрос № 110529: Очень нужна помощь! Как создать несколько объектов (например a и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса перегрузку операции -- (b=a--). Содержимое объектов (a, b, их строк), до и после выполнения ...
Вопрос № 110540: Здравствуйте! Моя задача состоит в том что мне нужно открыть файл, разбирать его построчно! причем каждая строка состоит из нужных мне данных разделенных пробелом! мне нужно каждое данное записать в отдельную переменную! Вопрос мой такой: &...

Вопрос № 110.493
Есть класс Long - реализация длинной арифметики.
Я добавил коментарии. Нужно оценить уровень, найти недочеты (если таковы имеются), чтобы можно было остановиться на этом классе как на базовом. Среда разроботки С++ Builder6. Сам ошибок не обнаружил.
P.S. Для Пырлика Виктора. Там где ты ставил ??? у меня всё работает (по крайней мере на моем компиляторе).

Приложение:

Отправлен: 22.11.2007, 09:20
Вопрос задал: tito (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

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

Вместо char* Long::GetObject() лучше const char* Long::GetObject(), т.к. это гарантирует неприкосновенность внутренних данных класса. И не используйте функцию GetObject() в методах класса (зачем это делать??) а обращайтесь напрямую к переменной.

Вместо Long Long::DeleteFirstZeroes() лучше void DeleteFirstZeroes(), т.к записью return c.DeleteFirstZeroes() вы только запутываете свой код [лучше
c.DeleteFirstZeroes();
return c; ]

Если не предполагается динамическое выделение памяти (всегда max_size), то можно объявить переменную объект вот так:
class Long
{
private:
char object[max_size];
что сразу избавит от геморроя в конструкторах и деструкторе

функции longsumch, longraznch, longmulch лучше сделать приватными в классе Long, чтобы не забивать ими область глобальных переменных и функций (там и без них много всего есть)

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


Вопрос № 110.524
Здравствуйте!

Не поможете ли мне советом?...

1. Задача - данные программы имеют формат файла типа ini. Чтобы их считать, обычно достаточно воспользоваться методами TIniFile.
2. Но вот проблема, что храниться они должны на диске в зашифрованном виде.
Для их прочтения я считываю файл в RichEdit через LoadFromFile, расшифровываю... а вот теперь нужно ИЗ ПАМЯТИ прочесть их методами TIniFile. Т.е нужно создать конструкцию типа:
TIniFile *pIni;
pIni = new TIniFile( чего_то_такое ), где вместо чего_то_такое должно стоять не имя дискового файла, а какой-то элемент из памяти - String, RichEdit, TStringList...
Как сделать, чтобы ini информацию читать не с диска?

P.S. Забыл добавить очевидное - CBuilder...

Спасибо,
Herzog
Отправлен: 22.11.2007, 12:45
Вопрос задал: Herzog (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лясин Александр Владимирович
Здравствуйте, Herzog!
Хотел сделать несколько замечаний по поводу реализации:
-во первых, считывать закодированные данные из файла в Rich или Memo на мой взгляд некорретно, посколько для декодирования вам нужно считывать файл в режиме binary, т.е. в режиме бинарных данных. А РичЕдит считывает их, преобразуя в символы - насколько это возможно (преобразуя в текстовый вид), поэтому при декодировании есть вероятность получения не исходных данных.
- во вторых, насколько видно из IniFiles.hpp - там везде фигурирует AnsiString FileName - в качечтве параметра конструктору. Так что на мой взгляд, сделать то, что вы хотите, с классом TIniFile вряд ли удастся.
- ну и третье - зачем так усложнять себе жизнь? Когда у меня стояла подобная проблема, я сначала записывал данные в обычный ини-файл, а вот затем его кодировал и перезаписывал (можно создавать другой закодированный файл, а текстовый ини удалять). При считывании делал всё в обратном направлении, сначала раскодировал в ини, считывал ини, затем удалял его.
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 22.11.2007, 13:19

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

Начнем с того, что плюс ini файла как раз состоит в том, что он легко поддается редактированию пользователем любым TXT-редактором. Зачем его шифровать?

Если уж так хочется приватности, то тут мой совет использовать например связку TStringList+TMemoryStream.
Т.е. через TMemoryStream отображаем в память бинарный файл (а шифрованный файл им должен быть), в памяти производим дешифровку по заданному вами алгоритму, ну и загружаем результат в TStringList (метот LoadFromStream()). Компонент TStringList предлагает удобный интерфейс над манипуляциями со списком строк. При сохранении производим обратные действия.

Если уж от ini файлов вам никак не отказаться, то тут 2 пути:
1) Породить свой класс для работы с ini от TCustomIniFile, реализовав в нем необходимый функционал
2) Ну и вариант проще, например установить весьма популярную библиотеку JEDI-VCL (http://homepages.codegear.com/jedi/jvcl/). В этом пакете поставляется компонент TJvAppIniFileStorage - аналог TIniFile, но в котором предусмотрены события OnEncryptPropertyValueOnDecryptPropertyValue, в которых вы можете реализовать алгоритмы шифровки-дешифровки ключей ini-файла будучи применяемы автоматически в операциях чтениязаписи значений.

___
Удачи.
Ответ отправил: Лучников Ю.В. (статус: 5-ый класс)
Ответ отправлен: 22.11.2007, 15:44


Вопрос № 110.529
Очень нужна помощь! Как создать несколько объектов (например a и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса перегрузку операции -- (b=a--). Содержимое объектов (a, b, их строк), до и после выполнения опреции, вывести на кран.
Заранее благодарна )
Отправлен: 22.11.2007, 13:16
Вопрос задала: Белозерцева Ольга (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Лясин Александр Владимирович
Здравствуйте, Белозерцева Ольга!
В общем почти всё понятно, только необходимо уточнить, что-же должна делать со строкой операция декремента (--)?
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 22.11.2007, 13:23

Отвечает: Терсков Сергей
Здравствуйте, Белозерцева Ольга!
Вот вариант выполнения вашего задания. Оператор -- уменьшает строку на один символ.

Приложение:

Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 23.11.2007, 02:45
Оценка за ответ: 5
Комментарий оценки:
большое спасибо


Вопрос № 110.540
Здравствуйте! Моя задача состоит в том что мне нужно открыть файл, разбирать его построчно! причем каждая строка состоит из нужных мне данных разделенных пробелом! мне нужно каждое данное записать в отдельную переменную!

Вопрос мой такой: "Что я не правильно делаю и что нужно исправить! "

Приложение:

Отправлен: 22.11.2007, 14:36
Вопрос задал: Дроздов Иван Андреевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: CruelHity
Здравствуйте, Дроздов Иван Андреевич!
Я б советовал разбивать вам слова не так!! а через функцию strtok!ее параметры
1-й обрабатываемая строка
2-й строка содержащие симолы ограничители
смотрите пример в приложении!! так будет намного проще!
удачи!

Приложение:

Ответ отправил: CruelHity (статус: 5-ый класс)
Ответ отправлен: 22.11.2007, 14:44

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

char temp[20];
char* dannye="";
char* ptr;
f = fopen("C:\file1.txt","r");
for (int i=0;i<20;i++)
{
name[0]=' fgets(temp,20,f); //считали 20 символов
ptr=strchr(temp,' '); //когда наши пробел
strncat(dannye,temp,ptr-temp); // прибавляем к dannye temp, размером ptr-temp
strcpy(temp,ptr+1); // записываем в temp следующий символ после
// пробела, для дальнейшего поиска
c[i].Setc(dannye);// в этом месте мы имеем нужное нам данное,
// разделённое в файле пробелами, и можеи записать
//его куда нам угодно
}
---------
"The more you know, the less you need to show"
Ответ отправил: Гальцов Андрей (статус: Студент)
Ответ отправлен: 22.11.2007, 21:44


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

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

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

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

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


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


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

В избранное