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

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


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

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

Выпуск № 724
от 29.04.2007, 12:05

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


Вопрос № 83816: Поставил в Borland C++ 6 компонент cport-3.10/. Задача заключается вполучении данных от микроконтроллера. Коды от 01 до FF принимаются нормально, а вот 00 компонент не принимает. Как решить эту проблему. ...
Вопрос № 83817: подсчитать количество разных элементов над главной диагональю. матрица должна формироваться генератором случайных чисел. Помогите пожалуйста срочно надоб но только чтоб не мудренно и с словесным описанием алгоритмаю БУду очень признателен!!!! ...
Вопрос № 83837: Подскажите, пожалуйста! Что работает быстрее IF или Switch ??? если это зависит от компилятора, то в каких и как? ...
Вопрос № 83897: в двумерном массиве найти два одинаковых числа, вывести их и их порядковые номера!!!!!! массив должен вводить пользователь!!!!!! ...
Вопрос № 83930: З драствуйте!!! возможно ли вставить значок(рисунок) в CListBox. Чтоб изображался значек потом текст???...

Вопрос № 83.816
Поставил в Borland C++ 6 компонент cport-3.10/. Задача заключается вполучении данных от микроконтроллера. Коды от 01 до FF принимаются нормально, а вот 00 компонент не принимает. Как решить эту проблему.

Приложение:

Отправлен: 23.04.2007, 11:41
Вопрос задал: Logan2 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Mailusr
Здравствуйте, Logan2!
Попробуйте принимать не в строку, а в тип int, например, Дело в том, что символ с кодом 00 воспринимается как конец строки.
Ответ отправил: Mailusr (статус: 2-ой класс)
Ответ отправлен: 23.04.2007, 11:53

Отвечает: Unreal2004
Здравствуйте, Logan2!
Я пишу встраиваемое ПО для микроконтроллеров и задача обмена данными встает постоянно.
Я уже лет 5 использую компонент http://mcu.narod.ru/HARDANDSOFT/TComPort_VCL.zip.
Обычно данные читаются в буфер типа char
char buffer[1024];
а потом переводятся в нужный формат. Если будут вопросы по компоненту - пиши, хотя там вполне приличный хелп ;-)
Ответ отправил: Unreal2004 (статус: 2-ой класс)
Ответ отправлен: 23.04.2007, 23:49


Вопрос № 83.817
подсчитать количество разных элементов над главной диагональю. матрица должна формироваться генератором случайных чисел. Помогите пожалуйста срочно надоб но только чтоб не мудренно и с словесным описанием алгоритмаю БУду очень признателен!!!!
Отправлен: 23.04.2007, 11:41
Вопрос задал: Новиков Сергей Николаевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

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

Приложение:

Ответ отправил: Mailusr (статус: 2-ой класс)
Ответ отправлен: 23.04.2007, 12:59
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!!! Побольше бы таких отзывчивых людей как вы!!!!!!

Отвечает: Sergijj
Здравствуйте, Новиков Сергей Николаевич!

Ну, или так (немного другая реализация при похожем алгоритме): см. приложение.
По комментариям должно быть всё понятно.

Успехов!

Приложение:

---------
Стучитесь! И Вас откопают...

Ответ отправил: Sergijj (статус: 9-ый класс)
Ответ отправлен: 23.04.2007, 14:08
Оценка за ответ: 5


Вопрос № 83.837
Подскажите, пожалуйста! Что работает быстрее IF или Switch ??? если это зависит от компилятора, то в каких и как?
Отправлен: 23.04.2007, 14:02
Вопрос задал: Ghost (статус: Посетитель)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: QDSota
Здравствуйте, Ghost!

Они одинаковы по сокрости. Единственное - switch компилируется дольше... Есть тонкости: switch при компиляции делиться на IF-ы путем выравинвания путей, и в зависимости от использования того или иного порядка следования IF и распределения различных проверяемых значений результат может быть разным.
---------
Открыть глаза навстречу солнцу
Ответ отправил: QDSota (статус: Профессионал)
Тел.: 8-916-53-43-916
ICQ: 84611301
----
Ответ отправлен: 23.04.2007, 14:10

Отвечает: Gh0stik
Здравствуйте, Ghost!

Конечно Switch - работает намногобыстрее, если вам необходимо сделать множественные проверки, то фактически выполняется одно, которая сответсвенно переходит к нужному блоку программы.

А для IF - Вам прийдется делать много бесполезных проверок, это при условии если у Вас IF-ы НЕ вложены один в другой.

Ну а если у Вас используется одно условие, то я думаю что скорость работы будет одинаковы.
Одним словом более рационально использовать Switch - поскольку он сразу отсекает не нужные проверки...

Good Luck!!!

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 23.04.2007, 14:14

Отвечает: Никитюк Антон Александрович
Здравствуйте, Ghost!
If работает точно так же как switch. Компилятор преобразует switch в последовательность ифов. Если очень интересно, то напишите две простые программы, одну с использованием свитча, а другую с ифами и дизассемлируйте. Получите практически одинаковый результат.

Удачи :)
Ответ отправил: Никитюк Антон Александрович (статус: 1-ый класс)
Ответ отправлен: 23.04.2007, 15:14

Отвечает: Allex
Здравствуйте, Ghost!

Не могу согласиться с ранее данными ответами.
> Они одинаковы по сокрости.
Есть случаи, в которых switch работает константное время (не зависящее от количества ветвей), время работы if всегда линейно зависит от количества условий.
Если константы в ветвях идут подряд, их можно использовать как индексы массива адресов переходов. Вычисление адреса перехода в этом случае - константа.

>Конечно Switch - работает намного быстрее, если вам необходимо сделать множественные проверки, то фактически выполняется одно, которая сответсвенно переходит к нужному блоку программы.
Опять же, бывают случаи, когда switch будет работать примерно с той же скоростью, что и последовательные if.

Поэтому я бы сформулировал ответ так - switch работает не медленнее if, а в некоторых случаях и быстрее. Кроме того, уместное использование switch улучшает читабельность программы, поэтому использование switch предпочтительнее.

Замечу, что даже в тех случаях, когда switch может быть реализован за линейное время, не все компиляторы это делают. Например, Sun-овский компилятор Java версии до, если не ошибаюсь, 1.4, всегда использовал decision tree, в 1.5 переход по таблице используется только в серверной версии.

Нетрудно написать тест, который проверит, как реализован switch в исследуемом компиляторе.

Приложение:

Ответ отправил: Allex (статус: 8-ой класс)
Ответ отправлен: 23.04.2007, 15:45

Отвечает: Ilkras
Здравствуйте, Ghost!
работают одинаково быстро. Оператор switch заменяется многими операторами if. Сам по себе switch работает следующим образом - производится последовательное сравнение заданной величины со всеми определенными cases и в случае совпадения контроль сразу же передается на соответсвующий кусок кода. Таким образом switch заменяется множеством пар cmp - compare; jmp(je) - jump (jump if equal) по окончании куска кода в case стоит обычно оператор break, который переводится в jump.
Оператор if - else заменяется на cmp; jne (jump if not equal){some code} jmp; Таким образом различие только jne vs. je, обе эти команды выполняются за один такт. Стало быть операторы if и switch выполняются одинаково быстро.
Ответ отправил: Ilkras (статус: 8-ой класс)
Ответ отправлен: 23.04.2007, 16:01

Отвечает: kool
Здравствуйте, Ghost!
Конечно if ,быстрее.
switch - это комбинация из if.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 23.04.2007, 17:01

Отвечает: Gremlin
Здравствуйте, Ghost!
разница между ифами и свитчем заключается в том, что свитч указывает компилятору, что данная переменная должна сравниваться неоднократно, следовательно, перед серией сравнений, компилятор перенесет значение этой переменной в наиболее доступное место, например в регистр общего назначения, (или, в случае и большой косьвенностью, например в многочисленных классах, в локальную переменную, т.е. в кипу стека с меньшей косьвенной адресацией) поэтому блок сравнений будет выполняться быстрее нежели серии ифов. И обратно, для ифа: если нужно только одно сравнение, то нет смысла размещать значение переменной в близких адресах, это может только замедлить исполнение программы.

Таким образом, нужно искать "золотую середину", использовать данные операторы там, где они действительно подразумевается.
Ответ отправил: Gremlin (статус: 2-ой класс)
Ответ отправлен: 23.04.2007, 19:37


Вопрос № 83.897
в двумерном массиве найти два одинаковых числа, вывести их и их порядковые номера!!!!!! массив должен вводить пользователь!!!!!!
Отправлен: 23.04.2007, 19:58
Вопрос задал: Новиков Сергей Николаевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mister Vova
Здравствуйте, Новиков Сергей Николаевич!
Вот не большое консольное приложние

Приложение:

---------
Всё про Себя Тут Www.SahajaYoga.Ru

Ответ отправил: Mister Vova (статус: 3-ий класс)
Ответ отправлен: 24.04.2007, 13:17

Отвечает: Терсков Сергей
Здравствуйте, Новиков Сергей Николаевич!
Вот более общий вариант, который находит все повторы в массиве и индексы их расположения.

Приложение:

Ответ отправил: Терсков Сергей (статус: 8-ой класс)
Ответ отправлен: 25.04.2007, 02:09


Вопрос № 83.930
Здраствуйте!!! возможно ли вставить значок(рисунок) в CListBox. Чтоб изображался значек потом текст???
Отправлен: 24.04.2007, 01:30
Вопрос задал: HITY (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Воронцов А.А.
Здравствуйте, HITY!
Стандартно нельзя.
Нужно переписать обработчик OnDrawItem - способ медленный но так можно. Работа с элементом так же как с канвой - нарисовать картинку сдвинуть курсор нарисовать текст - сразу предупреждаю медленно - но на сегодняшних мощностях я думаю это не так критично
---------
Иди вперёд и никогда не оглядывайся
Ответ отправил: Воронцов А.А. (статус: 5-ый класс)
Ответ отправлен: 24.04.2007, 19:17
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.51 (beta) от 27.04.2007
Яндекс Rambler's Top100

В избранное