Онлайн-конкурс "Програмування на С++"
Рівень змагання:
2
Термін проведения:
від 2013-01-25 19:00
до  2013-01-25 21:00
Вікова категорія:
Від 5 до 21
Основні оператори та команди мови С++. Робота з масивами та строками
роботи
Робота 1 етап Статус Технологія IT-бали
Номінація C/C++, від 5 до 80 років включно
1 MS VS 2010
Задорожній Євген ( )
50.00 50 1 місце C/C++  20
2 MS VS2008
Remygailo Pavel ( )
29.00 29 2 місце C/C++  10
3 НАЗВА ПРОЕКТУ
Красан Микола ( CIT )
18.00 18 3 місце C/C++  5
4 НАЗВА ПРОЕКТУ
Максим Хайленко ( )
16.00 16 Активний учасник C/C++  1
5 НАЗВА ПРОЕКТУ
Мельникова Олена ( )
12.00 12 Активний учасник C/C++  1
6 НАЗВА ПРОЕКТУ
Izumenka Max ( )
10.00 10 Активний учасник C/C++  1
7 НАЗВА ПРОЕКТУ
Айвазян Рафік ( )
9.00 9 Активний учасник C/C++  1
8 НАЗВА ПРОЕКТУ
Бабіенко Саша ( CIT )
7.00 7 Активний учасник C/C++  1
9 НАЗВА ПРОЕКТУ
Попович Андрій ( )
6.00 6 Активний учасник C/C++  1
10 НАЗВА ПРОЕКТУ
Kalashnikov Andrey ( )
  C/C++ 
11 НАЗВА ПРОЕКТУ
Votiakov Andrii ( )
  C/C++ 
12 НАЗВА ПРОЕКТУ
Адамів Антон ( )
  C/C++ 
13 НАЗВА ПРОЕКТУ
Бондаренко Сергій ( )
  C/C++ 
14 НАЗВА ПРОЕКТУ
Буднік Дмитро ( )
  C/C++ 
15 НАЗВА ПРОЕКТУ
Васильчук Богдан ( )
  C/C++ 
16 НАЗВА ПРОЕКТУ
Воротняк Назар ( )
  C/C++ 
17 НАЗВА ПРОЕКТУ
Гаупт Олександр ( )
  C/C++ 
18 НАЗВА ПРОЕКТУ
Гой Вадим ( )
  C/C++ 
19 НАЗВА ПРОЕКТУ
Жирок Александр ( )
  C/C++ 
20 НАЗВА ПРОЕКТУ
Козоріз Наталія ( "Юний програміст" Центру ТТМ )
  C/C++ 
21 НАЗВА ПРОЕКТУ
Кушнір Василь ( )
  C/C++ 
22 НАЗВА ПРОЕКТУ
Кібальний Ілля ( ДКРКМ ДНУ )
  C/C++ 
23 НАЗВА ПРОЕКТУ
Михайло Ткаченко ( )
  C/C++ 
24 НАЗВА ПРОЕКТУ
Михаленков Николай ( CIT )
  C/C++ 
25 НАЗВА ПРОЕКТУ
Олексюк Андрій ( ДКРКМ ДНУ )
  C/C++ 
26 НАЗВА ПРОЕКТУ
Олексієнко Ілля ( )
  C/C++ 
27 НАЗВА ПРОЕКТУ
Попович Евгений ( )
  C/C++ 
28 НАЗВА ПРОЕКТУ
Прокопів Володимир ( )
  C/C++ 
29 НАЗВА ПРОЕКТУ
Скатаренко Юрий ( )
  C/C++ 
30 НАЗВА ПРОЕКТУ
Солонинка Олег ( )
  C/C++ 
31 НАЗВА ПРОЕКТУ
Твердохліб Сергій ( КПДЮ )
  C/C++ 
32 НАЗВА ПРОЕКТУ
Філін Олександр ( ДКРКМ ДНУ )
  C/C++ 
33 НАЗВА ПРОЕКТУ
Хоміцевич Микита ( )
  C/C++ 
34 НАЗВА ПРОЕКТУ
Чаповский Евгений ( )
  C/C++ 
35 НАЗВА ПРОЕКТУ
Шушакова Яна ( )
  C/C++ 
36 НАЗВА ПРОЕКТУ
Якубов Антон ( ДКРКМ ДНУ )
  C/C++ 
Номінація C/C++, поза віковими категоріями
37 НАЗВА ПРОЕКТУ
DesolatoR DesolatoR ( )
  C/C++ 
38 НАЗВА ПРОЕКТУ
Бережецкая Виктория ( )
  C/C++ 
39 НАЗВА ПРОЕКТУ
Тюхтенко Анастасія ( )
  C/C++ 

Відгук до Онлайн-конкурс "Програмування на С++"
2013-01-15 Автор: 718

Шановні учасники конкурсу!

Спочатку про загальні проблеми, причому одна з них стосується більшості учасників: вчіться уважно читати завдання і не відступати від нього. Творчість заохочується при виконаному завданні.

Отже, щодо завданнь

  1. Не в усіх висланих програмах присутнє рішення. У кількох роботах є програма яка приймає на вхід дані заносить їх у структури даних, але не виконує при цьому поставленого завдання.
  2. Є помилки при використанні вмісту масиву. Масив, який оголошено, але не проініціалізовано, за умовчанням заповнюється нульовими значеннями.
  3. Є помилки виходу за межі виділеної пам'яті, пов’язані з неправильним відліком елементів масиву

Трохи теорії

  1. Відлік елементів масиву в С починається з «0», а не з «1»
  2. Відлік біт в байті йде від молодшого (правого) біта до старшого (лівого).
  3. Якщо масив оголошений глобально і ініціалізований, то всі його елементи инициализируются 0, якщо масив оголошений локально, його, зазвичай треба ініціалізувати самому, але у використаному компіляторі Microsoft Visual Studio 2008 він так само автоматично встановлюється в "0".
  4. Відлік елементів двовимірного масиву так само починається з «0», тобто елементи масиву з 5-ти символів будуть доступні за адресами наприклад [4][1], [4][4], [1][4].

 

Тепер про роботи кожного з учасників

Айвазян Рафік

  1. Вирішено лише задачу № 3.

Саша Бабіенко

  1. Вислано тільки два файли по 1-й і по 2-й задачі.
  2. Задача № 1 не вирішена. Програма тільки приймає вхідні значення і виводить двійкове подання числа. Перевірка біта не виконується.
  3. Завдання № 2. Файл порожній. Але у файлі 1 присутнє розв’язання при виконанні виводу двійкового представлення числа. Тому за 2-ю задачу 7 балів.

Max Izumenka

  1. Задача № 3 виконана.
  2. Приємне враження що написана по Unix, + бал.

Микола Красан

  1. Зроблено 1-а і 2-я задача. Рішення правильне.

Олена Мельникова

  1. Перша задача не вирішена. Є спроба вирішення. Закритий if. Після if іточка з комою не ставиться.
  2. Друга задача вирішена правильно.

Андрій Попович

  1. Завдання № 3. Все правильно, але є груба помилка. Нумерація в С йде з «0» а не з «1»

Pavel Remygailo

  1. Задача 1. Виконана. Але є комбінації при яких програма працює некоректно. При числі наприклад 4 (0100) якщо поставити перевірку біта № 0 і № 1. Потрібно або зробити для таких ситуацій окрему обробку за допомогою if, або здійснювати зсув маски, а не числа, або вести відлік бітів з 1-го по 8-й у цьому випадку зсув здійснювати не на position а на (position-1).
  2. Задача № 2. Виконана правильно. Використання STL для перетворення типів вразило.
  3. Задача № 3. Виконана неправильно. Логічна помилка в алгоритмі рядок 19: result [i] [j] = (result [i] [j]> matrix [i] [i])? 1:0; Йде порівняння обтулених значень масиву result (хоч масив і оголошений локально але в Visual Studio він і в цьому випадку забивається нулями), із значеннями головної діагоналі масиву matrix. Звичайно таке виконання неминуче призведе до того що, результат порівняння цих чисел з діагоналлю завжди буде «0».
  4. Задача № 4. Рішення не надано.
  5. Задача № 5 принципово вирішена. Але, учасник неуважний. Виводитися тільки один рядок, їх повинно бути 5 (це зазначено в завданні). Крім того є декілька запитань по використовуваному компілятору (Студія 2008 не працює без хідера # include <ctime>

 Євген Задорожній

  1. Зроблені всі завдання. Вражений тим, як використані можливості STL при вирішенні задачі № 5. Взагалі малося на увазі використання масивів і вказівниківв. За цю задачу ставлю 10. Ну це так, на перший час.

Хайленко Максим

1.  Задача № 3 вирішена. У задачі № 5 виводиться тільки один рядок, їх повинно бути 5 (це зазначено в завданні). Крім того, є запитання щодо використовуваного компілятора. Справа в тому що Visual Studio 2008 не працює без хідера:

# include <ctime>

і без оголошення простору імен для оперетора управління потоком cout:

using namespace std;

 

ОБГОВОРЕННЯ:
2013-01-25 18:56 Адміністратор:
Доброго вечора, учасникам! За декілька хвилин розпочнеться довгоочікуваний онлайн конкурс з С++ . Сподіваюсь ми побачимо цікаве змагання. Бажаю усім успіхів!
2013-01-25 18:57 Адміністратор:
ОСНОВНІ ІНСТРУКЦІЇ - для того, щоб прикріпити роботу до завдання, необхідно на сторінці свого проекту перейти в режим редагування (натиснути на олівець в правому верхньому кутку). Після цього під кожним завданням з`являться олівчики для завантаження файлів. Після того, як файл завантажився, рекомендується перевірити коректність завантаження - для цього збережіть його назад на свій комп`ютер та перегляньте зміст.
2013-01-25 19:14 Євген Задорожній:
Что значит "встановлений біт" и с какой стороны он считается?
2013-01-25 19:18 Адміністратор:
Євгене, це запитання до судді. Чекаємо на його відповідь.
2013-01-25 19:21 Николай Сергеев:
0000 0001 1-й бит 0000 0010 2-й
2013-01-25 19:21 Николай Сергеев:
Справа налево отсчет битов
2013-01-25 19:24 Николай Сергеев:
Задание сводиться к тому, чтобы проверить конкретный бит он установленый, то есть в значении "1" или не установленый, то есть в значении "0".
2013-01-25 19:24 Євген Задорожній:
С отсчётом понятно, но тогда почему в примере написано, что "Біт в позиції 4 не встановлений" ?=) Спасибо.
2013-01-25 19:28 Николай Сергеев:
Да там ошибка
2013-01-25 19:46 Євген Задорожній:
Що має містити опис результатів?)
2013-01-25 19:51 Николай Сергеев:
Если вы про задание 2 то там к результатам отностися собственно двоичное представление числа
2013-01-25 19:53 Євген Задорожній:
Не, я про то что для каждой программы отведено: "Опис результатів та файл з програмою:". Вот в этот "Опис результатів" нужно что-нибудь писать?
2013-01-25 19:55 Адміністратор:
Якщо є що додати, то можна змінити, інакше можна залишати.
2013-01-25 19:57 Николай Сергеев:
Главное загружайте именно исходник *.cpp, а не исполняемый файл программы
2013-01-25 20:04 Pavel Remygailo:
Там не ошибка, просто отсчёт ведётся слева направо. Пример считается правильным.
2013-01-25 20:17 Николай Сергеев:
Нет там и справа и слева 4-й бит - "1"
2013-01-25 20:17 Николай Сергеев:
Я когда резудльтат вывода программы переводил скопировал не ту строку
2013-01-25 20:18 Николай Сергеев:
Пожалуйста ввдеите целое число: 23423 Пожалуйста ввдеите битовую позицию: 4 Бит в позиции 4 установлен Двоичное представление числа 23423 : 101101101111111 Для продолжения нажмите любую клавишу . . .
2013-01-25 20:19 Николай Сергеев:
Это результат работы программы
2013-01-25 20:19 Николай Сергеев:
А отчет идет от младшего бита к старшему
2013-01-25 20:21 Николай Сергеев:
А младшая цифра во всех совремнных системах исчисления находится справа. Самая старшая цифра - слева. Например десятичное число 456 - младшая цифра 6, потом цифра 5, потом цифра 4.
2013-01-25 20:27 Олександр Громовий:
До завдання 5 іде додаток - текстовий файл із таблицею фраз. завантажити його можна із сторінки ЗАВДАННЯ. В особистих проектах учасників лінк на завантаження додатку не відображається.
2013-01-25 20:27 Євген Задорожній:
А в первом задании, если число отрицательное, выводить его как 32-битное? Дополнительный код же...
2013-01-25 20:30 Євген Задорожній:
А ладно, не важно это=)
2013-01-25 20:31 Николай Сергеев:
Правильно но размер все равно тот же. самый старший бит - последний справа первый слева устанавливается в единицу
2013-01-25 20:33 Pavel Remygailo:
Николай Сергеев, а отсчёт разве не с нулевого бита?
2013-01-25 20:34 Pavel Remygailo:
Значит, считать всё-таки справа, как у нормальных людей?
2013-01-25 20:36 Николай Сергеев:
поэтому и диапазон возможных значений у unsigned int от 0 до 4 294 967 296, а у int - 2 147 483 648 до 2 147 483 647
2013-01-25 20:37 Pavel Remygailo:
І як вводиться матриця? З клавіатури, рандомом, з файлу?
2013-01-25 20:38 Николай Сергеев:
Еще раз принцип адресации младший бит по младшему адресу, младший байт по младшему адресу именно так, за исключением особіх случаев. Адрес младшего бита, байта 0-й. Почему ві решили что єто не так я не знаю.
2013-01-25 20:40 Николай Сергеев:
Матрицу можно рандомом, можно с клавиатуры, можно из файла - как вам будет удобнее
2013-01-25 20:41 Николай Сергеев:
Насчет особенностей адресации еще раз повторяю отсчет справа - налево!
2013-01-25 20:43 Николай Сергеев:
Кто не верит пусть сделает побитовый сдвиг единицы влево несколько раз и каждый раз выведет на экран значение переменной куда эта единица была занесена.
2013-01-25 20:48 Євген Задорожній:
В общем, я готов. Можете проверять=)
2013-01-25 20:50 Адміністратор:
Євгене, конкурс ще не закінчився :) . Результати будуть опубліковані у понеділок о шостій.
2013-01-25 21:00 Микола Красан:
Завантажив те, що встиг зробити за 40 хвилин. P. S. Реалізація другого не відповідає завданню
2013-01-25 21:03 Адміністратор:
Вітаю із завершенням конкурсу! Які враження? Як завдання конкурсу?
2013-01-25 21:08 Євген Задорожній:
Давать в заданиях кирилицу - жестоко. Ибо сделать её тем, кто ни разу с ней дела в консоли с++ не имел - геморой ещё тот=) Ещё в пятой задаче мне понравилось: "у якусь структуру даних". Я вот всё думал, что же выбрать: массив или самобалансируемое двоичное дерево поиска=)
2013-01-25 21:16 Олександр Громовий:
Євгене, уточни будь-ласка дату народження на особистій сторінці, а то будеш йти в режимі "Поза конкурсом".
2013-01-25 21:17 Олександр Громовий:
А також усім цікаво знати де вчишся :)
2013-01-25 21:43 Євген Задорожній:
Вказав.
2013-01-25 21:50 Олександр Громовий:
О, виявляється, Євгене, ти не з Київа, а з славетного Запоріжжя :)
2013-01-28 23:10 Pavel Remygailo:
" 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) Компілятор відповідний.
2013-01-28 23:11 Pavel Remygailo:
*№5 включено
2013-01-28 23:12 Pavel Remygailo:
Ох уже цей парсер. < time.h > включено.
2013-01-28 23:31 Pavel Remygailo:
Як я розумію, останні 3 рядки відповіді також адресовані мені. Про using namespace - це не дуже хороша практика, особливо, якщо в коді буде кілька просторів імен - можлива колізія, а простори імен як-раз і вигадані для того, щоб уникати колізії. Хоч в даному проекті цього і не може статися, але звички погано впливають. Більш прийнятним варіантом є using std::cout.
2013-01-28 23:40 Pavel Remygailo:
Ще хочу зазначити особливість коду рішення 5-ого завдання від Євгена Задорожнього - метода написання коду copy&paste - можна помітити по зміні стилю виклику звернення до елементів простору std - в заголовку написано using nmespace std, а при перевантаженні оператора використовується повне ім`я зі специфікацією простору імен. Крім того, скопійований випадково метод "split" хоч і використовує вектор із STL, але не використовується взагалі. Мертвий код. Крім того, якщо в інших рішеннях успішно використовувалася функція setlocale, то тут навіщось використано непотрібне перевантаження(навіть два) оператора. А рішення зроблено через масиви, і можливості STL не використано взагалі.
2013-01-29 00:51 Олександр Громовий:
Павле, спасибі за коментарі, суддя через деякий час дасть на них відповідь. Просимо вас вказати коректну дату народження, місто, а також місце навчання.
2013-01-29 00:53 Олександр Громовий:
Також для усіх учасників прохання - додайте якусь аватарку собі на особисту сторінку, - набагато приємніше та легше іншим користувачам переглядати списки та рейтинги.
2013-01-29 22:40 Євген Задорожній:
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. Тим паче, не варто забувати, що це - заочне змагання.
2013-01-30 00:29 Pavel Remygailo:
Євген Задорожній, почитав код. Вірю.
2013-01-30 21:04 Николай Сергеев:
Євген Задорожній благодарю за то что помогли прояснить ситуацию. Действительно я имел в виду задачу № 4. Pavel Remygailo. Так же благодарю за активное участие. Признаю static_cast - оператор С++ который не входит в STL. По задаче 1 да ошибка переполнения наблюдается уже при выводе результата. При чем в моем случае именно на значениях 4 (0100) и 6 (0110) при запросе 0-го бита. Но в любом случае она имеет место, поэтому общая рекомендация для всех - тестировать программу в том числе для крайних случаев (начало/конец выделенного объема памяти). Что касается using namespace - это я привел для примера. Пространство имен в полученном мной исходном коде объявлено не было, как не был объявлен и хидер / . Отсюда и такая постановка комментария в отзыве.