#include <mpc. h>
#define N 3
int [*]main()
{
net SimpleNet(N) mynet;
[mynet]MPC_Printf("Hello, world!\n"); }
Так, в рассматриваемой программе сначала определяется сеть mynet, состоящая из N виртуальных процессоров, а затем на этой сети вызывается узловая библиотечная функция MPC_Printf. Выполнение этой программы заключается в параллельном вызове функции MPC_Printf теми N процессами программы, на которые отображены виртуальные процессоры сети mynet. Это отображение осуществляется системой программирования языка mpC во время выполнения программы. Если система программирования не может выполнить отображение (например, если значение N превышает общее число процессов программы), то программа завершается аварийно с соответствующей диагностикой.
Заметим схожесть конструкций [mynet] и [host]. Ключевое слово host можно рассматривать как имя сети из одного виртуального процессора, который всегда отображается на связанный с терминалом пользователя хост - процесс.
Следующая программа выводит на терминал пользователя более содержательные послания от тех процессов параллельной программы, на которые отображаются виртуальные процессоры сети mynet.
#include <mpc. h>
#include <sys/utsname. h>
#define N 3
int [*]main()
{
net SimpleNet(N) mynet;
struct utsname [mynet]un;
[mynet]uname(&un);
[mynet]MPC_Printf(" Hello world! I'm on \"%s\".\n", un. nodename);
}
Следующая программа семантически полностью эквивалентна предыдущей программе, однако за счет использования специальной распределенной метки [mynet]: имеет более простой синтаксис. Оператор, помеченный такой меткой, полностью выполняется виртуальными процессорами соответствующей сети.
#include <mpc. h>
#include <sys/utsname. h>
#define N 3
int [*]main()
{
net SimpleNet(N) mynet;
[mynet]:
{
struct utsname un;
uname(&un);
MPC_Printf("Hello world! I'm on \"%s\".\n", un. nodename);
}
}
Время жизни сети mynet, как и время жизни переменной un, ограничено блоком, в котором эта сеть определяется. При выходе из этого блока, все процессы программы, захваченные под виртуальные процессоры сети mynet, освобождаются и могут быть использованы при создании других сетей. Такие сети называются в mpC автоматическими.
В отличие от автоматических, время жизни статических сетей ограничено лишь временем выполнения программы. Следующие две программы демонстрируют различие статических и автоматических сетей. Программы выглядят практически идентичными. Обе они заключаются в циклическом выполнении блока, включающего определение сети и выполнении уже знакомых вычислений на этой сети. Единственным, но существенным, отличием является то, что в первой программе определяется автоматическая сеть, а во второй - статическая.
#include <mpc. h>
#include <sys/utsname. h>
#define Nmin 3
#define Nmax 5
int [*]main()
{
repl n;
for(n=Nmin; n<=Nmax; n++)
{
auto net SimpleNet(n) anet;
[anet]:
{
struct utsname a;
uname(&a);
MPC_Printf("I'm from an automatic network on \"%s\" (n=%d).\n",
a. nodename, n);
}
}
}
#include <mpc. h>
#include <sys/utsname. h>
#define Nmin 3
#define Nmax 5
int [*]main() {
repl n;
for(n=Nmin; n<=Nmax; n++) {
static net SimpleNet(n) snet;
[snet]: {
struct utsname s;
uname(&s);
MPC_Printf("I'm from the static network on \"%s\" (n=%d).\n",
s. nodename, n);
}
}
}
В процессе выполнении первой программы при входе в блок на первом витке цикла создается автоматическая сеть из трёх виртуальных процессоров (n = Nmin = 3), которая при выходе из цикла уничтожается. При входе в блок на втором витке цикла создается новая автоматическая сеть уже из четырёх виртуальных процессоров, которая также прекращает своё существование при выходе из блока, так что к моменту выполнения повторной инициализации цикла (n ++) эта 4-процессорная сеть уже не существует. Наконец, на последнем витке при входе в блок создаётся автоматическая сеть из пяти виртуальных процессоров (n = Nmax = 5).
В процессе выполнении второй программы, при входе в блок на первом витке цикла также создается сеть из трёх виртуальных процессоров, однако при выходе из блока она не уничтожается, а просто перестаёт быть видна. Таким образом, в этом случае блок является не областью существования сети, а областью её видимости. Поэтому во время выполнения повторной инициализации цикла и проверки условия цикла эта статическая трех процессорная сеть существует, но недоступна (эти точки программы находятся вне области видимости имени сети snet). При повторных входах в блок на последующих витках цикла никакие новые сети не создаются, а просто становится видна та статическая сеть, которая была создана при первом входе в блок.
Таким образом, в отличие от первой программы, в которой одно и то же имя mynet на разных витках цикла обозначает совершенно разные сети, во второй программе имя snet обозначает уникальную сеть, существующую с момента первого входа в блок, в котором она определяется, и до конца выполнения программы. Если класс сети не специфицирован явно путём использования ключевого слова auto или static в определении сети, то, по умолчанию, она считается автоматической, если сеть определена внутри функции, и статической, если определена вне функции.
В разобранных до настоящего момента программах все виртуальные процессоры сетей параллельно выполняли абсолютно одинаковые вычисления. Поэтому, у нас не было необходимости различать их внутри сети. Если же параллельный алгоритм, который нужно запрограммировать, предполагает, что различные параллельные процессы должны выполнять разные вычисления, то необходимы средства для выделения отдельных виртуальных процессоров внутри сети. Такие средства предусмотрены в языке mpC. Они позволяют привязывать виртуальные процессоры любой сети к некоторой системе координат и выделять отдельный виртуальный процессор путем задания его координат.
Вообще говоря, в программе на mpC нельзя определить просто сеть, а можно определить лишь сеть того или иного типа. Тип является важнейшим атрибутом сети, в частности, конкретизируя операции доступа к её виртуальным процессорам. Указание типа является обязательной частью определения любой сети. Поэтому, всякому определению сети должно предшествовать определение соответствующего сетевого типа. В рассмотренных нами примерах определение используемого сетевого типа SimpleNet находится среди прочих стандартных определений языка mpC в заголовке mpc. h и включается в программу с помощью директивы #include препроцессора. Выглядит это определение следующим образом:
nettype SimpleNet(int n)
{
сoord I=n;
};
Оно вводит имя SimpleNet сетевого типа, параметризованного целым параметром n. В теле определения объявляется координатная переменная I, изменяющаяся в пределах от 0 до n-1. Тип SimpleNet является простейшим параметризованным сетевым типом и соответствует сетям, состоящим из n виртуальных процессоров, линейно-упорядоченных своим местоположением на координатной прямой. Рассмотрим следующую программу
#include <mpc.h >
#define N 5
int [*]main()
{
net SimpleNet(N) mynet;
[mynet]:
{
int my_coordinate;
my_coordinate = I coordof mynet;
if(my_coordinate%2==0)
MPC_Printf("Hello, even world!\n");
else
MPC_Printf("Hello, odd world!\n");
}
}
Она демонстрирует, каким образом можно запрограммировать выполнение различных вычислений виртуальными процессорами с различными координатами. В этой программе используется бинарная операция coordof, левым операндом которой, в нашем случае, является координатная переменная I, а правым - сеть mynet. Результатом операции будет целое значение, распределённое по сети mynet, такое, что его проекция на любой из виртуальных процессоров будет равна значению координаты I этого процессора в сети. После присваивания my_coordinate = I coordof mynet значения проекций переменной my_coordinate будут равны координатам соответствующих виртуальных процессоров в сети mynet. В результате, виртуальные процессоры с чётными координатами выведут на терминал пользователя приветствие "Hello, even world!", а виртуальные процессоры с нечётными координатами - приветствие "Hello, odd world!".
Ниже приведенная программа демонстрирует сеть, виртуальные процессоры которой привязаны к двумерной системе координат. Каждый из виртуальных процессоров сети выводит на терминал пользователя свои координаты в сети и имя компьютера, на котором его разместила программа. Заметим, что в качестве второго операнда операции coordof в этой программе используется не сеть, а переменная un.
#include <mpc. h>
#include <sys/utsname. h>
nettype Mesh(int m, int n)
{
coord I=m, J=n;
};
#define M 2
#define N 3
int [*]main() {
net Mesh(M, N) mynet;
[mynet]:
{
struct utsname un;
uname(&un);
MPC_Printf("I'm on \"%s\" and have coordinates (%d, %d).\n",
un. nodename, I coordof un, J coordof un);
}
}
В общем случае, если вторым операндом операции coordof является не сеть, а выражение, то это выражение не вычисляется, а используется лишь для определения сети, по которой распределено его значение, а операция выполняется так, как если бы в качестве второго операнда использовалась эта сеть.
Уже говорилось, что время жизни автоматической сети ограничено блоком, в котором она определена. При выходе из этого блока сеть прекращает своё существование, а процессы программы, захваченные под виртуальные процессоры сети, освобождаются и могут быть использованы при создании других сетей. Возникает вопрос, каким образом результаты вычислений, выполненных на такой автоматической сети, сохраняются и могут быть использованы в дальнейших вычислениях. В уже разобранных программах такой проблемы не возникало, так как единственным результатом вычислений на любой из сетей был вывод на терминал пользователя того или иного сообщения.
На самом деле, сети в языке mpC не являются абсолютно независимыми друг от друга. Каждая вновь создаваемая сеть имеет в точности один виртуальный процессор, общий с уже существующими на момент создания сетями. Этот виртуальный процессор называется родителем создаваемой сети и является тем связующим звеном, через которое передаются результаты вычислений на сети в случае прекращения её существования. Родитель сети явно или неявно специфицируется её определением.
До сих пор ни одна из сетей не была определена с явным указанием родителя. Во всех случаях родитель специфицировался неявно, и этим родителем был ни кто иной, как виртуальный хост - процессор. Следующая программа полностью эквивалентна предыдущей программе, с той разницей, что в определении сети неявная спецификация родителя сети заменена на явную.
#include <mpc. h>
#include <sys/utsname. h>
nettype Mesh(int m, int n)
{
coord I=m, J=n;
parent [0,0];
};
#define M 2
#define N 3
int [*]main() {
net Mesh(M, N) [host]mynet;
[mynet]:
{
struct utsname un;
uname(&un);
MPC_Printf("I'm on \"%s\" and have coordinates (%d, %d).\n",
un. nodename, I coordof un, J coordof un);
}
}
В любой из рассмотренных программ в каждый момент времени её выполнения одновременно существует не больше одной сети. Это не ограничение языка. Язык mpC позволяет писать программы с произвольным числом параллельно существующих сетей. Единственным ограничением является общее число процессов, составляющих параллельную программу, на которые отображаются виртуальные процессоры сетей.
Синхронизация процессов
Параллельная программа - это множество параллельных процессов, синхронизирующих свою работу и обменивающихся данными посредством передачи сообщений. Средства языка mpC позволяют программисту специфицировать требуемое для параллельного решения задачи число процессов и распределить вычисления между этими процессами. Этих же средств, в принципе, достаточно для описания синхронизации работы процессов при выполнении параллельной программы.
Основным механизмом синхронизации параллельных процессов, взаимодействующих с помощью передачи сообщений, является барьер. Барьер - это точка параллельной программы, в которой процесс ждёт все остальные процессы, с которыми он синхронизирует свою работу. Лишь только после того, как все процессы, синхронизирующие свою работу, достигли барьера, они продолжают дальнейшие вычисления. Если по какой-то причине хотя бы один из этих процессов не достигает барьера, то остальные процессы "зависают" в этой точке программы, а программа в целом уже никогда не сможет завершиться нормально.
Предположим, что нам нужно построить программу таким образом, чтобы сообщения от виртуальных процессоров с нечётными координатами выводились на терминал пользователя только после того, как будут выведены сообщения от всех виртуальных процессоров с чётными координатами. Язык mpC предоставляет для решения этой задачи библиотечную функцию MPC_Global_barrier(void), которая синхронизирует работу всех процессов параллельной программы. Её описание находится в заголовке mpc. h и выглядит следующим образом:
int [*]MPC_Global_barrier(void);
Рассматриваемая далее программа демонстрирует использование этой функции для разделения барьером двух параллельных операторов. Заметим, что в этой программе, на барьере ждут не только процессы, реализующие сеть mynet, но и свободные процессы. Это, естественно, приводит к большему числу сообщений, пересылаемых при выполнении барьера, и, следовательно, к определённому замедлению программы.
#include <mpc. h>
#define N 5
int [*]main()
{
net SimpleNet(N) mynet;
int [mynet]my_coordinate;
my_coordinate = I coordof mynet;
if(my_coordinate%2==0)
[mynet]MPC_Printf("Hello, even world!\n");
MPC_Global_barrier();
if(my_coordinate%2==1)
[mynet]MPC_Printf("Hello, odd world!\n");
}
Литература
1. CASE - технологии. Современные методы и средства
проектирования информационных систем. - http://www. *****
2. Кнут Искусство программирования. Т. 1. Основные
алгоритмы: Уч. пос. — М.: Издательский дом «Вильямс», 20с.
3. Кнут Искусство программирования. Т. 2. Получисленные алгоритмы: Уч.
пос. - М.: Издательский дом «Вильямс», 2011.-828 с.
4. Алгоритмы на С++. – М.: Издательский дом «Вильямс», 2011.-1056 с.
5. С++: методики программирования Шилдта. - М.: Издательский дом
«Вильямс», 2009.-480 с.
6. С\С++ в задачах и приложениях. СПб.: BHV - СПб,2012.-349 с.
7. Липаев программного обеспечения. - М.: Финансы и
статистика, 20с.
8. Кнут Искусство программирования. Т. 3. Сортировка и
поиск: Уч. пос. - М.: Издательский дом «Вильямс», 2005.-832 с.
9. Ластовецкий параллельных вычислений на
неоднородных сетях компьютеров на языке mpC. - http://*****
3.УЧЕБНО-МЕТОДИЧЕСКИЕ МАТЕРИАЛЫ
3.1. Основная литература
№№ п/п | Автор | Наименование | Год изда- ния | Колич. экземпляров | |
в библ. | на кафед. | ||||
1. | Кнут | 1. Искусство программирования. Т. 1. Основные Алгоритмы. 2. Искусство программирования. Т. 2. Получисленные алгоритмы. | 2005 2011 | 5 5 | |
2. | Алгоритмы на С++. | 2011 | 3 | ||
3. | С++: методики программирования Шилдта | 2009 | 5 | ||
4. | С\С++ в задачах и приложениях. | С\С++ в задачах и приложениях. | 2012 | 5 |
3.2. Дополнительная литература
№№ П/п | Автор | Наименование | Год изда- ния | Колич. экземпляров | |
в библ. | на кафед. | ||||
1. | С++. Освой на примерах. | 2006 | э/в | ||
2. | Методы программирования. Курс лекций. | 2009 | э/в |
4. ПРОВЕРКА ЗНАНИЙ
ПРИМЕРНЫЙ ПЕРЕЧЕНЬ КОНТРОЛЬНЫХ ВОПРОСОВ
1. Что такое перестановки данных? Для чего они нужны?
2. Операции над перестановками.
3. Что такое обратная перестановка? Как ее получить?
4. Что такое циклическая форма записи перестановок?
5. Что такое каноническая форма записи циклических перестановок?
6. Поаследовательное и связанное распределение данных.
7. Назначение организации данных в виде стеков и очередей. Специфика
организации.
8. Назначение организации данных в виде деревьев. Специфика организации.
9. Способы прохождения древьв, леса.
10. Способы представления графов в ЭВМ.
11. Что такое остовное дерево и его назначение?
12. Поиск кратчайшего пути на графе.
13. Алгоритм сортировки простыми вставками.
14. Алгоритм сортировки методои пузырька, Шелла.
15. Поиск данных. Индексно – последовательный поиск.
16. Хеширование.
17. Что такое коллизии при хешировании и как их избежать?
5. ВОПРОСЫ К ЭКЗАМЕНУ
1. Цикл жизни программного обеспечения (ПО).
2. Показатели качества ПО.
3. Надежность ПО.
4. Критерии надежности ПО. Сбой отказ, восстановление ПО.
5.Перестановки символов, чисел. Операции над перестановками.
6. Обратные перестановки. Циклическая и каноническая формы перестановки.
7. Рекурсия. Примеры применения рекурсии. Программы.
8. Внутренняя и внешняя сортировки данных. Их особенности.
9. Алгоритм сортировки простыми вставками. Код основной части программы.
10. Алгоритм сортировки Хоора. Код основной части программы.
11. Алгоритм сортировки Шелла. Код основной части программы.
12. Алгоритм сортировки слиянием. Код основной части программы.
13. Алгоритм поразрядной сортировки. Код основной части программы.
14. Алгоритм последовательного поиска. Код основной части программы.
15. Алгоритм индексно - последовательного поиска. Код основной части
программы.
16. Алгоритм поиска в бинарном дереве. Код основной части программы.
17. Алгоритм хеширования для организации поиска данных.
18. Процедура разрешения коллизий при хешировании. Код основной части
программы.
19. ООП. Изоморфизм. Примеры программ.
20. ООП. Полиморфизм. Примеры использования.
21. ООП. Наследование. Примеры программ.
22. Логическое программирование. Технология программирования на Прологе.
23. Функциональное программирование. Технология программирования на Лиспе.
6. ПЕРЕЧЕНЬ КОМПЬЮТЕРНЫХ ПРОГРАММ, ЭЛЕКТРОННЫХ ПОСОБИЙ
6.1. Перечень программных средств для обучения студентов
· операционная система Windows
· MS Office
· Visual Studio 2008 C++
· Язык ПРОЛОГ
6.2. Перечень электронных пособий
1. Прохорова программирования. Методические указания. Йошкар-
Ола: МОСУ, 20с.
2. Прохорова программирования. Курс лекций. Учебное пособие.
Йошкар – Ола: МОСУ, 2007. – 178 с.
(на кафедре есть все методические материалы в электронном виде)
6.3. Интернет-ресурсы используемые при изучении дисциплины
www. *****
7. ГЛОССАРИЙ
Жизненный цикл ПО представляет собой непрерывный процесс, который начинается с момента принятия решения о необходимости его создания и заканчивается в момент его полного изъятия из эксплуатации.
Надежность ПО - свойство ПО выполнять заданные функции, сохраняя во времени значения установленных эксплуатационных показателей в заданных пределах, соответствующих заданным режимам и условиям использования, технического обслуживания, ремонта, хранения и транспортировки.
Сбой ПО- это самоустраняющийся отказ, не требующий внешнего вмешательства.
Отказ ПО проявляться как следствие нарушения кодов записи программ в памяти команд, стирания или искажения данных в оперативной или долговременной памяти ЭВМ, нарушения нормального хода вычислительного процесса.
Сортировка данных – процесс упорядочивания элементов списка.
Ключ - некоторое поле внутри записи.
Индекс – это вспомогательная таблица, каждый ее элемент состоит из ключа kindex и указателя на запись в файле, соответствующую этому ключу pindex.
Баланс некоторого узла в дереве определяется как высота его левого поддерева минус высота его правого поддерева.
Сбалансированным бинарным деревом (деревом AVL) является такое бинарное дерево, у которого абсолютное значение баланса каждого узла £1.
Хеширование - преобразование по определённому алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины.
Хеш функция – это функция, которая трансформирует ключ в некоторый индекс таблицы.
Коллизия хеш-функции представляет собой ситуацию, когда для двух различных входных данных имеется равенство выходов хеш – функции.
Инкапсуляция - это механизм, который объединяет данные и код, и защищает и то и другое от внешнего вмешательства или неправильного использования.
Полиморфизм - это свойство, которое позволяет одно и то же имя использовать для решения двух или более задач, но технически разных.
Наследование - это процесс, посредством которого один объект может приобретать свойства другого.
8. ТЕСТЫ
№ | Вопрос | Ответы | |
1 | 1. К способам записи алгоритмов не относится | А. Блок-схема Б. Программа В. Текст Г. Граф | |
2. В программах на языке С++ нет команды | А. switch Б. do В. while Г. loop | ||
3. Оператор while выполняет команду | А. изменения значения счетчика цикла Б. возврата в цикл и проверки на выход из него В. возврата управления в место вызова | ||
4. Оператор switch выполняет команду | А. анализа значения в скобках Б. присваивания значения аргументу В. перехода по значению | ||
5. Оператор do выполняет команду | А. изменения значения счетчика цикла Б. возврата в цикл и проверки на выход из него В. возврата управления в место вызова | ||
6. Из заданных 3-х операций сравнения в операторе if не используется знак | А. = Б. > В. < | ||
7. Команда return не используется для | А. выхода из цикла Б. выхода из программы В. передачи управления в точку вызова функции | ||
8. Стандартные типы данных в языке С++ не имеют типа представления | А. вещественных чисел Б. логических чисел В. длинных целых чисел Г. комплексных чисел | ||
9. Для организации процесса ветвления не желательно использование | А. оператора switch Б. оператора goto В. оператора if Г. break | ||
10. Для организации процесса итерации не используется | А. оператор for Б. оператор while В. оператор do Г. оператор break | ||
№ | Вопрос | Ответы | |
2 | 1. Рекурсия не предполагает | А. повторное использование функции Б. повторное использование аргументов В. возврат исходного значения аргумента Г. организацию работы без дополнительного выделения памяти | |
2. К динамическим структурам данных не относятся | А. графы Б. стеки В. массивы Г. деревья | ||
3. Организация динамической структуры стек не предполагает | А. определение переменных начала и конца стека Б. контроль длины стека В. выделение адреса для ячейки | ||
4. Организация динамической структуры очередь предполагает | А. после удаления элемента поиск адреса следующей ячейки очереди Б. определение адреса для ячейки В. задание адреса начала очереди | ||
5. При создании структуры дерево необходимо | А. выбрать алгоритм прохода дерева Б. задать все ячейки дерева В. определить высоту дерева | ||
6. Наследование классов не предполагает | А. наследование основных свойств одного объекта другим Б. задание базового класса В. объявление в базовом классе производных классов | ||
7. Инкапсуляция не предполагает | А. задание класса объектов Б. выделение памяти при каждом обращении к объекту. В. обеспечение контролируемого интерфейса открытой части объекта с закрытой. | ||
8. Полиморфизм не предполагает | А. использование одинаковых имен и одинаковых параметров для разных действий Б. использование разных областей памяти функций с одним именем В. использование различия типов переменных одноименных функций | ||
9. Общим у конструкторов и деструкторов является | А. освобождение памяти по завершению работы с объектом Б. объявление в классе В. инициализация объекта | ||
10. Тип класса - объединение не служит для | А. объединения кодов и данных Б. использования общей памяти В. наследования классов |
№ | Вопрос | Ответы | |
3 | 1. К способам записи алгоритмов не относится | А. Блок-схема Б. Программа В. Текст Г. Граф | |
2. В программах на языке С++ нет команды | А. switch Б. do В. while Г. loop | ||
3. Организация динамической структуры стек не предполагает | А. определение переменных начала и конца стека Б. контроль длины стека В. выделение адреса для ячейки | ||
4. Организация динамической структуры очередь предполагает | А. после удаления элемента поиск адреса следующей ячейки очереди Б. определение адреса для ячейки В. задание адреса начала очереди | ||
5. Оператор do выполняет команду | А. изменения значения счетчика цикла Б. возврата в цикл и проверки на выход из него В. возврата управления в место вызова | ||
6. Из заданных 3-х операций сравнения в операторе if не используется знак | А. = Б. > В. < | ||
7. Инкапсуляция не предполагает | А. задание класса объектов Б. выделение памяти при каждом обращении к объекту. В. обеспечение контролируемого интерфейса открытой части объекта с закрытой. | ||
8. Полиморфизм не предполагает | А. использование одинаковых имен и одинаковых параметров для разных действий Б. использование разных областей памяти функций с одним именем В. использование различия типов переменных одноименных функций | ||
9. Для организации процесса ветвления не желательно использование | А. оператора switch Б. оператора goto В. оператора if Г. break | ||
10. Для организации процесса итерации не используется | А. оператор for Б. оператор while В. оператор do Г. оператор break |
№ | Вопрос | Ответы | |
4 | 1. Рекурсия не предполагает | А. повторное использование функции Б. повторное использование аргументов В. возврат исходного значения аргумента Г. организацию работы без дополнительного выделения памяти | |
2. К динамическим структурам данных не относятся | А. графы Б. стеки В. массивы Г. деревья | ||
3. Оператор while выполняет команду | А. изменения значения счетчика цикла Б. возврата в цикл и проверки на выход из него В. возврата управления в место вызова | ||
4. Оператор switch выполняет команду | А. анализа значения в скобках Б. присваивания значения аргументу В. перехода по значению | ||
5. При создании структуры дерево необходимо | А. выбрать алгоритм прохода дерева Б. задать все ячейки дерева В. определить высоту дерева | ||
6. Наследование классов не предполагает | А. наследование основных свойств одного объекта другим Б. задание базового класса В. объявление в базовом классе производных классов | ||
7. Команда return не используется для | А. выхода из цикла Б. выхода из программы В. передачи управления в точку вызова функции | ||
8. Стандартные типы данных в языке С++ не имеют типа представления | А. вещественных чисел Б. логических чисел В. длинных целых чисел Г. комплексных чисел | ||
9. Общим у конструкторов и деструкторов является | А. освобождение памяти по завершению работы с объектом Б. объявление в классе В. инициализация объекта | ||
10. Тип класса - объединение не служит для | А. объединения кодов и данных Б. использования общей памяти В. наследования классов |
№ | Вопрос | Ответы | |
5 | 1. Рекурсия не предполагает | А. повторное использование функции Б. повторное использование аргументов В. возврат исходного значения аргумента Г. организацию работы без дополнительного выделения памяти | |
2. В программах на языке С++ нет команды | А. switch Б. do В. while Г. loop | ||
3. Организация динамической структуры стек не предполагает | А. определение переменных начала и конца стека Б. контроль длины стека В. выделение адреса для ячейки | ||
4. Оператор switch выполняет команду | А. анализа значения в скобках Б. присваивания значения аргументу В. перехода по значению | ||
5. При создании структуры дерево необходимо | А. выбрать алгоритм прохода дерева Б. задать все ячейки дерева В. определить высоту дерева | ||
6. Из заданных 3-х операций сравнения в операторе if не используется знак | А. = Б. > В. < | ||
7. Инкапсуляция не предполагает | А. задание класса объектов Б. выделение памяти при каждом обращении к объекту. В. обеспечение контролируемого интерфейса открытой части объекта с закрытой. | ||
8. Стандартные типы данных в языке С++ не имеют типа представления | А. вещественных чисел Б. логических чисел В. длинных целых чисел Г. комплексных чисел | ||
9. Общим у конструкторов и деструкторов является | А. освобождение памяти по завершению работы с объектом Б. объявление в классе В. инициализация объекта | ||
10. Для организации процесса итерации не используется | А. оператор for Б. оператор while В. оператор do Г. оператор break |
9. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ИЗУЧЕНИЮ ДИСЦИПЛИНЫ
Дисциплина "Технология программирования" является одной из обще профессиональных дисциплин с кодом ОПД. Ф.12. Систематические занятия позволят студентам приобрести знания теории в области искусства программирования и построения эффективных кодов решения задач, выработать навыки применения современных подходов.
Советы по планированию и организации времени, необходимого на изучение дисциплины:
- перед лекционными занятиями следует повторить материал предыдущей лекции. Это поможет в усвоении нового материала, позволит быть готовыми к экспресс-опросу на лекции. Систематическое повторение отнимает незначительное время и в дальнейшем сэкономит его в процессе подготовки к занятиям, тестированию и экзамену. При повторении лекционного материала рекомендуется просматривать учебное пособие по данному курсу, в котором материал рассматривается в более широком аспекте. Рекомендуемое время на подготовку к лекционным занятиям – 30 мин;
- перед лабораторными занятиями следует прочитать и усвоить материал очередной работы, пользуясь методическими материалами к их выполнению. Это позволит без труда выполнить работу. В процессе оформления отчета о выполнении лабораторной работы необходимо почитать теоретический материал, приведенный в методическом пособии. Сдавать лабораторную работу следует сразу по ее оформлению, не затягивая и не накапливая долги. Рекомендуемое время на подготовку к лабораторным занятиям (с оформлением отчета) – 2 часа;
- при выполнении расчетно-графической работы необходимо придерживаться правила: ритмичность и еще раз ритмичность. Наличие на кафедре учебного пособия в электронном виде по курсу лекций и практикуму позволяет, при условии равномерности занятий, выполнить работу в срок.
Описание последовательности действий студента, или "сценарий изучения дисциплины"
Дисциплина "Технология программирования" базируется на полученных знаниях изучаемых ранее дисциплин: информатика; языки программирования; информационные технологии; операционные системы.
Следовательно, студенту, слабо усвоившему пройденный материал, придется столкнуться с необходимостью затратить дополнительное время на освоение новой дисциплины. Для успешного освоения дисциплины следует руководствоваться следующей последовательностью действий:
- в соответствии с нисходящим методом, следует начать освоение дисциплины с повторения основных выводов и положений алгоритмизации, языков программирования, что позволит легко ориентироваться в логике построения кодов программсложных алгоритмов;
- следующий шаг – изучение основных положений программирования работы с информационными структурами, динамическим выделением памяти. При этом необходимо усвоить работу с адресами;
- далее следует перейти к выработке практических навыков объектно-ориентированного программирования;
- одним из основных этапов освоения дисциплины является систематическое выполнение домашних заданий. Что является важнейшим этапом освоения дисциплины.
Рекомендации по использованию материалов учебно-методического комплекса
- для более быстрого и методически правильного освоения дисциплины необходимо начать ее изучение с внимательного рассмотрения рабочей программы. Рабочая программа позволит оценить трудоемкость освоения дисциплины, укажет на контрольные точки, на длительность изучения дисциплины, наличие экзамена, объема лабораторных работ;
- следует посмотреть рекомендуемую литературу и взять ее в библиотеке, причем потребуется литература, как по освоению теоретического материала, так и по выполнению лабораторных работ;
- следует периодически обращаться к контрольным материалам, размещенным в учебно-методическом комплексе дисциплины. После изучения очередной темы проверить себя по соответствующим вопросам теста. Можно рекомендовать также ответить на контрольные вопросы, приведенные в конце каждого раздела учебного пособия;
- при подготовке к экзамену следует проработать вопросы, приведенные в соответствующем разделе УМК.
Рекомендации по работе с литературой
В библиотеке имеется достаточное количество экземпляров учебно-методической литературы. При работе с литературой рекомендуется:
- постоянно проверять свои знания, отвечая на контрольные вопросы, приведенные в конце каждого раздела. Последовательность подачи материала соответствует рекомендациям учебной программы;
- для успешного выполнения лабораторных работ следует взять в библиотеке или на кафедре методические указания. Перед каждым занятием следует проработать соответствующий материал, как лабораторного практикума, так и лекционный материал (смотри соответствующий раздел рабочей программы и УМК).
Советы по подготовке к экзамену
- для успешной сдачи экзамена необходимо иметь конспект лекций. Подготовка по учебному пособию, где материал дан в значительно большем объеме потребует от студента значительных временных и физических затрат, которых в экзаменационную сессию всегда не хватает. Учебные пособия следует использовать в качестве консультанта по неясным вопросам.
Учебно – методический комплекс подготовлен профессором кафедры ПМиВТ, д. т.н. .
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


