Лабораторные работы, 2 семестр.
Инструкция по созданию WinForms проекта на студиях старше VS2012Л.р.№1. "Калькулятор"
Необходимо разработать калькулятор, аналогичный встроенному в Windows.Минимальный набор операций: +,-,*,/,sqrt,=.
Максимальный - ничем не ограничен.
Обратить внимание на обработку исключительных ситуаций - калькулятор должен обрабатывать такие ситуации, как деление на ноль, корень из отрицательного числа и проч.
Л.р.№2. "Табличка"
Необходимо разработать приложение для работы с файловой "базой данных"Задачи - практически те же, как и в прошлом семестре : загрузить структуры из файла, отобразить их в таблице (DataGridView),
изменить значения, добавить, удалить строку из таблицы, сохранить изменения в файле.
ДОБАВИТЬ СТРОКУ ПОИСКА ПО ОДНОМУ ИЗ ПОЛЕЙ
Для редактирования и добавления новых строк в таблицу, создавать новое окно.
Ваша фантазия ничем не ограничена, можно взять любую предметную область с любым количеством таблиц.
В минимальном варианте это просто интерфейс к прошлосеместровой лабе про кино/книги/музыку.
Важно: ни в коем случае не пишите работу с файлом в обработчиках интерфейса. Вся "бизнес-логика" должна быть вынесена в отдельные файлы и написана на неуправляемых C или C++
Л.р.№3. "Разбор лексем"
В лабораторной 2 логические части: бибилиотека на неуправляемом C/C++ и решение прикладной задачи с интерфейсом.3.1. Библиотека
На неуправляемом C/C++ разработать бибилиотеку реализующую структуру стек (Stack) и очередь (Queue)
Реализовать основные функции/методы для работы с этими структурами данных (добавление, извлечение, чтение, очистка)
3.2. Приложение, разбирающее вводимое выражение на лексемы.
Пример: (10 - 20) * x + 20 * cos(y) -> (,10,-,20,),*,x,+,20,*,cos,(,y,)
Сам алгоритм написать на неуправляемом C/C++ в отдельном файле. Можно использовать любые функции string.h. Результат алгоритма - очередь лексем (использовать свою очередь из 3.1)
Рез-т выводить в ListBox.
Л.р.№4. "Вычисление выражений"
Продолжение Л.р. 3Пример: [ (10 - 20) * x + 20 * cos(y) ] -> [ (,10,-,20,),*,x,+,20,*,cos,(,y,) ] -> [ 10 20 - x * y cos 20 * + ] -> [ Результат с учетом подставленных значений перемнных ]
Выводить рез-т в ListBox-ы.
Реализовать алгоритм Дейкстры для формирования обратной польской записи в отдельных файлах, с использованием вручную реализованных структур List и Stack.
Как и в предыдущей работе, все алгоритмы СТРОГО на неуправляемом C/C++.
На C++/CLI - только интерфейс.
Л.р.№5. "График функции"
Продолжение Л.р. 41. С помощью 4-й ЛР построить график произвольной функции, задаваемой как выражение F(x). Для графика задать область определения (отрезок [A,B]) и построить координатные оси (с подписями) и сетку.
2. Построить столбчатую диаграмму по произвольным данным
3. Построить круговую диаграмму по произвольным данным
(АРХИВ) Лабораторные работы по программированию на Си, 1 семестр.
Л.р.№1
1.1. Есть заданная прямая, вводится точка, определить где она - над, под или на прямой.1.2. Определить, в каком секторе треугольника находится введенная точка
Л.р.№2
2.1. Вывести на экран таблицу значений функции для введенного интервала и количества измерений с помощью цикла for2.2. - | - с помощью цикла while и do-while.
1 вар. (sin(x)*sin(x))/x
2 вар. tg(x)*sqrt(x)
Л.р.№3
3.1. Вычислить значение суммы ряда 1/n! при n -> бесконечности с заданной пользователем точностью3.2. Вычислить интерграл функции ln(x) с заданной пользователем точностью
1 вар. Метод левых прямоугольников
2 вар. Метод правых прямоугольников
3 вар. Метод серидинных прямоугольников
4 вар. Метод трапеций
* вар. Метод парабол (Симпсона)
Л.р.№4
4.1.-4.2.Пользователь вводит массив.
1 вар. Найти сумму элементов после максимального, больших (max+min)/2
2 вар. Найти среднее всех элементов от последнего 0 до максимального
3 вар. Найти произведение элементов до минимального, меньших 2*min
4 вар. Найти среднее геометрическое до первого 0 или минимального
5 вар. Найти сумму каждого второго элемента,после максимального, больших max/2
Л.р.№5
5.1.-5.2.Вводится массив.
Необходимо сгруппировать и отсортировать массив следующим образом:
1 вар. положительные по возрастанию, отрицательные по убыванию, нули
2 вар. нули, положительные по возрастанию, отрицательные по возрастанию
3 вар. положительные по убыванию, нули, отрицательные по возрастанию
5+ Реализовать массив в виде множества
5++ Реализовать операции над множествами: объединение, пересечение, вычитание
Л.р.№6
6.1. Вводится матрица. Память выделять динамически. Транспонировать ее относительно побочной диагонали и вывести на экран.6.2.
0 вар. Поменять местами max и min относительно побочной диагонали
1 вар. Записать вместо max сумму элементов над побочной диагональю
2 вар. Вставить в начало первой строки сумму элементов под побочной диагональю
3 вар. В центральный элемент матрицы записать разницу между суммой элементов в верхнем и нижнем треугольнике, образованными лиагоналями (Х)
4 вар. Удалить строку с минимальным элементом под главной диагональю
Л.р.№7
7.1.-7.2. Вводится матрица. Остортировать матрицу змейкой0 вар. змейка горизонтальная
1 вар. змейка диагональная слева-сверху
2 вар. змейка вертикальная
3 вар. змейка диагональная справа-сверху
* вар. змейка от центра
Л.р.№8
8.1. Вводится строка. Удалить все лишние пробелы.8.2. Задается массив строк. Каждая строка включает в себя Фамилию Имя Отчество.
Задается две строки (суффиксы) (например, "ov" "idze" или "chuk" "ko") suf1 и suf2. Заменяем все вхождения suf1 в фамилию на suf2.
Прим. в данной работе не пользоваться библиотечными функциями string.h.Все необходимые функции по работе со строками реализовывать вручную и формить в виде подключаемой библиотеки mystring.h.
Л.р.№9
9.1. Вводится текст. Составить частотный словарь слов в тексте. Слова в словаре не должны повторятся. Выводить вертикальным списком, слева - слово, справа - кол-во повторений.(Учет регистра необязателен, будет бонусом)9.2. Вводится текст. Вводится ширина. Отформатировать текст по ширине. Слова не разбивать, а пренеосить на новую строку целиком. Недостающее пространство заполнять пробелами.
Примечание: в данной работе можно пользоваться string.h
Л.р.№10
10.1.Вводится массив структур Student. У каждого студента есть, как минимум, имя и массив из 5 оценок.
Необходимо сгруппировать массив по 4 группам: отличники (все 5), хорошисты (хотя бы одна 4),троечники(хотя бы одна 3) и двоечники(хотя бы одна 2).
В каждой группе - отсортировать студентов по алфавиту.
10.2.
Удалить всех, у кого больше двух 2-к.
Для каждого студента вычислить его средний балл (поместить в соответствующее поле).
Л.р.№11
Текcтовые файлы.Структуры
const int len = 255;
struct Book
{
char Name[len];
char Author[len];
int PageCount;
int Rank;
};
struct Music
{
char Name[len];
char Artist[len];
int Duration;
int Rank;
};
struct Cinema
{
char Name[len];
char Director[len];
int Duration;
int Rank;
};
Программа должна иметь зацикленное меню с вариантами выбора действия:
1 - Добавить книгу/музыку/фильм
2 - Вывести книги/музыку/фильмы на экран
3 - Отсортировать книги/музыку/фильмы
4 - Удалить книгу/музыку/фильм
5 - Выход
Для каждого действия открывать/закрывать файл с необходимыми флагами.
Варианты:
0 - Book.Удаление по автору, сортировка по ранку и названию
1 - Music.Удаление по исполнителю, сортировка по ранку и названию
2 - Cinema.Удаление по режисеру, сортировка по ранку и названию
11.1.
1 и 2 пункты меню.
11.2.
3 и 4 пункты меню.
Примечание: можно выбрать любую другую интересующую тематику, сопоставимую с примерами вариантов. Минимальное кол-во полей: 4
Л.р.№12
Бинарные файлыТо же, что и 11 работа, только на бинарных файлах.
При этом, все действия должны выполняться напрмую на файлах, без выгрузки в оперативную память.
Удобно написать шаблонные функции-помощники, как мы делали на семинарах и лекциях и работать с файлом как с массивом.
12.1.
1 и 2 пункты меню.
12.2.
3 и 4 пункты меню.
Л.р.№13
13.1.ИндексТо же, что и 12, только добавить файл с индексом.
- индекс по названию
- при изменениях основного файла обновлять индекс
- добавить пункт меню ПОИСК, где искать по названию и использовать алгоритм половинного деления на индексе
13.2. Добавить индекс еще по 2-м полям на выбор.
Л.р.№14
14.1.База данныхРеляционная база данных на бинарных файлах.
Каждая таблица - в своем файле. Представляем как массив структур.
Идентификатор записи - номер записи в файле - от 0 и до кол-ва записей в файле.
Предлагаемая модель данных:
Покупатель:
- имя
- котнтакты
Товар:
- наименование
- кол-во на складе
- цена
Покупка
- Id покупателя
- Id товара
- кол-во
- дата покупки
- Id чека (несколько покупок входит в один чек)
К задаче необходимо сделать двухуровневое меню:
1 - Покупатель:
1 - добавить
2 - вывести всех
3 - все покупки покупателя
4 - все товары покупателя
2 - Товар:
1 - добавить
2 - вывести все
3 - все покупки этого товара
4 - все покупатели этого товара
1 - Покупка:
1 - добавить
2 - вывести всех
14.2
1. Ко всем таблицам добавить пункт меню "Удалить"
2. Сделать два любых агрегирующих запроса. Например:
- Для каждой покупки вывести ее стоимость
- Для каждого покупателя вывести максимальный чек
- Для каждого покупателя вывести средний чек
- Для каждого покупателя вычислить общее кол-во потраченных денег
- Найти самый популярный товар
- Найти самый невостребованный товар
- Для каждого товара - среднее количество покупок в день