Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Подготовка курсовой работы к защите 1 страница




Последовательность выполнения курсовой работы

Календарный план выполнения работы

На выполнение работы отводится 5 лабораторных занятий (10 часов) и 30 часов самостоятельной работы. На занятии предполагается отчет по самостоятельной работе студента и обсуждение хода работы с преподавателем.

Содержание выполняемой работы Кол-во часов
Анализ предметной области задачи и выбор методов решения  
Написание кода приложения  
Отладка приложения на компьютере  
Сдача пояснительной записки на проверку  
Защита курсовой работы  
ИТОГО  

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

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

Последовательность выполнения включает следующие этапы:

· уточнение задания с преподавателем;

· анализ возможных методов решения поставленных в задании задач;

· разработка блок-схем основных процедур;

· разработка интерфейса приложения;

· написание кода приложения;

· отладка и тестирование приложения;

· анализ полученных результатов и выводы по работе;

· оформление пояснительной записки.

Для выполнения курсовой работы рекомендуется использовать одну из следующих сред разработки (по выбору студента): Visual C++6.0, Visual C++2005, Visual C++2008.

Оформленная курсовая работа представляется студентом преподавателю для просмотра в соответствии с учебным планом за 2-3 дня до защиты.

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

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

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


Варианты заданий для курсовой работы

Тема 1. Разработка приложения по поддержке набора данных на основе файла с использованием функций Win 32 API по управлению им.

Содержание задания.

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

Для операций с файлом использовать функции управления файлами Win 32 API. Удаляемые записи должны помечаться как удаленные, само же удаление записей с дефрагментацией файла должно производиться в отдельном фоновом потоке с низким приоритетом. Для синхронизации его с главным потоком использовать критическую секцию.

Поля данных: Наименование товара (20 символов), Цена, Количество, Дата (поступления на склад).

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

Содержание задания.

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

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

Поля данных: Преподаватель (30 символов), Дисциплина (20 символов), Факультет (20 символов), Группа (10 символов), Число студентов, Дата экзамена.

Тема 3. Разработка приложения по поддержке набора данных на основе двухстороннего связного списка, хранимого в файле.

Содержание задания.

Разработать приложение по поддержке набора данных с использованием двустороннего связного списка. Связный список реализовать с использованием семейства функций HeapXXX() Win 32 API по работе с динамически распределяемой памятью (кучей). Должны поддерживаться следующие функции: добавление записи, изменение записи, удаление записи, навигация по записям (вперед, назад, выбор записи с заданным номером). Разработайте необходимый пользовательский интерфейс по работе с набором данных (поля ввода с подписями названий полей, кнопки для выполнения команд управления, метка с отображением полного количества записей и т.д.).

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

Набор данных должен записываться в файл перед закрытием приложения. Предусмотреть возможность загрузки набора данных из этого файла после открытия приложения. Для операций с файлом использовать функции управления файлами Win 32 API.

Поля данных: Студент (20 символов), Факультет (10 символов), Курс, Группа (8 символов), Дата рождения, Дата поступления.

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

Содержание задания.

Разработать приложение, подсчитывающее число символов, слов и строк в любом текстовом ANSI файле. Один рабочий поток должен считывать выбранный в диалоговом окне текстовый файл, загружая последовательно его содержимое в буфер размером в 1024 символа. Три других потока после очередной загрузки буфера должны подсчитывать, соответственно, число символов, число слов и число строк. Поток, подсчитывающий число строк в файле, должен также отображать окно содержимого файла в 15 строк в окне приложения (используйте многострочное поле ввода). Синхронизацию потоков осуществите с помощью событий со сбросом вручную. Подсчитываемые количества символов, слов и строк должны отображаться в окне программы по мере обработки буфера. Для операций с файлом использовать функции управления файлами Win 32 API. В потоки введите необходимые временные задержки. Предусмотрите в интерфейсе приложения поля ввода для задания этих временных задержек. Необходимый текстовый файл для тестирования и демонстрации работы программы можно создать в редакторе Edit, запускаемого в интерфейсе командной строки, или редакторе WordPad с выбором MS DOS формата файла.

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

Содержание задания.

Создать приложение по следующему описанию. Периодически случайным образом с некоторым интервалом, задаваемым в соответствующем поле ввода окна приложения, генерируются потоки, имитирующие создание заказов на покупку товаров из следующего списка: пылесос (цена 3000 р.), холодильник (цена 8000 р.), телевизор (цена 7000 р.). Заказ включает в себя следующие реквизиты: товар, количество (шт.) Реквизиты заказа генерируются случайным образом. Реквизит количество должно быть в интервале от 1 до 10. Заказы образуют очередь (первый пришел – первый обслужен) в количестве p. Каждый заказчик ждет входа в очередь некоторое конечное время, задаваемое в поле ввода окна приложения, после чего уходит, что соответствует уничтожению потока (не забудьте при создании этих потоков закрывать их дескрипторы во избежание утечки памяти). Заказчиков обслуживают потоки – продавцы в количестве n. Каждый товар у потоков продавцов (у них общий склад) имеется в определенном количестве и периодически пополняется отдельным потоком в количестве, вводимом в соответствующие поля ввода, и с интервалом, вводимом в соответствующее поле ввода приложения. Потоки продавцы обслуживают заказ только в том случае, если товар имеется на складе в нужном количестве. В окне программы необходимо отображать количество каждого товара и сумму выручки у каждого продавца, а также общее количество обслуженных заказчиков и не дождавшихся своей очереди. Необходимо вести также журнал заказов, в который записывается информация о поступающих заказах. Формат файла – текстовый. Синхронизацию потоков заказчиков и потоков продавцов выполнить с помощью семафоров, для остальных объект синхронизации выбрать самостоятельно. Предусмотреть время обслуживания, по истечении которого поступление новых заказов прекращается. Величина этого времени должна задаваться в соответствующем поле ввода окна приложения. Для операций с файлом использовать функции управления файлами Win 32 API. Предусмотреть в окне приложения поля для ввода значений p (максимальный размер очереди) и n (число продавцов).

Тема 6. Разработка двух приложений, взаимодействующих между собой на основе сообщений.

Содержание задания.

Создайте приложения A и B (имена дайте сами), взаимодействующие между собой посредством посылки друг другу сообщений. Приложение B по полученным в сообщении (использовать сообщение WM_COPYDATA) от приложения A первому члену a1, разности d и числу членов n рассчитывает n-й член и сумму Sn первых n членов арифметической прогрессии и отправляет результат приложению A. В окне приложения B должны отображаться полученные от приложения A параметры арифметической прогрессии a1, d и n. В окне приложения A должны отображаться принятые от приложения B результаты bn и Sn. Приложение B должно вести протокол получаемых запросов и выданных на них ответов в текстовом файле. Каждая строка файла имеет вид типа: “Первый член =1, разность = 2, n = 3, последний член = 4, сумма = 7». Для операций с файлом использовать функции управления файлами Win 32 API. Интерфейс приложения A должен быть построен на основе диалогового окна. Файл для ведения протокола должен задаваться в поле ввода окна приложения B. Вычисления в приложении B должны выполняться в отдельном рабочем потоке. Интерфейс приложения B построить на основе окна приложения общего вида. При запуске одного из приложений второе приложение должно запускаться автоматически, если оба файлы обоих приложений расположены в одном каталоге. При закрытии одного из приложений второе приложение должно закрываться автоматически, если оба файлы обоих приложений расположены в одном каталоге. В противном случае приложения запускаются и останавливаются порознь.

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

Содержание задания.

Создайте приложения A и B (имена дайте сами), взаимодействующие между собой посредством проецируемого в память файла и посылки друг другу пользовательских сообщений. Сообщения (использовать сообщения, определенные пользователем) лишь служат для информирования приложений о подготовленности для них данных. Сами данные передаются через проецируемый в память файл. Приложение B по полученным в сообщении от приложения A первому члену b1, разности q и числу членов n рассчитывает n-й член и сумму Sn первых n членов геометрической прогрессии и отправляет результат приложению A. В окне приложения B должны отображаться полученные от приложения A параметры геометрической прогрессии b1, q и n. В окне приложения A должны отображаться принятые от приложения B результаты bn и Sn. Приложение B должно вести протокол получаемых запросов и выданных на них ответов в текстовом файле. Каждая строка файла имеет вид типа: “Первый член =1, знаменатель = 2, n = 3, последний член = 5, сумма = 9». Для операций с файлом протокола использовать функции управления файлами Win 32 API. Интерфейс приложения A должен быть построен на основе диалогового окна. Файл для ведения протокола должен задаваться в поле ввода окна приложения B. Вычисления в приложении B должны выполняться в отдельном рабочем потоке. Интерфейс приложения B построить на основе окна приложения общего вида. При запуске одного из приложений второе приложение должно запускаться автоматически, если оба файлы обоих приложений расположены в одном каталоге. При закрытии одного из приложений второе приложение должно закрываться автоматически, если оба файлы обоих приложений расположены в одном каталоге. В противном случае приложения запускаются и останавливаются порознь.

Тема 8. Разработка двух приложений, взаимодействующих между собой на основе буфера обмена.

Содержание задания.

Создайте приложения A и B (имена дайте сами), взаимодействующие между собой посредством буфера обмена и посылки друг другу пользовательских сообщений. Сообщения (использовать сообщения, определенные пользователем) лишь служат для информирования приложений о подготовленности для них данных. Сами данные передаются через буфер обмена. Приложение B по полученным в сообщении от приложения A координатам a x, a y, a z вектора и координатам b x, b y, b z вектора рассчитывает скалярное произведение и угол j между векторами и и отправляет результат приложению A. В окне приложения B должны отображаться полученные от приложения A координаты a x, a y, a z вектора и координаты b x, b y, b z вектора . В окне приложения A должны отображаться принятые от приложения B результаты и угол j. Приложение B должно вести протокол получаемых запросов и выданных на них ответов в текстовом файле. Каждая строка файла имеет вид типа: “Координаты первого вектора = (1, 2, -1); координаты второго вектора = (2, 1, 4), скалярное произведение = 0, угол = 90 градусов». Для операций с файлом протокола использовать функции управления файлами Win 32 API. Интерфейс приложения A должен быть построен на основе диалогового окна. Файл для ведения протокола должен задаваться в поле ввода окна приложения B. Вычисления в приложении B должны выполняться в отдельном рабочем потоке. Интерфейс приложения B построить на основе окна приложения общего вида. При запуске одного из приложений второе приложение должно запускаться автоматически, если оба файлы обоих приложений расположены в одном каталоге. При закрытии одного из приложений второе приложение должно закрываться автоматически, если оба файлы обоих приложений расположены в одном каталоге. В противном случае приложения запускаются и останавливаются порознь.

Тема 9. Разработка многопоточного приложения, демонстрирующего распараллеливание вычислений на примере расчета произведения матриц произвольных размерностей m × n и n × k и использующего механизм управления памятью на основе виртуальной памяти.

Содержание задания.

Разработайте многопоточное приложение, выполняющее вычисление произведения матриц A (m × n) и B (n × k). Элементы cij матрицы произведения С = A×B вычисляются параллельно p однотипными потоками. Если некоторый поток уже вычисляет элемент cij матрицы C, то следующий приступающий к вычислению поток выбирает для расчета элемент cij+1, если j<k, и ci+1k, если j=k. Выполнив вычисление элемента матрицы-произведения, поток проверяет, нет ли элемента, который еще не рассчитывается. Если такой элемент есть, то приступает к его расчету. В противном случае отправляет (пользовательское) сообщение о завершении своей работы и приостанавливает своё выполнение. Главный поток, получив сообщения о завершении вычислений от всех потоков, выводит результат на экран и запускает поток, записывающий результат в конец файла-протокола. В каждом потоке должна быть задержка в выполнении вычислений (чтобы дать возможность поработать всем потокам). Синхронизацию потоков между собой организуйте через критическую секцию, мьютекс или событие с автоматическим сбросом. Для хранения перемножаемых матриц и матрицы-результата перемножения используйте функции семейства Win 32 API VitrualXXX() для управления виртуальной памятью. Разработайте необходимый пользовательский интерфейс для ввода размерностей перемножаемых матриц M, N и K, и их элементов; запуска расчета, задания количества вычисляющих потоков, вывода матрицы-произведения. Для ускорения ввода предусмотрите возможность не заполнять нулевые элементы (не заполненные элементы матриц должны сами инициализироваться нулями). Например, для ввода каждой матрицы предусмотрите три поля ввода: номер строки, номер столбца, элемент матрицы (на пересечении этой строки и этого столбца); и кнопку для команды ввода элемента в матрицу. Для вывода результата предусмотрите использование прокруток по строкам и столбцам матрицы-результата с окном вывода 10×10. Разработайте файл протокола, в который должна записываться следующая информация: размерности перемножаемых матриц, их элементы, элементы результата, а также информацию о том, каким потоком (номером) вычислен данный элемент матрицы. В пользовательском интерфейсе предусмотрите кнопку для вызова диалогового окна для выбора файла протокола.

Тема 10. Разработка многопоточного приложения, демонстрирующего распараллеливание вычислений на примере расчета произведения матриц произвольных размерностей m × n и n × k и использующего механизм управления памятью на основе проецируемого в память файла.

Содержание задания.

Разработайте многопоточное приложение, выполняющее вычисление произведения матриц A (m × n) и B (n × k). Элементы cij матрицы произведения С = A×B вычисляются параллельно p однотипными потоками. Если некоторый поток уже вычисляет элемент cij матрицы C, то следующий приступающий к вычислению поток выбирает для расчета элемент cij+1, если j<k, и ci+1k, если j=k. Выполнив вычисление элемента матрицы-произведения, поток проверяет, нет ли элемента, который еще не рассчитывается. Если такой элемент есть, то приступает к его расчету. В противном случае отправляет (пользовательское) сообщение о завершении своей работы и приостанавливает своё выполнение. Главный поток, получив сообщения о завершении вычислений от всех потоков, выводит результат на экран и запускает поток, записывающий результат в конец файла-протокола. В каждом потоке должна быть задержка в выполнении вычислений (чтобы дать возможность поработать всем потокам). Синхронизацию потоков между собой организуйте через критическую секцию или мьютекс. Для хранения перемножаемых матриц и матрицы-результата перемножения используйте функции семейства Win 32 API для управления проецируемыми в память файлами. Разработайте необходимый пользовательский интерфейс для ввода размерностей перемножаемых матриц M, N и K, и их элементов; запуска расчета, задания количества вычисляющих потоков, вывода матрицы-произведения. Для ускорения ввода предусмотрите возможность не заполнять нулевые элементы (не заполненные элементы матриц должны сами инициализироваться нулями). Например, для ввода каждой матрицы предусмотрите три поля ввода: номер строки, номер столбца, элемент матрицы (на пересечении этой строки и этого столбца); и кнопку для команды ввода элемента в матрицу. Для вывода результата предусмотрите использование прокруток по строкам и столбцам матрицы-результата с окном вывода 10×10. Разработайте файл протокола, в который должна записываться следующая информация: размерности перемножаемых матриц, их элементы, элементы результата, а также информацию о том, каким потоком (номером) вычислен данный элемент матрицы. В пользовательском интерфейсе предусмотрите кнопку для вызова диалогового окна для выбора файла протокола.

Тема 11. Разработка многопоточного приложения, демонстрирующего распараллеливание вычислений на примере расчета произведения матриц произвольных размерностей m × n и n × k и использующего механизм управления динамически распределяемой памятью.

Содержание задания.

Разработайте многопоточное приложение, выполняющее вычисление произведения матриц A (m × n) и B (n × k). Элементы cij матрицы произведения С = A×B вычисляются параллельно p однотипными потоками. Если некоторый поток уже вычисляет элемент cij матрицы C, то следующий приступающий к вычислению поток выбирает для расчета элемент cij+1, если j<k, и ci+1k, если j=k. Выполнив вычисление элемента матрицы-произведения, поток проверяет, нет ли элемента, который еще не рассчитывается. Если такой элемент есть, то приступает к его расчету. В противном случае отправляет (пользовательское) сообщение о завершении своей работы и приостанавливает своё выполнение. Главный поток, получив сообщения о завершении вычислений от всех потоков, выводит результат на экран и запускает поток, записывающий результат в конец файла-протокола. В каждом потоке должна быть задержка в выполнении вычислений (чтобы дать возможность поработать всем потокам). Синхронизацию потоков между собой организуйте через критическую секцию или мьютекс. Для хранения перемножаемых матриц и матрицы-результата перемножения используйте функции семейства Win 32 API HeapXXX() для управления динамически распределяемой памятью. Разработайте необходимый пользовательский интерфейс для ввода размерностей перемножаемых матриц M, N и K, и их элементов; запуска расчета, задания количества вычисляющих потоков, вывода матрицы-произведения. Для ускорения ввода предусмотрите возможность не заполнять нулевые элементы (не заполненные элементы матриц должны сами инициализироваться нулями). Например, для ввода каждой матрицы предусмотрите три поля ввода: номер строки, номер столбца, элемент матрицы (на пересечении этой строки и этого столбца); и кнопку для команды ввода элемента в матрицу. Для вывода результата предусмотрите использование прокруток по строкам и столбцам матрицы-результата с окном вывода 10×10. Разработайте файл протокола, в который должна записываться следующая информация: размерности перемножаемых матриц, их элементы, элементы результата, а также информацию о том, каким потоком (номером) вычислен данный элемент матрицы. В пользовательском интерфейсе предусмотрите кнопку для вызова диалогового окна для выбора файла протокола.

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

Содержание задания.

Разработайте многопоточное приложение, выполняющее вычисление нормы вектора a. Каждый из p потоков вычисляет частичную сумму квадратов компонент вектора: от некоторого элемента a i до a i+k-1 (k последовательных элемента). Параметры k и p должны быть варьируемыми (предусмотреть поля ввода для них в диалоговом окне приложения). Если некоторый поток уже вычисляет сумму квадратов элементов от a i до a i+k-1, то следующий приступающий к вычислению поток выбирает для расчета последовательность элементов от a i+k до a i+2k-1. Выполнив вычисление частичной суммы квадратов компонентов вектора a, поток проверяет, нет ли последовательности элементов в количестве не более k, сумма квадратов которой еще не вычислялась. Если такая последовательность есть, то приступает к суммированию квадратов ее элементов. В противном случае приостанавливает своё выполнение. Суммирование частичных сумм выполняется путем их накопления (сложения) в глобальной переменной, первоначально инициализированной нулевым значением, самими потоками. Вычислительный поток после завершения работы отправляет (пользовательское) сообщение главному потоку. Главный поток, получив сообщения о завершении вычислений всеми потоками, извлекает квадратный корень из результата суммирования и выводит результат на экран и запускает поток, записывающий результат в конец файла-протокола. В каждом потоке должна быть задержка в выполнении вычислений (чтобы дать возможность поработать всем потокам). Синхронизацию потоков между собой для выбора суммируемой подпоследовательности компонент вектора и доступа к накапливающей сумму квадратов компонент вектора переменной организуйте через критические секции, мьютексы или события с автоматическим сбросом (в любой комбинации). Для хранения компонент вектора используйте функции семейства Win 32 API VitrualXXX() для управления виртуальной памятью. Разработайте необходимый пользовательский интерфейс для ввода размерности вектора N и значений его компонент, запуска расчета, задания количества вычисляющих частичные суммы потоков, задания количества суммируемых квадратов элементов одним потоком, вывода нормы вектора. Для ускорения ввода предусмотрите возможность не заполнять нулевые компоненты вектора (не заполненные компоненты вектора должны сами инициализироваться нулями). Например, для ввода вектора предусмотрите два поля ввода: номер компоненты, значение компоненты; и кнопку для команды задания компоненты вектора. Разработайте файл протокола, в который должна записываться следующая информация: размерность вектора, его компоненты, результат (норма), а также информацию о том, каким потоком (номером) и какая подпоследовательность элементов просуммирована (задать ее номером первого элемента). В пользовательском интерфейсе предусмотрите кнопку для вызова диалогового окна для выбора файла протокола.

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

Содержание задания.

Разработайте многопоточное приложение, выполняющее вычисление нормы вектора a. Каждый из p потоков вычисляет частичную сумму квадратов компонент вектора: от некоторого элемента a i до a i+k-1 (k последовательных элемента). Параметры k и p должны быть варьируемыми (предусмотреть поля ввода для них в диалоговом окне приложения). Если некоторый поток уже вычисляет сумму квадратов элементов от a i до a i+k-1, то следующий приступающий к вычислению поток выбирает для расчета последовательность элементов от a i+k до a i+2k-1. Выполнив вычисление частичной суммы квадратов компонентов вектора a, поток проверяет, нет ли последовательности элементов в количестве не более k, сумма квадратов которой еще не вычислялась. Если такая последовательность есть, то приступает к суммированию квадратов ее элементов. В противном случае приостанавливает своё выполнение. Суммирование частичных сумм выполняется путем их накопления (сложения) в глобальной переменной, первоначально инициализированной нулевым значением, самими потоками. Вычислительный поток после завершения работы отправляет (пользовательское) сообщение главному потоку. Главный поток, получив сообщения о завершении вычислений всеми потоками, извлекает квадратный корень из результата суммирования и выводит результат на экран и запускает поток, записывающий результат в конец файла-протокола. В каждом потоке должна быть задержка в выполнении вычислений (чтобы дать возможность поработать всем потокам). Синхронизацию потоков между собой для выбора суммируемой подпоследовательности компонент вектора и доступа к накапливающей сумму квадратов компонент вектора переменной организуйте через критические секции, мьютексы или события с автоматическим сбросом (в любой комбинации). Для хранения компонент вектора используйте функции семейства Win 32 API для управления проецируемыми в память файлами. Разработайте необходимый пользовательский интерфейс для ввода размерности вектора N и значений его компонент, запуска расчета, задания количества вычисляющих частичные суммы потоков, задания количества суммируемых квадратов элементов одним потоком, вывода нормы вектора. Для ускорения ввода предусмотрите возможность не заполнять нулевые компоненты вектора (не заполненные компоненты вектора должны сами инициализироваться нулями). Например, для ввода вектора предусмотрите два поля ввода: номер компоненты, значение компоненты; и кнопку для команды задания компоненты вектора. Разработайте файл протокола, в который должна записываться следующая информация: размерность вектора, его компоненты, результат (норма), а также информацию о том, каким потоком (номером) и какая подпоследовательность элементов просуммирована (задать ее номером первого элемента). В пользовательском интерфейсе предусмотрите кнопку для вызова диалогового окна для выбора файла протокола.




Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 362; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.