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

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


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


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

Выпуск № 239
от 21.04.2003, 20:10

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


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

vitya
Статус: Профессиональный
Общий рейтинг: 108.02
[Подробней >>]
Avl2k
Статус: Опытный
Общий рейтинг: 123.84
[Подробней >>]
Knignick
Статус: Начальный
Общий рейтинг: 121.42
[Подробней >>]
 
Ramzes
Статус: Опытный
Общий рейтинг: 129.07
URL: :))
[Подробней >>]


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

Вопрос № 710. Здравствуйте, уважаемые эксперты.Пожалуйста не поймите меня неправильно. Но передомной стоит такая з... (ответов: 2)
Вопрос № 711. Добрый день Есть ли у кого-нибудь примеры работы с Shell API ? а именно, заполнение дерева каталогов... (ответов: 1)
Вопрос № 712. Добрый день, уважаемые эксперты! Не встречал ли кто из вас библиотечку для вычисления значений элеме... (ответов: 1)
Вопрос № 713. Здравствуйте эксперты. Как написать функцию наподобие scanf, т.е. у нее переменное количество параме... (ответов: 4)

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


 Вопрос № 710

Здравствуйте, уважаемые эксперты.Пожалуйста не поймите меня неправильно. Но передомной стоит такая задача:
"Используя схему Горнера решить уравнение 3x^4+2x^2+x+1 при x=0.1." Пожалуйста скажите как это реализовать по схеме Горнера и что это такое?
Формула может какая? Информацию которую я нашел ничего вразумительного не дала. Спасибо и заранее благодарен.



Вопрос отправлен: 17.04.2003, 20:28
Отправитель: Sonic (echelon@farlep.net)

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

Отвечает vitya

Доброе время суток, Sonic!
Надо преобразовать выражение так
(((3 * x) * x + 2) * x + 1) * x + 1;
Пишешь функцию, которая просто подставляет в это выражение вместо x - 0.1.

Ответ отправлен: 18.04.2003, 13:47
Отправитель: vitya


Отвечает Avl2k

Здравствуйте, Sonic!
Вообще-то схема Горнера предназначена для последовательного вычисления значений многочленов. Суть в следующем: чтобы избежать возведения в степень, многочлен преобразовывается следующим образом
f(x) = (...(((x + a1)·x + a2)·x + a3)...)·x + an,
например
7x^4 - 5x^3 +x^2 + 3x + 1=
(7x^3 - 5x^2 + x + 3)x + 1=
((7x^2 - 5x + 1)x + 3)x + 1=
(((7x - 5)x + 1)x + 3)x + 1.
В этом виде легко вычислять значение многочлена с помощью цикла или рекурсии.
См. также http://ega-math.narod.ru/Quant/Belaga.htm
С уважением, Avl2k.

Ответ отправлен: 18.04.2003, 11:16
Отправитель: Avl2k


 Вопрос № 711

Добрый день
Есть ли у кого-нибудь примеры работы с Shell API ? а именно, заполнение дерева каталогов так как в проводнике



Вопрос отправлен: 17.04.2003, 20:32
Отправитель: Владимир

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

Отвечает Avl2k

Здравствуйте, Владимир!
Такие примеры есть в MSDN. Вот пример, который выводит папки из Program Files, а также файлы в первой папки из этих папок (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/navigate.asp).
#include
#include
#include
main()
{
LPMALLOC pMalloc;
LPITEMIDLIST pidlProgFiles = NULL;
LPITEMIDLIST pidlItems = NULL;
IShellFolder *psfFirstFolder = NULL;
IShellFolder *psfDeskTop = NULL;
IShellFolder *psfProgFiles = NULL;
LPENUMIDLIST ppenum = NULL;
ULONG celtFetched;
HRESULT hr;
STRRET strDispName;
TCHAR pszDisplayName[MAX_PATH];
ULONG uAttr;

CoInitialize( NULL );
hr = SHGetMalloc(&pMalloc);

hr = SHGetFolderLocation(NULL, CSIDL_PROGRAM_FILES, NULL, NULL, &pidlProgFiles);
hr = SHGetDesktopFolder(&psfDeskTop);
hr = psfDeskTop->BindToObject(pidlProgFiles, NULL, IID_IShellFolder, (LPVOID *) &psfProgFiles);
psfDeskTop->Release();
hr = psfProgFiles->EnumObjects(NULL,SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &ppenum);
while( hr = ppenum->Next(1,&pidlItems, &celtFetched) == S_OK && (celtFetched) == 1)
{
psfProgFiles->GetDisplayNameOf(pidlItems, SHGDN_INFOLDER, &strDispName);
StrRetToBuf(&strDispName, pidlItems, pszDisplayName, MAX_PATH);
cout << pszDisplayName << ' ';
if(!psfFirstFolder)
{
uAttr = SFGAO_FOLDER;
psfProgFiles->GetAttributesOf(1, (LPCITEMIDLIST *) &pidlItems, &uAttr);
if(uAttr & SFGAO_FOLDER)
{
hr = psfProgFiles->BindToObject(pidlItems, NULL, IID_IShellFolder, (LPVOID *) &psfFirstFolder);
}
}
pMalloc->Free(pidlItems);
}
cout << " ";
ppenum->Release();
if(psfFirstFolder)
{
hr = psfFirstFolder->EnumObjects(NULL,SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &ppenum);
while( hr = ppenum->Next(1,&pidlItems, &celtFetched) == S_OK && (celtFetched) == 1)
{
psfFirstFolder->GetDisplayNameOf(pidlItems, SHGDN_INFOLDER, &strDispName);
StrRetToBuf(&strDispName, pidlItems, pszDisplayName, MAX_PATH);
cout << pszDisplayName << ' ';
pMalloc->Free(pidlItems);
}
}
ppenum->Release();
pMalloc->Free(pidlProgFiles);
pMalloc->Release();
psfProgFiles->Release();
psfFirstFolder->Release();
CoUninitialize();
return 0;
}
С уважением, Avl2k.



Ответ отправлен: 18.04.2003, 12:28
Отправитель: Avl2k


 Вопрос № 712

Добрый день, уважаемые эксперты!
Не встречал ли кто из вас библиотечку для вычисления значений элементарных функций, заданных формулами?
т.е. на момент компиляции формула функции неизвестна, но она задаётся в процессе выполнения, и нужно ее в какой-либо точке вычислять.
Буду благодарен за любую помощь.
WseslaW



Вопрос отправлен: 18.04.2003, 01:51
Отправитель: WseslaW (wseslaw@tut.by)

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

Отвечает Knignick

Здравствуйте, WseslaW!
Наверняка то, что тебе нужно есть в виде компонентов для C++ Builder. Поищи на www.torry.ru

Ответ отправлен: 18.04.2003, 02:41
Отправитель: Knignick


 Вопрос № 713

Здравствуйте эксперты.
Как написать функцию наподобие scanf, т.е. у нее переменное количество параметров
и эти параметры есть указатели на переменные. Короче говоря есть функция
int x=0,y=0,z=0;
GetData("%d%d%d",&x,&y,&z);
Дак вот после выполнения этого кода в переменные x, y, z функция должна передовать значения. Я пробовал через va_arg( ParamStr, int ) но ничего не получилось. Как это сделать?
Заранее благодарен.



Вопрос отправлен: 18.04.2003, 19:57
Отправитель: Kydesnik (brothers@atnet.ru)

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

Отвечает Ramzes

Добрый день, Kydesnik!
Ну пишешь функцию
void kuku(char* format, ...)
{
анализируем строку, чтобы получить инф-ю о кол-ве параметров и их типах.
va_list arglist;
va_start(arglist, p);
int* pi = (int*)va_arg(arglist, int);
*pi = что-то там;
}


Ответ отправлен: 19.04.2003, 14:03
Отправитель: Ramzes


Отвечает vitya

Доброе время суток, Kydesnik!
код должен быть таким
va_list args;
va_start(args, ParamStr);
//тут анализ строки, чтобы определить сколько параметров надо прочитать.
for (int i = 0; i < iParamCount; ++i)
{
int * piVar = va_arg(args, int *);
//тут идет запись значения в переменную.
*piVar = my_data[i];
}
va_end(args)

Ответ отправлен: 19.04.2003, 11:10
Отправитель: vitya


Отвечает Knignick

Приветствую Вас, Kydesnik!
переменное число параметров в объявлении функции обозначается как ...
Например:
int printf(const char*, ...);
Другой вопрос, как ты из стэка эти параметры извлекать будешь.


Ответ отправлен: 20.04.2003, 00:14
Отправитель: Knignick


Отвечает Avl2k

Приветствую Вас, Kydesnik!
Примерно так:
#include <stdarg.h>
void GetData(const char *fmt, ... )
{
va_list lst;
va_start(lst, fmt);
while(*fmt)
{
if(*fmt == '%')
switch(*++fmt)
{
case '':
continue;
case 'd':
{
int* p = va_arg(lst, int*);
*p = 123;
break;
}
}
++fmt;
}
va_end(lst);
}
С уважением, Avl2k.
void main()
{
int x=0,y=0,z=0;
GetData("%d%d%d",&x,&y,&z);
}

Ответ отправлен: 21.04.2003, 10:43
Отправитель: Avl2k



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (39)
C / C++ (30)
Perl (8)
Delphi (14)
Pascal (23)
Basic / VBA (9)
Java / JavaScript (11)
PHP (5)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (28)
Windows NT/2000/XP (22)
"Железо" (23)
Поиск информации (11)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (12)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (4)
КоАП (4)

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




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

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

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

В избранное