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

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


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

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

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

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

Выпуск № 916
от 24.11.2007, 15:35

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


Вопрос № 109999: Вопрос по с++ Builder. Почему так работает: TImage *Image1=new TImage(Form1); Image1->Parent=Form1; Image1->Canvas->Ellipse(5,5,5,5); а так не работает: TImage *Im[5]; for(i=0;i<5;i++) { Im[i]...
Вопрос № 110003: Подскажите, почему меняется содержание массива? Я задаю: int main(int argc, char* argv[]) { float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}}; float a[5]={0,0,0,0,0}; float b[5]={6,6,6,6,6};<br...
Вопрос № 110039: Здравствуйте :) У меня к вам 2 вопроса и я был бы очень благодарен если бы вы мне ответили ! 1: Это отрывок из программы которая копирует содержание всего диска има котрого (то есть буковка С или D и т.д.) в процесе выполнения прог...
Вопрос № 110061: Здравствуйте. Пишу класс для работы с матрицами перегружаю оператор [], надо чтобы при вызове к примеру a[1] возвращалась строка матрица размером 1 на n (число столбцов) (ну т.е. из матрицы выбирается только 1 строка) а если a[1][2] то нужно...
Вопрос № 110072: Уважаемы эксперты, помогите пожалуйста создать массивы для строк, которые храняться в ListBoxe. В строке содержится примерно следующее : мы вводим 2 в Edit1....... 4 10 100 Ленина //4 Edit1 ; 10 Edit2 ; 100 Edit3 ; Ленина Edit4. ... ... .......
Вопрос № 110095: Здравствуйте уважаемые эксперты Я программирую на Borland C++ 6.0: есть указатель long pBitmap, который возвращает элемент ActivX, этот указатель содержит изображение типа bitmap. как это изображение можно сохранить в файл, имея...
Вопрос № 110104: Здравствуйте! У меня возникла проблема со средой программирования С++Builder 6.0 Я написал две легкие программы, всё нормально скомпилировалось, запустилось и нормально работало без ошибок. Затем я переёс программы на другой комп, на котором...

Вопрос № 109.999
Вопрос по с++ Builder.

Почему так работает:
TImage *Image1=new TImage(Form1);
Image1->Parent=Form1;
Image1->Canvas->Ellipse(5,5,5,5);

а так не работает:
TImage *Im[5];
for(i=0;i<5;i++)
{
Im[i]=new TImage(Form1);
Im[i]->Parent=Form1;
}
Im[2]->Canvas->Ellipse(5,5,5,5);

В чем дело?
Отправлен: 18.11.2007, 15:55
Вопрос задал: RussianGM
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лясин Александр Владимирович
Здравствуйте, !
Поясните - что значит не работает? Программа запускается? Что вы хотите увидеть и что видите? Если вы хотите увидеть эллипс - то для этого надо для начала спозиционировать объекты Im[i] на форме так - чтобы они не перекрывали друг друга, или удалить с помощью delete все, кроме Im[2].
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 12:25


Вопрос № 110.003
Подскажите, почему меняется содержание массива? Я задаю:
int main(int argc, char* argv[])
{
float xr[5][6]={{1,2,3,4,5,7},{1,7,4,8,3,7},{3,5,2,2,1,7},{2,3,1,2,1,5},{4,5,7,8,9,5}};
float a[5]={0,0,0,0,0};
float b[5]={6,6,6,6,6};
int stat[5]={1,1,1,2,2};
int N=6;
int n=3;
int m=2;
float Po=0;
int mxr[3][6]={0};
for (int i=0; i<N; i++)
{
for (int r=0; r<(n+m); r++)
{
if (xr[r][i]>=a[r] && xr[r][i]<=b[r]) {mxr[r][i]=0;}
else {mxr[r][i]=1;}
}
}
for (int r=0; r<(n+m); r++) {
printf("stat[%i] = %d",r, stat[r]);
}
}
Он выводит содержание массива stat[5]={0,0,0,1,1}, вместо заданного stat[5]={1,1,1,2,2}; если закоментить код, то выводит все правильно stat[5]={1,1,1,2,2}
Заранее спасбио!
Отправлен: 18.11.2007, 16:26
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: kool
Здравствуйте, Mart!
Да потому что происходит запись вне границ массива -
mxr[4][0]=0 , например, определитесь с размерами этого массива.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 18.11.2007, 17:33
Оценка за ответ: 5

Отвечает: Argus98
Здравствуйте, Mart!
и опять же настойчиво рекомендую вам научиться пользоваться дебагом :)
ошибка в строке int mxr[3][6] = 0; должно быть int mxr[5][6] = 0; вы забыли правильно указать границы массива, в памяти все значения перемешались, поэтому вам программа случайно выдавала правильный результат (могла бы и не выдать, всё зависит от того как расположатся переменные в памяти)
Ответ отправил: Argus98 (статус: 2-ой класс)
Ответ отправлен: 18.11.2007, 18:11

Отвечает: Архипов Александр Леонидович
Здравствуйте, Mart!
А Вы уверены, что у Вас массив mxr[][] должен быть 3х6, а не 5х6?
Во всяком случае, после смены 3 на 5 ответ получается верным
Ответ отправил: Архипов Александр Леонидович (статус: Студент)
Ответ отправлен: 19.11.2007, 10:07


Вопрос № 110.039
Здравствуйте :) У меня к вам 2 вопроса и я был бы очень благодарен если бы вы мне ответили !

1:

Это отрывок из программы которая копирует содержание всего диска има котрого (то есть буковка С или D и т.д.) в процесе выполнения программы заносится в переменную DRIVE. DRIVE + ":\*" = str3 .
А проблема у меня в том что когда я пишу fo.pFrom = str3 всё компилируется прога врубается но не копирутся говорит что нету там файлов и он нечего не может найти. Как сделать так чтобы fo.pFrom равнялся тому что записанно в str3.

2.
Да и второй вопрос как можно сделать так чтобы во время копирования не выскакивалв окошко прогресса (типо всё должно быть скрытно ) ?

Приложение:

Отправлен: 18.11.2007, 20:02
Вопрос задал: GVA (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лясин Александр Владимирович
Здравствуйте, GVA!
По поводу первого вопроса сложно сказать имея так мало данных. Насколько понял я, бегло прочитав MSDN, используемая вами ф-я копирует (в вашем случае) файлы (а не весь диск!), которые должны быть указаны вами в pFrom.
Вот смотрите:

pFrom
Address of a buffer to specify one or more source file names. These names must be fully qualified paths. Standard Microsoft MS-DOS wild cards, such as "*", are permitted in the file-name position. Although this member is declared as a null-terminated string, it is used as a buffer to hold multiple file names.

В вашем случае - вы пытаетесь скопировать все файлы - которые в корне диска.
Вы уверены - что в корне диска они есть?

Вы косвенно утверждаете - что fo.pFrom не принимает значение str3 или str - вы проверяли содержимое fo.pFrom? В это, честно говоря, слабо верится :)
Несколько замечаний по стилю:
Вот эту строку
if (0 != SHFileOperation(&fo) || TRUE == fo.fAnyOperationsAborted)
можно записать
if (SHFileOperation(&fo) || fo.fAnyOperationsAborted) так компактнее и понятней.

По поводу второго вопроса:

FOF_SILENT
Do not display a progress dialog box.

Устанавливаете в fFlags данное значение FOF_SILENT, и прогрессбар не должен отображаться.


Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 11:59


Вопрос № 110.061
Здравствуйте.

Пишу класс для работы с матрицами перегружаю оператор [], надо чтобы при вызове к примеру a[1] возвращалась строка матрица размером 1 на n (число столбцов) (ну т.е. из матрицы выбирается только 1 строка) а если a[1][2] то нужно возвращать значение из матрицы т.е. число.

Заранее благодарен.
Отправлен: 18.11.2007, 21:50
Вопрос задал: Щербинин Павел Алексеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 12)

Отвечает: Гальцов Андрей
Здравствуйте, Щербинин Павел Алексеевич!
data - двумерный массив
int* operator [](int index)
{
return *(data+index);
}

Например:
data[3]
Вы хотите увидеть 3-ю строку - посылаете туда index=3...Из операторе Вам возвращается одномерный массив.

data[3][1]
После первого шага Вам вернулась третья строка...А затем из этой строки с index=1 получаете 1-й элемент...

На всяки случай:
data[3], это тоже самое, что и *(data+3)
data[3][1] в свою очередь тоже самое, что и *(*(data+3)+1)

В приложении программа с этим перегруженным оператором...Только с шаблоном класса...

Приложение:

---------
"The more you know, the less you need to show"

Ответ отправил: Гальцов Андрей (статус: Студент)
Ответ отправлен: 18.11.2007, 22:14
Оценка за ответ: 5
Комментарий оценки:
Ответ верный, но не то что мне нужно, просто у меня класс Array и в нем перегружено много операторов (умножение, сложение и тп) и поэтому при первом вызове [] он должен возвращать именно тип Array (а не указатель) а второй int

Отвечает: Терсков Сергей
Здравствуйте, Щербинин Павел Алексеевич!
Проще всего классы наподобие матриц создавать при помощи шаблонных классов. Для этого нужен шаблонный класс вектора, а класс матрицы - это вектор состоящий из векторов. Таким образом при вызове оператора [] возвращается вектор содержащий нужную строку матрицы. А вызов [][] вернет нужный элемент матрицы. Подобный код см. в приложении...

Приложение:

Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 19.11.2007, 04:41
Оценка за ответ: 5
Комментарий оценки:
Помоему это то что надо но я не все понял, если не трудно стукни в асю 191868413 поболтаем.


Вопрос № 110.072
Уважаемы эксперты, помогите пожалуйста создать массивы для строк, которые храняться в ListBoxe. В строке содержится примерно следующее : мы вводим 2 в Edit1.......
4 10 100 Ленина //4 Edit1 ; 10 Edit2 ; 100 Edit3 ; Ленина Edit4.
... ... .... .............

.. .... .... ............

5 23 33 Ленина 1

Нужно это для поиска совпадений. Т.е. я ввожу в Edit1 некое другое число например 5, в Edit2-21, в Edit3-44 и в Edit4-Ленина и по нажатию кнопки поиск должен быть осуществлен поиск совпадений, если они есть то они должны будут выводиться во втором ListBoxe.
Оч хотелось получить ответа, а то горит красным пламенем мой зачет по программированию......... Жду с нетерпением примера) Спасибо за вашу сознателность....

Приложение:

Отправлен: 18.11.2007, 23:20
Вопрос задал: Пушкин Евгений Владимирович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лясин Александр Владимирович
Здравствуйте, Пушкин Евгений Владимирович!
Все ответы на ваш вопрос присутствуют в справке. См. метод TStrings::Add(AnsiString) и подобные для работы со строками типа AnsiString (Insert, Delete). Видимо люди не совсем понимают, чего конкретно вы хотите. Если для вас проблема разобраться с методами стандартных компонентов C++Builder - то для начала посмотрите FAQ.
Какую сознательность вы имели ввиду - гражданскую? :)
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 11:16
Оценка за ответ: 3


Вопрос № 110.095
Здравствуйте уважаемые эксперты

Я программирую на Borland C++ 6.0:
есть указатель long pBitmap, который возвращает элемент ActivX, этот указатель содержит изображение типа bitmap.

как это изображение можно сохранить в файл, имея только указатель?
и есть ли возможность обращаться к пикселям через этот указатель?

Вот код: событие Camera1framercv возникает каждый раз при смене кадра

void __fastcall TForm1::Camera1framercv(TObject *Sender, BSTR tstrFileName, short Frame, short TotalFrames, DATE pDate, long fraction, long pBitmap)
{
TBitmap *map = (TBitmap*) pBitmap;
Image1->Picture->Bitmap = map->Bitmap;
}

// не работает [C++ Error] Unit1.cpp(151): E2015 Ambiguity between 'TBitmap' and 'Windows::TBitmap'
Отправлен: 19.11.2007, 08:53
Вопрос задал: Кутубаев Нурлан Юсупович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Ю.В.
Здравствуйте, Кутубаев Нурлан Юсупович!

Компилятор не может определиться, какой из типов ты пытаешься использовать: Window::TBitmap или Graphics::TBitmap ...

Два способа решения:

1) Везде уточнять область видимости:

void __fastcall TForm1::Camera1framercv(TObject *Sender, BSTR tstrFileName, short Frame, short TotalFrames, DATE pDate, long fraction, long pBitmap)
{
Graphics::TBitmap *map = (Graphics::TBitmap*) pBitmap;
Image1->Picture->Bitmap = map->Bitmap;
}

2) Или чтобы не заморачиваться, перед использованием TBitmap, переопредели тип:
void __fastcall TForm1::Camera1framercv(TObject *Sender, BSTR tstrFileName, short Frame, short TotalFrames, DATE pDate, long fraction, long pBitmap)
{
typedef Graphics::TBitmap TBitmap;
TBitmap *map = (TBitmap*) pBitmap;
Image1->Picture->Bitmap = map->Bitmap;
}

Удачи!

Корректировка
-----
∙ Отредактировал: Калашников О.А. (*Администратор)
∙ Дата редактирования: 19.11.2007, 10:54
Ответ отправил: Лучников Ю.В. (статус: 5-ый класс)
Ответ отправлен: 19.11.2007, 09:57
Оценка за ответ: 5


Вопрос № 110.104
Здравствуйте!
У меня возникла проблема со средой программирования С++Builder 6.0
Я написал две легкие программы, всё нормально скомпилировалось, запустилось и нормально работало без ошибок. Затем я переёс программы на другой комп, на котором C++Builder не был установлен и программы отказались работать выдав сообщение (Приложению не удалось запустится, поскольку vcl60.bpl не был найден. Повторная установка приложения может исправить эту проблему). А призапуске второй программы выводится сообщение (Приложению не удалось запустится, поскольку CC3260.DLL не был найден. Повторная установка приложения может исправить эту проблему). Я переносил только исплняемые файлы *.exe.
Тогда я попробывал удалить у себя C++Builder, врезультате программы перестали работать и у меня выдовая теже сообщения.
Подскажите пожайлуста что я сделал не правильно, как можно устранить эту проблемму?
Зарание благодарю.
Отправлен: 19.11.2007, 09:47
Вопрос задал: Грибанов Фёдор Александрович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vas177
Здравствуйте, Грибанов Фёдор Александрович!

Параметры проекта Project->Options:

Вкладка Compiler: нажать кнопку Release
Вкладка Packages: снять галочку Build with runtime packages
Вкладка Linker: снять галочку Use dynamic RTL
Ответ отправил: Vas177 (статус: 2-ой класс)
Ответ отправлен: 19.11.2007, 09:55

Отвечает: V1s0r
Здравствуйте, Грибанов Фёдор Александрович!

Вечный вопрос :)
Прямо как "быть или не быть" или как однажды подметил Maxim V.G. "есть ли жизнь на Марсе"
Сколько сотен тысяч раз его задавали?

Итак, открываем google и пишем ручками: site:rusfaq.ru vcl60.bpl
У меня перед глазами сразу же всплыл вопрос 94178 или 96080 и ответы на них. Это ведь не сложно, да?
Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 19.11.2007, 11:02

Отвечает: Lestat de Lionkur
Здравствуйте, Грибанов Фёдор Александрович!
В свойствах проекта убери галки с двух пунктов: компилировать с bpl и компилировать с dll.
Также в свойствах того же проекьа выставь компилировать release версию, а не debug.
Ответ отправил: Lestat de Lionkur (статус: 4-ый класс)
Ответ отправлен: 20.11.2007, 12:41


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

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

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

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

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


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


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

В избранное