Программирование - Кафедра Теоретической информатики и

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего
профессионального образования
«Московский педагогический государственный университет»
(МПГУ)
Математический факультет
Рабочая программа учебной дисциплины
«Программирование»
Код и направление подготовки
050100.62 Педагогическое образование
Профиль подготовки
Информатика
Квалификация (степень) выпускника
бакалавр
Форма обучения
очная
Москва
2011
1. Цели освоения дисциплины
Целями освоения дисциплины «Программирование» являются овладение основами
алгоритмизации, императивного и объектно-ориентированного программирования на языках Java
и С++, приобретение навыков разработки программного кода с использованием современных
кросс-платформенных инструментальных средств.
В результате освоения дисциплины студент должен:
 Овладеть методологией анализа и проектирования типовых алгоритмов (линейных,
условных, циклических, рекурсивных). Освоить подходы к построению алгоритма решения
задачи на основе её содержательной постановки. Чётко представлять алгоритмическую
систему, в рамках которой составляется решение и её ограничения, представлять и
учитывать возможности исполнителя, получить практические представления о
быстродействии алгоритмов.
 Овладеть методологией разработки программ на основе императивного и объектноориентированного подхода. Приобрести навыки разработки программного кода с
использованием современных кросс-платформенных инструментальных средств.
 Овладеть основами организационных навыков разработчика, в том числе приобрести
навыки структурирования программного кода, документирования программного кода,
реализацией принципа модульности, получить общие представления об организации
пользовательского интерфейса, о процессе командной разработки и рефакторинге.
 Уметь применять полученные знания к составлению алгоритмов и разработки программ и
их сопровождению с использованием современных инструментальных средств и
технологий.
2. Место дисциплины в структуре ООП бакалавриата
Дисциплина «Программирование» относится к вариативной части профессионального цикла
(Б3.2/12).
Для освоения дисциплины «Программирование» обучающиеся используют знания, умения,
навыки, способы деятельности и установки, сформированные в ходе изучения в ходе изучения
дисциплины «Информатика и ИКТ» в средней школе.
Освоение дисциплины «Программирование» является необходимой основой для последующего
изучения дисциплин «Теоретические основы информатики», «Численные методы», «Практикум
решения задач на ЭВМ», «Архитектура компьютера», а также модулей по выбору «Языки и
методы программирования» и «Теоретическая информатика»..
Освоение данной дисциплины является необходимой основой для формирования специальных
компетенций в ходе последующего изучения дисциплин профессионального цикла, а также
дисциплин по выбору в математическом и профессиональном цикле.
Для освоения учебной дисциплины студенты должны владеть следующими знаниями и
компетенциями:
 Навыками работы с компьютером как средством обработки информации;
 современными методами и средствами информационных технологий;
 культурой мышления, навыками анализа и моделирования;
2
 основами информатики, навыками алгоритмизации выпускника средней школы.
3. Компетенции обучающегося, формируемые в результате освоения
дисциплины
Процесс изучения дисциплины направлен на формирование следующих общепрофессиональных и
специальных компетенций:
 способен использовать знания о современной естественнонаучной картине мира в
образовательной и профессиональной деятельности, применять методы математической
обработки информации, теоретического и экспериментального исследования (ОК-4);
 готов использовать основные методы, способы и средства получения, хранения,
переработки информации, готов работать с компьютером как средством управления
информацией (ОК-8);
 способен понимать сущность и значение информации в развитии современного
информационного общества, сознавать опасности и угрозы, возникающие в этом процессе,
соблюдать основные требования информационной безопасности, в том числе защиты
государственной тайны (ОК-12);
 готов применять знания теоретической информатики, фундаментальной и прикладной
математики для анализа и синтеза информационных систем и процессов (СК-1)
 способен использовать математический аппарат, методологию программирования и
современные компьютерные технологии для решения практических задач получения,
хранения, обработки и передачи информации (СК-2);
 владеет
современными
формализованными
математическими,
информационнологическими и логико-семантическими моделями и методами представления, сбора и
обработки информации (СК-3)
 способен реализовывать аналитические и технологические решении в области
программного обеспечения и компьютерной обработки информации (СК-4);
 готов к обеспечению компьютерной и технологической поддержки деятельности
обучающихся в учебно-воспитательном процессе и внеурочной работе (СК-5);
 способен реализовывать аналитические и технологические решении в области
программного обеспечения и компьютерной обработки информации (СК-4).
В результате изучения дисциплины студент должен
знать:
 типовые алгоритмы и границы их применимости;
 теоретические основы императивного и объектно-ориентированного подходов к
программированию;
 основные способы исполнения программ (интерпретацию, компиляцию в машинный код,
исполнение на виртуальных машинах);
 основные лексические конструкции языков программирования C++ и Java;
 типы и структуры данных;
 встроенные (библиотечные) возможности языков программирования C++ и Java.
уметь:
3
 составлять алгоритм на основе содержательной постановки задачи;
 описывать алгоритмы в программном коде на языках C++ и Java, используя рациональные
подходы;
 применять встроенные (библиотечные) возможности языков программирования C++ и Java.
 структурировать и документировать программный код, отлаживать программы:
локализовать и устранять ошибки, обеспечивать модульность программ.
владеть:
 кросс-платформенной интегрированной средой разработки с целью создания программ на
языках C++ и Java;
 методами и средствами автоматизации рутинных и повторяющихся операций по обработке
информации с использованием языков программирования;
 методами и средствами решения практических задач из осваиваемой предметной области с
использованием языков программирования.
4. Структура и содержание дисциплины «Программирование»
Общая трудоемкость дисциплины составляет 7 зачетных единиц (252 часа), из них аудиторных
126 часов, самостоятельной работы — 126 часов.
Структура дисциплины
№
п/п
Наименование раздела дисциплины и
основные темы
Семестр
Виды учебной работы (в
академических часах)
Лекции
Лабораторные
работы
Язык программирования Java
1
Введение
2
1
4
2
Типы данных, литералы, перменные
4
2
3
Операции и библиотечные методы и классы
2
4
4
Ветвления и циклы (основные
алгоритмические конструкции)
6
6
5
Массивы и структуры данных
6
6
6
Статические методы
4
6
7
Основы ООП
10
10
Язык программирования C++
8
Введение
2
2
2
4
9
Типы данных и операции над ними
2
2
10
Ветвления и циклы (основные
алгоритмические конструкции)
2
8
11
Массивы и структуры данных
2
4
12
Указатели, работа с памятью, функции
6
12
13
ООП
4
8
Всего
54
72
Содержание дисциплины
№
п/п
Наименование раздела
дисциплины и основные
темы
Содержание основных тем (дидактические
единицы)
Язык программирования Java
1
Введение
Особенности языка и платформы Java. Классификация
программ по типу исполнения (компилируемые,
интерпретируемые, исполняемые на виртуальных
машинах). Виртуальная машина Java. JIT-компиляция.
Создание простейшей программы на Java, её
компиляция в байт-код и запуск. Средства разработки
Java-приложений. Интегрированные среды разработки.
2
Типы данных, литералы,
переменные
Встроенные типы данных. Способы задания литералов
различных типов. Хранение данных в памяти ЭВМ.
Приведение типов (явное и автоматическое).
Константы и переменные.
3
Операции и библиотечные
методы и классы
Оператор присваивания. Порядок действий (приоритет
операторов). Арифметические операторы. Операторы
инкремента и декремента. Встроенный класс Math.
Псевдослучайные числа. Операторы сравнения и
логические операторы. Встроенный класс String.
Строковые операции.Стандартные потоки вводавывода. Организация ввода и вывода данных. Класс
Scanner.
4
Ветвления и циклы (основные
алгоритмические
конструкции)
Операторы сравнения и логические операторы.
Операторы ветвления. Условный оператор.
Минимизация количества проверок. Операторы
ветвления. Оператор множественного выбора. Его
сравнение с условным оператором. Операторы
организации циклов. Цикл типа «n раз». Операторы
организации циклов. Цикл типа «пока» (с пред- и
постпроверкой условия).
5
5
Массивы и структуры данных
Массивы. Способы объявления и инициализации
массивов. Индексация и размер массива. Алгоритмы
сортировки. Многомерные массивы.
6
Статические методы
Статические методы классов. Методы
функционального и процедурного типа. Сигнатура
метода. Перегрузка методов.
7
Основы ООП
Процедурное программирование. Объектно
ориентированное программирование. Сравнение
парадигм. Объекты и классы. Абстракция данных.
Сценарий построения объектно-ориентированной
программы. Члены классов. Методы и поля.
Специальные методы классов (конструкторы).
Конструктор по умолчанию. Модификаторы уровня
доступа (default, public, protected, private).
Основополагающие принципы ООП. Инкапсуляция.
Наследование. Полиморфизм. Интерфейсы как
средство реализации множественного наследования.
Иерархия классов Java. Коренной класс Object и его
методы. Исключительные ситуации. Обработка
исключительных ситуаций.
Язык программирования C++
8
Введение
Классификация языков программирования. Типизация
данных в языках программирования. Язык
программирования C++. Стандарт языка. Стандартная
библиотека. Структура простейшей программы на C++.
9
Типы данных и операции над
ними
Встроенные типы данных C++. Способы
представления чисел различных типов на уровне ЭВМ.
Константы и переменные. Область видимости.
Пространство имён. Оператор присваивания.
Арифметические операторы. Операторы сравнения и
логические операторы. Порядок действий (приоритет
операторов).
10
Ветвления и циклы (основные
алгоритмические
конструкции)
Условный оператор и оператор множественного
выбора. Операторы для организации циклов.
Стандартные потоки ввода/вывода. Средства работы с
потоками ввода/вывода. Специальные символы
(символ перевода строки, символ табуляции, символ
конца строки). Псевдослучайные числа. Генерация
псевдослучайных чисел на C++.
11
Массивы и структуры данных
Массивы в C++. Алгоритмы сортировки. C-строки
(символьные массивы). Многомерные массивы.
12
Указатели, работа с памятью,
функции
Указатели в C++. Операция разыменования.
Константные указатели и указатели на константы.
Указатели и массивы. Операции над указателями.
Ссылки в C++. Статическая, автоматическая и
6
динамическая память. Создание и удаление
динамических объектов. Типичные ошибки,
возникающие при использовании динамической
памяти («утечка памяти»). Функции в C++. Прототип и
описание функции. Формальные и фактические
параметры. Передача параметров в функции по
значению, по ссылке, по указателю. Параметры
функций со значениями по умолчанию. Перегрузка
функций. Рекурсия. Шаблоны функций.
ООП
13
Объектно-ориентированный подход. Абстракция
данных. Наследование. Инкапсуляция. Контроль
доступа к свойствам и методам (public, private,
protected). Полиморфизм и шаблоны классов.
Конструкторы и деструкторы. Перегрузка операторов.
5. Образовательные технологии
Для организации образовательного процесса планируется использовать следующие
образовательные технологии:
 традиционные образовательные технологии используются на лекциях;
 информационно-коммуникационные образовательные технологии предполагается
использовать для организации лабораторных работ;
 технологии дистанционного обучения будут применяться для организации
самостоятельной работы студентов.
6. Самостоятельная работа студентов
Часы для самостоятельной работы выделяются в каждом разделе курса. По усмотрению
преподавателя эти часы могут быть использованы для более углубленной проработки
теоретического материала или для практических самостоятельных занятий. Такие задания как
подготовка реферата, создание списка ссылок на интернет-ресурсы или рецензирование вебсайтов по изучаемой теме, составление глоссария и т.д. помогут организовать работу с
теоретическим материалом. Практическая внеаудиторная работа может быть связана с изучением
дополнительных алгоритмов, методологии командной разработки (через совместные проекты),
рефакторинга.
Самостоятельная работа строится на принципе дифференцированного подхода. В соответствии с
интересами и уровнем подготовки студент выбирает задание из каждого раздела и через
установленное время отчитывается о проделанной работе.
№ п/п
Наименование
раздела
дисциплины
Вид самостоятельной работы
Трудоемкость
(в академических
часах)
Язык программирования Java (63)
1
Введение
Обработка
конспекта
(формирование
списка
лекций
тезисов),
8
7
самостоятельная
настройка
интегрированной среды разработки
(IDE) по готовой инструкции
2
Типы данных,
литералы,
переменные
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере
6
3
Операции и
библиотечные
методы и классы
Обработка
конспекта
лекций
(формирование списка тезисов), ,
решение задач на компьютере,
тестирование на компьютере
8
4
Ветвления и циклы
(основные
алгоритмические
конструкции)
Обработка
конспекта
лекций
(формирование
списка
тезисов),
Решение задач на компьютере,
тестирование на компьютере
10
5
Массивы и
структуры данных
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере,
тестирование на компьютере
10
6
Статические
методы
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере,
групповое выполнение проекта по
анализу
производительности
программ
8
7
Основы ООП
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере
13
Язык программирования C++ (63)
8
Введение
Обработка
конспекта
лекций
(формирование
списка
тезисов),
самостоятельная
настройка
интегрированной среды разработки
(IDE) по готовой инструкции
8
9
Типы данных и
операции над ними
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере,
тестирование на компьютере
10
10
Ветвления и циклы
(основные
алгоритмические
конструкции)
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере,
тестирование на компьютере
10
11
Массивы и
структуры данных
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере,
10
8
тестирование на компьютере
12
Указатели, работа с
памятью, функции
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере,
тестирование на компьютере
15
13
ООП
Обработка
конспекта
лекций
(формирование
списка
тезисов),
решение задач на компьютере
10
7. Компетентностно-ориентированные оценочные средства
1) Текущий контроль
№
п/п
Наименование раздела
дисциплины и основные
темы
Средства текущего контроля
Язык программирования Java
1
Введение
Классифицировать языки программирования по типу
исполнения, варианту типизации данных,
приоритетным парадигмам на основе открытых
справочных данных о языках.
2
Типы данных, литералы,
переменные
Представить в виде иерархии (дерева) все базовые
типы данных Java.
Пример тестового задания. Укажите на месте
пропуска наименьший по объёму занимаемой памяти
тип данных, который надо задать для переменной s,
чтобы программа не содержала ошибок, и в результате
её работы на экран вывелось «2.5»:
public class Main {
public static void main(String[] args) {
_____ s = 2;
System.out.println(5/s);
}
}
3
Операции и библиотечные
методы и классы
В программе имеется переменная k типа int. Напишите
выражение, в результате которого переменной будет
присвоено случайное значение из отрезка [-12;24].
4
Ветвления и циклы (основные
алгоритмические
конструкции)
Пример тестового задания. Имеется программа:
class Example {
public static void main(String[] args) {
_____ a = true;
a = !a;
if (2 > 3 || 3 > 2 || a) {
System.out.println(4+3+"2");
9
} else {
System.out.println("4"+3+2);
}
}
}
1. Укажите, какой тип данных можно подставить
вместо прочерка для того, чтобы программа
откомпилировалась успешно.
2. Укажите, что будет выведено на экран после запуска
программы, с учётом того, чтобы вы указали
подходящий тип данных на месте прочерка.
5
Массивы и структуры данных
Пример тестового задания. Дан фрагмент программы:
int[] a = new int[__];
for(int i = 2; i <= 6; i++ ) {
a[i] = i+i;
}
for(int i = 1; i < a.length; i++ ) {
System.out.print(a[i] + " ");
}
Какой минимально возможный размер массива нужно
подставить вместо прочерка, чтобы программа
работала корректно?
Пример тестового задания. Дан фрагмент программы:
int[] a = {13,9,0,13,-12,0,-13,13};
for(int i = a.length-1; i>= 0; i-- ) {
if (a[i] > 0 && i < 7) {
System.out.print(a[i] + " ");
}
}
Что будет выведено на экран в результате работы этого
фрагмента?
6
Статические методы
Объявлен статический метод:
public static int funct (int a) {
return (int) ( ( 3*Math.pow(a,2) ) + a);
}
Каков будет результат выполнения следующей
инструкции в теле той же программы, где объявлен
метод:
System.out.println( funct(2) );
7
Основы ООП
Создайте класс окружностей на плоскости, описав в
нём все необходимые поля, подобрав им понятные
имена и правильные типы данных.
Опишите в классе конструктор, позволяющий при
создании нового объекта явно задать все его
характеристики. Если это необходимо, то проверьте
10
допустимость их значений в конструкторе (например, в
классе обыкновенных дробей нельзя создавать дробь с
нулевым знаменателем).
Создайте в классе метод, проверяющий имеют ли две
окружности общие точки.
Язык программирования C++
8
Введение
Перечислите преимущества, которые приносит
индустрии разработки ПО стандартизация языка
программирования?
Объясните значение термина «переносимость на
уровне исходного кода» и его отличия от кроссплатформенности.
9
Типы данных и операции над
ними
В программе объявлена переменная a типа int,
напишите выражение, в котором переменной a будет
присваиваться случайное целое значение из отрезка [3;4].
10
Ветвления и циклы (основные
алгоритмические
конструкции)
Пример тестового задания. Дан фрагмент программы:
#include <iostream>
using namespace std;
int main(void) {
____ a = -2 * 250;
cout << "a";
if (a >= 600 || a < 1200) {
a++;
if (a%2 == 1) {
a = a * 2;
}
} else {
a = 17;
}
cout << a;
return 0;
}
1. Какой тип данных следует подставить вместо
прочерка, чтобы: во-первых, переменная a занимала
минимум места в памяти, и, во-вторых, чтобы
представленная программа компилировалась
корректно (без предупреждений и ошибок).
2. Что выведется на экран в результате запуска
представленной программы?
11
Массивы и структуры данных
Напишите фрагмент программы, в котором будет
создан, заполнен, выведен на экран в строку массив из
следующих элементов: 0.5 -1.0 1.5 -2.0 2.5 -3.0 3.5 -4.0
Представьте примеры практического применения
таких структур данных как стек и очередь.
11
12
Указатели, работа с памятью,
функции
Перечислите основные риски, которые встают перед
разработчиком при использовании динамической
памяти.
Объясните, почему любой итерационный алгоритм не
может быть заменён на рекурсивный?
Создайте шаблонную функцию для вывода на экран
массива любого типа.
13
ООП
Классифицируйте все модификаторы доступа к членам
класса по уровню открытости из таких областей, как
сам класс, его наследник, независимый класс той же
программы.
2) Промежуточная аттестация
Программа экзамена «Программирование на Java» (I семестр):
1. Особенности языка и платформы Java.
2. Классификация программ по типу исполнения (компилируемые, интерпретируемые,
исполняемые на виртуальных машинах). Виртуальная машина Java. JIT-компиляция.
3. Создание простейшей программы на Java, её компиляция в байт-код и запуск.
4. Средства разработки Java-приложений. Интегрированные среды разработки.
5. Встроенные типы данных. Способы задания литералов различных типов.
6. Приведение типов (явное и автоматическое). Константы и переменные.
7. Оператор присваивания. Порядок действий (приоритет операторов). Арифметические
операторы. Операторы инкремента и декремента.
8. Встроенный класс Math. Псевдослучайные числа.
9. Операторы сравнения и логические операторы. Операторы ветвления. Условный оператор.
Минимизация количества проверок. Оператор множественного выбора. Его сравнение с
условным оператором.
10. Встроенный класс String. Строковые операции. Стандартные потоки ввода-вывода.
Организация ввода и вывода данных. Класс Scanner.
11. Операторы организации циклов. Цикл типа «n раз». Цикл типа «пока» (с пред- и
постпроверкой условия).
12. Массивы. Способы объявления и инициализации массивов. Индексация и размер массива.
Алгоритмы сортировки. Многомерные массивы.
13. Статические методы классов. Методы функционального и процедурного типа.
14. Сигнатура метода. Перегрузка методов.
12
15. Процедурное (императивное) программирование. Объектно-ориентированное
программирование. Сравнение парадигм.
16. Основные понятия ООП. Объекты и классы. Абстракция данных. Сценарий построения
объектно-ориентированной программы.
17. Члены классов. Методы и поля. Специальные методы классов (конструкторы). Конструктор
по умолчанию. Модификаторы уровня доступа (default, public, protected, private).
18. Основополагающие принципы ООП. Инкапсуляция. Наследование. Управление
наследованием. Интерфейсы как средство реализации множественного наследования.
Полиморфизм. Средства реализации полиморфизма.
19. Иерархия классов Java. Коренной класс Object и его методы.
20. Исключительные ситуации. Обработка исключительных ситуаций.
21. Приложения с графическим интерфейсом с использованием GUI-пакетов и апплеты.
Программа экзамена «Программирование на C++» (II семестр):
1. Классификация языков программирования (компилируемые, исполняемые на виртуальных
машинах и интерпретируемые ЯП). Язык программирования C++. Стандарт языка.
Стандартная библиотека.
2. Структура простейшей программы на C++. Процесс компиляции.
3. Базовые типы C++. Константы и переменные.
4. Оператор присваивания. Арифметические операторы. Операторы сравнения и логические
операторы. Порядок действий (приоритет операторов).
5. Условный оператор и оператор множественного выбора.
6. Операторы для организации циклов. Префиксная и постфиксная итерация.
7. Стандартные потоки ввода/вывода. Средства работы с потоками ввода/вывода.
Специальные символы (символ перевода строки, символ табуляции, символ конца строки).
8. Псевдослучайные числа. Генерация псевдослучайных чисел на C++.
9. Массивы в C++. Алгоритмы сортировки. C-строки (символьные массивы). Многомерные
массивы.
10. Указатели в C++. Операция разыменования. Константные указатели и указатели на
константы. Ссылки в C++.
11. Указатели и массивы (одномерные и многомерные). Операции над указателями.
12. Статическая, автоматическая и динамическая память. Типичные ошибки, возникающие при
использовании динамической памяти («утечка памяти»).
13. Функции в C++. Прототип и описание функции. Формальные и фактические параметры.
Передача параметров в функции по значению, по ссылке, по указателю.
14. Параметры функций со значениями по умолчанию. Перегрузка функций.
13
15. Рекурсия. Шаблоны функций.
16. Объектно-ориентированный подход. Абстракция данных. Классы.
17. Контроль доступа к элементам класса. Функции-члены классов. Конструкторы и
деструкторы. Инкапсуляция.
18. Наследование.
19. Полиморфизм и шаблоны классов.
Практические задания для зачета по курсу «Программирование на C++» (II семестр):
1. Пользователь вводит с клавиатуры натуральное число меньшее 10000. Программа
проверяет корректность ввода, при необходимости сообщает об ошибке и требует
повторного ввода. Для корректно введённого числа программа вычисляет и выводит на
экран сумму цифр введённого числа.
2. Вывести на экран m первых (a1, a2, …) элементов последовательности an=2+2n2, так, чтобы
их сумма оказалась меньше 1000, а сумма m+1 первых элементов была бы уже больше или
равна 1000.
3. Пользователь вводит с клавиатуры натуральное число не большее 999, программа должна
вывести на экран данное число, записанное римскими цифрами.
4. Пользователь вводит с клавиатуры: начальную сумму, внесённую на депозит
(вещественное положительное число), годовой процент (вещественное положительное
число), срок депозита в годах (натуральное число). Проверяется корректность ввода
данных. Программа должна вычислить по схеме сложных процентов и вывести на экран
сумму, возвращаемую после окончания срока депозита.
5. Создать программу-калькулятор, считывающую с консоли два операнда и знак
арифметического оператора между ними и выводящую на экран вычисленный результат
выражения. Реализовать работу со следующими операциями: сложение, умножение,
вычитание, деление и возведение в натуральную степень (символ «^»).
Пример ввода: 2.3+5
Соответствующий вывод: 7.3
Пример ввода: 3^3
Соответствующий вывод: 27
Пример ввода: 10%5
Соответствующий вывод: Ошибка! Указана неизвестная операция
Пример ввода: z+5
Соответствующий вывод: Ошибка! Указан некорректный операнд
6. Создать программу, которая будет последовательно предлагать пользователю десять
случайных примеров, проверяющих знание таблицы умножения (каждый из сомножителей
от 2 до 9 включительно), запрашивать ввод ответа с клавиатуры и проверять, какие
примеры из предложенных решены правильно. Каждый пример выводится в формате:
«5*8=». Пользователь вводит ответ с клавиатуры, после чего выводится следующий
пример. Когда получены ответы на все 10 примеров, программа сообщает количество
ошибок и номера примеров, в которых пользователь ошибся. Примеры не должны
повторяться. Примеры, полученные перестановкой сомножителей, такие как «5*8=» и
«8*5=», считать тождественными (т. е. если был предложен первый из них, то ни он сам, ни
второй — повторно предлагаться не должны).
14
7. Создать статические методы, вычисляющие факториал натурального числа, как
рекурсивным, так и итерационным способами. Сравнить быстродействие этих методов,
подсчитав, сколько умножений выполняется в первом и во втором случаях при вычислении
факториалов 6, 7 и 8.
8. Создать статические методы, сортирующие по возрастанию числовой массив, переданный
через аргумент, алгоритмом выбора и пузырьковым алгоритмом. В реализации сортировки
пузырьковым алгоритмом использовать критерий Айверсона, останавливающий внешний
цикл, если на каком-то его шаге массив уже оказался отсортированным.
9. Для введённой пользователем с клавиатуры строки программа должна определить,
корректно ли расставлены скобки (круглые, фигурные, квадратные). «Перемешивание»
скобок (пример: «{[}]») считается некорректным вариантом.
10. Создать класс векторов n-мерного пространства в декартовой системе координат.
Реализовать операции сложения и вычитания векторов, умножения вектора на скаляр,
вычисления длины вектора, проверки коллинеарности двух векторов.
8. Учебно-методическое и информационное обеспечение дисциплины
а) основная литература:
 Монахов В. Язык программирования Java и среда NetBeans — БХВ-Петербург, 2011 г. —
704 стр. — ISBN 978-5-9775-0671-7 — 1500 экз. (предыдущая версия книги свободна
доступна на http://ru.sun.com/research/materials/Monakhov_Java.jsp).
 Хабибуллин И. Самоучитель Java — БХВ-Петербург, 2008 г. —768 стр. — ISBN 978-59775-0191-0 — 3000 экз.
 Костин А. Н. Теоретические материалы и задачи по Java — http://kostin.ws/java/
 Эккель Б. Философия Java (Thinking in Java) — Питер, 2009 г. — 640 стр. — ISBN 978-5388-00003-3, 978-0-0131872486 — 2000 экз.
 Шилдт Г. C++ для начинающих (C++: A Beginner's Guide) — Эком, 2007 г. — 640 стр. —
ISBN 978-5-9900-9249-5, 0-07-219467-7 — 3000 экз.
 Павловская Т. А., Щупак Ю. А. C++. Объектно-ориентированное программирование —
Питер, 2008 г. — 272 стр. — ISBN 978-5-94723-842-6, 5-94723-842-X — 4500 экз.
 Фридман А. Л. Язык программирования C++ — http://www.intuit.ru/department/pl/cpp/
б) дополнительная литература:
 Арнолд К., Гослинг Д., Холмс Д. Язык программирования Java (The Java Programming
Language) — Вильямс, 2001 г. — 624 стр. — ISBN 5-8459-0215-0, 0-201-70433-1 — 5000
экз.
 Костин А. Н. Теоретические материалы и задачи по C++ — http://kostin.ws/cpp/
 Липпман С., Лажойе Ж. Язык программирования C++. Вводный курс — Невский Диалект,
ДМК Пресс, 2001 г. — 1104 стр. — ISBN 5-7940-0070-8, 5-94074-040-5, 0-201-82470-1 —
5000 экз.
 Вирт Н. Алгоритмы и структуры данных — Книга по Требованию, 2010 г. — 274 стр. —
ISBN 978-5-94074-584-6
15
в) программное обеспечение и интернет-ресурсы:
 Курс полностью базируется на открытом и свободном программном обеспечении (ОС
GNU/Linux, GCC, JDK, NetBeans, Geany и др.).
9. Материально-техническое обеспечение дисциплины
 Для проведения курса требуется компьютерный класс с установленным программным
обеспечением из п. 7 (в).
10. Аннотация рабочей программы дисциплины «Программирование»
1. Цель дисциплины:
Овладение основами алгоритмизации, императивного и объектно-ориентированного
программирования на языках Java и С++, приобретение навыков разработки программного кода с
использованием современных кросс-платформенных инструментальных средств.
2. Место дисциплины в структуре ООП:
Дисциплина «Программирование» относится к вариативной части профессионального цикла
(Б3.2/12).
3.Требования к результатам освоения дисциплины:
Процесс изучения дисциплины направлен на формирование и развитие компетенций:
 специальных (СК 1-5);
 общекультурных (ОК 4,8,12).
В результате изучения дисциплины студент должен:
знать:
 типовые алгоритмы и границы их применимости;
 теоретические основы императивного и объектно-ориентированного подходов к
программированию;
 основные способы исполнения программ (интерпретацию, компиляцию в машинный код,
исполнение на виртуальных машинах);
 основные лексические конструкции языков программирования C++ и Java;
 типы и структуры данных;
 встроенные (библиотечные) возможности языков программирования C++ и Java.
уметь:
 составлять алгоритм на основе содержательной постановки задачи;
 описывать алгоритмы в программном коде на языках C++ и Java, используя рациональные
подходы;
 применять встроенные (библиотечные) возможности языков программирования C++ и Java.
 структурировать и документировать программный код, отлаживать программы:
локализовать и устранять ошибки, обеспечивать модульность программ.
владеть:
 кросс-платформенной интегрированной средой разработки с целью создания программ на
языках C++ и Java;
 методами и средствами автоматизации рутинных и повторяющихся операций по обработке
информации с использованием языков программирования;
16
 методами и средствами решения практических задач из осваиваемой предметной области с
использованием языков программирования.
3. Общая трудоемкость дисциплины составляет 7 зачетных единиц (252 часа).
4. Семестры: 1, 2
5. Основные разделы дисциплины:
 Язык программирования Java
1) Введение
2) Типы данных, литералы, переменные
3) Операции и библиотечные методы и классы
4) Ветвления и циклы (основные алгоритмические конструкции)
5) Массивы и структуры данных
6) Статические методы
7) Основы ООП
 Язык программирования C++
8) Введение
9) Типы данных и операции над ними
10) Ветвления и циклы (основные алгоритмические конструкции)
11) Массивы и структуры данных
12) Указатели, работа с памятью, функции
13) ООП
6.
Автор(ы): Костин А. Н., старший преподаватель кафедры ТИДМ;
Стесева О. И., доцент кафедры ТИДМ;
Косткин Р. С., доцент кафедры ТИДМ.
Согласовано:
Специалист по УМР
___________________
«___» ________________г.
17
Download