.RU

Лекция №2. Массивы и указатели - Учебно-методический комплекс учебной дисциплины сдм. 02 «программирование» подготовки...



^ Лекция №2. Массивы и указатели

Массив – это упорядоченная последовательность переменных одного типа. Каждому элементу массива отводится одна ячейка памяти. Элементы одного массива занимают последовательно расположенные ячейки памяти. Все элементы имеют одно имя – имя массива и отличаются индексами – порядковыми номерами в массиве.

Количество элементов в массиве называется его размером. Чтобы отвести в памяти нужное количество ячеек для размещения массива, надо заранее знать его размер. Резервирование памяти для массива выполняется на этапе компиляции программы.

^ Определение массива в Си++

int a[100]; //массив из 100 элементов целого типа

Операция sizeof(a) даст результат 400, т. е.100 элементов по 4 байта.

Элементы массива всегда нумеруются с 0, (т.е. 0 1 2 ….)

Массивы бывают одномерные (mass_1[n]) и многомерные (mass_2[m][n]), где mass_1 и mass_2 – имена массива, а m и n – номера элементов в массиве (индексы):

a[0] – индекс задается как константа,

a[55] – индекс задается как константа,

a[I] – индекс задается как переменная,

a[2*I] – индекс задается как выражение.

Элементы массива можно задавать при его определении:

int a[10]={1,2,3,4,5,6,7,8,9,10} ;

^ Сортировка массивов – это процесс перегруппировки заданного множества объектов в некотором установленном порядке.

Сортировки массивов подразделяются по быстродействию. Существуют простые методы сортировок, которые требуют n*n сравнений, где n – количество элементов массива и быстрые сортировки, которые требуют n*ln(n) сравнений. Простые методы удобны для объяснения принципов сортировок, т. к. имеют простые и короткие алгоритмы.

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

Простые методы подразделяются на три основные категории: сортировка методом простого включения, простого выделения, простого обмена;

^ Поиск в отсортированном массиве. В отсортированном массиве используется дихотомический (бинарный) поиск. При последовательном поиске требуется в среднем n/2 сравнений, где n – количество элементов в массиве. При дихотомическом поиске требуется не более m сравнений, если (n- m)-ая степень 2, если n не является степенью 2, то n
Массив делится пополам S:=(L+R)/ 2+1 и определяется в какой части массива находится нужный элемент Х. Так как массив упорядочен, то если a[S]
Указатели являются специальными объектами в программах на Си++. Указатели предназначены для хранения адресов памяти.

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

Указатели делятся на две категории: указатели на объекты и указатели на функции. Размер указателя зависит от модели памяти. Можно определить указатель на указатель: int**a;

Указатель может быть константой или переменной, а также указывать на константу или переменную. Для инициализации указателя существуют следующие способы:

Присваивание адреса существующего объекта:

  1. с помощью операции получения адреса;

  2. с помощью проинициализированного указателя;

  3. адрес присваивается в явном виде;

  4. присваивание пустого значения.

Динамические переменные

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

Для создания динамических переменных используют операцию new, определенную в СИ++: указатель = new имя_типа[инициализатор];

где инициализатор – выражение в круглых скобках.

Операция new позволяет выделить и сделать доступным участок динамической памяти, который соответствует заданному типу данных. Если задан инициализатор, то в этот участок будет занесено значение, указанное в инициализаторе.

int*x=new int(5);

Для удаления динамических переменных используется операция delete, определенная в СИ++: delete указатель;

где указатель содержит адрес участка памяти, ранее выделенный с помощью операции new. delete x;

^ Одномерные массивы и указатели. При определении массива ему выделяется память. После этого имя массива воспринимается как константный указатель того типа, к которому относятся элементы массива. Исключением является использование операции sizeof (имя_массива) и операции &имя_массива. Имя массива является указателем-константой, значением которой служит адрес первого элемента массива, следовательно, к нему применимы все правила адресной арифметики, связанной с указателями. Запись имя_массива[индекс] это выражение с двумя операндами: имя массива и индекс. Имя_массива - это указатель константа, а индекс определяет смещение от начала массива. Используя указатели, обращение по индексу можно записать следующим образом: *(имя_массива+индекс).

^ Многомерные массивы и указатели. Многомерный массив это массив, элементами которого служат массивы. Например, массив с описанием int a[4][5] – это массив из 4 указателей типа int*, которые содержат адреса одномерных массивов из 5 целых элементов. Инициализация многомерных массивов выполняется аналогично одномерным массивам. Доступ к элементам многомерных массивов возможен и с помощью индексированных переменных и с помощью указателей.

^ Динамические массивы. Операция new при использовании с массивами имеет следующий формат: new тип_массива

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

Указатель на динамический массив затем используется при освобождении памяти с помощью операции delete.

Вопросы.

  1. Что такое массив?

  2. Виды массивов и их инициализация.

  3. Что такое сортировка? Какие методы сортировок существуют?

  4. Назовите три основные категории сортировок.

  5. Что такое указатель и для чего он предназначен?

  6. Назовите категории указателей.

  7. Что такое динамические переменные?

  8. Для чего используют операции new и delete?


Лекция №3. Ссылки и строки

Ссылки – это синоним имени объекта, указанного при инициализации ссылки. Формат объявления ссылки: тип & имя =имя_объекта;

Примеры:

int x; // определение переменной

int & sx=x; // определение ссылки на переменную х

const char & CR=’\n’; //определение ссылки на константу

^ Правила работы со ссылками:

  1. Переменная ссылка должна явно инициализироваться при ее описании, если она не является параметром функции, не описана как extern или не ссылается на поле класса.

  2. После инициализации ссылки не может быть присвоено другое значение.

  3. Не существует указателей на ссылки, массивов ссылок и ссылок на ссылки.

  4. Операция над ссылкой приводит к изменению величины на которую она ссылается.

Ссылка не занимает дополнительного пространства в памяти, она является просто другим именем объекта.

Строки – это последовательность символов, заключенная в двойные кавычки: "это строка". Строка может включать буквы, цифры и разнообразные специальные символы, такие как +, – , *, /, $ и другие.

Одним из способов представления строк является использование массива базового типа char. Например, строку "Hello" удобно представить как массив из шести индексированных переменных: пяти букв слова "Hello" и одного нулевого символа '\0', служащего маркером конца строки. Символ '\0' называется нуль-символом или нулевым символом, а когда он используется в качестве маркера конца строки – нуль-терминатором. При использовании таких маркеров программа может считывать массивы посимвольно и знать, когда следует остановиться.

^ Строковая переменная – это обычный массив символов, используемый особым образом. Она объявляется так же, как любой массив символов.

Синтаксис: char имя_массива[максимальный_размер_строки+1];

Единица прибавляется для того, чтобы вмещал нуль-символ '\0', отмечающий конец хранящейся в массиве строки. В частности, строковая переменная string вмещает строку длиной в десять или менее символов.

Например: char string[11];

Строка может быть объявлена либо как массив символов, либо как переменная типа char*. Каждое из объявлений

char color[]="синий";

сhar *colorPtr[]="синий";

присваивает переменной строке начальное значение "синий".

Первое объявление создает массив из 6 элементов color содержащий символы 'с', 'и', 'н', 'и', 'й' и '\0'.

Второе объявление создает переменную указатель *colorPtr, который указывает на строку «синий» где то в памяти.

^ Функции работы со строками из библиотеки обработки строк

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

Вопросы.

  1. Что такое ссылка? Назовите основные правила работы со ссылками.

  2. Что такое символ? Что такое строка?

  3. Что такое строковая переменная?

  4. Назовите функции обрабатывающие строки и их назначение.

  5. Что такое нулевой символ и для чего он используется?

Практическая работа №1

Цель: Получение навыков в выборе и использовании операторов С++; знакомство с итерационными процессами.

Задачи:

1. Написать программу, которая сообщает, является ли введенное с клавиатуры число четным или нечетным.

2. Напишите программу, которая выводит числа от 1 до N.

3. Проверка возраста человека (подросток или нет).

4. Написать программу, которая определяет, является ли введенное число простым.

5. Печать чисел от 1 до N с использованием инструкции for.

6. Написать программу с использованием инструкции for, которая определяет, является ли введенное число простым.

7. Бросание шестигранной игральной кости 6000 раз.

Дополнительные задачи:

1. Напишите программу, которая сообщает, делится ли введенное число без остатка на 7.

2. Напишите программу, которая печатает все числа от n1 до n2, где n1 и n2 – это два числа, введенные пользователем.

3. Напишите программу, которая выводила числа от 1 до N в обратном порядке.

4. Напишите программу, которая проверяет принадлежность числа диапазону от 0 до 100 включительно.

5. Напишите программу с использованием инструкции for, которая печатает все числа от n1 до n2, где n1 и n2 – это два числа, введенные пользователем.

6. Напишите программу с использованием инструкции for, которая выводила числа от 1 до N в обратном порядке (Подсказка: в цикле, образованном при помощи инструкции for, проинициализируйте переменную i значением n, используйте в условии i >=1 и вычитайте 1 из значения переменной i на шаге инкремента).


^ Практическая работа №2

Цель: получение навыков работы с массивами, указателями, ссылками.

Задачи:

Массивы:

1. Написать программу, выводящую список элементов массива.

2. (вывод постоянно случайных чисел) генерация 10 различных значений.

3. Напишите программу, которая имитирует раздачу карт из стандартной колоды, состоящей из 52 игральных карт (использование двух массивов строк: ранги и масти).

Указатели:

4. Пример программы, использующей функцию с именем double_it, которая умножает значение переменной, переданной в нее, на 2.

5. Написать программу сортировки массива по возрастанию методом выбора (использование функции swap).

6. Обнуление целочисленного массива.

Дополнительные задачи:

  1. Напишите программу, инициализирующую массив, состоящий из восьми целочисленных элементов, значениями 5, 15, 25, 35, 45, 55, 65 и 75, а затем печатающую значение каждого из элементов.

  2. Напишите программу, которая выводит пользователю подсказку для ввода каждого из семи значений, сохраняет введенные значения в массиве, а затем печатает значение каждого из элементов и их общую сумму. Для этой программы вам потребуется написать два цикла for: один для сбора данных, а второй для подсчета суммы и для вывода значений.

  3. Напишите программу, которая генерировала 5 различных значений (используйте функцию rand_0toN1 для получения значений 0, 1, 2, 3 или 4). Затем выполните запрошенное количество попыток, в котором, по вашему мнению, каждое значение из пяти возможных будет сгенерировано один раз из пяти.

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


^ Практическая работа №3

Цель: получение навыков работы со строками.

Задачи:

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

2. Написать программу, которая получает числа и печатает их квадратные корни до тех пор, пока пользователь не напечатает «0» или не нажмет клавишу «Enter» сразу после подсказки.

3. Написать программу, которая получает введенную пользователем строку и распознает новое «поле» везде, где встречает запятую.

Дополнительные задачи:

  1. Написать программу, которая получает введенную пользователем строку и распознает новое «поле» везде, где встречает пробел.

  2. Получите от пользователя три порции информации: имя собаки, ее породу и возраст. Затем напечатайте предложение, использующее эту информацию.

Самостоятельная работа. На самостоятельное изучение выносятся следующие темы (или вопросы):

1) Теоретические:

  1. Обработка одномерных массивов.

  2. Перебор массива по одному и по двум элементам.

  3. Формирование псевдодинамических массивов.

  4. Использование датчика случайных чисел для формирования массива.

  5. Классы задач по обработке массивов.

  6. Динамические массивы.

  7. Строки.

2) Задачи:

К лекции №1

Используя оператор цикла, найти сумму элементов, указанных в конкретном варианте.

Варианты:

  1. Найти сумму целых положительных чисел, кратных 3 и меньших 200.

  2. Найти сумму ряда с точностью , общий член которого .

  3. Найти сумму целых положительных четных чисел, меньших 100.

  4. Найти сумму ряда с точностью , общий член которого .

  5. Найти сумму целых положительных нечетных чисел, меньших 200.

  6. Найти сумму ряда с точностью , общий член которого .

  7. Найти сумму целых положительных чисел, больших 20, меньших 100 и кратных 3.

  8. Найти сумму ряда с точностью , общий член которого .

К лекции №2

Варианты:

1.

  1. Сформировать одномерный массив целых чисел, используя датчик случайных чисел.

  2. Распечатать полученный массив.

  3. Удалить элемент с номером К.

  4. Добавить после каждого четного элемента массива элемент со значением 0.

  5. Распечатать полученный массив.

2.

  1. Сформировать одномерный массив целых чисел, используя датчик случайных чисел.

  2. Распечатать полученный массив.

  3. Удалить первый элемент равный 0.

  4. Добавить после каждого четного элемента массива элемент со значением M[I-1]+2.

  5. Распечатать полученный массив.

3.

  1. Сформировать одномерный массив целых чисел, используя датчик случайных чисел.

  2. Распечатать полученный массив.

  3. Удалить элементы кратные 7.

  4. Добавить после каждого нечетного элемента массива элемент со значением 0.

  5. Распечатать полученный массив.

4.

  1. Сформировать одномерный массив целых чисел, используя датчик случайных чисел.

  2. Распечатать полученный массив.

  3. Удалить все элементы с заданным значением.

  4. Добавить перед каждым четным элементом массива элемент со значением 0.

  5. Распечатать полученный массив.

5.

  1. Сформировать одномерный массив целых чисел, используя датчик случайных чисел.

  2. Распечатать полученный массив.

  3. Удалить 5 первых элементы массива.

  4. Добавить в конец массива 3 новых элемента.

  5. Распечатать полученный массив.

6.

  1. Сформировать одномерный массив целых чисел, используя датчик случайных чисел.

  2. Распечатать полученный массив.

  3. Удалить 5 последних элементов массива.

  4. Добавить в начало массива 3 элемента со значением M[I+1]+2.

  5. Распечатать полученный массив.

7.

  1. Сформировать одномерный массив целых чисел, используя датчик случайных чисел.

  2. Распечатать полученный массив.

  3. Поменять местами минимальный и максимальный элементы массива.

  4. Удалить из массива все элементы, превышающие его среднее значение более чем на 10%.

  5. Распечатать полученный массив.

8.

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

9.

  1. Реализовать с использованием массива двунаправленное кольцо (просмотр возможен в обе стороны, от последнего элемента можно перейти к первому).

  2. Распечатать полученный массив, начиная с К-ого элемента и до К-1 ( по кольцу влево).

  3. Добавить в кольцо первый и последний элементы.

  4. Распечатать полученный массив, начиная с К-ого элемента (и до К+1 по кольцу вправо).

10.

  1. Реализовать с использованием массива двунаправленное кольцо (просмотр возможен в обе стороны, от последнего элемента можно перейти к первому).

  2. Распечатать полученный массив, начиная с К-ого элемента и до К-1 ( по кольцу влево).

  3. Добавить в кольцо после элементов с индексами кратными 5 элементы равные 0.

  4. Распечатать полученный массив, начиная с К-ого элемента(и до К+1 по кольцу вправо).

К лекции №3

Варианты:

    1. Проверить является ли строка палиндромом. (Палиндром – это выражение, которое читается одинакова слева направо и справа налево).

    2. Напечатать самое длинное и самое короткое слово в этой строке.

    3. Напечатать все слова, которые содержат по одной цифре.

    4. Напечатать все слова, которые совпадают с ее первым словом.

    5. Преобразовать строку таким образом, чтобы сначала в ней были напечатаны только буквы, а потом только цифры, не меняя порядка следования символов в строке.

    6. Преобразовать строку так, чтобы все слова в ней стали идентификаторами, слова, состоящие только из цифр – удалить.

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

    8. Преобразовать строку таким образом, чтобы в ней остались только слова, содержащие буквы и цифры, остальные слова удалить.

    9. Определить какое слово встречается в строке чаще всего.

    10. Удалить из строки все слова, которые не являются идентификаторами.

Контрольные вопросы к модулю 2.

  1. Перечислите базовые конструкции структурного программирования и основные управляющие конструкции программы.

  2. В каких циклах известно условие выполнение цикла? Перечислите их. Приведите примеры.

  3. Что такое метка? Что такое ссылка?

  4. Что такое символ?

  5. Что такое строка? Что такое строковая переменная?

  6. Что такое массив?

  7. Что такое сортировка? Какие методы сортировок существуют?

  8. Что такое указатель и для чего он предназначен? Назовите категории указателей.

  9. Что такое динамические переменные?

  10. Для чего используют операции new и delete?

Рубежный тест

1. Чем линейные вычислительные процессы отличаются от циклических?

  1. тем, что они более громоздки;

  2. тем, что они гораздо быстрее;

  3. тем, что они выполняются по порядку следования в программе;

  4. тем, что они выполняются только один раз.

2. Каковы основные свойства алгоритма?

  1. завершенность, результативность, предметность, определенность;

  2. точность, дискретность, определенность, определяемость;

  3. всеобщность, дискретность, результативность, определенность;

  4. программируемость, устойчивость, дискретность, массовость.

3. Какие операторы в С++ применяются для организации разветвляющихся вычислительных процессов?

  1. go to, for, do while;

  2. continue, go to, switch;

  3. go to, break, continue, switch;

  4. go to, for, break; do while, switch.

4. Какие операторы в С++ применяются для организации циклических вычислительных процессов?

  1. go to, break, continue, switch;

  2. go to, for, break; do while, switch;

  3. for, while, do while;

  4. for, go to, while, switch.

5. В каком случае оправдано применение оператора GOTO?

  1. в случае выхода из тела цикла наружу;

  2. в случае входа внутрь вложенных циклов;

  3. в случае выхода из вложенных циклов;

  4. там, где требуется перейти к другой функции.

6. Какие значения будут присвоены a[i] и i после выполнения выражения: ; (до выполнения операции i=2)?

  1. ;

  2. ;

  3. ;

  4. это зависит от модели используемого компилятора.

7. Как в языке С++ объявить массив целого типа из 10 элементов?

  1. int a(10);

  2. int a[10];

  3. char b[10];

  4. float b(10).

8. Как в языке С++ представляются многомерные массивы?

  1. в виде двумерного массива;

  2. в виде линейной комбинации независимых переменных;

  3. в виде особого одномерного массива;

  4. в виде последовательности символов в памяти.

9. Чем характеризуется любой одномерный массив?

  1. именем массива и константами;

  2. числом элементов массива и параметрами;

  3. именем массива и числом элементов;

  4. именем массива и числом параметров.

10. Почему в языке С++ выгодно динамическое представление массивов?

  1. так как увеличивается объем полезной памяти;

  2. так как уменьшается размер исполняемого файла;

  3. так как остается больше места для других данных;

  4. все приведенные ответы.


Ключ к тесту:

1в; 2в; 3в; 4в; 5в; 6г; 7б; 8г; 9в; 10г.


Модуль 3

Лекция №1. Функции в СИ++. Рекурсия

С увеличением объема программы становится невозможно удерживать в памяти все детали. Чтобы уменьшить сложность программы, ее разбивают на части. В Си++ задача может быть разделена на более простые подзадачи с помощью функций. Разделение задачи на функции также позволяет избежать избыточности кода, т. к. функцию записывают один раз, а вызывают многократно. Программу, которая содержит функции, легче отлаживать.

Часто используемые функции можно помещать в библиотеки. Таким образом, создаются более простые в отладке и сопровождении программы.

Функция – это именованная последовательность описаний и операторов, выполняющая законченное действие, например, формирование массива, печать массива и т. д. Функция, во-первых, является одним из производных типов СИ++, а во-вторых, минимальным исполняемым модулем программы. Любая функция должна быть объявлена и определена.

Объявление функции (прототип, заголовок) задает имя функции, тип возвращаемого значения и список передаваемых параметров.

Определение функции содержит, кроме объявления, тело функции, которое представляет собой последовательность описаний и операторов.

тип имя_функции([список_формальных_параметров])

{

тело_функции

}

Тело_функции – это блок или составной оператор. Внутри функции нельзя определить другую функцию. В теле функции должен быть оператор, который возвращает полученное значение функции в точку вызова. Он может иметь 2 формы: 1) return выражение;

2) return;

Первая форма используется для возврата результата. Вторая –используется, если функция не возвращает значения, т. е. имеет тип void. Программист может не использовать этот оператор в теле функции явно, компилятор добавит его автоматически в конец функции перед }.

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

Список формальных параметров – это те величины, которые требуется передать в функцию. Элементы списка разделяются запятыми. Для каждого параметра указывается тип и имя. В объявлении имена можно не указывать.

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

Программа на языке Си++ состоит, по крайней мере, из одной функции – функции main. С неё всегда начинается выполнение программы. Встретив имя функции в выражении, программа вызовет эту функцию, т.е. передаст управление на ее начало и начнет выполнять операторы. Достигнув конца функции или оператора return – выхода из функции, управление вернется в ту точку, откуда функция была вызвана, подставив вместо нее вычисленный результат. Объявление функции, аналогично объявлению переменной, определяет имя функции и ее тип – типы и количество ее аргументов и тип возвращаемого значения.

double sqrt(double x); // функция sqrt с одним аргументом – вещественным числом двойной точности, возвращает результат типа double

int sum(int a, int b, int c); функция sum от трех целых аргументов возвращает целое число

После того, как функция объявлена, ее можно использовать в выражениях: double x = sqrt(3) + 1;

sum(k, l, m) / 15;

Если функция не возвращает никакого результата, т.е. она объявлена как void, ее вызов не может быть использован как операнд более сложного выражения, а должен быть записан сам по себе: func(a,b,c);

Определение функции описывает, как она работает, т.е. какие действия надо выполнить, чтобы получить искомый результат. Для функции sum, объявленной выше, определение может выглядеть следующим образом:

int

sum(int a, int b, int c)

{

int result;

result = a + b + c;

return result;

}

Первая строка – это заголовок функции, он совпадает с объявлением функции, за исключением того, что объявление заканчивается точкой с запятой. Далее в фигурных скобках заключено тело функции – действия, которые данная функция выполняет.

Аргументы a, b и c называются формальными параметрами. Это переменные, которые определены в теле функции (т.е. к ним можно обращаться только внутри фигурных скобок). При написании определения функции программа не знает их значения. При вызове функции вместо них подставляются фактические параметры – значения, с которыми функция вызывается. Выше, в примере вызова функции sum, фактическими параметрами (или фактическими аргументами) являлись значения переменных k, l и m.

Формальные параметры принимают значения фактических аргументов, заданных при вызове, и функция выполняется.

Первое, что мы делаем в теле функции — объявляем внутреннюю переменную result типа целое. Переменные, объявленные в теле функции, также называют локальными. Это связано с тем, что переменная result существует только во время выполнения тела функции sum. После завершения выполнения функции она уничтожается – ее имя становится неизвестным, и память, занимаемая этой переменной, освобождается.

Вторая строка определения тела функции – вычисление результата. Сумма всех аргументов присваивается переменной result. Отметим, что до присваивания значение result было неопределенным (то есть значение переменной было неким произвольным числом, которое нельзя определить заранее).

Последняя строчка функции возвращает в качестве результата вычисленное значение. Оператор return завершает выполнение функции и возвращает выражение, записанное после ключевого слова return, в качестве выходного значения.

^ Имена функций. В языке Си++ допустимо иметь несколько функций с одним и тем же именем (перегрузкой имен функций), потому что функции различаются не только по именам, но и по типам аргументов. Если в дополнение к определенной выше функции sum мы определим еще одну функцию с тем же именем

double

sum(double a, double b, double c)

{

double result;

result = a + b + c;

return result;

}

это будет считаться новой функцией. Иногда говорят, что у этих функций разные подписи. В следующем фрагменте программы в первый раз будет вызвана первая функция, а во второй раз – вторая:

int x, y, z, ires;

double p,q,s, dres;

. . .

// вызвать первое определение функции sum

ires = sum(x,y,z);

// вызвать второе определение функции sum

dres = sum(p,q,s);

При первом вызове функции sum все фактические аргументы имеют тип int. Поэтому вызывается первая функция. Во втором вызове все аргументы имеют тип double, соответственно, вызывается вторая функция.

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

^ Необязательные аргументы функций

При объявлении функций в языке Си++ имеется возможность задать значения аргументов по умолчанию. Первый случай – сокращение записи. Если функция вызывается с одним и тем же значением аргумента в 99% случаев, и это значение достаточно очевидно, можно задать его по умолчанию. Предположим, функция expnt возводит число в произвольную целую положительную степень. Чаще всего она используется для возведения в квадрат. Ее объявление можно записать так: double expnt (double x, unsigned int e = 2); Определение функции.

Использовать аргументы по умолчанию удобно при изменении функции. Если при изменении программы нужно добавить новый аргумент, можно новый аргумент объявить со значением по умолчанию. В таком случае старые вызовы будут использовать значение по умолчанию, а новые – значения, указанные при вызове.

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

^ Подставляемые (inline) функции. Некоторые функции в СИ++ можно определить с использованием служебного слова inline. Такая функция называется подставляемой или встраиваемой. Например:

inline float Line(float x1,float y1,float x2=0, float y2=0)

{

return sqrt(pow(x1-x2)+pow(y1-y2,2));

}

//функция возвращает расстояние от точки с координатами(x1;y1)(по умолчанию центр координат) до точки с координатами (x2;y2).

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

  • рекурсивные функции;

  • функции, у которых вызов размещается до ее определения;

  • функции, которые вызываются более одного раза в выражении;

  • функции, содержащие циклы, переключатели и операторы переходов;

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

^ Функции с переменным числом параметров

В СИ++ допустимы функции, у которых при компиляции не фиксируется число параметров, и , кроме того может быть неизвестен тип этих параметров. Количество и тип параметров становится известным только в момент вызова, когда явно задан список фактических параметров. Каждая функция с переменным числом параметров должна иметь хотя бы один обязательный параметр. Определение функции с переменным числом параметров.

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

Существует два подхода:

    1. известно количество параметров, которое передается как обязательный параметр;

    2. известен признак конца списка параметров;

^ Перегрузка функций

Цель перегрузки состоит в том, чтобы функция с одним именем по-разному выполнялась и возвращала разные значения при обращении к ней с различными типами и различным числом фактических параметров. Для обеспечения перегрузки необходимо для каждой перегруженной функции определить возвращаемые значения и передаваемые параметры так, чтобы каждая перегруженная функция отличалась от другой функции с тем же именем. Компилятор определяет, какую функцию выбрать по типу фактических параметров.

Правила описания перегруженных функций:

  1. Перегруженные функции должны находиться в одной области видимости.

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

  3. Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или наличием ссылки.

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

Рекурсия – это очень мощный метод вычислений. Значительная часть математических функций определяется в рекурсивных терминах. В программировании алгоритмы обработки сложных структур данных также часто бывают рекурсивными. Довольно часто рекурсия и итерация взаимозаменяемы. Выбор между ними может быть обусловлен разными факторами. Чаще рекурсия более наглядна и легче реализуется. Однако, в большинстве случаев итерация более эффективна.

Вопросы:

  1. Что такое функция? Для чего функции используются?

  2. Объявление и определение функции.

  3. Что такое формальные переменные?

  4. В чем смысл внутреннего связывания?

  5. Назовите конструкцию функции с переменным числом параметров.

  6. В чем цель перегрузки функций?

  7. Перечислите правила описания перегруженных функций.

Лекция №2. Структуры

Структура – это объединенное в единое целое множество поименованных элементов в общем случае разных типов. Сравнивая структуру с массивом, следует отметить, что массив – это совокупность однородных объектов одного и того же типа. Это не всегда удобно. Пусть, например, библиотечная карточка каталога должна включать сведения о книге:

  • Фамилия автора;

  • Заглавие книги;

  • Место издания;

  • Год издания;

  • Количество страниц.

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

В соответствии с синтаксисом языка определение структурного типа начинается со служебного слова struct, вслед за которым помещается выбранное пользователем имя типа. Описания элементов, входящих в структуру, помещаются в фигурные скобки, вслед за которыми ставиться точка с запятой. Элементы структуры могут быть как базовых, так и производных типов. Например, в структурах типа card будут элементы базового типа int и производного типа char *. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена. Форматы определения структурного типа. Примеры. В первом случае описание структур определяет новый тип, имя которого можно использовать наряду со стандартными типами.

Во втором случае описание структуры служит определением переменных.

Структурный тип можно также задать с помощью ключевого слова typedef:

^ Доступ к элементам структур. Используются уточненные имена. Общей формой уточненного имени элемента структуры является следующая конструкция: имя_структуры.имя_элемента_структуры

^ Битовые поля – это особый вид полей структуры. При описании битового поля указывается его длина в битах (целая положительная константа). Битовые поля могут быть любого целого типа. Они используются для плотной упаковки данных, с их помощью удобно реализовать флажки типа «да» / «нет». Особенностью битовых полей является то, что нельзя получить их адрес. Размещение битовых полей в памяти зависит от компилятора и аппаратуры.

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

^ Динамические структуры данных. Во многих задачах требуется использовать данные, у которых конфигурация, размеры и состав могут меняться в процессе выполнения программы. Для их представления используют динамические информационные структуры. К таким структурам относят: линейные списки, стеки, очереди, бинарные деревья.

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

^ Линейный однонаправленный список. Описание простейшего элемента такого списка.

Информационное поле – это поле любого, ранее объявленного или стандартного типа.

^ Адресное поле – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес следующего элемента списка.

Информационных полей может быть несколько. Примеры.

Каждый элемент списка содержит ключ, который идентифицирует этот элемент. Ключ обычно бывает либо целым числом, либо строкой.

Над списками можно выполнять следующие операции:

  1. начальное формирование списка (создание первого элемента);

  2. добавление элемента в конец списка;

  3. добавление элемента в начало списка;

  4. удаление элемента с заданным номером;

  5. чтение элемента с заданным ключом;

  6. вставка элемента в заданное место списка (до или после элемента с заданным ключом;

  7. упорядочивание списка по ключу и др.

Вопросы:

  1. Что такое структура, список? Приведите примеры.

  2. В чем смысл доступа к элементам структуры? Назовите общую форму записи уточненных имен. Приведите примеры таких имен.

  3. Дайте определение битовому полю. В чем смысл таких полей?

  4. Что такое объединение? Приведите пример.

  5. Приведите примеры динамических структур. Что такое однонаправленный список?

  6. Назовите операции, которые можно выполнять над списками.

Лекция №3. Классы и члены

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

struct date { int month, day, year; };

date today;

void set_date(date*, int, int, int);

void next_date(date*);

void print_date(const date*);

// ...

Никакой явной связи между функциями и структурой date нет. Ее можно установить, если описать функции как члены структуры:

struct date

{

int month, day, year;

void set(int, int, int);

void get(int*, int* int*);

void next();

void print();

};

Описанные таким образом функции называются функциями-членами. Их можно вызывать только через переменные соответствующего типа, используя стандартную запись обращения к члену структуры:

date today;

date my_birthday;

void f()

{

my_birthday.set(30,12,1950);

today.set(18,1,1991);

my_birthday.print();

today.next();

}

Поскольку разные структуры могут иметь функции-члены с одинаковыми именами, при определении функции-члена нужно указывать имя структуры:

void date::next()

{

if (++day > 28 )

{

// здесь сложный вариант

}

}

В теле функции-члена имена членов можно использовать без указания имени объекта. В таком случае имя относится к члену того объекта, для которого была вызвана функция.

Классы. Можно установить ограничение, описав класс вместо структуры:

class date

{

int month, day, year;

public:

void set(int, int, int);

void get(int*, int*, int*);

void next();

void print()

};

Служебное слово public (общий) разбивает описание класса на две части. Имена, описанные в первой частной (private) части класса, могут использоваться только в функциях-членах. Вторая общая часть - представляет собой интерфейс с объектами класса. Поэтому структура – это такой класс, в котором по определению все члены являются общими. Преимущества.

^ Ссылка на себя. В функции-члене можно непосредственно использовать имена членов того объекта, для которого она была вызвана. При первом вызове readm() m обозначает aa.m, а при втором - bb.m. У функции-члена есть дополнительный скрытый параметр, являющийся указателем на объект, для которого вызывалась функция. Можно явно использовать этот скрытый параметр под именем this. Считается, что в каждой функции-члене класса X указатель this описан неявно как X *const this; и инициализируется, чтобы указывать на объект, для которого функция-член вызывалась. Этот указатель нельзя изменять, поскольку он постоянный (*const). Явно описать его тоже нельзя, т.к. this - это служебное слово. Типичный пример - функция, которая вставляет элемент в список с двойной связью.

Инициализация. Программисту предоставляется возможность описать функцию, явно предназначенную для инициализации объектов. Поскольку такая функция конструирует значение данного типа, она называется конструктором. Эту функцию легко распознать - она имеет то же имя, что и ее класс. Если в классе есть конструктор, все объекты этого класса будут проинициализированы. Если конструктору требуются параметры, их надо указывать. Часто бывает удобно указать несколько способов инициализации объекта. Для этого нужно описать несколько конструкторов. Параметры конструкторов подчиняются тем же правилам о типах параметров, что и все остальные функции. Пока конструкторы достаточно различаются по типам своих параметров, транслятор способен правильно выбрать конструктор.

Когда используется стандартное значение параметра, оно должно отличаться от всех допустимых значений параметра. В случае месяца и дня очевидно, что при значении нуль - это так, но неочевидно, что нуль подходит для значения года.Объект класса без конструктора может инициализироваться присваиванием ему другого объекта этого же класса. Это незапрещенно и в том случае, когда конструкторы описаны: date d = today; //инициализация присваиванием

На самом деле, имеется стандартный конструктор копирования, определенный как поэлементное копирование объектов одного класса.

Удаление. Пользовательские типы чаще имеют, чем не имеют, конструкторы, которые проводят надлежащую инициализацию. Для многих типов требуется и обратная операция – деструктор, гарантирующая правильное удаление объектов этого типа. Деструктор класса X обозначается ~X («дополнение конструктора»). В частности, для многих классов используется свободная память, выделяемая конструктором и освобождаемая деструктором.

Когда объект типа char_stack выходит из текущей области видимости, вызывается деструктор. Когда начинает выполняться f(), вызывается конструктор char_stack, который размещает массив из 100 символов s1 и массив из 200 символов s2. При возврате из f() память, которая была занята обоими массивами, будет освобождена.

Подстановка. Программирование с классами предполагает, что в программе появится множество маленьких функций. По сути, всюду, где в программе с традиционной организацией стояло бы обычное обращение к структуре данных, используется функция. То, что было соглашением, стало стандартом, проверяемым транслятором. В результате программа может стать крайне неэффективной. Хотя вызов функции в C++ и не столь дорогостоящая операция по сравнению с другими языками, все-таки цена ее много выше, чем у пары обращений к памяти, составляющих тело тривиальной функции. Преодолеть эту трудность помогают функции-подстановки (inline). Если в описании класса функция-член определена, а не только описана, то она считается подстановкой. Это значит, например, что при трансляции функций, использующих char_stack из предыдущего примера, не будет использоваться никаких операций вызова функций, кроме реализации операций вывода! Другими словами, при разработке такого класса не нужно принимать во внимание затраты на вызов функций. Любое, даже самое маленькое действие, можно смело определять как функцию без потери эффективности. Это замечание снимает наиболее часто приводимый довод в пользу общих членов данных.

Вопросы:

  1. Что такое класс? Функция-член и друзья?

  2. Что используется для создания объектов класса?

  3. Можно ли описать специальную функцию-член для удаления объектов класса при его уничтожении. Объясните свой ответ.

  4. В каком случае все объекты класса будут быть проинициализированы?

  5. Когда используется стандартное значение параметра?

  6. Можно ли описать функцию-член со спецификацией inline? В каком случае?

Практическая работа №1

Цель: получение навыков работы с функциями.

Задачи:

1. Написать программу вычисления числового треугольника (использование функции, например, треугольник числа 5 будет равен: 1+2+3+4+5=15).

2. Написать программу проверки на простое число с использованием функции.

3. Написать программу, которая находила наибольший общий делитель.

4. Написать программу разложения числа на простые множители.

5. Генератор случайных чисел (от 0 до N-1).

6. Вычисление факториала с помощью рекурсивной функции.

7. Рекурсивная генерация чисел Фибоначчи.

Дополнительные задачи:

  1. Напишите функцию print_out, печатающую все целые числа в диапазоне от 1 до N. Проверьте работу функции, поместив ее в программу и передав ей число n – число, введенное с клавиатуры. Возвращаемый тип функции print_out должен быть void; функция не возвращает значение. Функция может быть вызвана простой инструкцией: print_out(n);.

  2. Напишите программу, которая находит первое простое число, которое больше одного миллиарда (1000000000).

  3. Напишите программу, которая вычисляет факториалы, используя рекурсивную функцию.

  4. Напишите генератор случайных чисел, возвращающий число в диапазоне от 1 до N, где N – это целочисленный аргумент, передаваемый в функцию.


^ Практическая работа №2

1. Программа создает определенный пользователем тип структуры Time с тремя целыми элементами: hour, minute и second. Программа определяет единственную структуру типа Time, названную dinnerTime, и использует операцию точка для присвоения элементам структуры начальных значений 18 для hour, 30 для minute и 0 для second. Затем программа печатает время в военном (24-часовом) и стандартном (12-часовом) форматах.

Дополнительные задачи:

1. Структура "Человек":

  • фамилия, имя, отчество;

  • год рождения;

  • рост;

  • вес.

Удалить все элемент с указанным ростом и весом, добавить элемент после элемента с указанной фамилией.

2. Структура «Школьник»:

  • фамилия, имя, отчество;

  • класс;

  • номер телефона;

  • оценки по предметам (математика, физика, русский язык, литература).

Удалить все элементы, у которых есть 2 хотя бы по одному предмету, добавить элемент в начало файла.

3. Структура «Покупатель»:

  • фамилия, имя, отчество;

  • домашний адрес;

  • номер телефона;

  • номер кредитной карточки.

Удалить 3 элемента из начала файла, добавить 3 элемента в конец файла.


Практическая работа №3

1. Программа выполняет несколько простых тестов над классом Point, используя его для присвоения и получения некоторых данных.

2. Напишите две новые функции для класса Point: функции set_x и set_y, которые устанавливают значения членов x и y по отдельности. Не забудьте инвертировать отрицательное значение, если такое появится, как это сделано в функции set. (на основе первой задачи)

3. Программа использует простой класс, названный Count, с открытым элементом данных x типа int и открытой функцией – элементом print, чтобы проиллюстрировать доступ к элементам класса с помощью операций выбора элемента. Программа создает три экземпляра переменных типа Count – counter, counterRef (ссылка на объект типа Count) и counterPtr (указатель на объект типа Count), переменная counterRef объявлена, чтобы ссылаться на counter, переменная counterPtr объявлена, чтобы указывать на counter. Элемент данных х сделан открытым просто для того, чтобы продемонстрировать способы доступа к открытым элементам.

^ Самостоятельная работа.

На самостоятельное изучение выносятся следующие вопросы:

1) Теоретические:

  1. Функции в СИ++. Прототип функции и параметры функции.

  2. Передача одномерных массивов как параметров функции.

  3. Передача многомерных массивов в функцию.

  4. Передача строк в качестве параметров функций.

  5. Функции с начальными значениями параметров.

  6. Шаблоны функций. Указатель и ссылки на функцию.

  7. Однонаправленный и двунаправленный список.

  8. Стеки и очереди.

  9. Интерфейсы и реализации. Примеры разработки, реализации и использования классов.

  10. Конструкторы и деструкторы. Создание объектов как автоматический, статический или как объект в свободной памяти.

  11. Работа с файлами.

2) Задачи:

  1. Создание и печать однонаправленного списка.

  2. Удаление из однонаправленного списка элемента с номером k.

  3. Создать двунаправленный список, удалить элемент с заданным номером, добавить элемент с заданным номером, напечатать полученные списки.

  4. Написать функцию с переменным числом параметров для перевода чисел из восьмеричной системы счисления в десятичную.

  5. Написать функцию square, которая находит площадь треугольника по его сторонам.

  6. Написать функцию sum, которая находит сумму чисел типа int.

  7. Написать функцию mult, которая находит произведение чисел типа float.

  8. Написать функцию sum, которая находит сумму чисел типа int по формуле: .

  9. Написать функцию min, которая находит минимальное из чисел типа int или из чисел типа double.

  10. Написать функцию kvadr, которая определяет количество чисел, являющихся точными квадратами (2, 4, 9, 16,. . . ) типа int.

Контрольные вопросы к модулю 3.

  1. Что такое структура, список? Что такое объединение? Что такое однонаправленный список?

  2. В чем смысл доступа к элементам структуры?

  3. Назовите операции, которые можно выполнять над списками.

  4. Что такое функция? Что такое формальные переменные?

  5. Перечислите правила описания перегруженных функций.

  6. Что такое класс? Функция-член и друзья?

  7. Что используется для создания объектов класса?

  8. Что такое конструктор и деструктор?

Рубежный тест

1. Какая функция в С++ очищает экран?

  1. delscr();

  2. clsscr();

  3. cleane();

  4. clrscr().

2. В какой из строк аргументы функции main написаны правильно (выберите несколько вариантов)?

  1. (int argc, char *argv[], char *envp[]);

  2. (int argc, char argv[], char envp[]);

  3. (int argc, char *envp);

  4. (int argc, char *argv[]).

3. К чему может привести широкое использование функций в программе?

  1. программа начнет работать гораздо медленнее;

  2. будет перегружена память компьютера;

  3. размер исполняемого файла увеличится;

  4. размер исполняемого файла уменьшится.

4. Какая из 3-х функций: – будет вызвана первой при вычислении значения переменной a в выражении ?

  1. функции ;

  2. функции ;

  3. функции ;

  4. нельзя точно сказать.

5. Когда функция в языке С++ завершает свое выполнение?

  1. только при достижении оператора return;

  2. только при достижении завершающей фигурной скобки;

  3. только при достижении оператора break;

  4. в случаях а или б.

6. Функция, которая прямо или косвенно вызывает сама себя, называется ____________________________.

7. Повторный запуск рекурсивного механизма вызовов функции приводит:

  1. к нарастающим затратам процессорного времени и требуемого объема памяти;

  2. к отказу действии компилятора;

  3. к завершению программы до начала выполнения;

  4. к перезагрузке программы.

8. Совокупности типов данных, построенные с использованием данных других типов, называются _____________________.

9. Какие из перечисленных ниже утверждений неверны (выберите несколько вариантов)?

  1. компоненты структуры могут быть различных типов;

  2. структура представляет собой совокупность данных;

  3. компоненты структуры должны быть различных типов;

  4. компоненты структуры имеют атрибут private по умолчанию.

10. Какие из перечисленных ниже утверждений неверны?

  1. класс представляет собой набор переменных;

  2. компоненты класса имеют атрибут public по умолчанию;

  3. компоненты класса должны быть различных типов;

  4. в языке С++ недопустима вложенность классов;

  5. описание класса не может производиться в другом классе;

  6. все утверждения верны.

11. Какое ключевое слово начинает определение структуры?

  1. class {};

  2. struct {};

  3. main {};

  4. void {}.

12. Функция определенная внутри класса, называется ________________.

13. Какое ключевое слово начинает определение класса?

  1. class {};

  2. struct {};

  3. void {}.

  4. main {};

14. Препятствиями к созданию новых типов данных с помощью struct являются:

  1. возможность существования данных, не имеющих начальных значений;

  2. возможность существования данных с неправильными начальными значениями;

  3. необходимость изменения всех программ, использующих struct, при изменении реализации struct;

  4. отсутствие средств защиты, гарантирующих, что данные не содержат несогласованных значений;

  5. все утверждения верны.

15. Каково различие между оператором точка и оператором доступа к члену класса по имени класса?

  1. оператор точка именуется оператором доступа к члену класса по имени класса, а оператор доступа – оператором прямого доступа к члену класса;

  2. оператор точка именуется оператором прямого доступа к члену класса, а оператор доступа – оператором доступа к члену класса по имени класса;

  3. оператор точка именуется оператором закрытого доступа к члену класса, а оператор доступа – оператором доступа к члену класса по имени класса;

  4. различий нет.


Ключ к тесту:

  1. г

  2. а, г

  3. г

  4. г

  5. г

  6. рекурсия

  7. а

  8. структуры

  9. в, г

  10. е

  11. б

  12. функция-член

  13. а

  14. д

  15. б






Методические рекомендации по изучению курса

Для преподавателей

Учебный курс предназначен для начальной подготовки программиста в овладении знаниями, умениями и навыками языка программирования Си++.

Курс разделен на три модуля, в каждом модуле по три лекции. На каждое лекционное занятие должно быть предусмотрено минимум одно практическое занятие и 4 часа на самостоятельную работу. В каждой практической работе помимо основных задач есть дополнительные, которые по усмотрению преподавателя могут быть включены в практику. Таким образом на изучение курса отводится 15 лекционных часа, 24 практических и 36 часа самостоятельных занятий.

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

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

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

^ Для студентов

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

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

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

  3. все задачи должны быть самодокументированы, т.е. в тексте задачи должно быть достаточно комментариев для понимания кода программы;

  4. самостоятельно (на основе решенных в аудитории задач) выполнять решение дополнительных задач, заданных преподавателем по изучаемому разделу;

  5. проходить тестирование по изученным разделам для контроля своих знаний.


^ АТТЕСТАЦИЯ КАЧЕСТВА УСВОЕНИЯ ЗНАНИЙ

konkurs-ya-grazhdanin-rossii-staten-i-stroen-uvazheniya-dostoin.html
konkurs-yavlyaetsya-otkritim-v-konkurse-mogut-prinimat-uchastie-yuridicheskie-lica-lyuboj-formi-sobstvennosti-i-organizacionno-pravovoj-formi.html
konkurs-yunie-darovaniya-kamchatki-provoditsya-po-specialnostyam-narodnie-instrumenti-orkestrovie-strunnie-instrumenti-duhovie-i-udarnie-instrumenti-celi-i-zadachi-konkursa.html
konkurs-yunih-detektivov-po-rasskazam-a-k-dojla-viktorina-puteshestvie-v-mir-skazok-chas-interesnih-soobshenij-zagadka-alih-parusov-po-tvorchestvu-a-s-grina-literaturnij-chas-skazochnij-kalejdoskop.html
konkurs-yunih-kraevedov-nedarom-pomnit-vsya-rossiya.html
konkurs-yunih-tehnikov-hochu-vse-znat.html
  • write.bystrickaya.ru/g-u-b-e-r-n-a-t-o-r-p-o-s-t-a-n-o-v-l-e-n-i-e-voenno-sportivnaya-igra-zarnica-dlya-shkolnikov-bila-chastyu-kompleksnoj.html
  • uchit.bystrickaya.ru/tema-2-analiz-sovremennogo-sostoyaniya-portfelnih-investicij-v-rossii-uchebno-metodicheskij-kompleks-disciplini.html
  • literatura.bystrickaya.ru/socialnaya-integraciya-lyudej-s-umstvennimi-i-fizicheskimi-nedostatkami-v-germanii.html
  • report.bystrickaya.ru/informaciya-o-gostinicah-i-drugih-sredstvah-razmesheniya-gosudarstvennoj-programmi-po-okazaniyu-sodejstviya-dobrovolnomu.html
  • universitet.bystrickaya.ru/tema-35-mif-i-religiya-v-sisteme-kulturi-programma-gosudarstvennogo-mezhdisciplinarnogo-itogovogo-ekzamena-po.html
  • institute.bystrickaya.ru/fundamentalnie-konstanti-kanaryov-f-m.html
  • laboratornaya.bystrickaya.ru/razvitie-lichnosti-studenta-i-prepodavatelya-kole-i-vuze-sbornik-materialov-mezhdunarodnoj-nauchno-prakticheskoj-konferencii.html
  • turn.bystrickaya.ru/plani-i-konspekti-zanyatij-penzulaeva.html
  • laboratornaya.bystrickaya.ru/raspisanie-raboti.html
  • testyi.bystrickaya.ru/aktualizaciya-situacii-vremeni-kurs-filosofii-i-filosofii-nauki-xxi-veka-dlya-studentov-fizicheskogo-fakulteta.html
  • uchit.bystrickaya.ru/uchebnij-kurs-ender-i-nauchnie-issledovaniya.html
  • student.bystrickaya.ru/-54-mojshik-sushilshik-metalla-spravochnik-rabot-i-professij-rabochih-etks-vipusk-2-chast-razdeli-litejnie-raboti.html
  • control.bystrickaya.ru/ekspert-12072010-g-agentstvo-agrofakt-15-07-2010-g-dmitrij-medvedev-zalivaet-zasuhu-dengami-gazeta-kommersant.html
  • tetrad.bystrickaya.ru/v-i-kozlov-utverzhden-postanovleniem.html
  • ucheba.bystrickaya.ru/primernie-testi-dlya-sobesedovaniya-o-napravlenii-magisterskoj-podgotovki-servis-12-informaciya-o-napravlenii-magisterskoj-podgotovki-servis.html
  • learn.bystrickaya.ru/glava-9-podem-na-poverhnost-zemli.html
  • occupation.bystrickaya.ru/moskva-i-peterburg-v-romane-aspushkina-evgenij-onegin.html
  • exchangerate.bystrickaya.ru/55investicionno-strukturnaya-politika-nacionalnaya-strategiya-ustojchivogo.html
  • school.bystrickaya.ru/endogennie-katastrofi.html
  • lecture.bystrickaya.ru/administrativno-pravovoj-status-subektov-pravovih-otnoshenij.html
  • urok.bystrickaya.ru/problema-vibora-psihoterapevticheskih-tehnik-tezisi-vserossijskoj-nauchno-prakticheskoj-konferencii-po-klinicheskoj-psihologii.html
  • kontrolnaya.bystrickaya.ru/programma-vstupitelnogo-ekzamena-v-aspiranturu-napravlenie-podgotovki-44-06-01-obrazovanie-i-pedagogicheskie-nauki.html
  • crib.bystrickaya.ru/izbiratelnaya-komissiya-evrejskoj-avtonomnoj-oblasti-postanovlenie-stranica-5.html
  • thescience.bystrickaya.ru/ivan-gerasimovich-durov-d-a-redin-yu-n-smirnov-v-d-solovev-a-a-solodov-s-v-filippov-glavnij-redaktor.html
  • books.bystrickaya.ru/computerize-bbk-81-2ang-4.html
  • portfolio.bystrickaya.ru/ochistil-ot-nefti-i-vipil-grizlov-demonstriruet-rossijskie-tehnologii-diplom-v-rassrochku-11.html
  • gramota.bystrickaya.ru/vremennie-metodicheskie-rekomendaciipo-organizacii-protivoepizooticheskih-meropriyatij-po-grippu-ptic.html
  • essay.bystrickaya.ru/chubukna-lo-patentnij-povrenij-zavsektora-ntelektualno-vlasnost.html
  • desk.bystrickaya.ru/otchet-o-pribilyah-i-ubitkah-na-01072005-g-ezhekvartalnij-otchet-otkritoe-akcionernoe-obshestvo-nizhegorodskij-kommercheskij.html
  • uchenik.bystrickaya.ru/literaturnij-geroj-ivanov.html
  • essay.bystrickaya.ru/biznes-informatika.html
  • paragraph.bystrickaya.ru/kodeks-korporativnoj-etiki.html
  • lektsiya.bystrickaya.ru/programma-organizacii-obedinennih-nacij-po-okruzhayushej-srede-dvadcat-pervoe-soveshanie-storon-monrealskogo-stranica-7.html
  • ucheba.bystrickaya.ru/potrebnosti-ne-motiviruyut-ne-pobuzhdayut-pobuzhdayut-motivi.html
  • write.bystrickaya.ru/glava-22-istochniki-informacii-t-a-homenko-gl-7-13-22.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.