|
Программа для генерации примеров для контрольных работ по арифметике. На экране настройки необходимо ввести следующие опции
Книжный магазин
Магазин промышленных товаров
Склад
Центр заказов
Почтовая служба, включая службу доставки
Почтовое отделение
Управление персоналом в компании (отдел кадров)
Управление компанией (заводом)
Центр междугородних (международных) переговоров
Аэропорт
Железнодорожный вокзал
Управление железной дорогой
Сортировочная станция
Автострада
Автовокзал
Автотранспортные услуги
Экосистема
Факультет вуза
Школа
Спортивный клуб (организация и управление)
Салон Красоты
Компьютерная игра
Библиотека
Банк
Процесс обучения некоторому предмету (организация и управление)
Система тестирования знаний
Варианты курсовых проектов
1. Генератор арифметических примеров
Программа для генерации примеров для контрольных работ по
арифметике. На экране настройки необходимо ввести следующие опции: Количество примеров: [ 1]
Количество действий: [ 5]
Диапазон исп. чисел: [-1000]..[1000] (в т.ч. промежуточные результаты!)
Допустимые арифметические действия
[X] 2+2
[X] 2-2
[X] 2*2
[X] 2:2
[X] -(-2) (смена знака) Имя файла для вывода: [kontr1.txt] Здесь [X]- флажки (checkbox); [...] - поля ввода.
Сгенерированные примеры вместе с ответами вывести в указанный файл,
разделяя пустой строкой в виде: 4 : (1 + 1) =
Ответ: 2
2 + 3 =
Ответ: 5
Перед и после знака арифметического действия выводить 1 пробел.
Генерацию можно производить следующим образом: Задать случайным образом результат в ук. диапазоне. 1. Выбрать арифметическое действие
2. Выбрать число в ук. диапазоне (это 1 операнд)
3. Рассчитать 2 операнд. Если 2 операнд вне диапазона к шагу 1.
4. Выбрать N (0..общЧислоДействий-1) - число действий
для разложенния 1-го операнда, а число действий для разложения
2-го операнда M=общЧислоДействий-N-1
5. Если N>0 разложить 1 операнд с пом. рек. применения этого алгоритма.
6. Если M>0 разложить 2 операнд с пом. рек. применения этого алгоритма. Вывести пример
1. Узнать ширину примера
2. Создать строку необходимого размера
3. Вывести пример в строку
4. Вывести строку
5. Вывести ответ Для представления примера можно использовать след. класс:
конструктор(целое число)
конструктор(&левая часть, действие, &правая часть)
ширина (вычисляется рекурсивно)
действие
приоритет действия (для скобок)
вывод в массив строк(char*)
(размеры массива определяются шириной)
2. Текстовый редактор
Написать класс-редактор текста с возможностями NCEDIT
(без использования меню, все управление с клавиатуры).
Возможности редактора: перемещение по тексту; режим вставки и
замены; удаление и вставка символов и строк; выделение строк.
Оформить редактор в виде класса:
конструктор(x1,y1,x2,y2,цвет текста=0x7,цвет выделения=0x70)
выполнять редактирование()
разрешить/запретить изменения(bool) // режим просмотра/редактирования
количество строк()
номер текущей строки() // нумерация с 0
номер текущего символа в строке()
перейти на строку, символ(r, c=0)
считать строку(r=-1) r - номер строки, если -1, то текущую
заменить строку(char *, r=-1)
удалить строку(r=-1)
добавить строку(char *, r=-1)
добавить символы(char *) в текущее местоположение курсора
удалить символы(int=1) начиная с текущего
выделить строки(n1,n2) c n1-й по n2-ю,
если оба аргумента = -1, убрать выделение
установить обработчик нераспознанных клавиш((*f)(int))
например, функциональные клавиши, Ctrl-, Alt- и т.п.
для клавиш F5 и F6 выполнять копирование и перемещение
блока текста Для вывода на экран использовать функции из conio.h. Рисование
рамок, работа с окнами в этот класс не должны входить (и в данной
работе не нужны).
В качестве примера сделать программу-редактор для вызова из
командной строки:
edit text.txt
Добавить подсказку по функциональным клавишам (не в классе) как
в NCEDIT: F1-помощь F2-сохранить F10-выход и т.п. Помощь загружать
из файла, используя новый созданный объект-редактор в режиме
просмотра.
3. Редактор для кодирования программы методом "сверху-вниз"
Написать редактор для кодирования программы методом "сверху-
вниз". Этот метод заключается в следующем:
Пишется программа на языке сверхвысокого уровня (естественном
языке). Затем каждый оператор такой программы постепенно
расшифровывается, заменяется алгоритмом на более простом языке,
пока программа не окажется записанной на каком-либо языке
программирования.
Например, программу решения квадратного уравнения можно
написать так:
* ОБЬЯВИТЬ ПЕРЕМЕННЫЕ
* ВВЕСТИ КОЭФФИЦИЕНТЫ УРАВНЕНИЯ
* ВЫЧИСЛИТЬ
* ВЫВЕСТИ КОРНИ УРАВНЕНИЯ Затем провалиться в оператор 2 и ввести его определение:
ВВЕСТИ КОЭФФИЦИЕНТЫ УРАВНЕНИЯ
printf("Введите коэф. уравнения a, b и c:");
scanf(&a,&b,&c); Также можно определить оператор 3:
ВЫЧИСЛИТЬ
* ВЫЧИСЛИТЬ d
if(d>=0)
* ВЫЧИСЛИТЬ КОРНИ УРАВНЕНИЯ
else
* КОРНЕЙ НЕТ Таким образом, должна существовать возможность вставить как
обычный оператор языка программирования, так и оператор, который в
дальнейшем будет расшифровываться (в который можно провалиться для
расшифровки). Вложенность может быть достаточно большой.
Первым символом в строке с оператором суперязыка стоит признак
расшифрован оператор или нет (* или !). Рекомендуется следующий формат файла для хранения программы:
*РАСШИФРОВАННЫЙ ОПЕРАТОР
!НЕРАСШИФРОВАННЫЙ ОПЕРАТОР
[пробел]оператор на языке программирования
# (конец расшифровки оператора) Возможности редактора:
Перемещение по тексту (в т.ч. вглубь)
Изменение строки, удаление строки, вставка новой строки,
Размеры строки можно ограничить 75-80 символов.
4. Растровый графический редактор
Разработать упрощенный графический редактор Paint cо следующими
возможностями:
- рисование точек (свободное рисование)
- рисование линий
- рисование прямоугольников (заполненных и нет)
- выбор цветов рисования и заполнения из 16 или более
- чтение и запись рисунка в стандартном (.BMP,.PCX,.JPG) или собственном
формате
При движении мыши высвечивать координаты и размеры.
Примерный формат экрана:
Развитие темы: добавить копирование и поворот части рисунка, при
создании задание размеров рисунка, скроллирование рисунка.
5. Векторный графический редактор
Разработать упрощенный графический редактор Corel Draw v0.0 cо
следующими возможностями:
- рисование линий
- рисование прямоугольников (заполненных и нет)
- выбор цветов рисования и заполнения из 16 или более
- чтение и запись рисунка в собственном формате
- удаление объектов
При движении мыши высвечивать координаты и размеры вставляемого объекта.
Примерный формат экрана:
Развитие темы: добавить выделение, перемещение и копирование
объектов, изменение размеров и др. свойств.
6. Редактор электрических схем
Написать программу для редактирования электрических схем. Схема
составляется из набора конфигурируемых элементов. Элементы можно
поворачивать, соединять проводами.
В файле конфигурации содержится список имен файлов с элементами
(от 8 до 20), что позволяет настраиваться на конкретную предметную
область. Файл с элементом содержит следующую информацию:
LAMP.ELM:
LAMP.ICO // имя картинки с элементом для кнопки
21 21 // размеры элемента
С 10 10 10 0 15 // составляющие элемента -
окружность с центром (10,10) радиусом 10,
незаполненная, цвет белый
L 3 3 17 17 15 // линии крест-накрест, цвет белый
L 17 3 3 17 15
I 0 10 // точки подключения проводов
I 20 10 Допустимы след. команды для рисования элемента:
B - прямоугольник
A - дуга Редактор позволяет вставить в схему любой из указанных в схеме элементов,
соединить элементы проводами (соединение идет по прямой,
при соединении достаточно попасть в небольшую окрестность
точки подключения, к одной точке можно подключить только один провод),
убирать (разрывать) провода, перемещать элементы (провода при этом
двигаются в соответствии с точками подключения),
удалять элементы (подключенные провода при этом убираются)
сохранять схему в файл и восстанавливать из файла. Для сгиба и соединения проводов в определенных координатах
рекомендуется задать два-три вспомогательных элемента: ¦ ¦ ¦
---- ---+ ---+---
¦ ¦ Элементы схемы можно представить классом-прототипом:
наименование файла с элементом
размеры элемента
количество точек подключения
координаты i точки подключения
нарисовать элемент в точке (x,y) и поворотом
и классом-конкретным элементом:
указатель на класс-прототип
координаты элемента
угол поворота
координаты i точки подключения с учетом размещения и поворота
элемент* , поключенный к i точке
подключить элемент* к i точке
разорвать i-ю связь
нарисовать
7. Библиотека классов для работы матрицами
Библиотека должна включать класс Matrix
Из матрицы можно выделить прямоугольную часть - подматрицу .sub(i,j,n,m),
строку .row(i) и столбец .col(i). С частью матрицы должны быть допустимы
те же операции, что и с матрицей; модификация подматрицы изменяет
соответствующие элементы в базовой в матрице.
Основные операции +, -, *, =, +=, -=, *=, ==, !=. В качестве
второго операнда может выступать матрица или число.
Операции /, /= определить только для операнда-числа справа.
Дополнительные полезные функции: транспонирование, максимум, минимум,
поиск элемента, ввод-вывод, единичная и нулевая матрица размером n и др.
Некоторые функции и операции должны создавать новую матрицу.
Для доступа к элементам матрицы переопределить операцию () : a(i,j).
Эта операция возвращает ссылку на элемент, т.е. может использоваться и
в левой части оператора присваивания. Рекомендуется определить класс с приватным конструктором,
который не выделяет память, а содержит указатель на первый элемент матрицы,
количество элементов в строке, используемое количество элементов из строки,
количество строк. В конструкторе матрицы происходит реальное выделение памяти.
В классе должен быть флажок, определяющий выделена ли была память
в конструкторе или используется память другого объекта.
Проверить работу программы на методе Гаусса:
cin>>n;
Matrix a(n,n+1);
cin>>a;
// Метод Гаусса решения системы линейных уранений
for(i=0;i<a.rows();i++)
{ double u,v;
Matrix c(a.sub(i,i,a.rows()-i,1));
u=c.max(); // найти номер максимального
v=c.min(); // элемента по модулю в столбце
if(fabs(v)>fabs(u)) u=v;
k=c.find(u)+i;
if(k!=i) // поменять местами строки
{
Matrix t(1,a.cols());
t=a.row(k);
a.row(k)=a.row(i);
a.row(i)=t;
}
a.row(i)/=a(i,i); // ведущий элемент привести к 1
for(j=0;j<a.rows();j++) // вычесть i-строку из всех других
if(j!=i) // строк
{
a.row(j)-=a.row(i)*a(j,i);
}
}
// в последней колонке получаем решение уравнения
cout<<a.col(n);
8. Библиотека классов для работы с полиномами
Реализовать класс для работы с полиномами. В качестве элементов
используются латинские буквы и числа. Пример полинома: 0.1*a*b^3+x*y^4 Реализовать операции +, -, *, = для полиномов-операндов
и операции +, -, *, /, где 1 или 2 операнд является числом double
(для деления только 2-ой операнд)
Методы: вычисление полинома при указанных значениях неизвестных,
подстановка вместо буквы другого полинома, дифференцирование по
ук.букве, ввод (>>), вывод (<<) в виде одной строки,
получить набор неизвестных. конструктор(double=0)
конструктор(char *полином в виде строки)
9. Библиотека классов для работы с базами данных объектов (ООБД)
Определить классы для хранения объектов в файле.
Класс для хранимого объекта необходимо произвести от некоторого
базового абстрактного класса и переопределить виртуальные методы
int ReadData(int fd); // чтение полей из файла
int WriteData(int fd); // запись полей в файл
int Size(); // размер записи (все записи для простоты одинак. размера)
void Recalc(); // вычислить незаписываемые в файл поля
после чтения записи из файла
Можно от созданного класса произвести новый класс,
в методах нового класса в первую очередь нужно вызвать
методы базового класса, а затем произвести действия с
новыми полями этого класса В базовом классе должны быть определены методы
конструктор(имяфайла)
int Open()
int Close()
long Id() // идентификатор записи (смещение в файле)
int Goto(long id) // перейти на запись с идентификатором id
int First() // перейти на первую запись в файле
int Next() // перейти на следующую запись в файле
int Prev() // перейти на предыдущую запись в файле
int Last() // перейти на последнюю запись в файле
int Post() // записать изменения
int Cancel() // отменить изменения, перечитать запись
int Insert() // добавить новую запись, войти в режим изменения
int Edit() // войти в режим изменений
int Delete() // удалить запись
int Eof() // файл пуст или обнаружен конец файла при выполнении Next()
int Bof() // файл пуст или обнаружено начало файла при выполнении Prev()
long Count() // количество записей
методы возвращают код ошибки или 0 Для доступа к полям в производном классе рекомендуется определить
методы SetИмя(значение) и GetИмя()
10. Текстовая оконная библиотека
Написать библиотеку для оконного интерфейса в текстовом режиме.
Библиотека должна работать в режиме 80x25 и 80x50. Должны определяться
следующие классы:
-- окно
координаты
размеры
видимость
цвет фона
текст заголовка
сделать верхним
процедура, вызываемая для нераспознанных клавиш окна
-- метка (надпись)
координаты
видимость
цвет
текст метки
-- кнопка
координаты
размеры
видимость
цвет кнопки
текст кнопки
цвет текста
процедура, вызываемая при нажатии кнопки
-- ввод строки
координаты
ширина
видимость
цвет поля
цвет текста
текст
Рекомендуется использовать активные свойства (см. Property.cpp),
или определить пару методов setСвойство/getСвойство. Работа от
клавиатуры. Для примера рассмотреть интерфейс Borland C++ 3.1.
11. Графическая оконная библиотека
Написать библиотеку для оконного интерфейса в графическом
режиме. Библиотека должна работать для произвольного графического
режима, обеспечиваемого выбранной графической библиотекой.
Должны определяться следующие классы:
-- окно
координаты
размеры
видимость
цвет фона
текст заголовка
сделать верхним
процедура, вызываемая для нераспознанных клавиш окна
-- метка (надпись)
координаты
видимость
цвет
текст метки
-- кнопка
координаты
размеры
видимость
цвет кнопки
текст кнопки
цвет текста
процедура, вызываемая при нажатии кнопки
-- ввод строки
координаты
ширина
видимость
цвет поля
цвет текста
текст
Максимальные размеры окон ограничены размером экрана, поэтому
запрещается использовать getimage для сохранения части экрана.
Рекомендуется использовать активные свойства (см. Property.cpp),
или определить пару методов setСвойство/getСвойство. Работа от
клавиатуры. Для примера рассмотреть интерфейс Windows.
12. Анимационная библиотека
Написать библиотеку для создания игр и различных мультипликаций.
Объекты характеризуются свойствами:
координаты на экране x,y и уровень z
(z=0 уровень фона, объект с максимальным z
находится над всеми другими объектами)
видимость
имя файла с картинкой
размеры объекта (по умолчанию размеры картинки;
игнорируемый (фоновый) цвет
(по умолчанию цвет пиксела в верхем левом углу)
получить цвет пиксела (i,j) в тек. состоянии
свойства можно читать (getимя) и изменять (setимя), изменения
на экран выводятся после команды "показать изменения" К экрану можно применить следующие методы
показать изменения Определить очередь событий:
typedef int Event;
class TQueue
{
public:
TQueue(int maxsize=100);
TQueue();
void add(int dt, Event obj); // добавить событие в момент (сейчас+dt)
Event get(int &dt); // получить событие (dt- превышение интервала)
bool isReady(); // подошло время обработать к-л события
bool isEmpty(); // очередь пуста
bool isFull(); // очередь полна
};
Для получения текущего времени использовать
в Windows - timeGetTime() /* в милисекундах */
в DOS - biostime(0,0) /* в 10/182 секундах */ Работу библиотеки продемонстрировать на простой игре типа тира:
прицел, управляемый мышью;
выбегающие время от времени слева или справа враги;
несколько предметов, за которые враги могут прятаться. Если щелкнул центром прицела на пиксел врага, отличный от
фонового, значит враг убит.
13. Библиотека классов для работы с числами большой точности
Реализовать класс для работы с целыми десятичными числами с заданным
числом цифр.
Реализовать операции +, -, *, +=, -=, *=, =, сравнения (6 шт.)
для чисел указанного класса, а также операции +, -, *, /, +=, -=,
*=, /=, =, сравнения (6 шт.), где вторым операндом является число
long (все) или double (кроме /).
double используется для записи чисел c большим числом нулей типа 2e100 Уэзерел Ч. Этюды для программистов
Кнут Д. Искусство программирования для ЭВМ Т.2
14. Программа для обучения основам программирования
С помощью этой программы учащиеся смогут познакомиться с
основными понятиями программирования:
Программа должна позволять составлять программу для некоторого
робота (манипулятора). Программа является _скелетом_ для написания
различных роботов, т.е. обеспечивает интерфейс, загрузку заданий
из файла, набор классов и взаимодействие между ними.
Робот действует на некотором поле с размерами 20 на 20,
Задача состоит в приведении поля в некоторое конечное состояние
после выполнения программы, написанной учащимся. Робот определяется в некотором классе программы, что позволяет
изменять внешний вид и некоторые особенности поведения робота
(муравей, трактор, уборщик, газонокосильщик), не изменяя логику
основной программы. Это же касается и объектов на поле.
Рекомендуются следующие варианты классов:
--Робот
количество команд
наименование i-ой команды
текущие координаты
установить координаты и поле для работы
выполнить i-ю команду, результат=1, если команда успешно выполнена, иначе 0
нарисовать(x,y)
текущее направление
сообщение о причине неудачи
--Задание
инициализировать(поле, робот)
иниц. перед выполнением программы(поле) // случайное размещение препятствий
задание выполнено(поле, робот)?
текст задания
перейти на следующий уровень (если требуется
решить набор заданий)
--Поле
цвет клетки(i,j)
установить цвет клетки(i,j)
какой объект на клетке(i,j)
установить объект на клетку(i,j)
нарисовать(x,y)
--Объект
тип: препятствие, ловушка и т.д.
разновидность: стена, мина, яма и т.д.
наименование
нарисовать(x,y)
Программа составляется из команд робота
Программа должна составляться с помощью выбора из меню (списка
вариантов). Можно вставлять и удалять операторы программы
Выполнение программы заканчивается, если робот не может выполнить
команду и выводится сообщение Варианты заданий/роботов (для каждого варианта составляется
своя модификация программы)
- черепашка-художник (раскрасить пол в определенный узор)
- муравей-грузчик (сокобан: передвинуть коробки на место)
- урожай (скушать яблоки, появляющиеся случайно до написания программы)
Задания усложняются введением препятствий и/или ловушек.
15. Программа для размещения мебели "Home design"
Мебель, стены, двери и др. элементы представляются в виде
набора прямоугольных блоков, которые можно перемещать на виде
сверху. Можно указать высоту размещения над полом. Объекты
не должны накладываться друг на друга. Объекты делятся на
несколько типов:
1. стены, которым можно задать длину и высоту
2. двери, окна и др. объекты, которые обычно накладываются на стену
толщина определяет место, где не могут быть размещены другие объекты
3. мебель, столы, стулья, люстры, горшки с цветами Основные возможности программы: вставка объекта, который нужно
выбирать из нескольких списков (определяется файлами конфигурации),
поворот объекта на угол кратный 90 градусов, передвижение объекта в
координатах XY и изменение высоты Z,
т.е. курсовая работа сводится к передвижению параллелепипедов
у которых задано направление (угол поворота 0,90,180,270) Управление можно сделать только клавиатурой:
просто стрелка - перемещение по 10 см
Shift-стрелка по 1 см
По умолчанию объект вставляется рядом с предыдущим размещенным
объектом (сдвинутым на ширину предыдущего объекта и
повернутым на тот же угол). В файлах конфигурации может содержаться следующая информация:
GROUPS.CFG:
walls.cfg Стены, двери, окна
tables.cfg Столы
...
WALLS.CFG:
стена, обои в горошек: 1
дверь 90 см, белая, со стеклом: 2 90 200 90
^ ^
наименование (до :) тип объекта
^
ширина
^
высота
^
толщина
холодильник 2-х дверный, зеленый: 3 120 160 60
Можно всю конфигурацию хранить в одном файле. Развитие темы:
Построение вида для любого угла и добавление перспективы.
16. Редактор блок-схем программ
В соответствии с принципами структурного программирования
для написания программ достаточно 3 типов операторов:
последовательность, условный оператор и оператор цикла
Некоторые блоки (ввод-вывод, завершение программы) имеют
специальную рамку.
Написать редактор для блок-схем (структурного проектирования
программы), который позволял бы редактировать блок-схемы.
Команды редактора: вставить блок после текущего (первоначально
есть блоки "начало" и "конец"), удалить текущий блок, изменить
текст в блоке, сохранить и считать блок-схему в файле.
Для упрощения программы рекомендуется управление с помощью
клавиатуры (движение стрелками по блокам: вниз/вверх -
следующий/предыдущий блок, влево/вправо - левая/правая ветвь, если
есть или следующий блок).
Для представления блок-схемы рекомендуется класс со свойствами
тип блока
текст, выводимый в блоке
левая ветка // отсутствует у простых блоков
правая ветка // -//-
следующий блок
предыдущий блок
выч. высоту изображения блока с ветками
выч. ширину -//-
нарисовать блок и его ветки в (x,y)
Для упрощения рисования рекомендуется левую ветвь рисовать
всегда вниз и принять стандартный размер блока.
17. Библиотека для моделирования систем массового обслуживания
Написать библиотеку классов для моделирования включающую следующие
классы:
-- Генератор объектов
тип генерируемого объекта
(объекты в системе представляются номером типа)
среднее время появления
тип случайного распределения - равномерное
включить/выключить
кол-во сгенерированных объектов
процедура, вызываемая при генерации объекта
-- Очередь объектов к устройству обслуживания
добавить объект
взять объект
текущее число объектов в очереди
максимальное, минимальное, среднее
времени ожидания в очереди (расчет при моделировании)
максимальная длина очереди (расчет при моделировании)
-- Устройство обслуживания
поставить объект на обработку
среднее время обработки
тип случайного распределения - равномерное
работает/простаивает
коэффициент загрузки (расчет при моделировании)
кол-во обработанных объектов
процедура, вызываемая при завершении обработки объекта
-- Система в целом
количество объектов в системе
добавить объект в систему
удалить объект из системы
интервал моделирования
текущее время
процедура, вызываемая при завершении интервала моделирования
-- Очередь событий в системе Написать модель следующей системы:
На карьере работает 2 экскаватора и M машин. В начальный момент
машины поровну делятся между очередями экскаватора. Экскаватор
наполняет кузов машины за 6-10 минут (распределение времени
равномерное). Машина отвозит песок потребителю за 45 минут
(распределение нормальное со стандартным отклонением 15 минут или 30-60 минут).
После возвращения становится под загрузку простаивающего
экскаватора или в самую маленькую очередь. Промоделировать систему
в течении 8 часов при различных M и выбрать M минимизирующее
простой экскаваторов и машин.
Для моделирования поездки машины к потребителю можно
использовать генератор, который необходимо включать, а после
генерации объекта выключать. А можно сделать M устройств обслуживания . Развитие темы:
Добавить новые типы случайного распределения.
О генерации случайных чисел, отличного от равномерного
распределения см. Кнут Д. Искусство программирования для ЭВМ Т.2
18. Графический редактор для детей
Написать редактор, позволяющий составлять рисунок из набора
готовых картинок. Для простоты общение с помощью надписей должно
быть минимизировано.
Редактор должен позволять:
- выбирать группу картинок;
- выбирать картинку из группы;
- вставлять выбранную картинку в рисунок
при этом видно как она будет расположена на рисунке;
(при вставке фоновый цвет картинки игнорируется)
- сохранять и загружать рисунок в стандартном
формате .BMP, предпочтительно при общении с
пользователем вместо имени использовать маленькое изображение
рисунка, а имя генерировать автоматически. Примерный формат экрана:
набор кнопок +-++-------------------+
с группами +-+¦ ¦
картинок +-+¦ + ¦
и действиями +-+¦ ¦
+-+¦ рисунок ¦
¦ ¦
¦ ¦
¦ ¦
+-------------------+
Редактор должен конфигурироваться, в каком-то файле можно
указать имена файлов с картинками, разбиение на группы и имена
файлов для кнопок с группами.
19. Генератор тестов
Написать набор классов для генерации тестовых данных.
Структура представляется в виде совокупности объектов различного класса.
Д.б. классы для выбора, циклов и других элементов.
У всех классов д.б. метод generate, выводящий в файл результат генерации.
Класс последовательность Seq(), в которую можно добавлять (.add())
следующие элементы:
целое число, ссылку на переменную или строку,
указанное значение выводится при генерации
объекты классов
Any(строка)
при генерации выводится случайный символ из строки
Per(строка)
при генерации выводится случайная перестановка символов строки
Format(число или переменная, строка)
при генерации выводится значение по указанному формату
Rep(целое число или переменная, элемент)
действие повторяется заданное число раз
While(переменная, элемент)
действие повторяется пока значение переменной не нулевое
другие последовательность или
Select().add(элемент [,целое число=1]).add(...
группа выбора, элемент из группы выбирается с вероятностью
прямо пропорциональной числу
Assign(переменная, выражение)
при генерации переменной присваивается выражение
выражение строится из объектов
Random(целое число или переменная,целое число или переменная)
случайное значение в указанном диапазоне
целых чисел и переменных,
соединяемых знаками операций +, -, *, /, % Var N;
Seq s1;
s1.add(Assign(N,Random(1,100))).add(N).add("\n");
// присвоить N случайное число от 1 до 100, вывести N, вывести "\n"
s1.add(Rep(N,Seq().add(Rep(10,Any("ABC"))).add("\n"));
// выполнить N раз вывод строки из 10 случайных символов A,B или C
s1.generate();
// сгенерировать тест, результат выводится в cout Пример сгенерированного теста:
3
ABBACCAAAB
ACBBBACAAC
BBACCCCAAA
20. Обработка XML
Написать класс для работы с XML-документами.
Каждый XML-документ содержит 1 или более элементов в форме:
<ИМЯ_ЭЛЕМЕНТА АТРИБУТЫ>
СОДЕРЖАНИЕ
</ИМЯ_ЭЛЕМЕНТА>
или
<ИМЯ_ЭЛЕМЕНТА АТРИБУТЫ /> АТРИБУТЫ разделяются символами пробела, табуляции, перехода на новую строку
и выглядят так
ИМЯ_АТРИБУТА="ЗНАЧЕНИЕ" -- ЗНАЧЕНИЕ не содержит символов " и <
или
ИМЯ_АТРИБУТА='ЗНАЧЕНИЕ' -- ЗНАЧЕНИЕ не содержит символа ' и < ИМЯ_ЭЛЕМЕНТА или ИМЯ_АТРИБУТА начинается с латинской буквы или ':' или '_'
затем следует 0 или более букв, цифр, символов '-', '.', '_', ':' СОДЕРЖАНИЕ это произвольный текст, не содержащий символа <
вперемешку 0 или более элементов.
Текст вне элементов объединяется Для некоторых символов в тексте и значениях атрибутов используются
специальные обозначения:
& &
< <
" "
> >
число; символ с указанным кодом, например, ' это '
Основные методы класса XML:
сохранить_в_файл(char *file_name) int количество_элементов_содержания()
XML *элемент_содержания(i)
char *имя_элемента()
char *получить_текст()
установить_текст(char *)
int количество_атрибутов()
char *имя_атрибута(i)
char *значение_атрибута(i)
XML *найти_элемент_содержания(char *name, char *attr, char *value)
// по имени и значению одного из атрибутов
char *найти_значение_атрибута(char *name)
int номер_атрибута(char *name) добавить_атрибут(char *attr, char *value)
// или заменить, если существует
удалить_атрибут(i)
XML *добавить_элемент_содержания(char *name)
удалить_элемент_содержания(i)
Содержание отчета
1. Постановка задачи Краткое описание задачи и предметной области (объекты и
их поведение, взаимодействие).
Требования к программе (текст/графика, мышь/клавиатура). 2. Описание программы Используемые библиотеки и программы других разработчиков
(в т.ч. транслятор) файлы .h - это не библиотеки!
Разбиение на модули, для каждого модуля указывается:
Классы и их интерфейсы (назначение переменных,
назначение и параметры методов на 1-2 строки).
Функции (назначение и параметры) и глобальные переменные.
Иерархия классов.
Пояснения по алгоритму и особенностям реализации,
возможностям модификации и развития программы
(т.е. какие возможности есть в программе (например,
виртуальные методы, константы-параметры, файлы с настройкой),
которые позволяют развить/изменить поведение, внешний вид,
язык общения с пользователем,
не изменяя основного алгоритма и основных частей программы) 3. Используемые внешние файлы
Форматы файлов файлы .h - это не внешние файлы!
Описываются файлы, необходимые для работы программы,
в т.ч. файлы, создаваемые во время работы программы:
имя файла - содержание файла
Для нестандартных (придуманных программистом) файлов
описывается их формат (количество байтов на поле, содержание поля),
для баз данных - структура, для картинок - требуемые
размеры и количество цветов. 4. Инструкция по установке и требования к компьютеру Требования к компьютеру:
операционная система, доп. программы и драйверы,
необходимое место на жестком диске,
минимальные требования к быстродействию процессора,
ОЗУ, видеокарте,
доп. устройства: звуковая карта, мышь и т.д.
Как установить программу с дискеты на компьютер.
(в простейшем случае "скопировать следующие файлы
на диск: program.exe, image.bmp, ..." )
Как настроить программу на текущую конфигурацию
компьютера (тип звуковой карты, видеорежим и т.п.)
Возможные сообщения об ошибках при отсутствии наличия
необходимых компонент (например, мыши). 5. Инструкция пользователя Описывается работа пользователя от запуска программы до
выхода. (Например, правила игры, смысл появляющихся сообщений,
управляющие клавиши. Не должно быть: "интерфейс является интуитивно
понятным и не нужнается в описаниях" или "как работать с программой
написано в подсказке, появляющейся по клавише F1, поэтому здесь не
описывается".)
Для библиотек: описание использования классов и функций
библиотеки c небольшими примерами (пользователь - это программист). Приложение 1. Исходные тексты программы в электронном виде Приложение 2. Дискета с программой, подготовленная для
установки в соответствии с п.4.
|
|
|