Доброго вечора, учасникам! За декілька хвилин розпочнеться довгоочікуваний онлайн конкурс з С++ . Сподіваюсь ми побачимо цікаве змагання. Бажаю усім успіхів!
ОСНОВНІ ІНСТРУКЦІЇ - для того, щоб прикріпити роботу до завдання, необхідно на сторінці свого проекту перейти в режим редагування (натиснути на олівець в правому верхньому кутку). Після цього під кожним завданням з`являться олівчики для завантаження файлів. Після того, як файл завантажився, рекомендується перевірити коректність завантаження - для цього збережіть його назад на свій комп`ютер та перегляньте зміст.
Пожалуйста ввдеите целое число: 23423
Пожалуйста ввдеите битовую позицию: 4
Бит в позиции 4 установлен
Двоичное представление числа 23423 : 101101101111111
Для продолжения нажмите любую клавишу . . .
А младшая цифра во всех совремнных системах исчисления находится справа. Самая старшая цифра - слева. Например десятичное число 456 - младшая цифра 6, потом цифра 5, потом цифра 4.
До завдання 5 іде додаток - текстовий файл із таблицею фраз. завантажити його можна із сторінки ЗАВДАННЯ. В особистих проектах учасників лінк на завантаження додатку не відображається.
Еще раз принцип адресации младший бит по младшему адресу, младший байт по младшему адресу именно так, за исключением особіх случаев. Адрес младшего бита, байта 0-й. Почему ві решили что єто не так я не знаю.
Кто не верит пусть сделает побитовый сдвиг единицы влево несколько раз и каждый раз выведет на экран значение переменной куда эта единица была занесена.
Давать в заданиях кирилицу - жестоко. Ибо сделать её тем, кто ни разу с ней дела в консоли с++ не имел - геморой ещё тот=)
Ещё в пятой задаче мне понравилось: "у якусь структуру даних". Я вот всё думал, что же выбрать: массив или самобалансируемое двоичное дерево поиска=)
" Pavel Remygailo
Задача 1. Сделана. Но есть комбинации при которых программа работает некорректно. При числе например 4 (0100) если поставить проверку бита № 0 и №1. Нужно либо сделать для таких ситуаций отдельную обработку с помощью if, либо сдвигать маску, а не число, либо вести отчет битов с 1-го по 8-й в этом случае сдвиг осуществлять не на position а на (position-1)."
Пробачте, але Ви, здається, перевіряли не мій код. Перевірка значення біта працює бездоганно для всіх варіантів.
4,0 - не встановлено
4,1 - не встановлено
4,2 - встановлено
(нумерація від 0 до 63 з права наліво).
Інша проблема, що сьогодні зловив переповнення буфера при перетворенні, хоча при здачі його ніби не було - проблема в неініціалізованому буфері, в котрому останній байт за задумкою мав бути термінуючим нулем, з.
№2 static_cast - стандартний оператор С++, він не входить в STL. С-подібне перетворення (type-id)value зводиться до static_cast, або, якщо це неможливо, то reinterpret_cast, після чого, при необхідності(якщо змінюються кваліфікатори const і/або volatile) виконується const_cast.
№3 Згоден, переплутав result[i][j] з matrix[i][j] :)
№5 включено, все працює. Для розробки використовував Microsoft Visual Studio 2008 Professional (Version 9.0.21022.8 RTM)
Компілятор відповідний.
Як я розумію, останні 3 рядки відповіді також адресовані мені.
Про using namespace - це не дуже хороша практика, особливо, якщо в коді буде кілька просторів імен - можлива колізія, а простори імен як-раз і вигадані для того, щоб уникати колізії. Хоч в даному проекті цього і не може статися, але звички погано впливають. Більш прийнятним варіантом є using std::cout.
Ще хочу зазначити особливість коду рішення 5-ого завдання від Євгена Задорожнього - метода написання коду copy&paste - можна помітити по зміні стилю виклику звернення до елементів простору std - в заголовку написано using nmespace std, а при перевантаженні оператора використовується повне ім`я зі специфікацією простору імен.
Крім того, скопійований випадково метод "split" хоч і використовує вектор із STL, але не використовується взагалі. Мертвий код. Крім того, якщо в інших рішеннях успішно використовувалася функція setlocale, то тут навіщось використано непотрібне перевантаження(навіть два) оператора.
А рішення зроблено через масиви, і можливості STL не використано взагалі.
Павле, спасибі за коментарі, суддя через деякий час дасть на них відповідь. Просимо вас вказати коректну дату народження, місто, а також місце навчання.
Також для усіх учасників прохання - додайте якусь аватарку собі на особисту сторінку, - набагато приємніше та легше іншим користувачам переглядати списки та рейтинги.
Pavel Remygailo.П
1) Щодо "рішення зроблено через масиви, і можливості STL не використано взагалі" мені здається, що у відгуку про мою роботу суддя переплутав номера 4 і 5. Дійсно, в 5-ій задачі можливості STL не використовуються, а ось 4-а задача повністю на них (stringstream, vector, string).
2) Усі 5 задач я робив у одному проекті, і через це при переході з 4-ої задачі на 5-у забув стерти зайве, яке і залишилось "мертвим кодом" ( це відноситься і до split, і до перевантажених операторів).
3) Перевантажені оператори та функція SetConsoleCP(1251) дозволяють працювати з кирилицею у консолі і при виводі, і при вводі, тоді як setlocale, якщо не помиляюсь, лише при виводі. Саме через це я і використав їх у задачі №4.
4) Дійсно, ці перевантажені оператори я використовував раніше, і узяв готовий код, який був під рукою. Та я не бачу правила, яке б забороняло використовувати prewritten code. Тим паче, не варто забувати, що це - заочне змагання.
Євген Задорожній благодарю за то что помогли прояснить ситуацию. Действительно я имел в виду задачу № 4.
Pavel Remygailo. Так же благодарю за активное участие. Признаю static_cast - оператор С++ который не входит в STL.
По задаче 1 да ошибка переполнения наблюдается уже при выводе результата. При чем в моем случае именно на значениях 4 (0100) и 6 (0110) при запросе 0-го бита. Но в любом случае она имеет место, поэтому общая рекомендация для всех - тестировать программу в том числе для крайних случаев (начало/конец выделенного объема памяти).
Что касается using namespace - это я привел для примера. Пространство имен в полученном мной исходном коде объявлено не было, как не был объявлен и хидер / . Отсюда и такая постановка комментария в отзыве.