Вопрос № 61803: <b><font color=purple>Уважаемый эксперты</font></b> поскольку с языком программирование <b>С++</b> я на Вы, то решил обратиться за вашей помощью....
Есть задача (условие смотрите ниже), сталкнулся с ней в ходе самостоятельно изучения С++, та...Вопрос № 61869: Здравствуйте уважаемые эксперты.
Вопрос таков. Есть некий класс содержащий несколько полей с данными и нужно перегрузить приведение типов для него в ситуации типа той что описана в приложении.
Перегрузка оператора присваивания это немного не ...Вопрос № 61878: Здравствуйте, эксперты! Проблема такая: нужно подключить необходимые файлы OpenGL к C++ Builder6.0, точно не знаю как их надо подключать, да и в наличии только все то, что нужно для MS Visual C++6.0, а они не подходят. Пришлите, пожалуйста, ссылки, г...
Вопрос
№ 61.803
Уважаемый эксперты поскольку с языком программирование С++ я на Вы, то решил обратиться за вашей помощью....
Есть задача (условие смотрите ниже), сталкнулся с ней в ходе самостоятельно изучения С++, так вот необходимо ее решить, как данная программа решается средствами языка Pascal/Delphi - я знаю. Но мне хотелось бы увидеть решение на С++ (причем если это возможно различными способами и с соответствующими коментариями).
Всем зарание спасибо!!!
Условие задачи:
Дан текстовый файл (old.dat), заканчивающийся точкой, в котором слова разделены пробелом, а конце каждой строки точка с запятой.
Создать новый текстовый файл (new.dat) на основе исходного, который состоит из строк исходного в
обратном порядке.
Пример:
old.dat
--------
первая строка первая строка;
вторая строка;
третья строка третья строка третья строка.
new.dat
--------
третья строка третья строка третья строка.
вторая строка;
первая строка первая строка;
Отправлен: 08.11.2006, 16:14
Вопрос задал: Gh0stik (статус: Практикант)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sergey A. Wedensky
Здравствуйте, Gh0stik!
Вариант I. Самый банальный - прочесть все строки в память и записать в выходной файл в обратном порядке. Недостаток - необходимость выделения памяти объемом равным размеру файла.
Код см. в приложении (1).
Вариант II. С записью в промежуточный файл.
1. Читаем из входного файла, записываем во временный, переворачивая слева направо каждую строку.
2. Копируем в выходной файл содержимое временного в обратном порядке.
Максимальный объем выделяемой памяти равен длине самой длинной строки файла.
Код см. в приложении (2).
Удачи!
Приложение:
Ответ отправил: Sergey A. Wedensky (статус: 7-ой класс)
Ответ отправлен: 08.11.2006, 17:20 Оценка за ответ: 5
Отвечает: AlexKlaip
Здравствуйте, Gh0stik!
С использованием MFC:
CStringArray astr;
CString str;
char* pFileName = "Путь и имя файла исходного";
char* pFileOut = "Путь и имя файла результата";
CStdioFile file;
int i;
Примечание файл считывается в память, поэтому желательно применять для
не очень больших файлов.
Если кол-во строк известно, то можно значительно ускорить:
CStringArray astr;
CString str;
char* pFileName = "Путь и имя файла исходного";
char* pFileOut = "Путь и имя файла результата";
CStdioFile file;
int i;
if( !file.Open( pFileName, CFile::modeRead ) )
{
#ifdef _DEBUG
afxDump << "Unable to open file for read" << "
";
#endif
}
else
{
astr.SetSize(кол-во строк);
for(i=0; i<кол-во строк; ++i)
{
if( file.ReadString(str) == FALSE )
break;
astr[i] = str;
}
//на случай если строк в файле было меньше
astr.SetSize(i);
astr.FreeExtra();
file.Close();
}
if( !file.Open( pFileName, CFile::modeCreate|CFile::modeWrite ) )
{
#ifdef _DEBUG
afxDump << "Unable to open file for write" << "
";
#endif
}
else
{
for(i=astr.GetUpperBound(); i>=0; --i)
file.WriteString(astr[i]);
file.Close();
}
astr.RemoveAll();
Ответ отправил: AlexKlaip (статус: 2-ой класс)
Ответ отправлен: 08.11.2006, 18:09 Оценка за ответ: 5
Отвечает: Ross
Здравствуйте, Gh0stik!
Можно создать вспомогательный массив, содержащий позиции в файле, с которых начинается новая строка. Потом перемещая указатель от последней строки к первой, перезаписать их в new.dat
Приложение:
Ответ отправил: Ross (статус: 2-ой класс)
Ответ отправлен: 09.11.2006, 22:07 Оценка за ответ: 4 Комментарий оценки: Как-то уж больно громоздко....
Вопрос № 61.869
Здравствуйте уважаемые эксперты.
Вопрос таков. Есть некий класс содержащий несколько полей с данными и нужно перегрузить приведение типов для него в ситуации типа той что описана в приложении.
Перегрузка оператора присваивания это немного не то. Если бы класс к которому приводится наш пользовательский тоже определялся программистом, задача сводилась бы к тому, что бы описать соответствующий конструктор копирования (как я понимаю). В данном же примере мы приводим к предопределенному типу, тоесть реально нужно делать что-то с самим классом над SomeClass, но что именно я никак понять не могу.
Буду очень признателен за любую помощь.
Приложение:
Отправлен: 09.11.2006, 00:17
Вопрос задал: Юра (статус: 2-ой класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Bob Johnson
Здравствуйте, Юра!
сумбурно ты написал...
конструктор копирования позволяет оперировать только с экземплярами одного и того же класса. тебе скорее всего поможет оператор приведения типа, позволяющий произвести необходимые манипуляции над данными класса, а затем выдать результат нужного типа, например:
теперь можно передавать SomeClass в любую функцию, воспринимающую строку, компилятор сам вызовет этот оператор
Ответ отправил: Bob Johnson (статус: Академик) Россия, Калуга WWW:Программирование ---- Ответ отправлен: 09.11.2006, 00:29
Вопрос № 61.878
Здравствуйте, эксперты! Проблема такая: нужно подключить необходимые файлы OpenGL к C++ Builder6.0, точно не знаю как их надо подключать, да и в наличии только все то, что нужно для MS Visual C++6.0, а они не подходят. Пришлите, пожалуйста, ссылки, где можно скачать(бесплатно) необходимые файлы (в первую очередь интересует glut.h для Buildera [т.к. я нигде не cмог найти glut.h совместимый с Builderом]). Нельзя ли заголовочные файлы OpenGL под Visual, отредактировать для Buildera, в частности glut.h? По возможности
пришлите, пожалуйста, необходимые файлы (в особенности glut.h) и алгоритм подключения тоже не плохо бы:)
Отправлен: 09.11.2006, 01:57
Вопрос задал: Romych (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Lonely Wolf
Здравствуйте, Romych!
Выбирайте пункт меню project - settings, вкладка Link, далее в поле Object/library modules пишите opengl32.lib glu32.lib glut32.lib.
GLUT библиотека не стандартная, она не входит в стартовый комплект, то что умеет glut умеют opengl и glu, даше лучше. Я был не в восторге от неё. Но раз вам надо то попробуйте найти через google, без проблем отыщите.
--------- Ассемблер FOREVER!!!
Ответ отправил: Lonely Wolf (статус: Студент)
Ответ отправлен: 09.11.2006, 12:48 Оценка за ответ: 1 Комментарий оценки: Вообще-то, мой вопрос относился к Borland C++Builder6.0, а не к MS Visual C++..., повторюсь:glut для Builder'a6.0, а не для чего-то другого.