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

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


Информационный Канал Subscribe.Ru


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

Выпуск № 117
от 10.11.2002, 19:20

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 355
Отправлено ответов: 762
Активность: 214.6 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Yuri Gordienko
Статус: Доверительный
Общий рейтинг: 121.05
[Подробней >>]
Jadd
Статус: Профессиональный
Общий рейтинг: 143.37
[Подробней >>]
baldr
Статус: Профессиональный
Общий рейтинг: 114.8
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
 
Dzik
Статус: Опытный
Общий рейтинг: 114.01
URL: Разработка игрушек
[Подробней >>]
Avl2k
Статус: Доверительный
Общий рейтинг: 123.45
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 339. Не подскажите, как можно получить оригинальный заводской номер винчестера? Может есть Win API функци... (ответов: 2)
Вопрос № 340. Здравствуйте, эксперты. Я хотел бы узнать как можно определенную строку разделить по символу ":... (ответов: 1)
Вопрос № 342. Здравствуйте эксперты! Помогите отыскать причину ошибку в данном коде, который представляет собой жа... (ответов: 1)
Вопрос № 344. Привет! В самом общем случае задача формулируется так: Защитить массив из элементов, состоящих из би... (ответов: 3)

Вопросов: 4, ответов: 7


 Вопрос № 339

Не подскажите, как можно получить оригинальный заводской номер винчестера? Может есть Win API функция для этого?



Вопрос отправлен: 07.11.2002, 00:42
Отправитель: TanaT (tanat@hotmail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Yuri Gordienko

Приветствую Вас, TanaT!
Посмотри в ящике.


Ответ отправлен: 07.11.2002, 10:14
Отправитель: Yuri Gordienko


Отвечает Jadd

Приветствую Вас, TanaT!
Да тем же GetVolumeInformation. Там параметр lpVolumeSerialNumber будет содержать серийный номер тома. Если это не устраивает, есть структура NTMS_DRIVEINFORMATION описание ты сможешь найти в MSDN, а так же функцию, использующую ее. Но это из серии Removable Devices и будет ли оно работать с винтом я не знаю. Но готов подумать.

Ответ отправлен: 07.11.2002, 03:32
Отправитель: Jadd


 Вопрос № 340

Здравствуйте, эксперты.
Я хотел бы узнать как можно определенную строку разделить по символу ":", а потом считать конкретную последовательность байт из этой строки? И еще вопрос: как можно оправить и принять пакет по TCP/IP протоколу?
Спасибо.


Приложение:


Вопрос отправлен: 07.11.2002, 09:40
Отправитель: BaXI

[Следующий вопрос >>] [Список вопросов]

Отвечает baldr

Приветствую Вас, BaXI!
Для поиска попробуй функцию strpbrk(), а для копирования - strcpy()/strncpy()...
Первая возвращает указатель на найденный символ (или NULL если нет его), а вторая копирует
заданное количество байт из одной строки в другую. Вообще, если правильно все делать, то
можно и просто указателями обойтись...
А про TCP/IP... Хм... тебе WinSocket надо... Или, если ты хочешь работать с Internet, то
WinInet.


Ответ отправлен: 08.11.2002, 00:41
Отправитель: baldr


 Вопрос № 342

Здравствуйте эксперты!
Помогите отыскать причину ошибку в данном коде, который представляет собой жалкий огрызок класса matrix.
//---------------------------------------
#include
using namespace std;
#define Q_ 2
#define P_ 2
class matrix {
int *pbuf;
int p, q;
char name;
public:
matrix(int x, int y) {
p = x;
q = y;
cout << "c";
pbuf = new int [p * q];
if(!pbuf) {
//
}
name = '';
}
//
matrix(int x, int y, char c) {
p = x;
q = y;
pbuf = new int [p * q];
if(!pbuf) {
//
}
name = c;
}
//
~matrix() { delete [] pbuf; cout << "d"; }
//
int out_p() { return p; }
//
int out_q() { return q; }
//
char out_name() { return name; }
//
void in_name(char c) { name = c; }
//
int out_a(int j, int i) { return *(pbuf + j * i); }
//
void in_a(int j, int i, int a) { *(pbuf + j * i) = a; }
//
matrix &operator ++();
};
//--------------------------------------------
matrix &matrix::operator ++()
{
int i, j;
for(j = 0; j < out_p(); ++j)
for(i = 0; i < out_q(); ++i)
in_a(j, i, out_a(j, i) + 1);
return *this;
}
//---------------------------------------------
int main()
{
int i, j;
matrix a(P_, Q_), b(P_, Q_);
for(j = 0; j < a.out_p(); ++j)
for(i = 0; i < a.out_q(); ++i)
a.in_a(j, i, 1);
for(j = 0; j < b.out_p(); ++j)
for(i = 0; i < b.out_q(); ++i)
b.in_a(j, i, 3);

++a; // (1)

for(j = 0; j < a.out_p(); ++j) {
for(i = 0; i < a.out_q(); ++i)
cout << a.out_a(j, i) << ' ';
cout << " ";
}
getchar();
return 0;
}
//------------------------------------------------------
При перегрузке оператора (постпрефиксного) ++ просиходит
полная "лажа"... . Какойто млин нафиг моразм получается...,
немогу понять почему, обьясните и подкоректируйте код
эксперты.
Заранее благодарен... .
Пойду нажрусь с горя.



Вопрос отправлен: 07.11.2002, 16:53
Отправитель: kuper

[Следующий вопрос >>] [Список вопросов]

Отвечает baldr

Добрый день, kuper!
Трудно сказать... Лучше бы ты привел весь класс целиком. Причем пиши его, пожалуйста, в
поле "Приложение" - оно специально для таких вещей предназначено, а то не все символы корректно
показываются в html-виде...
И вот еще что - у тебя используется в цикле при проверке на границы значение из функции:
j < out_p()
такие вещи желательно делать только когда это действительно необходимо. Потому что из твоего
текста непонятно, что это за функция, может, ее значение меняется при каждой итерации?


Ответ отправлен: 08.11.2002, 00:41
Отправитель: baldr


 Вопрос № 344

Привет!
В самом общем случае задача формулируется так:
Защитить массив из элементов, состоящих из битов, контрольной суммой. То есть запись в массив производить через спецфункцию, в параметрах которой указывать изменяемый байт, бит...
Вопрос в том, как в функцию передать бит, но не значение, а типа адрес по которому его надо менять, что ли.
Пример попытки реализации см. в Приложении
Уточнения по вопросу лучше задавать по мылу...


Приложение:


Вопрос отправлен: 07.11.2002, 18:08
Отправитель: Sensey (sensey@ukr.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Dzik

Приветствую Вас, Sensey!
Ну а например так:
char MyR[X];
void putbit(int i,char pos,char bit)
{
bit<<=pos;
if(MyR[i]&bit)MyR[i]&=bit;//была еденичка-надо Andить
else MyR[i]|=bit; //был нолик
}


Ответ отправлен: 07.11.2002, 19:23
Отправитель: Dzik


Отвечает Avl2k

Приветствую Вас, Sensey!
Естественно ругается, т.к. у битовых полей адрес один и тот же. Выход один - передавать номер бита и значение, а далее манипулировать им, используя маску, тем более что в общем случае у нас не структура, а массив бит.
P.S. Если можно использовать C++ и STL, то удобно использовать класс std::bitset.
С уважением, Avl2k.

Приложение:

Ответ отправлен: 10.11.2002, 14:35
Отправитель: Avl2k


Отвечает baldr

Приветствую Вас, Sensey!
Почему бы вместо контрольной суммы не хранить сам массив элементов, если он не очень большой?
А при его изменении делаешь XOR старой и новой версии и получаешь единички в тех битах, где изменение было.
А у тебя в примере, если хочешь изменить бит, так просто в функции передай адрес бита, а функция
бит просто инвертирует... Чтоб считать значение бита - другая функция. Или я не так все понял?


Ответ отправлен: 08.11.2002, 00:40
Отправитель: baldr



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (37)
C / C++ (26)
Perl (7)
Delphi (14)
Pascal (19)
Basic / VBA (8)
Java / JavaScript (10)
PHP (7)
MySQL / MSSQL (8)
Пользователю
Windows 95/98/Me (27)
Windows NT/2000/XP (18)
"Железо" (26)
Поиск информации (11)
Администратору
Windows NT/2000/XP (10)
Linux / Unix (14)
Юристу
Гражданское право (9)
Семейное право (6)
Трудовое право (5)
КоАП (5)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное