Спасибо!!=))
» Вопросы по программированию на C/С++
Подскажите пожалуйста, как определить, что виндовая программа запускается под Linux в среде WINE?
OSVERSIONINFO не катит. WINE честно отдаёт версию установленной переменной версии винды.
В Kylix есть директива ifdef __linux__
Может есть какой нибудь стандартный способ определить linux?
OSVERSIONINFO не катит. WINE честно отдаёт версию установленной переменной версии винды.
В Kylix есть директива ifdef __linux__
Может есть какой нибудь стандартный способ определить linux?
Уважаемые форумцы, помогите с такой задачкой:
Разработать программу, выдающую двоичное представление трех заданных типов с выбранными значениями., т.е. пользователь выбирает тип, а потом вводит значение(произвольное)
У меня типы
long int
float
char
с long int я уже справился
с char не знаю какую функцию применить, и как, есть вроде chr() или atoi, но разобраться не могу
а с float вообще завал
Аомогите пожалуйста
Разработать программу, выдающую двоичное представление трех заданных типов с выбранными значениями., т.е. пользователь выбирает тип, а потом вводит значение(произвольное)
У меня типы
long int
float
char
с long int я уже справился
с char не знаю какую функцию применить, и как, есть вроде chr() или atoi, но разобраться не могу
а с float вообще завал
Аомогите пожалуйста
mothes
Не совсем нормальный способ, но пойдет
[more]
Код: #include <iostream>
using std::cout;
using std::endl;
// функция преобразует четыре бита в их строковое представление
void
numToBin( char num, char *res )
{
switch( num )
{
case 0x0:
strcat( res, "0000" );break;
case 0x01:
strcat( res, "0001" );break;
case 0x02:
strcat( res, "0010" );break;
case 0x03:
strcat( res, "0011" );break;
case 0x04:
strcat( res, "0100" );break;
case 0x05:
strcat( res, "0101" );break;
case 0x06:
strcat( res, "0110" );break;
case 0x07:
strcat( res, "0111" );break;
case 0x08:
strcat( res, "1000" );break;
case 0x09:
strcat( res, "1001" );break;
case 0x0A:
strcat( res, "1010" );break;
case 0x0B:
strcat( res, "1011" );break;
case 0x0C:
strcat( res, "1100" );break;
case 0x0D:
strcat( res, "1101" );break;
case 0x0E:
strcat( res, "1110" );break;
case 0x0F:
strcat( res, "1111" );break;
}
}
// функция получает из числа его двоичное представление
void
getBinary( void * value, size_t valueSize, char * result, size_t resultSize )
{
if ( resultSize < valueSize * 8 + 1 ) {
return;
}
char *revers = new char[valueSize];
if ( NULL == revers ) {
return;
}
char *ptr = (char*)value;
for ( int i = valueSize-1; i >= 0; --i ) {
revers[i] = *ptr;
ptr++;
}
for ( size_t i = 0, j = 0; i < valueSize; ++i, j+=4 ) {
numToBin( (revers[i]>>4)&0x0F, result+j );
numToBin( revers[i]&0x0F, result+j );
}
delete revers;
revers = NULL;
}
int
main( )
{
float d = 100;
char res[100] = { 0 };
getBinary( &d, sizeof d, res, sizeof res );
cout << res << endl;
return (EXIT_SUCCESS);
}
Не совсем нормальный способ, но пойдет
[more]
Код: #include <iostream>
using std::cout;
using std::endl;
// функция преобразует четыре бита в их строковое представление
void
numToBin( char num, char *res )
{
switch( num )
{
case 0x0:
strcat( res, "0000" );break;
case 0x01:
strcat( res, "0001" );break;
case 0x02:
strcat( res, "0010" );break;
case 0x03:
strcat( res, "0011" );break;
case 0x04:
strcat( res, "0100" );break;
case 0x05:
strcat( res, "0101" );break;
case 0x06:
strcat( res, "0110" );break;
case 0x07:
strcat( res, "0111" );break;
case 0x08:
strcat( res, "1000" );break;
case 0x09:
strcat( res, "1001" );break;
case 0x0A:
strcat( res, "1010" );break;
case 0x0B:
strcat( res, "1011" );break;
case 0x0C:
strcat( res, "1100" );break;
case 0x0D:
strcat( res, "1101" );break;
case 0x0E:
strcat( res, "1110" );break;
case 0x0F:
strcat( res, "1111" );break;
}
}
// функция получает из числа его двоичное представление
void
getBinary( void * value, size_t valueSize, char * result, size_t resultSize )
{
if ( resultSize < valueSize * 8 + 1 ) {
return;
}
char *revers = new char[valueSize];
if ( NULL == revers ) {
return;
}
char *ptr = (char*)value;
for ( int i = valueSize-1; i >= 0; --i ) {
revers[i] = *ptr;
ptr++;
}
for ( size_t i = 0, j = 0; i < valueSize; ++i, j+=4 ) {
numToBin( (revers[i]>>4)&0x0F, result+j );
numToBin( revers[i]&0x0F, result+j );
}
delete revers;
revers = NULL;
}
int
main( )
{
float d = 100;
char res[100] = { 0 };
getBinary( &d, sizeof d, res, sizeof res );
cout << res << endl;
return (EXIT_SUCCESS);
}
есть такой нюанс, пользоваель должен сам выбрать какой тип ему нужен, и сам ввести число. т.е.
при запусе проги вылетает меню на экран
1) введите любое число типа float
2) введите любое число типа long int
3) введите любой символ типа char
но как сделвть меню я знаю, long int тож сделал, а вот чтобы пользователь вводил произвольное чило м ему выдовалось на экран представления его вдвоичном виде в памяти комп не могу понять как сделать
спаисбо за помощь, надеюсь на вашу поддержку
при запусе проги вылетает меню на экран
1) введите любое число типа float
2) введите любое число типа long int
3) введите любой символ типа char
но как сделвть меню я знаю, long int тож сделал, а вот чтобы пользователь вводил произвольное чило м ему выдовалось на экран представления его вдвоичном виде в памяти комп не могу понять как сделать
спаисбо за помощь, надеюсь на вашу поддержку
mothes, странно, что ты задаешь этот вопрос в "Вопросах по C++", а не в "Задачах", ну да ладно
1. Пользователю незачем задавать тип числа. Разбирай его ввод так же, как это делает компилятор. Т.е
xxxx.xxx - double (8)
xxxx.xxxF - float (4)
xxx - int (4)
xxxLL, xxxi64 - long long (8)
'x' - wchar_t (2)
2. Как видишь, максимальный размер - 8 байт. (Или ты пишешь на IA64? ) Так что пиши ввод юзера в переменную, размером в 8 байт, предварительно обнулив ее, потом читай ее как long long и выводи в bin или hex.
1. Пользователю незачем задавать тип числа. Разбирай его ввод так же, как это делает компилятор. Т.е
xxxx.xxx - double (8)
xxxx.xxxF - float (4)
xxx - int (4)
xxxLL, xxxi64 - long long (8)
'x' - wchar_t (2)
2. Как видишь, максимальный размер - 8 байт. (Или ты пишешь на IA64? ) Так что пиши ввод юзера в переменную, размером в 8 байт, предварительно обнулив ее, потом читай ее как long long и выводи в bin или hex.
я на всякий случай и там и там задал!
да но сам алгоритм преобразования не догоню, особенно для float, хотя сёдня в поисках решения пол дня провёл,
да но сам алгоритм преобразования не догоню, особенно для float, хотя сёдня в поисках решения пол дня провёл,
mothes
А моя прога не подходит?
Цитата:
вам надо представить float как в компьютере или просто как число вида 111100101.1010?
А моя прога не подходит?
Цитата:
сам алгоритм преобразования не догоню, особенно для float
вам надо представить float как в компьютере или просто как число вида 111100101.1010?
Алгоритм преобразования чего? float to long long?
Код:
long long p;
//some code
p = 0;
*((float*) &p) = 10.1;
//some code
Код:
long long p;
//some code
p = 0;
*((float*) &p) = 10.1;
//some code
Хелп!
Каким образом в С++ можно динамически создавать объекты с временем жизни=времени работы программы и областью видимости - в пределах модуля?
Кроме как выделить всю память сразу, в коде, а динамически в неё лишь записывать, я ничего придумать не могу. А сразу выделять - это не дело.
Каким образом в С++ можно динамически создавать объекты с временем жизни=времени работы программы и областью видимости - в пределах модуля?
Кроме как выделить всю память сразу, в коде, а динамически в неё лишь записывать, я ничего придумать не могу. А сразу выделять - это не дело.
mothes
Представляйте любой из этих типов в виде массива байтов:
char* p;
float f;
p=(char*)&f;
for (i=0; i<sizeof(float); i++)
{
printbyte(p[i]);
}
где printbyte - ваша функция, которая печатает сhar(байт) в двоичном виде, пишется элементарно используя сдвиг и битовые операции.
AirB
В С++ нет уборщика мусора, поэтому динамическое выделение памяти подразумевает что, если сами выделяем память, то сами и должные её освободить. И вообще ваша формулировка вопроса расплывчатая, приведите лучше конкретный пример того, что вам нужно сделать.
Представляйте любой из этих типов в виде массива байтов:
char* p;
float f;
p=(char*)&f;
for (i=0; i<sizeof(float); i++)
{
printbyte(p[i]);
}
где printbyte - ваша функция, которая печатает сhar(байт) в двоичном виде, пишется элементарно используя сдвиг и битовые операции.
AirB
В С++ нет уборщика мусора, поэтому динамическое выделение памяти подразумевает что, если сами выделяем память, то сами и должные её освободить. И вообще ваша формулировка вопроса расплывчатая, приведите лучше конкретный пример того, что вам нужно сделать.
Rudia
А как быть с обратным порядком?
видимо нужно так:
Код: for (i=sizeof(float)-1; i>=0; i--)
{
printbyte(p[i]);
}
А как быть с обратным порядком?
видимо нужно так:
Код: for (i=sizeof(float)-1; i>=0; i--)
{
printbyte(p[i]);
}
Rudia
Заранее не известно сколько объектов будет создано (от 5 до 50), нужно создавать их по ходу. И после создания они должны быть доступны не только функции, в которой были созданы, но и другим.
Заранее не известно сколько объектов будет создано (от 5 до 50), нужно создавать их по ходу. И после создания они должны быть доступны не только функции, в которой были созданы, но и другим.
Rudia, как вклад в общее дело могу придложить функцию
Цитата:
Которая распечатывет побитовое представление любого байта.
Цитата:
void print_byte(unsigned char arg)
{
unsigned char MASK = 0x80;
int index;
for(index = 0; index != 8; ++index)
{
printf(" %d ", (arg & MASK) ? 1 : 0);
MASK >>= 1;
}
}
Которая распечатывет побитовое представление любого байта.
AirB
в .cpp файле:
static std::vector<object_type> g_Objects; //создаем вектор объектов в модуле
или вариации
static std::vector<object_type*> g_Objects; //создаем вектор указателей
static std::vector<boost::shared_ptr<object_type> > g_Objects; //создаем вектор указателей с автоматичеким удалением
ну или в стиле с что-то в таком духе
typedef struct {
object_type * g_objects[MaxObjectsNumber];
unsigned g_ObjectsCount;
} mystruct;
static mystruct g_data;
--
можешь почитать также про шаблон (паттерн) проектирования одиночка (singleton)
в .cpp файле:
static std::vector<object_type> g_Objects; //создаем вектор объектов в модуле
или вариации
static std::vector<object_type*> g_Objects; //создаем вектор указателей
static std::vector<boost::shared_ptr<object_type> > g_Objects; //создаем вектор указателей с автоматичеким удалением
ну или в стиле с что-то в таком духе
typedef struct {
object_type * g_objects[MaxObjectsNumber];
unsigned g_ObjectsCount;
} mystruct;
static mystruct g_data;
--
можешь почитать также про шаблон (паттерн) проектирования одиночка (singleton)
спасиб за программы, они все по чуть чуть подходят, я очень восхищен оперативностью вашей помощи и качеством.
Прошу прощение за мою вот эту тупость что я немогу толком объяснить суть проблемы, но вот так задание поставили мне
тема: Внутримашинное предстовление данных
Постановка задачи
Разработать и отладить программу, выдающую двоичное представление трех заданных типов с выбранными значениями. Проинтерпретировать полученные результаты.
у меня заданные типы по таблице long int, float, char
я конечно пытаюсь вот сейчас собрать программу по кусочкам, но явно чёто мне не хватает.
Спасиб всем за Вашу помощь!
Прошу прощение за мою вот эту тупость что я немогу толком объяснить суть проблемы, но вот так задание поставили мне
тема: Внутримашинное предстовление данных
Постановка задачи
Разработать и отладить программу, выдающую двоичное представление трех заданных типов с выбранными значениями. Проинтерпретировать полученные результаты.
у меня заданные типы по таблице long int, float, char
я конечно пытаюсь вот сейчас собрать программу по кусочкам, но явно чёто мне не хватает.
Спасиб всем за Вашу помощь!
mothes
не понял. тут http://forum.ru-board.com/topic.cgi?forum=33&topic=8927#1 TheChampion и так, по-моему, всё написал. или я таки не понял?
не понял. тут http://forum.ru-board.com/topic.cgi?forum=33&topic=8927#1 TheChampion и так, по-моему, всё написал. или я таки не понял?
for mothes
Раз уж я встрял в обсуждение этой проги, то надо как-то и до логического конца довести.
Ловите мега прогу.
Раз уж я встрял в обсуждение этой проги, то надо как-то и до логического конца довести.
Ловите мега прогу.
WiseAlex
Спасибо, воспользуюсь std::vector<>.
UPDATE:
А как его использовать, если конструктора по умолчанию нет? В частности для VCL компонентов.
Спасибо, воспользуюсь std::vector<>.
UPDATE:
А как его использовать, если конструктора по умолчанию нет? В частности для VCL компонентов.
for ItsJustMe
А в какой программной среде вы писали свою программу. У меня к сожалению не получилось её откомпелировать. Пользуюсь Dev C++ 4.9.9.2
Там есть файлы
Код:
AssemblyInfo.cpp
NumberAsBin.cpp
stdafx.cpp
А в какой программной среде вы писали свою программу. У меня к сожалению не получилось её откомпелировать. Пользуюсь Dev C++ 4.9.9.2
Там есть файлы
Код:
AssemblyInfo.cpp
NumberAsBin.cpp
stdafx.cpp
Visual Studio.
2005 подойдет.
Собственно, если вы не смогли это откомпайлить (за неимением, как я понимаю, VS) - не беда. Прочитать-то вы source в любом случае сможете
Смотрите функцию textBox1_TextChanged в файле Form1.h (в самом конце). Возможно, она поможет вам прояснить некоторые моменты. Удачи!
PS: Выкладываю exe-файл, чтобы вы могли посмотреть, а что, собственно, он делает
2005 подойдет.
Собственно, если вы не смогли это откомпайлить (за неимением, как я понимаю, VS) - не беда. Прочитать-то вы source в любом случае сможете
Смотрите функцию textBox1_TextChanged в файле Form1.h (в самом конце). Возможно, она поможет вам прояснить некоторые моменты. Удачи!
PS: Выкладываю exe-файл, чтобы вы могли посмотреть, а что, собственно, он делает
AirB
Цитата:
а зачем там нужен конструктор по-умолчанию?
avector.push_back(myclass(parameters));
кроме того я привел разные варианты. в частности и для указателей
Цитата:
А как его использовать, если конструктора по умолчанию нет? В частности для VCL компонентов.
а зачем там нужен конструктор по-умолчанию?
avector.push_back(myclass(parameters));
кроме того я привел разные варианты. в частности и для указателей
Программеры нужна Ваша помощь!
Помогите написать игру "Пятнашки" --в Visual studio-- Win32 Console project..
-------------------.
0 | 1 | 2 | 3 |
-------------------.
4 | 5 | 6 | 7|
-------------------.
8 | 9 | 10 | 11|
-------------------.
12 | 13| 14| 15 |
-------------------
Необходимо чтоб перемещить можно было только "0" , а также по нажатию на клавиатурные стрелки можно было передвигать, затем каждыйход проверялся не собрались ли пятнашки.
Помогите написать игру "Пятнашки" --в Visual studio-- Win32 Console project..
-------------------.
0 | 1 | 2 | 3 |
-------------------.
4 | 5 | 6 | 7|
-------------------.
8 | 9 | 10 | 11|
-------------------.
12 | 13| 14| 15 |
-------------------
Необходимо чтоб перемещить можно было только "0" , а также по нажатию на клавиатурные стрелки можно было передвигать, затем каждыйход проверялся не собрались ли пятнашки.
Нынче стало модно писать в ВОПРОСАХ, а не в ЗАДАЧАХ.
Рисуй коробочку в DirectX.
У меня к тебе встречный вопрос: а Console Project для этой проги используется для того, чтоб жизнь медом не казалась?
И еще. 0 - это пустое место. Ну вот и меняй его местами с той цифрой, куда его двигаешь.
Рисуй коробочку в DirectX.
У меня к тебе встречный вопрос: а Console Project для этой проги используется для того, чтоб жизнь медом не казалась?
И еще. 0 - это пустое место. Ну вот и меняй его местами с той цифрой, куда его двигаешь.
Просто постарался выразится конкретно с рисуночком, чтоб было понятно. 0 пустое место делать лучше пробелом тоесть (сhar). Меня интересует сам код...
Подскажите плиз как в VS2005 сделать, чтобы исходники (.cpp, .h) она сохраняла в формате UTF-8?
Это нужно потому что одни из одних и тех же исходников собираются проги под виндой и под линуксом. В исходниках есть русские буквы в строках, кроме того есть функции которым надо указывать кодировку. Мне проще один раз указать uft-8, чем через define делать под виндой win1251, а для линукса соотв. Основная IDE для разработки - VS2005.
Это нужно потому что одни из одних и тех же исходников собираются проги под виндой и под линуксом. В исходниках есть русские буквы в строках, кроме того есть функции которым надо указывать кодировку. Мне проще один раз указать uft-8, чем через define делать под виндой win1251, а для линукса соотв. Основная IDE для разработки - VS2005.
Гм... Щаз под рукой VS нет, но я как-то в свое время подсовывал ей исходники в UTF-16LE. Она с ними нормально работала и сохраняла.
vipettut
Когда делаешь сохранение, делай Save ... as, потом на кнопке Save жми стрелку и выбирай Save with encoding... Дальше, думаю, понятно. Но вообще то, это не вопрос по программированию на С++
Когда делаешь сохранение, делай Save ... as, потом на кнопке Save жми стрелку и выбирай Save with encoding... Дальше, думаю, понятно. Но вообще то, это не вопрос по программированию на С++
ItsJustMe
Mickey_from_nsk
спасибо за ответы!
У VS2005 все нормально с юникодом, НО нужен UFT-8 without signature.
(Насчет Save As... - все работает, просто не додумался там искать. Искал в настройках. Хотя в Save As вполне логично, если нужны разные кодировки per file.)
Mickey_from_nsk
спасибо за ответы!
У VS2005 все нормально с юникодом, НО нужен UFT-8 without signature.
(Насчет Save As... - все работает, просто не додумался там искать. Искал в настройках. Хотя в Save As вполне логично, если нужны разные кодировки per file.)
Люди помогите пожалуйста
проблема вот в чем
написал класс
Код:
class CTest{
public:
LPWSTR wcName;
CTest(void);
~CTest(void);
};
CTest::CTest(void){
wcName = new WCHAR[10];
wcscpy(wcName,_T("Проверка"));
}
CTest::~CTest(void){
if (wcName != NULL){
delete [] wcName;
}
}
main(){
CTest* lpTest = new CTest[5];
delete []lpTest;
}
но при уничтожении wcName(delete [] wcName) вылетает ожибка This may be due to a corruption of the heap and indicates a bug in or any of the DLLs it has loaded.
в чем может быть проблема.
проблема вот в чем
написал класс
Код:
class CTest{
public:
LPWSTR wcName;
CTest(void);
~CTest(void);
};
CTest::CTest(void){
wcName = new WCHAR[10];
wcscpy(wcName,_T("Проверка"));
}
CTest::~CTest(void){
if (wcName != NULL){
delete [] wcName;
}
}
main(){
CTest* lpTest = new CTest[5];
delete []lpTest;
}
но при уничтожении wcName(delete [] wcName) вылетает ожибка This may be due to a corruption of the heap and indicates a bug in or any of the DLLs it has loaded.
в чем может быть проблема.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.