- •Лабораторные работы по курсу «Инструментальные средства визуального программирования»
- •1. Программирование односвязного списка
- •1.1.Задание
- •1.2.Описание вариантов заданий
- •2.Перегрузка векторных и матричных операций
- •2.1.Задание
- •2.2.Бесценные методические указания
- •2.3.Некоторые особенности перегрузки операций
- •3.Классная работа
- •3.1.Постановка задачи
- •2.4.Варианты заданий
- •3.2.Задания
- •3.3.Методические наказания к первой части работы
- •3.4.Методические наказания ко второй части работы
- •4.Алгоритмы
- •Задание
- •Варианты классов и их обработки
- •5.Приложение WinForms (cli)
- •5.1.Задание
- •5.2.Бесценные методические предписания
- •Int nRec;//Число записей файла, оно же будет числом элементов массивов
- •6.Графика в WinForms (cli)
- •6.1.Задание
- •6.2.Бесценные методические предписания
- •6.3.Индивидуальные задания
- •7.1.Задание
- •7.2.Бесценные методические наставления
- •8.Квикли файдингуем рутсы
- •8.1.Дармовые методические рекомендации
- •8.2.Задание
- •Варианты индивидуальных заданий
- •9.Приложение, основанное на модальном диалоговом окне
- •9.1.Нудные методические указания Модальные и немодальные диалоговые окна
- •Ресурсы и элементы управления
- •Сценарий создания приложения
- •Разбор приложения
- •Усовершенствование приложения
- •10.Разработка графического редактора
- •Задание.
- •10.1.Проектирование программы
- •10.2.Разработка интерфейса
- •Установка флагов
- •Создание меню и панели инструментов
- •Обработка сообщений о нажатии кнопки мыши
- •10.3.Рисование
- •10.4.Растягивание фигур
- •10.5.Обновление изображения
- •10.6.Сохранение метафайла на диске и его загрузка
- •Список ссылок
- •Работы, выполненные в осеннем семестре 2016/2017 по курсу ооп
2.4.Варианты заданий
В приведенных ниже вариантах заданий под векторами подразумеваются одномерные массивы, а под матрицами – двумерные.
Значения элементов векторов и матриц должны иметь вещественный тип; их необходимо генерировать с помощью датчика псевдослучайных чисел из заданного пользователем диапазона.
Выбор варианта задания согласуйте с преподавателем.
Таблица 1
Варианты заданий
Вариант |
Задание |
1 |
Реализовать операции сложения и вычитания двух прямоугольных матриц одинакового размера |
2 |
Реализовать операцию транспонирования прямоугольной матрицы. Например, если для этой операции выбрать знак ~, то программа должна позволять вычислять выражения вроде A=~B. Понятно, что если матрица А имеет размер 3х4, то матрица В должна иметь размер 4х3 |
3 |
Реализовать операцию умножения двух прямоугольных матриц. Две матрицы можно перемножить, если число столбцов первой матрицы равно числу строк второй. Например, если первая матрица имеет размер 3х4, а вторая 4х2, то получим результирующую матрицу 3х2 |
4 |
Реализовать операцию умножения матрицы на заданную величину, а также сложения матрицы с заданной величиной |
5 |
Реализовать операцию умножения матрицы на вектор. Например, если имеется матрица размером 3х4 и вектор размером 4, то в результате должен получиться вектор размером 3. Матрица и вектор должны быть реализованы как разные классы |
6 |
Реализовать операции сложения и умножения векторов, для чего необходимо разработать два разных класса: один с данными вещественного типа, а другой – целого |
7 |
Реализовать операцию прямого (внешнего) произведения двух прямоугольных матриц одинакового размера С=А*В. Элементы матрицы С являются произведением соответствующих элементов матриц А и В: С[i][j]=A [i][j]*B[i][j] |
8 |
Реализовать операцию нормирования вектора путем приведения его значений к диапазону от -1 до +1 |
9 |
Реализовать операцию умножения матрицы на вектор. Например, если имеется матрица размером 3х4 и вектор размером 4, то в результате должен получиться вектор размером 3 |
10 |
Реализовать операции вычитания и деления векторов и проиллюстрировать возможность вычисления выражений вроде a=(b-c)/d, где a, b, c и d – векторы |
11 |
Реализовать операции сложения и вычитания двух треугольных матриц одинакового размера |
3.Классная работа
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете
Martin Golding
Цель работы – работа! (4+4 час.). Работа состоит из двух частей, каждая из которых должна быть сдана отдельно!
3.1.Постановка задачи
Шаг 1. Сгенерируйте приложение SDI.
Из меню File в Visual C++ выберите New Project, в дереве Project Types выберите MFC, а в Templates – MFC Application. Не устанавливайте переключатель “Create directory for solution”. Присвойте проекту имя (в данном примере выбрано имя Gen) и щелкните ОК (рис. 1). В списке Resource language не забудьте выбрать элемент со значением Русский.
|
Рис.1. Выбор мастера для создания каркаса приложения
Среда MVS 2010 выведет следующее окно (рис. 2), в правой части которого перечислены заданные по умолчанию свойства проекта. Значения всех свойств проекта установите такими, как они выбраны на рис. 2.
|
Рис. 2. Тип приложения
На вкладках Compound Document Support, Document Template Properties и Database Support оставьте все без изменений, а на вкладке User Interface Features выберите радиокнопку Use a classic menu и Use a classic docking toolbar (рис. 3).
|
Рис. 3. Свойства пользовательского интерфейса
На вкладке Advanced Features рекомендую снять все переключатели, а на вкладке Generated Classes в качестве базового класса вида выберите обязательно CFormView.
Щелкните кнопку Finish для того, чтобы завершить создание приложения.
Шаг 2. Доработайте и тестируйте полученное приложение.
Запустите приложение на выполнение с помощью команды F5, чтобы убедиться в том, что приложение – пока вы не начали его усовершенствовать – еще работоспособно.
Найдите в проекте файл, в котором описана функция InitInstance(), и вставьте перед оператором m_pMainWnd->ShowWindow(SW_SHOW); приведенный ниже код, который позволяет несколько украсить свое приложение и придать ему некоторую неповторимость.
|
Опять запустите приложение на выполнение – работает?!
Шаг 3. Добавим в проект класс. С помощью команды меню ProjectAdd Class добавьте в проект обычный С++ класс. Например, если мы дадим классу имя CFoo, то получим два файла с таким содержимым:
-
файл Foo.h
#pragma once
class CFoo
{
public:
CFoo(void);
~CFoo(void);
};
файл Foo.cpp
#include "StdAfx.h"
#include "Foo.h"
CFoo::CFoo(void)
{
}
CFoo::~CFoo(void)
{
}
Далее вызовем окно ClassView (Ctrl+Shift+C), выберем в нем класс CFoo, вызовем для него контекстное меню и обнаружим там, в частности, команды AddAdd Function и AddAdd Variable. Нашли? Пользуясь этими командами, можно довести наш класс до такого, например, вида:
-
файл Foo.h
#pragma once
// Этот замечательный класс предназначен для моделирования
// поведения чупакабры
class CFoo
{
public:
CFoo(void);
~CFoo(void);
// SmartMethod возвращает значение true, если чупакабра с именем
// Name съела не меньше Count собак
virtual bool SmartMethod(int Count, char * Name);
private:
// вес чупакабры до ужина [кг]
double m_dWeight;
};
файл Foo.cpp
#include "StdAfx.h"
#include "Foo.h"
CFoo::CFoo(void)
: m_dWeight(0)
{
}
CFoo::~CFoo(void)
{
}
// SmartMethod возвращает значение true, если чупакабра
// с именем Name съела не меньше Count собак
bool CFoo::SmartMethod(int Count, char * Name)
{
return false;
}
Хочу обратить ваше внимание на следующие возможности мастеров ИС:
при добавлении переменной можно указать в комментарии ее назначение и спецификатор доступа. Кроме того, мастер добавляет инициализацию этой переменной в конструктор класса;
при добавлении функции можно указать произвольное число параметров (потренируйтесь!). Мастер генерирует не только прототип функции, но и ее «реализацию», причем при нужде добавляется и оператор return.
Как видно из приведенного примера, мастера ИС выполняют за программиста черновую работу, причем, заметьте, и даром, и безошибочно! Но, конечно, ничто не совершенно в этом мире и вам предоставляется счастливый случай исправить эти недостатки мастеров ИС.
