Как-то решила полюбопытствовать, чему учат в школе в Германии. Думаю, вам тоже будет интересно.
Абитур (Abitur) — это экзамен, который сдают немецкие школьники при окончании гимназии для поступления в университет. Вкратце о системе образования в Германии. После окончания 4-летней начальной школы дети в зависимости от их способностей и желания родителей распределяются по трем типам школ: 9-летней общеобразовательной школой (Hauptschule), 10-летней средней школой (Realschule) и 12-летней гимназией (Gymnasium). Сроки обучения указаны в сумме с начальной школой. Поступать в университет можно только после гимназии. В последние два года обучения в гимназии школьники обладают достаточно большой свободой в выборе предметов, которые будут учить и сдавать. Предметы можно изучать на базовом или продвинутом уровне. Поэтому приведенная ниже программа абитура относится только к наиболее способным школьникам (оказавшимся в гимназии, а не в школе другого типа) и при этом планирующим поступать на специальность, связанную с IT.
Тематически обучение в последние два года гимназии уже выходит за рамки нашей школьной программы и скорее соответствует первым курсам вуза. Например, абитур по математике состоит из трех больших блоков: дифференциальное и интегральное исчисление, теория вероятностей и аналитическая геометрия. Насчет информатики судите сами.
Абитур может проходить в разных гимназиях и в разных землях (Bundesländer) Германии по-разному, хотя многие земли проводят централизованный абитур, особенно по основным предметам. Так что скорее всего программа не является единственной существующей.
Программа абитура
I. Объектно-ориентированное программирование
I1. Концепция объектно-ориентированного программирования
- классы, объекты, атрибуты, методы, инкапсуляция
- диаграммы классов (проектирование, имплементация)
- отношения между классами: ассоциация, наследование
- абстрактные классы, полиморфизм
I2. Структуры данных
- Линейные структуры данных
- Очередь и стек
- применение стандартных операций
- реализация стандартных операций
- Линейные списки
- применение стандартных операций
- Алгоритмы поиска и сортировки
- рекурсия
- поиск
- сортировка вставками
- на продвинутом уровне: QuickSort
- Очередь и стек
- Деревья
- Бинарное дерево
- применение стандартных операций
- алгоритм обхода
- Бинарное дерево поиска
- применение стандартных операций
- алгоритм обхода
- на продвинутом уровне: реализация методов insert и search
- Бинарное дерево
- Только на продвинутом уровне: графы
- матрица смежности, списки смежности
- применение стандартных операций
- обход графа в ширину и в глубину
- поиск кратчайшего пути между вершинами: перебор, алгоритм Дейкстры
I3. Проектирование сетевых приложений
- сетевые протоколы, TCP/IP
- клиентские приложения
- клиент-серверные приложения
- криптография
- симметричное шифрование (Цезарь, Виженер)
- асимметричное шифрование (RSA)
- обмен ключами (Диффи-Хеллман)
II. Реляционные базы данных
- моделирование жизненных задач при помощи модели сущность-связь
- схемы баз данных
- нормализация: приведение баз данных к первой и третьей нормальным формам
- реляционная алгебра (выбор, проекция, объединение, разность, декартово произведение, переименование)
- SQL-запросы к одной или нескольким таблицам
- аспекты защиты данных
III. Конечные автоматы и формальные языки
- моделирование жизненных задач при помощи конечных детерминированных автоматов
- представление конечных детерминированных автоматов графами и таблицами
- формальные языки: регулярные языки и их грамматики
- на продвинутом уровне: разработка парсера для одного простого формального языка
Заранее прошу меня простить за качество перевода. Мое знание немецкого языка, да и (чего там греха таить) некоторых пунктов программы далеко от совершенства. Но вроде бы удалось сохранить смысл. Буду рада исправлениям и уточнениям, вот оригинал. Как я поняла из пояснений оттуда, разделы I1 и I2 обязательны, из остальных трех пунктов I3, II и III в школе должны пройти хотя бы два. Наиболее распространенные языки программирования — Delphi и Java.
И на закуску задача с экзамена. Задача взята вот отсюда. Это немного другой вариант абитура, из другой земли. Последняя задача, продвинутый уровень, одна из сложных.
Выбирается число 2 ≤ z ≤ 6. Берется некоторая перестановка чисел от 1 до z. Это ключ.
Перестановка записывается в верхнюю строчку таблицы, слева направо.
Имеется некоторый текст (строчка из латинских букв). Он записывается слева направо под перестановкой. Когда строка таблицы заканчивается — переходим на следующую.
Если последняя строчка заполнена не до конца — добавляются символы #.
После этого цифры перестановки переставляются в порядке возрастания вместе с соответствующими столбцами.
Выписывая содержимое таблицы в естественном порядке, получаем зашифрованный текст.
Дан текст aidsttssegrneeghm#i# и ключ 3 1 4 2.
Опишите алгоритм расшифровки текста.
Приведите расшифрованный текст.
Приведите алгоритм перебора всех перестановок из n элементов для заданного числа n ≥ 2.
Напишите программу, которая делает следующее:
Читает текст.
Выбирает число z, 2 ≤ z ≤ 6, при помощи генератора случайных чисел.
Перебирает все перестановки чисел от 1 до z.
Выбирает одну перестановку при помощи генератора случайных чисел.
Шифрует текст.
Выводит зашифрованный текст.
Используйте в программе ваш алгоритм для перебора всех перестановок чисел от 1 до n.
Напишите программу, которая делает следующее:
Читает зашифрованный текст и соответствующую перестановку.
Дешифрует его.
Выводит расшифрованный текст.
Протестируйте программы друг с другом. Опишите тестирование ваших программ.
Опишите методы разработки, которые вы использовали.
Мне в этой задаче весьма нетривиальным кажется перебор всех перестановок. До него не додумаешься, если не проходили хотя бы что-то аналогичное. Хотя задача состоит из нескольких пунктов и легко набрать частичные баллы.
А вот интересно, насколько в самом деле школьники обладают этими знаниями? Как осуществляется контроль? Как сильно требуют? Читерят? Требуется ли умение кодить или просто надо знать бла-бла на тему?
Да, это очень интересные вопросы, но составить по ним мнение со стороны сложно. Программа взята вот отсюда. Там также есть примеры кода (Quelltexte), т.е. по крайней мере на уроках они кодят. Но на экзамене в этой земле (NRW) нельзя использовать компьютер. Хотя вот задачи другого варианта абитура, с использованием компьютера. Для полноты картины добавлю в пост перевод одной из задач. Мне кажется, строгость требований может тоже сильно зависеть от конкретной земли или даже от школы.
Можно перевести на англ и прямо спросить немецких кодефорсеров.
.
На IOI надо знать более продвинутые алгоритмы. Потом, что мне сразу бросается в глаза в задачах абитура (я читала еще задачи по математике), что они все "в одно действие". Точнее, разбиты на подпункты, каждый из которых в одно действие. На IOI надо уметь придумывать многошаговые нетривиальные алгоритмы, а еще их реализовывать и отлаживать. Но в принципе да, нашим школьникам к IOI приходится гораздо больше всего выучивать дополнительно, чего нет в школьной программе.