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

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


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

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

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

Выпуск № 998
от 17.02.2008, 01:05

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

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 122604: Пожалуйста, помогите решить такую задачу (на С++ желательно Borland Builder 5): программа загружает два параллельно работающих процесса, выводящих в свои окна указанные графические данные. Левое и правое окна. Закрашенный прямоугольник и отрезок....
Вопрос № 122726: Здравствуйте, уважаемые эксперты ! Не могли бы вы мне подсказать функцию с помощью которой можно представить десятичное число в двоичном виде ? ...
Вопрос № 122739: Помогите пожалуста написать код программы: В классе Complex реализовать операции добавления и добавления, совмещенного с присвоением, обосновав в каждом случае выбор утилиты или метода....
Вопрос № 122742: Может кто нибудь навести пример класса без обьектов...

Вопрос № 122.604
Пожалуйста, помогите решить такую задачу (на С++ желательно Borland Builder 5):
программа загружает два параллельно работающих процесса, выводящих в свои окна указанные графические данные. Левое и правое окна. Закрашенный прямоугольник и отрезок. У фигур случайно изменяются цвет , размеры и положение.
Отправлен: 11.02.2008, 05:48
Вопрос задал: Сергеев Александр (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Терсков Сергей
Здравствуйте, Сергеев Александр!
Знакомое задание из КнАГТУ. Вариант в приложении. Только в правом окне рисуются квадраты, а в левом окружности. Переделать несложно.

Приложение:

Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 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

Отвечает: Терсков Сергей
Здравствуйте, Lordthief!
В С++ такие классы называются абстрактными. Вот их определение ru.wikepedia.org). А вот и примеры: #1, #2, #3
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 12.02.2008, 06:54
Оценка за ответ: 5

Отвечает: Dr_Andrew
Здравствуйте, Lordthief!
Класс без объектов - это любой абстрактный класс, т.е. класс, содержащий абстрактные методы, не имеющие конкретной реализации. К примеру, класс "фрукт" имеет свойство "вкус" и метод "дать вкус", но мы не можем почувствовать вкус "фрукта вообще", а лишь вкус его неабстрактных потомков (яблоко, груша и т.п.), которые могут быть сладкими, кислыми и т.п.
В предыдущем ответе приведён хороший пример абстрактного класса, который не может иметь объектов. А вот другой пример: библиотека Qt включает класс QButton (кнопка вообще), который не может иметь объектов. Однако от него наследуют классы QPushButton (обычная кнопка), QRadioButton (радио-кнопка, переключатель) и др., которые уже могут иметь объекты.
Ответ отправил: Dr_Andrew (статус: 6-ой класс)
Ответ отправлен: 12.02.2008, 06:56
Оценка за ответ: 4


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


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

В избранное