Вопрос № 122604: Пожалуйста, помогите решить такую задачу (на С++ желательно Borland Builder 5):
программа загружает два параллельно работающих процесса, выводящих в свои окна указанные графические данные. Левое и правое окна. Закрашенный прямоугольник и отрезок....Вопрос № 122726: Здравствуйте, уважаемые эксперты !
Не могли бы вы мне подсказать функцию с помощью которой можно представить десятичное число в двоичном виде ?
...Вопрос № 122739: Помогите пожалуста написать код программы:
В классе Complex реализовать операции добавления и добавления, совмещенного с присвоением, обосновав в каждом случае выбор утилиты или метода....Вопрос № 122742: Может кто нибудь навести пример класса без обьектов...
Вопрос № 122.604
Пожалуйста, помогите решить такую задачу (на С++ желательно Borland Builder 5):
программа загружает два параллельно работающих процесса, выводящих в свои окна указанные графические данные. Левое и правое окна. Закрашенный прямоугольник и отрезок. У фигур случайно изменяются цвет , размеры и положение.
Отвечает: Терсков Сергей
Здравствуйте, Сергеев Александр!
Знакомое задание из КнАГТУ. Вариант в приложении. Только в правом окне рисуются квадраты, а в левом окружности. Переделать несложно.
Приложение:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 11.02.2008, 06:55 Оценка за ответ: 4 Комментарий оценки: Даже не знал, как оценить ответ. При компиляции ошибок не было, но при запуске на выполнение - не работает. Ничего не происходит.
Вопрос № 122.726
Здравствуйте, уважаемые эксперты !
Не могли бы вы мне подсказать функцию с помощью которой можно представить десятичное число в двоичном виде ?
Отправлен: 11.02.2008, 20:45
Вопрос задал: Mystik (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Терсков Сергей
Здравствуйте, Mystik! В общем случае вам лучше воспользоваться специальным контейнером из STL - bitset. С объектом этого класса можно выполнять различные операции битовых полей. Подробнее о нем можно узнать в литературе по С++ и STL, например, в книге "Николай Джосьютис - С++ Стандартная библиотека шаблонов".
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 12.02.2008, 06:28 Оценка за ответ: 5
Отвечает: Sergijj
Здравствуйте, Mystik!
А можно обойтись и без шаблонов...;-)
Если Вам необходимо просто вывести число в двоичном виде, то можете воспользоваться любой из функций (смотря какая подходит в данном случае):
#include
char *itoa(int value, char *string, int radix);
char *ltoa(long value, char *string, int radix);
char *ultoa(unsigned long value, char *string, int radix);
Как видите, они различаются только типом входного параметра value - числа, которое необходимо перевести в строковое представление в выбранной системе счисления.
Параметр *string - указатель на заранее подготовленную строку, куда и будет происходить вывод.
Параметр radix - основание требуемой системы счисления (в Вашем случае = 2, т.к. Вы хотите перевести число в ДВОичную систему; если бы хотели в ТРОичную, то radix должен был бы быть = 3, и т.д.).
После этого останется лишь вызвать:
#include
int printf (const char *format [, argument, ...]);
Пример в приложении.
Замечу, что любое число собственно внутри компьютера и так представлено в двоичном виде (0 и 1 - это состояния "проводков" - течёт по проводку ток или не течёт, следовательно, любое число - это последовательность бит (набор "проводков"), например, 0 = 0000, 1 = 0001, 2 = 0010, 3 = 0011, 4 = 0100, 5 = 0101, 6 = 0110, 7 = 0111, 8 = 1000, и т.д.), поэтому если Вы хотите работать напрямую с битами, то сделать это можно через логические операции "И" - "AND" (&), "ИЛИ"
- "OR" (|), "НЕ" - "NOT" (~), "Исключающее ИЛИ" - "XOR" (^).
В приложении приведена таблица истинности, соответствующая вышеупомянутым логическим действиям в зависимости от значения входных аргументов.
Например, мы хотим установить 1-й и 2-й биты (они нумеруются начиная с нулевого и справа налево) у некоторой переменной целочисленного типа:
unsigned short int value = 1;
//...
printf("
Value before sets 1-st and 2-nd bit: %d", value);// Здесь результат будет = 1
value = value | 6;// Т.к. десятичное 4 - это двоичное 00000100, т.е. число в котором установлен тольько 2-й бит; 2 - это двоичное 00000010; а, следовательно, 6 - это двоичное 00000110
// Предыдущую строчку можно также (и даже нужно) записать так: value |= 6;
// А можно и так: value |= 4 | 2;
printf("
Value after sets 1-st and 2-nd bit: %d", value);// Здесь результат будет = 7, т.к. 1 + 4 + 2 = 7 = двоичное 00000111
А вот если, например, нам необходимо узнать установлен ли 2-й бит в переменной value, мы поступим так:
unsigned int andMask = 00000100; // Создадим маску в которой взведён необходимый 2-й бит, и...
if (value & andMask) printf("
2-nd bit is set (=1)"); else printf("
2-nd bit is NOT set (=0)");
С помощью логических операций Вы самостоятельно сможете написать функцию, работающую с битами так, как Вам необходимо в данном случае. Например, тот же перевод числа из десятичной системы в двоичную (для этого нужно всего лишь в цикле перебрать все биты десятичного числа и вывести результат в строку).
Успехов!
Приложение:
--------- Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: Студент)
Ответ отправлен: 12.02.2008, 10:34 Оценка за ответ: 5 Комментарий оценки: Большое спасибо ! Исчерпывающий ответ. Как раз то, что мне и надо было.
Вопрос № 122.739
Помогите пожалуста написать код программы:
В классе Complex реализовать операции добавления и добавления, совмещенного с присвоением, обосновав в каждом случае выбор утилиты или метода.
Отправлен: 11.02.2008, 22:58
Вопрос задал: Lordthief (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Lang21
Здравствуйте, Lordthief!
В приложении код программы, реализующей класс комплексных чисел и операторные функции "+" и "+=". Также добавлены операторы для ввода и вывода ( >> и << ).
Обоснование.
Оператор "+" должен быть реализован в виде дружественной функции. Это естественно, так как в таком случае аргументы симметричны. При реализации в виде функции-члена (закоментировано) будут проблемы при сложении с действительными числами. (Строка, помеченная восклицательными знаками, не будет компилироваться).
Оператор "+=" удобнее реализовать в виде функции-члена класса.
Приложение:
Ответ отправил: Lang21 (статус: 5-ый класс)
Ответ отправлен: 12.02.2008, 18:25 Оценка за ответ: 4
Вопрос № 122.742
Может кто нибудь навести пример класса без обьектов
Отправлен: 11.02.2008, 23:15
Вопрос задал: Lordthief (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Попов А.С.
Здравствуйте, Lordthief!
Если вы имеете в виду абстрактный класс, то вот пример
class iClone
{
public:
iClone(void){};
virtual ~iClone(void){};
virtual StatClass* Clon(void)=0;
};
Объект типа iClone создать нельзя
Ответ отправил: Попов А.С. (статус: 8-ой класс)
Ответ отправлен: 12.02.2008, 05:59 Оценка за ответ: 4
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 12.02.2008, 06:54 Оценка за ответ: 5
Отвечает: Dr_Andrew
Здравствуйте, Lordthief!
Класс без объектов - это любой абстрактный класс, т.е. класс, содержащий абстрактные методы, не имеющие конкретной реализации. К примеру, класс "фрукт" имеет свойство "вкус" и метод "дать вкус", но мы не можем почувствовать вкус "фрукта вообще", а лишь вкус его неабстрактных потомков (яблоко, груша и т.п.), которые могут быть сладкими, кислыми и т.п.
В предыдущем ответе приведён хороший пример абстрактного класса, который не может иметь объектов. А вот другой пример: библиотека Qt включает класс QButton (кнопка вообще), который не может иметь объектов. Однако от него наследуют классы QPushButton (обычная кнопка), QRadioButton (радио-кнопка, переключатель) и др., которые уже могут иметь объекты.
Ответ отправил: Dr_Andrew (статус: 6-ой класс)
Ответ отправлен: 12.02.2008, 06:56 Оценка за ответ: 4