Как-то решила полюбопытствовать, чему учат в школе в Германии. Думаю, вам тоже будет интересно.
Абитур (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.
Напишите программу, которая делает следующее:
Читает зашифрованный текст и соответствующую перестановку.
Дешифрует его.
Выводит расшифрованный текст.
Протестируйте программы друг с другом. Опишите тестирование ваших программ.
Опишите методы разработки, которые вы использовали.
Мне в этой задаче весьма нетривиальным кажется перебор всех перестановок. До него не додумаешься, если не проходили хотя бы что-то аналогичное. Хотя задача состоит из нескольких пунктов и легко набрать частичные баллы.