Разбор задач с тестирования.pptx
- Количество слайдов: 19
Чернышев Георгий Разбор задач с тестирования
Задание 1: function mystery (i: integer): integer; begin writeln(''); repeat write(i mod 2); i : = i div 2; until (i = 0); end; begin mystery(26); end. 1. На каком языке написана эта программа? Паскаль 2. Перепишите эту программу заменив этот цикл на другие операторы цикла Вам известные. Несложное упражнение 3. Какой результат будет напечатан при ее запуске? 01011 4. Что она делает, в чем состоит ее цель? Перевод в двоичную систему счисления и вывод результата в обратном порядке 2+8+16 = 26
Задание 2: Напишите на любом известном вам языке программирования функцию решающую следующую задачу. Дан массив, все числа кроме одного встречаются два раза. Найти это число, с использованием фиксированного объема памяти, за один проход.
Задание 2: Решение: Ограничения очень серьезны: ▪ Один проход -> не получится отсортировать и найти ▪ Константа по памяти -> не получится построить и использовать hash и другие структуры данных Побитовый оператор xor (есть еще и другие) “Побитовое сложение двух чисел по модулю 2” Таблица истинности: ▪ ▪ 0 + 1 -> 1 1 + 0 -> 1 0 + 0 -> 0 1 + 1 -> 0
Задание 2: Пример: 10 xor 15 = 5 1010 1111 ----0101 Свойства: A xor B = B xor A (A xor B) xor B = A Итог: обходим массив, применяя xor к каждому элементу http: //ru. wikipedia. org/wiki/Xor
Задание 3: Даны бусы, представленные в виде массива длины N. Каждый элемент массива - целое число обозначающее цвет бусинки. На вход дана пара бус (два массива), надо проверить не одинаковые ли они, учитывая возможность того что они перекручены. Например бусы [1, 0, 0] и [0, 1, 0] одинаковые. Напишите функцию принимающую на вход два массива длины N и определяющую являются ли бусы, представленные массивами одинаковыми.
Задание 3: Идея Проверить N “прикладываний” одного к другому Слева направо Бусы перекручиваем, но не переворачиваем! 001101 != 101100 Нарисуйте если не понятно Значит, второй массив не изменяем 1 0 0 1
Задание 3: алгоритм Фиксируем один массив Последовательно прикладываем другой, пока не получится Перебираем точку приложения, одну за одной, пока не получится (N штук раз) 1 0 1 0 0 2 b 1 1 0 0 1 0 2 a 0 1 1 0 Шаги 1 0 0 1 1
Задание 3: код решения 2 a const N = 4; var first, second : array [1. . N] of integer; i, j : integer; match : boolean; begin for i : = 1 to N do begin match : = true; for j : = i to N do begin if (first[j] <> second[j - i + 1]) then begin match : = false; break; end; if (match <> true) then continue; Незачем делать лишнюю работу for j : = 1 to i - 1 do begin if (first[j] <> second[(N - i) + j + 1]) then begin match : = false; 2 b break; end; if (match = true) then begin writeln('equal'); exit(); end; writeln ('not equal'); end.
Задание 4: Напишите программу решающую следующую задачу. Дан односвязный список целочисленных элементов (заданный с использованием указателей), из него необходимо удалить все элементы большие 25. Программу можно писать на любом языке программирования.
Задание 4: Простое задание на реализацию, но Необходимо знать что такое указатель, как с ними обращаться Ничего хитрого, только аккуратность реализации Указатели будут во 2 семестре (? ) Материал можно взять тут: http: //www. pascal. helpov. net/index/dynamic_lists _pascal_programming
Задание 5: Реализуйте объект "дробь" (объект вида X/Y, где X и Y целые числа), в соответствии с методологией объектноориентированного программирования. Для него должны быть реализованы: конструктор, деструктор, операция сложения, вычитания, умножения и упрощения.
Задание 5: Тоже задание на реализацию, ничего хитрого, но Требуется понимание ООП Тема будет подробнейше разбираться в 3 семестре ▪ Материал может быть переиспользован (до некоторой степени) при программировании на промышленных (а не учебных) ЯП http: //www. pascal. helpov. net/index/object- oriented_programming_pascal_programming
Вопросы Вопрос 1: В чем суть поразрядной сортировки? Будет разобрано на теории или смотреть тут: ▪ http: //ru. wikipedia. org/wiki/%D 0%9 F%D 0%BE%D 1%80 %D 0%B 0%D 0%B 7%D 1%80%D 1%8 F%D 0%B 4%D 0%BD %D 0%B 0%D 1%8 F_%D 1%81%D 0%BE%D 1%80%D 1%8 2%D 0%B 8%D 1%80%D 0%BE%D 0%B 2%D 0%BA%D 0% B 0 ▪ http: //www. youtube. com/watch? v=50_TCQGj. NJc
Вопросы Вопрос 2: Какие структуры данных Вы знаете? Опишите детали механизма функционирования, их достоинства и недостатки? Приведите примеры приложений где было бы удобно их использовать. Это 2 -3 семестры, подразумевалось что можете сказать: Списки, хеш-таблицы, деревья поиска, отображение, итд
Вопросы Вопрос 3: Что такое дополнение до двойки и для где оно используется? Плохо сформулирован – дополнительный код Ответ: для представления отрицательных чисел http: //ru. wikipedia. org/wiki/%D 0%94%D 0%BE%D 0% BF%D 0%BE%D 0%BB%D 0%BD%D 0%B 8%D 1%82%D 0%B 5%D 0%BB%D 1%8 C%D 0%BD%D 1%8 B%D 0%B 9 _%D 0%BA%D 0%BE%D 0%B 4_%28%D 0%BF%D 1%8 0%D 0%B 5%D 0%B 4%D 1%81%D 1%82%D 0%B 0%D 0 %B 2%D 0%BB%D 0%B 5%D 0%BD%D 0%B 8%D 0%B 5_ %D 1%87%D 0%B 8%D 1%81%D 0%BB%D 0%B 0%29
Вопросы Вопрос 4: Что такое о-нотация (O(N), O(log. N) итд)? Приведите примеры использования. Формальное определение “в крючках” http: //ru. wikipedia. org/wiki/%C 2%ABO%C 2%BB_ %D 0%B 1%D 0%BE%D 0%BB%D 1%8 C%D 1%88% D 0%BE%D 0%B 5_%D 0%B 8_%C 2%ABo%C 2%BB _%D 0%BC%D 0%B 0%D 0%BB%D 0%BE%D 0%B 5 Я не ждал что его напишут, но …
Вопросы Не формально: характеризующую величина показывающая насколько увеличение размера входных данных повлияет на скорость работы. Возможность сравнения классов алгоритмов Возможность прикинуть сколько времени выполняется алгоритм Пример: работа алгоритма X на массиве размером 100 единиц занимает 5 секунд. Сколько он приблизительно будет работать на массиве размером 200 единиц? Все зависит от класса алгоритма: O(N) – 10 секунд O(N*log. N) – 12 секунд O(N^2) – 20 секунд O(N^3) – 40 секунд O(2^N) – 4*10^23 лет Пример упрощенный – на практике все сложнее Архитектура, константы, средний случай итд
Вопросы Вопрос 5: Что такое полиморфизм и для чего используется? Приведите примеры использования. Тот же самый ответ что в Задании 5
Разбор задач с тестирования.pptx