Study/School117 20112012 Lessons

Материал из ProgSchool

Перейти к: навигация, поиск

Уважаемые ученики 10 класса. Чтобы быть в курсе событий, рекомендую подписаться на изменения этой страницы: http://www.progschool.ru/w/index.php?title=Study/School117_20112012_Lessons&feed=atom&action=history


Содержание


Условия

Количество баллов

Ваш рейтинг отражается в гуглотаблице. Этот документ доступен на чтение тем ученикам вашего класса, которые сообщили мне свои гуглоаккаунты. Также могу дать доступ желающим родителям.

Исходим из того, что в день можно получить 0, 1 либо 2 балла. Причём бывают задачи, являющиеся частью других задач. То есть можно решить часть задачи на 1 балл, а можно всю задачу на 2 балла, но нельзя за всё это получить 3 балла.

Баллы суммируются. Количество баллов напрямую влияет на оценку.

То есть, чтобы получить пятёрку, нужно либо на каждом уроке решать двубальную задачу, либо решать задачи дома. Чтобы получить четвёрку нужно на каждом уроке решать однобальную задачу.

Если вы пропускаете уроки, то нужно решать задачи дома. Считайте это своим домашним заданием. Выходит так, что те, кто не пропускают занятий и на каждом уроке решают двубальную задачу, освобождаются от домашних заданий :)

Также напоминаю, что есть серьёзный бонус в виде скоропечатания. Тот, кто овладеет слепым методом печати на клавиатуре и будет быстро печатать, может заработать до 4х дополнительных баллов.

Если кому-то интересно, то можно почитать о том,

Ограничения

Важные ограничения:

  1. Ученик первого уровня не может получить пять до тех пор, пока не перейдёт на второй. Исключение составляют те, кто учится в классе первый год.
  2. За неделю можно получить не более 6 баллов. Это сделано, чтобы ограничить лавинную сдачу задач в конце семестра. В последние 4 недели семестра это ограничение будет соблюдаться очень строго.
  3. Ограничения могут дополняться на основе прецедентов, но не позднее, чем за школьную четверть до конца семестра. Т.е. о последних ограничениях я могу сообщить на первом занятии после осенних или весенних каникул.

Порядок сдачи работ

Сданной считается работа, отправленная мне по почте.

Оформление программ

Задачи не принимаются, если содержат дурнопахнущий код.

Основные критерии:

Порядок такой:

  1. Я проверяю задачу.
  2. Высказываю пожелания.
  3. Пожелания надо исправить.

Комментарий по стандарту кодирования. Выбор именно такого стандарта связан с тем, что мне так больше нравится, проще и приятнее читать код, а значит, я буду быстрее проверять ваши задачки. Но не расстраивайтесь. В жизни приходится подстраиваться под ту команду и тот проект, куда тебя заносит судьба. Поэтому временно отказаться от своего любимого стиля (если он у вас есть) не смертельно и даже полезно.

Стандарт кодирования:

if ()
{
    something;
}
else
{
    something else;
}

Что говорит о запутанности:

Клавиатура

Второй семестр (11 января - 31 мая)

Всем читать две полезные статьи про использование памяти в массивах и в строках (несложный инглиш).

Впрочем, кто-то может и не осилить заморскую речь. Поэтому предлагаю по 2 балла за перевод на русский каждой из этих статей.

Уровень 1

Решаем задачи с acmp: 131, 233, 550, 504, 297, 336, 449, 66, 534.

Уровень 2

Решаем задачи с acmp сложностью не менее 35%. Решаем задачи на тему "Сортировка и последовательности". Те, кто решил 7 задач на "Сортировки и последовательности", переходят на тему "Разбор строк"

Далее "Двумерные массивы", "Рекурсия, перебор".

Конец второго семестра

Напоминаем, что до конца года осталось совсем немного времени. Последнее занятие второго семестра состоится 23 мая. Так что постарайтесь, если хотите получить хорошую оценку.

Первый семестр (1 сентября - 31 декабря)

Лекции

В начале некоторых уроков будет даваться теоретическй материал. Буду стараться, чтобы это занимало от 20 до 40 минут. Посторонними делами заниматься в это время будет нельзя, чтобы не отвлекать меня и других, а также, чтобы свести к минимуму повторения в индивидуальном порядке. Поэтому, если вы считаете, что всё знаете или можете изучить самостоятельно, то приходите ко второму уроку, чтобы не мешать.

Также, если вы по каким-либо причинам не попадаете на своё занятие, но хотите послушать лекцию, то можете спланировать своё время так, чтобы попасть на занятия другой группы.


Леции будут либо обзорные, чтобы расширить представления слушателей о мире, либо конкретные, касающиеся выполняемых в данный момент задач.

Расписание лекций

Приведены даты занятий первой и второй группы. Расписание может меняться по причине праздинков, болезней и того, что я не успеваю подготовиться к той или иной лекции, а также в силу хода учебного процесса.

13, 14 сентябряРешение СЛАУ методом Гаусса
--, 28 сентябряЛикбез по матрицам:
  • Простейшие операции над матрицами. Связь между ними.
  • Поиск обратной матрицы методом Гаусса
4, 5 октябряАргументы командной строки. Запуск программ с аргументами:
  • командная строка,
  • "выполнить" (Win+R),
  • "ярлыки" для запуска программ

Обработка аргументов в программе (String [] args).

18, 19 октябряЗначения полей электронных писем. Основные правила переписки.
18, 19 октябряИспользование шаблона "cтроитель" для форматирования вывода. Общая структура программы
25, 26 октябряЛекция о простейшем рефакторине
15, 16 ноябряРешение диофантовых уравнений вида ax = by + 1
16 ноябряАлгоритм быстрого возведения в степень, Малая теорема Ферма
30 ноябряФункция Эйлера, RSA
7 декабряЦифровая подпись
14 декабряШифрование в быту: что происходит внутри повседневных программ во время шифрования данных

Лекции открытые. Могут приходить все желающие. Начало — 8:30, продолжительность — 20-40 минут.

Те, кто может свободно выбирать между вторником и средой, выбирайте среду.

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

Уровень 1

Теоретический материал и практические задания ученикам первого уровня будут даваться в индивидуальном порядке.

Основная масса ребят получила следующие задачи (все по 2 балла):

Ещё была серия задач про матрицы.

Уровень 2

Метод Гаусса

Решение системы линейных алгебраических уравнений методом Гаусса (7 + 3*k)

Материалы по теме:

Примеры:

ВводВывод
3
1 0 2 5
0 0 2 5
0 -1 2 10
0 -5 2.5

Также можно тестировать свои решения тут: Acmp-198

Вычисление определителя квадратной матрицы методом Гаусса (2)

В дополнение к решению СЛАУ можно получить 2 балла. Важно: обратите внимание на слово "квадратной". Значит, из файла считывается квадратная матрица.

Общий код алгоритма Гаусса для решения СЛАУ и вычисления определителя (2)

Вы получаете два балла, если вы используете тот же код, но программа (или опция в программе) другая. Т.е. пользователь может выбрать (в меню или запустить другой файл запуска - не важно), что ему считать определитель или систему уравнений. Но сам код алгоритма должен быть максимально общим.

Я бы попробовал сделать так:

Вычисление обратной матрицы методом Гаусса (2)

Дополнение к предыдущей задаче. Иными словами, вы используете тот же код ядра, но прикручиваете ещё один модуль, который доводит диагональную матрицу до единичной (это получается в левой половине матрицы) и выводит ответ правую половину матрицы.

Без предыдущей задачи ставить баллы за эту не интересно. Но можно не вычислять определитель, решив лишь предыдущую задачу и эту.

Оформление вывода задач (9)

Создать модуль, который:

Дополнительное требование к параметрам командной строки. При выполнении всех предыдущих требований параметров становится довольно много. Было бы хорошо, если бы они были устроены привычным для пользователя консольных команд способом (опции -i, -o и т.п.), а также продокументированы при вызове команды с опциией -h или --help. Это стоит ещё 3 баллов.

RSA

Алгоритм быстрого возведения в степень (2)

Даны три числа: A, B, C. Надо найти остаток от деления на C числа AB

Материалы: статья в Википедии

Прикрутить алгоритм быстрого возведения в степень к BigInteger. (2)

Материалы: документация по BigInteger

Проверить эффективность и правильность своей программы можете на следующем примере: http://projecteuler.net/problem=48

Универсальный алгоритм возведения в степень для Integer и BigInteger. (2)

Бонус задача для тех, кто понимает, о чём речь.

Иными словами, основной ход алгоритма у вас должен присутстовать в единственном экземпляре и индивидуальные обёртки для классов Integer и BigInteger для арифметических операций.

Решение ax = by + 1 в целых числах. (4)

Нужно решить уравнение в целых числах, где x и y - неизвестные.

Шифрование и дешифрование строки текста методом RSA. (6)

Нужно аккуратно объединить решения предыдущих задач. Добавить преобразование текста в подходящие для обработки числа.

Для определённости поставим задачу так:

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Рекомендуем посмотреть
Инструменты