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

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


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

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

Выпуск № 847
от 12.09.2007, 20:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 496, Экспертов: 66
В номере:Вопросов: 5, Ответов: 11


Вопрос № 101108: Привет! Как на borland c++ builder поставить общий фоновый цвет, как для формы, так и для компонентов TImage? То есть по умолчанию, когда в timage не загружен рисунок - его цвет - белый... как это изменить?...
Вопрос № 101119: Здравствуйте! Подскажите, где и какую книгу по Си взять для самостоятель изучающего программирование. А если кто-то может, то подскажите решение задачи, а то застряла в книге: Для массива из 20 целых чисел со значениями от 1 до 20 надо написа...
Вопрос № 101172: Привет все м я взорвусь если не пойму ПОЧЕМУ: int i = 5; i = ++i + ++i; Вопрос: Чему равно i? ответ 14 ПОчему 14!!!...
Вопрос № 101190: Уважаемые експерты у меня возник вопрос. Файл можно скопировать спомощью функции ::CopyFileA(). Как скопировать папку ? Есть ли функцыя? Или как организовать копирование папки? ...
Вопрос № 101225: Привет всем! Есть ли в bcb какой-нибудь компонент, позволяющий устанавливать на определенные действия нормальные хот кии (f1,esc, например, а не ctrl+o Ж))? ...

Вопрос № 101.108
Привет! Как на borland c++ builder поставить общий фоновый цвет, как для формы, так и для компонентов TImage? То есть по умолчанию, когда в timage не загружен рисунок - его цвет - белый... как это изменить?
Отправлен: 06.09.2007, 20:43
Вопрос задал: Попов Максим алексеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

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

В форме устанавливаем свойство Color. В TImage - Transparent = true;

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 06.09.2007, 20:49
Оценка за ответ: 4

Отвечает: Sov
Здравствуйте, Попов Максим алексеевич!
Image1->Canvas->Brush->Color=clBtnFace;
Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
Ответ отправил: Sov (статус: 7-ой класс)
Ответ отправлен: 07.09.2007, 05:41
Оценка за ответ: 3


Вопрос № 101.119
Здравствуйте! Подскажите, где и какую книгу по Си взять для самостоятель изучающего программирование.
А если кто-то может, то подскажите решение задачи, а то застряла в книге:
Для массива из 20 целых чисел со значениями от 1 до 20 надо написать функцию, разрабатывающую элементы массива произвольным образом, а затем создать случайное число из того же диапазона и найти позицию этого случайного числа в массиве.
Если у кого-то получиться, то пожалуйста пришлите с объяснениями на мой email:Helen1402@ya.ru
Отправлен: 06.09.2007, 22:20
Вопрос задала: Елена Стоилова (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Терсков Сергей
Здравствуйте, Елена Стоилова!
По литературе С++ было достаточно много вопросов. Например вопрос № 98397. В ответах вы найдете достаточно много источников. А что касается вашей задачи, то смотрите в приложении два варианта. Один с использованием собственных функций, а второй с использованием STL.

Приложение:

Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 07.09.2007, 05:00
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо! Сейчас наберу и попробую разобрать.


Вопрос № 101.172
Привет все м я взорвусь если не пойму ПОЧЕМУ:
int i = 5;
i = ++i + ++i;
Вопрос: Чему равно i?

ответ
14
ПОчему 14!!!
Отправлен: 07.09.2007, 10:55
Вопрос задал: Tatarin (статус: 2-ой класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Sergey A. Wedensky
Здравствуйте, Tatarin!

Но Вам ведь уже объясняли, если не ошибаюсь.
Компилятор сначала вычисляет операнды. Выражение
++i
означает, что надо увеличить на 1 значение i, а уже затем использовать его в качестве операнда. Это проделывается дважды - для каждого из операндов. Т.е. компилятор дважды увеличивает значение i на единицу (после чего оно становится равным 7), а затем использует значение i (которое теперь равно 7) в качестве обоих операндов бинарной операции +. В результате сложения получается 7+7=14.
Для наглядности приведу еще раз ассемблерный код (кто-то это уже тоже делал, кажется), сгенерированный компилятором VisualC++ 2005 из Вашего кода.

Приложение:

Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 07.09.2007, 11:10

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

1. ++i = 6
2. ++i = 7
i = 7

3. i + i = 7 + 7 = 14

на первом шаге - увеличили i а 1 (стало i = 6)
на втором шаге опять увеличили i на 1 (стало i = 7)
и.. потом идет просто сложение одного и того же числа i (i = 7).
Это не разные переменные! вы работаете с одним адресом памяти (с одной переменной). Поэтому, не может быть в один момент i = 6 и i = 7.

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 07.09.2007, 11:22

Отвечает: Shurka
Здравствуйте, Tatarin!
Потому что сначала делается компилятор избавляется от ++ - ов i == 7. Потом ему остается вычислить i = i + i. Такова семантика C++.
Ответ отправил: Shurka (статус: 3-ий класс)
Ответ отправлен: 07.09.2007, 16:35

Отвечает: Sema
Здравствуйте, Tatarin!

Оказалось просто как все гениальное...

сначала Вы делаете левую операцию ++х в ячецку памяти по адресу х записывается 6

далее делается правый ++х
и в ту же ячейку памяти пишется уже 7

а потом получается 7+7 = 14 т.к. первое и второе слагаемое обращаются к одной ячейки памяти...
Ответ отправил: Sema (статус: 3-ий класс)
Ответ отправлен: 07.09.2007, 17:22

Отвечает: kool
Здравствуйте, Tatarin!
Вроде был уже этот вопрос.
Выяснили, что сначала значение i увеличивается
на две 1, т.е. на 2, получаем i=7, а затем
складываются два значения i+i=14. Такова жизнь и
синтаксис C++. можно принять как данность и не
заморачиваться, хотя вроде все логично.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 07.09.2007, 19:16


Вопрос № 101.190
Уважаемые експерты у меня возник вопрос.
Файл можно скопировать спомощью функции ::CopyFileA().
Как скопировать папку ? Есть ли функцыя?
Или как организовать копирование папки?
Отправлен: 07.09.2007, 13:53
Вопрос задал: Tadey (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Rockie
Здравствуйте, Tadey!

Можно, создавая папку и вызывая команду копирования через system("md ..."). и system("xcopy..."). Синтаксис команд можно посмотреть, набрав в консоли xcopy /? или md /?. Но в этом случае есть подозрение, что будет появляться окно консоли. Если оно мешает - можно написать функцию копирования вручную, так как функции создания дирректории и копирования файлов в с++ есть(MakeDirectory, mkdir, в зависимости от среды).

Пример "ручного" копирования папки на С++ есть тут:
http://articles.org.ru/cfaq/index.php?qid=2378&catid=64
Ответ отправил: Rockie (статус: 3-ий класс)
Ответ отправлен: 07.09.2007, 22:50
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ.


Вопрос № 101.225
Привет всем! Есть ли в bcb какой-нибудь компонент, позволяющий устанавливать на определенные действия нормальные хот кии (f1,esc, например, а не ctrl+o Ж))?

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

Отвечает: Зотов Дмитрий Владимирович
Здравствуйте, Попов Максим алексеевич!
используйте TAction
Ответ отправил: Зотов Дмитрий Владимирович (статус: 2-ой класс)
Ответ отправлен: 08.09.2007, 01:37

Отвечает: Irina Surina
Здравствуйте, Попов Максим алексеевич!
Создаете TAction. Дальше Properties->ShortCut->Выбираете или вводите клав. (Esc вводится. f1 есть в списке)
Ответ отправила: Irina Surina (статус: 1-ый класс)
Ответ отправлен: 08.09.2007, 12:33


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

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

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

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

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


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


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

В избранное