Вопрос № 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
подсчитать количество разных элементов над главной диагональю. матрица должна формироваться генератором случайных чисел. Помогите пожалуйста срочно надоб но только чтоб не мудренно и с словесным описанием алгоритмаю БУду очень признателен!!!!
Отвечает: 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 в последовательность ифов. Если очень интересно, то напишите две простые программы, одну с использованием свитча, а другую с ифами и дизассемлируйте. Получите практически одинаковый результат.
Не могу согласиться с ранее данными ответами.
> Они одинаковы по сокрости.
Есть случаи, в которых 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
в двумерном массиве найти два одинаковых числа, вывести их и их порядковые номера!!!!!! массив должен вводить пользователь!!!!!!
Отвечает: 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