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

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


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

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

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

Выпуск № 1001
от 20.02.2008, 02:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 479, Экспертов: 49
В номере:Вопросов: 9, Ответов: 18

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


Вопрос № 123066: Уважаемые эксперты! Расчитвыается значение следующей экспоненты { 2.86*6*10^(5)*(400)^(-0.17)}*{pow(10,4.66)*pow(j,-3)}*Exp[(13.6*(1/(j)^2-0.01))/(8.61*10^(-5)*400)]. (j>10) Расчет,например для j=13,с помошью стандартной библиотеки math.h ...
Вопрос № 123090: Здравствуйте! У меня вот какой вопрос: есть модуль данных и там всякие элементы, и чтобы к ним обращаться в основной программе приходится писать MyDM1->ObjNameSaveADOCmd->Parameters->ParamByName("id")->Value, это до...
Вопрос № 123096: Уважаемые эксперты, у меня проблемы с этими задачами: 1. Найти факториал числа, пользуясь только указателями. 2. Найти заданную степень числа, пользуясь только указателями. ...
Вопрос № 123106: Вопрос не по языку, а по его использованию: На что ориентироваться при изучении языков C/C++. Какие основные применения этих языков. про Си слышал следующее: БД, микроконтроллеры, драйвера. Где еще без него не обойтись? Про приме...
Вопрос № 123107: Вопрос по работе с динамическими структурами: В книге **Подбельский: "Программирование на языке Си"** 2001г. вып. увидел следующий пример рекурсивного ввода и вывода односвязного динамического списка. В этом примере вы...
Вопрос № 123138: Уважаемые эксперты, из своей программы на C++ я должен выполнить команду: WinExec("1.Bat",SW_SHOWNA); 1.Bat писал не я - в нем всего одна строка: start Explorer.exe %1 Объясните, пожалуйста, что такое %1 и, е...
Вопрос № 123149: Посоветуйте книгу для самостоятельного обучения на C++Builder 6.Я сам тока начал изучать програмирование и не знаю не одного языка...
Вопрос № 123157: В какой степени программисту следует знать операционную систему, для которой пишется приложение. Какие стороны ОС есть, которые нужно стопудово знать независимо от направленности приложения?...
Вопрос № 123178: Вопрос для тех, кто пользуется компилятором Dev-C++ (у меня версия 4.9.9.2). При компилировании программы (см. приложение) выскакивает следующая ошибка: `nums' undeclared (first use this function) (Each undeclared identifier is report...

Вопрос № 123.066
Уважаемые эксперты! Расчитвыается значение следующей экспоненты
{ 2.86*6*10^(5)*(400)^(-0.17)}*{pow(10,4.66)*pow(j,-3)}*Exp[(13.6*(1/(j)^2-0.01))/(8.61*10^(-5)*400)]. (j>10)
Расчет,например для j=13,с помошью стандартной библиотеки math.h (VC++ 6.0) и расчет с помощью,например, Mathematica 5.1 отличаются уже в 3 знаке после запятой (а учитывая что в результате получается степень 10^6 разница существена).И с увеличением j разница растет все больше.С чем бы это могло быть связано и как с этим бороться.Помогите пожалуйста.
Отправлен: 14.02.2008, 03:23
Вопрос задал: Predictor (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Lang21
Здравствуйте, Predictor!

Правильнее было бы проводить вычисления по формуле, а не подставлять туда вручную численные значения. Так гораздо легче избежать ошибок.
Вычисления с помощью Maple и по программе, которая приведена в приложении, дают при j=13 одинаковый результат с точностью до 9 знака: 2.571203515e+06.
Вероятно, в Вашей программе есть ошибки, связанные с преобразованием типов, но не имея текста программы ничего определённого сказать нельзя.

Приложение:

Ответ отправил: Lang21 (статус: 6-ой класс)
Ответ отправлен: 14.02.2008, 11:10
Оценка за ответ: 5


Вопрос № 123.090
Здравствуйте!

У меня вот какой вопрос:
есть модуль данных и там всякие элементы, и чтобы к ним обращаться в основной программе приходится писать MyDM1->ObjNameSaveADOCmd->Parameters->ParamByName("id")->Value, это долго, вот можно как-нить это сократить? алиасы какие-нить или еще что?
C++Builder 5

Заранее спасибо
Отправлен: 14.02.2008, 11:13
Вопрос задал: Муратов Радик Анатольевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сандров Алекс
Здравствуйте, Муратов Радик Анатольевич!

в микрософте есть такая штука как property:

__declspec(property(get = getFunc, put = putFunc)
TData yourAlias;
TData getFunc() {return m_yourClassPtr->m_yourSubclassPtr->m_yourVariable;}
void putFunc(TData data){m_yourClassPtr->m_yourSubclassPtr->m_yourVariable = data;}

Но не знаю, насколько в билдере такой номер пройдёт

Ещё вариант - define-ы, если линейка m_yourClass->... повторяется одинаково, то можно её спрятать за дефайном
#define m_yourClass->m_yourSubclass SC
и потом:
CS->m_yourVariable;

Или ещё вариант, для часто используемых переменных, но только разного типа: через операторы каста внутри класса (я обычно так делаю)

class CYourClass
{
//...
operator TData(){return m_yourSubclass->m_yourVariable};
}

тогда даже алиас не нужен
CYourClass yourOne;
...
TData someTData = yourOne; // на самом деле = yourOne->m_yourSubclass->m_yourVariable;

Но все эти методы на самом деле запутывают код, особенно последний, если не знать или забыть, что в классе есть каст :)
Ответ отправил: Сандров Алекс (статус: 4-ый класс)
Ответ отправлен: 14.02.2008, 12:15
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо. очень полный ответ

Отвечает: Ross
Здравствуйте, Муратов Радик Анатольевич!

Как вариант можно написать функцию, что-то типа этого:

ValueType& GetParamData(ModType& module,const char* name)
{
return module->ObjNameSaveADOCmd->Parameters->ParamByName(name)->Value;
}

и поместить ее в описание вашего класса.
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 14.02.2008, 15:08
Оценка за ответ: 5


Вопрос № 123.096
Уважаемые эксперты, у меня проблемы с этими задачами:
1. Найти факториал числа, пользуясь только указателями.

2. Найти заданную степень числа, пользуясь только указателями.

Отправлен: 14.02.2008, 11:47
Вопрос задал: Биюн Виктор Павлович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: shayen
Здравствуйте, Биюн Виктор Павлович!
В приложении код откомпилированный в VS 2003, для поиска факториала для лучшего понимания использовался цикл, а не рекурсия.

Приложение:

Ответ отправил: shayen (статус: 3-ий класс)
Ответ отправлен: 14.02.2008, 23:37
Оценка за ответ: 5
Комментарий оценки:
Спасибо, отличые решения!!!!

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

Приложение:

Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 15.02.2008, 03:27


Вопрос № 123.106
Вопрос не по языку, а по его использованию:
На что ориентироваться при изучении языков C/C++.
Какие основные применения этих языков.
про Си слышал следующее: БД, микроконтроллеры, драйвера.
Где еще без него не обойтись?
Про применение C++ практически ниче не знаю.
Вобщем, мне нужно найти какую-то цель изучения этого языка.

Может быть, ссылки дадите какие-нибудь, где все это разом можно почерпнуть, а не выуживать по форумам :)
Отправлен: 14.02.2008, 12:50
Вопрос задал: Warobushek (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сандров Алекс
Здравствуйте, Warobushek!

Применение: компьютер :)

Вообще, с++ сам по себе, кроме описания данных (классы) и простейшего манипулирования с ними (методы) ни для чего не пойдёт. Ну это в общих чертах. Просто есть множество библиотек(стандартых и нестандартных), которые дают доступ к разным областям.
А дальше уже, что делать - это на сколько фантазии хватит. Базы данных? - С++ и DB-провайдер. Игры? - С++ и DirectX библиотека (+ OpenGL). Драйвера? - С++ и DDK (driver dev kit), Сети? - С++ и winsock2 библиотека, Интернет? - Java :D

Кстати, хороший сайт для начиния в с++(и других языках) - firststeps.ru
Ответ отправил: Сандров Алекс (статус: 4-ый класс)
Ответ отправлен: 14.02.2008, 13:04
Оценка за ответ: 5
Комментарий оценки:
кое что начинаю понимать)

Отвечает: Виктор Пырлик
Здравствуйте, Warobushek!

Я бы не стал говорить отдельно о С и С++ - это не верно. Как впрочем, и пытаться изучать С++ отдельно. Многие могут не согласиться.. Но любой язык программирования предназначен прежде всего, для реализации мысли программиста в техногенную форму.
Есть узкоспециализированные языки, имеющие своеобразную (далеко не всегда удобную) форму (синтаксис, семантика, организация) но максимально адоптирован для выполнения узкого круга задач.. (например, GPSS).
Язык С, в первоначальном виде – облагороженный ассемблер, т.е. фактически язык машины. Это потом уже он делался всё более удобным для человека. Отсюда и его назначение – система, а коль система в контексте ЭВМ это всё, то следовательно это язык общего назначения.
Язык С++ это в целом, тот же СИ, но с классами (с дополнениями). И суть его в том, что потребовалось создать буфер между логикой машины и окружающем миром. Именно по этому, были сделаны дополнения таким образом, что бы можно было максимально близко описывать объекты реального (окружающего нас) мира, т.е. моделировать реальные процессы «понятным» образом как для машины так и для человека. По этому, я крайне против в отдельном изучении языка С++. Надо просто пользоваться им, но основа то все равно – СИ.
Так вот, на языке С/С++ можно легко, свободно, оптимально реализовать любую идею..
Начиная от элементарных диалоговых (консольных) задач – утилиты типа поиска, переименования, и др. операций с файлами и устройствами, более сложными системными утилитами, играми, базами данных, различными «прикольными» программами (TheBat, FAR, WinRAR, Total commander, MathCAD, Maple и др..) и такими сложными делами, как например экспертные системы или САУ…

В целом, ориентироваться надо на синтаксис в начале и обязательно на культуру программирования, это не пустое слово.
Очень в этом плане не плохая книга –
«Искусство программирования на С. Фундаментальные алгоритмы, структуры данных и примеры приложений», Ричард Хэзфилд, Лоуренс Кирби.
А так же, «Структуры данных в С++», Уильям Топп, Уильям Форд.
Ну и «ЯЗЫК СИ++», В.В. Подбельский.


---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 14.02.2008, 16:05
Оценка за ответ: 5
Комментарий оценки:
спасибо, я прислушаюсь к Вашему мнению


Вопрос № 123.107
Вопрос по работе с динамическими структурами:
В книге **Подбельский: "Программирование на языке Си"** 2001г. вып.

увидел следующий пример рекурсивного ввода и вывода односвязного динамического списка.

В этом примере выделенная память не освобождается в конце программы. Это опечатка автора или так и надо??

Приложение:

Отправлен: 14.02.2008, 12:57
Вопрос задал: Warobushek (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сандров Алекс
Здравствуйте, Warobushek!

Скорее всего, специально не стал, потому что после вывода наступает конец программы и данные и так выгрузятся.... Но это неправильно.

В данном примере я бы функции input и output сделал бы методами некоторого класса, экземпляр которого бы объявил вначале функции майн.
Кроме того, указатель на струкуру cell я бы сдалал переменной этого класса. Таким образом этот класс являлся бы ответсвенным за этот указатель и за память на него выделенную (за всё всегда должен быть кто-то ответственным). Далее, в контструкторе класса я бы присвоил указатель NULL, а в деструкторе проверил, если он не NULL, то его надо delete (ну или free, как в примере, это в зависимости чем алоцировали, тем и делоцируем). Ну ещё один тонкий момент - инициализация данными - тут надо проверять тоже указатель на нулёвость, перед тем как делать malloc, вдруг там уже есть данные, тогда их надо освободить.
Ответ отправил: Сандров Алекс (статус: 4-ый класс)
Ответ отправлен: 14.02.2008, 13:11
Оценка за ответ: 5

Отвечает: Ross
Здравствуйте, Warobushek!

Применимо к вашему коду, можно дописать небольшую функцию для удаления списка и вызвать ее в конце программы.

void clear(struct cell* pCell)
{

if (pCell)
{
clear(pCell->pc);
free(pCell);
}

}
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 14.02.2008, 15:14
Оценка за ответ: 4
Комментарий оценки:
вопрос не про то как это сделать, но за идею спасибо.


Вопрос № 123.138
Уважаемые эксперты, из своей программы на C++ я должен
выполнить команду: WinExec("1.Bat",SW_SHOWNA);

1.Bat писал не я - в нем всего одна строка:

start Explorer.exe %1

Объясните, пожалуйста, что такое %1 и, если можно,
дайте ссылку где почитать про создание BAT-файлов.

Отправлен: 14.02.2008, 16:43
Вопрос задал: George22 (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Boriss
Здравствуйте, George22!
На этой место будет поставлено имя файла, передаваемого как параметр при вызове BAT-файла. Если в пути к файлу могут встретиться пробелы, то следует ставить %1 в кавычки ("%1").
%2 - означает второй параметр и т.д.
Почитать можно, например, здесь Командные файлы DOS
---------
Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: Мордовский госуниверситет, Саранск Факультет Электронной Техники
WWW: Программирование на Паскале
----
Ответ отправлен: 14.02.2008, 17:27
Оценка за ответ: 5

Отвечает: Попов А.С.
Здравствуйте, George22!

%1 - первый передаваемый батнику параметр
ps проще использовать API ShellExecute(NULL, "open", "explorer.exe", "--параметр--" ,NULL, SW_SHOWNA); параметр лучше передать программе (см. прилож.)

Приложение:

Ответ отправил: Попов А.С. (статус: 8-ой класс)
Ответ отправлен: 14.02.2008, 18:07
Оценка за ответ: 5

Отвечает: X-men
Здравствуйте, George22!
Про BAT-файлы можно прочесть здесь или здесь.
Или можете сделать следующее: Пуск -> Выполнить -> cmd.exe.
В открывшемся окошке наберите команду help.
Вам будет выдан список команд (насколько мне известно, это не полный перечень). Справку по конкретной команде вы можете получить так: <название команды> help. Треугольные скобки набирать не нужно.
Возможно, вам понадобится команда pause для временной остановки выполнения программы (если эту команду в bat-файл не ввести, то он выполнится и тут же закроется).
Удачи!
Ответ отправил: X-men (статус: 1-ый класс)
Ответ отправлен: 14.02.2008, 21:33

Отвечает: shayen
Здравствуйте, George22!
вот нескольнко полезных ресурсов
http://www.windowsfaq.ru/content/category/3/7/45/
http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=20
Ответ отправил: shayen (статус: 3-ий класс)
Ответ отправлен: 14.02.2008, 22:00

Отвечает: Сандров Алекс
Здравствуйте, George22!

%1, %2 и так далее - параметры, которые можно указать в коммандной строке при запуске бат-файла.

Если Explorer запускается с параметром, то это путь, который надо открыть в проводнике.
Поэтому тут логичнее было бы написать что-то типа:
WinExec("1.Bat C:Temp", SW_SHOWNA);
Ну или в том же духе. А можно передавать параметр, который пришёл из коммандной строки в функцию main, например.
Ответ отправил: Сандров Алекс (статус: 4-ый класс)
Ответ отправлен: 15.02.2008, 05:52


Вопрос № 123.149
Посоветуйте книгу для самостоятельного обучения на C++Builder 6.Я сам тока начал изучать програмирование и не знаю не одного языка
Отправлен: 14.02.2008, 17:48
Вопрос задал: Кречетов В.В. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Jan
Здравствуйте, Кречетов В.В.!

По билдеру мне понравилась эта книга, довольно прсто и понятно написано
Кент Рейсдорф и Кент Хендерсон Освой Borland C++ Builder Самостоятельно

Но одной книгой вам с азов не обойтись, программирование на С++ предполагает, как минимум, хорошие знания самой архитектуры PC; в сети для начала посоветую http://firststeps.ru/, а далее, гугл - web-пути знающий, - лучший проводник!
Ответ отправил: Jan (статус: 2-ой класс)
Ответ отправлен: 15.02.2008, 14:07


Вопрос № 123.157
В какой степени программисту следует знать операционную систему, для которой пишется приложение. Какие стороны ОС есть, которые нужно стопудово знать независимо от направленности приложения?
Отправлен: 14.02.2008, 18:25
Вопрос задал: Warobushek (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Сандров Алекс
Здравствуйте, Warobushek!

Операционку надо знать хорошо. Что касаемо виндов, то тут надо знать(а можно и не знать, в принципе) системные библиотеки. Потому что работая в среде и дёргая функции Win32API, по сути дёргаете как раз функции этих библиотек. В среде используются для этого lib-файлы. Вы вставляется в свой код заголовок для описания всех этих функций, констант и так далее:
#include "windows.h"
И у вас есть доступ к общему функционалу виндов.
Ну и в том же духе. Если у вас IDE - MS Visual Studio, то там есть утилитка depends, с помощью неё можно посмотреть, какие функции ипортирует dll-ка.
К примеру User32.dll - это GUI и работа с окнами.
Shell32.dll - работа с шелом
Kernerl32.dll - работа с файлами и операционкой
Comctl32.dll - работа с расширенным набором контролов (трэкбары, листвью и так далее)
MS Visual С++ и C++Builder вообще скрывают обращения к системным ресурсам и разработчик просто дёргает функции. Но вообще полезно знать, что и как работает(и как можно линковаться к ним динамически, кстати) потому что часто приходится использовать не только стандартные средства.
Ответ отправил: Сандров Алекс (статус: 4-ый класс)
Ответ отправлен: 15.02.2008, 06:01
Оценка за ответ: 5


Вопрос № 123.178
Вопрос для тех, кто пользуется компилятором Dev-C++ (у меня версия 4.9.9.2).
При компилировании программы (см. приложение) выскакивает следующая ошибка:
`nums' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.).
Просьба просветить, почему она выскакивает, и как её исправить.

Приложение:

Отправлен: 14.02.2008, 21:04
Вопрос задал: Piotr-es (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Lang21
Здравствуйте, Piotr-es!

Потому, что переменная у Вас объявлена nams, а исмользовать Вы пытаетесь переменную nums.
Ответ отправил: Lang21 (статус: 6-ой класс)
Ответ отправлен: 14.02.2008, 21:45

Отвечает: kool
Здравствуйте, Piotr-es!
Очепятка -
Объявлено
int nams[10];
а используется
nums
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 15.02.2008, 08:00
Оценка за ответ: 5
Комментарий оценки:
И прада! Исправил, прогнал, но опять ошибка:
expected primary-expression before ) token
expected `; before ) token
expected `} at end of input


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

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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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

В избранное