Вопрос № 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 вряд ли удастся.
- ну и третье - зачем так усложнять себе жизнь? Когда у меня стояла подобная проблема, я сначала записывал данные в обычный ини-файл, а вот затем его кодировал и перезаписывал (можно создавать другой закодированный файл, а текстовый ини удалять). При считывании делал всё в обратном направлении, сначала раскодировал в ини, считывал ини, затем удалял его.
Начнем с того, что плюс 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, их строк), до и после выполнения опреции, вывести на кран.
Заранее благодарна )
Отвечает: Лясин Александр Владимирович
Здравствуйте, Белозерцева Ольга!
В общем почти всё понятно, только необходимо уточнить, что-же должна делать со строкой операция декремента (--)?
Отвечает: Терсков Сергей
Здравствуйте, Белозерцева Ольга!
Вот вариант выполнения вашего задания. Оператор -- уменьшает строку на один символ.
Приложение:
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 23.11.2007, 02:45 Оценка за ответ: 5 Комментарий оценки: большое спасибо
Вопрос № 110.540
Здравствуйте! Моя задача состоит в том что мне нужно открыть файл, разбирать его построчно! причем каждая строка состоит из нужных мне данных разделенных пробелом! мне нужно каждое данное записать в отдельную переменную!
Вопрос мой такой: "Что я не правильно делаю и что нужно исправить! "
Отвечает: 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