- •Лабораторная работа № 1
- •Далее создадим файл:
- •Задания1
- •Лабораторная работа № 2
- •Консольный ввод-вывод
- •Чтение и запись символов
- •Чтение и запись строк
- •Форматированный консольный ввод-вывод
- •Форматированный вывод
- •Форматированный ввод
- •7. Варианты задания
- •Лабораторная работа № 3
- •5.2 Оператор if
- •Лабораторная работа № 4
- •Содержание отчета
- •Постановка задачи.
- •Общие сведения
- •Лабораторная работа № 5
- •Оператор for
- •Вариации цикла for
- •Бесконечный цикл
- •Циклы for без тела
- •Задание 2. Циклический вычислительный процесс конечные суммы и произведения
- •Лабораторная работа № 6
- •Оператор цикла while
- •Оператор do … while
- •Оператор break
- •Оператор continue
- •Лабораторная работа № 7
- •5.1 Одномерный массив
- •Создание указателя на массив
- •5.3 Индексация с помощью указателей
- •Сортировка
- •Методические указания.
- •Лабораторная работа № 8
- •Двухмерные массивы
- •Лабораторная работа № 9
- •Лабораторная работа № 11
- •Задача 2. Параметры функции
- •Лабораторная работа № 12
- •Варианты заданий
- •Лабораторная работа № 13
- •Некоторые операции над матрицами
- •Методические указания
- •Варианты заданий
- •Лабораторная работа № 14
- •Решение уравнения методом деления отрезка пополам (бисекций)
- •Методические указания
- •Лабораторная работа № 15
- •Вычисление определенного интеграла
- •6.2.1 Метод средних прямоугольников
- •6.2.1 Метод трапеций
- •Методические указания
- •Варианты заданий
- •Лабораторная работа № 10
- •Структуры (struct)
- •Лабораторная работа № 16
- •Директива #include
- •7. Методические указания
- •8. Варианты заданий.
- •Лабораторная работа № 17
- •Указатель на файл
- •Открытие файла
- •Перенаправление потока
- •Чтение из потока и запись в поток
- •Закрытие потока
- •Использование функций feof() и ferror()
- •Варианты заданий
- •Лабораторная работа № 18
- •Функции обработки символов
- •Функции обработки строк
- •Варианты заданий
- •Лабораторная работа № 19
- •Структуры
- •6.1.1 Доступ к элементам структуры
- •6.1.2 Присваивание структур
- •Массивы структур
- •Передача структур в функции
- •Передача членов структур в функции
- •Передача всей структуры в функцию
- •Указатели на структуры
- •Объявление указателя на структуру
- •Использование указателей на структуру
- •Массивы и структуры в структурах
- •Функции fread () и fwrite ()
- •Варианты заданий
- •Лабораторная работа № 20
- •Например, формула
- •Задание на программирование
Задание на программирование
Задача 1. В файле находится текст, в котором используются скобки трех типов: (), | |. { }. Используя стек, проверить, соблюден ли баланс скобок в тексте.
Задача 2. Используя очередь или стек. решить задачу: в файле записан текст, сбалансированный по круглым скобкам. Требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров по возрастанию номеров позиций:
а) закрывающих скобок (например, для текста a+(45-f(x)*(b-c)) надо напечатать 8 10; 12 16; 3 17);
б) открывающих скобок (например, для текста a+(45-f(x)*(b-c)) надо напечатать 3 17; 8 10; 12 16).
Задача 3. Используя стек, проверить, является ли содержимое текстового файла правильной записью формулы следующего вида:
<формула>::=<терм> | <терм>+<формула> | <терм>-<формула>
<тepм>::=<имя> | (<формула>)
<имя>::=x|y|z
Задача 4. В текстовом файле записана без ошибок формула следующего вида:
<формула>::=<цифра> | М(<формула>,<формула>) | m (<формула>, <формула>)
<цифра>::=0|1|2|3|4|5|6|7|8|9
(M обозначает функцию max, а m - функцию min).
Используя стек. вычислить как целое число значение данной формулы. Например, M(5,m(6,8))=6.
Задача 5. В текстовом файле записано без ошибок логическое выражение следующего вида:
<лог.выр.>::=true | false | !<лог.выр> | <лог.выр>.>&&<лог.выр> |<лог.выр.> || <лог.выр.>
Используя стек, вычислить значение этого выражения с учетом общепринятого приоритета операций.
Задача 6. Написать и протестировать функции включения, удаления и чтения очередного элемента стека объемом п элементов. В случае невозможности включения (переполнения стека), удаления из пустого стека выставлять флаг.
Задача 7. Написать и протестировать функции для включения, исключения и поиска элемента кругового списка для:
а) списка без заголовка;
б) списка с заголовком (заголовок может содержать некоторую информацию о списке, например, число элементов всписке).
Задача 8*. Используя двунаправленный список, написать и протестировать функции, реализующие отдельные действия при игре в "новое домино", в котором кроме традиционных правил игрок может на ходу заменить любую кость на свою. Необходимы следующие функции:
проверить, можно ли сделать ход;
сделать ход;
проверить, можно ли сделать замену;
заменит кость ;
определить закончена ли игра;
Задача 9* Напишите программу сложения двух длинных целых чисел, представленных в виде строк, используя:
круговые списки;
двунаправленные списки.
Задача 10 Для организации вычисления значения выражения на ЭВМ удобнее вместо обычной (инфиксной) записи использовать постфиксную (или польскую инверсную) запись ПОЛИЗ. При вычислении выражения, записанного в ПОЛИЗе, операции выполняются в том порядке, в котором они встречаются при просмотре выражения слева направо; поэтому отпадает необходимость использования скобок и многократного сканирования выражения из-за различного старшинства операций.
Например, выражению 2+3*4 соответствует ПОЛИЗ 234*+, а выражению (а+(b^с)^d)*(e+f/d) – запись abc^d^+efd+*.
Используя стек:
вычислить как целое число значение выражения, записанного в ПОЛИЗе;
выражение, записанное в ПОЛИЗе, перевести винфексную форму и распечатать.
Задача 11 Многочлен от одной переменной Х можно представить как связанный спиок с узлами вида
Коэффициент при Х |
Степень Х |
Ссылка на следующий узел |
Например, многочлен –3Х6+4Х3+6Х2+9 будет храниться в виде списка
В котором узлы расположены в порядке убывания степеней Х.
Используя список:
по введенной безошибочной записи многочлена построить его представление в виде списка;
сложить два многочлена, представленных в виде списка( нулевые слагаемые исключить из результирующего списка);
проверить на равенство два многочлена;
вычислить значение многочлена s(X), представленного в виде списка, в целочисленной точке Х.
По многочлену s(X) построить его производную – многочлен р(Х);
Привести подобные члены в многочлене и расположить его по убыванию степеней Х (например из –8х4-74х+8х4+5-х3 получить –х3-74х+5);
Перемножить два многочлена, заданных в виде списков;
Распечатать многочлен, заданный в виде списков в обычном виде(например, так 52х^3-6x^2+x);
Задача 12 Состсавить программу, которая читает произвольный СРР-файл и печатает в алфавитном порядке каждую группу имен переменных, совпадающую в первых N символах, но различающихся где-либо дальше. Параметр N задается из командной строки. При решении задачи использовать дерево с узлами вида
Struct NODE
{{;
char *word;
int k;
NODE *left;
NODE *right;
};
(He рассматривать слова внутри символьных строк и комментариев !)
Задача 13*. Формулу вида
<формула>::=<цифра>| <формула><знак><формула>)
<знак>::=+|-|*
<цифра>::=0|1|2|3|4|5|6|7|8|9
можно представить в виде бинарного дерева по следующим правилам:
формула из одной цифры представляется деревом из одной вершины с этой цифрой;
формула вида fl # f2 представляется деревом, в котором корень - это знак # соответствующей операции, а левое и правое поддеревья - это представления формул fl, f2 в виде бинарных деревьев.
Например, формуле 5*(3+8) соответствует дерево
Требуется:
а) построить дерево по формуле указанного выше вида;
б) вычислить как целое число значение дерева-формулы;
в) по заданному дереву распечатать соответствующую формулу. ;
Задача 14. С использованием структуры "стек" переписать содержимое текстового файла, разделенного на строки, в другой файл. Причем, необходимо переносить в конец каждой строки все входящие в нее цифры в обратном порядке.
Задача 15. С использованием структуры "очередь" за один просмотр файла, содержащего целые числа, распечатать файл в следующем виде: сначала - все числа, меньшие А; затем - все числа из [A, B]; потом - все остальные числа.
Задача 16. Пусть имеется ЭВМ, у которой один регистр и шесть команд:
LD А загрузить А в регистр;
ST А запомнить содержимое регистра в А;
AD А сложить содержимое регистра с А;
SB А вычесть А из содержимого регистра;
ML А умножить содержимое регистра на А;
DV А разделить содержимое регистра на А
Напечатать последовательность машинных команд, необходимых для вычисления выражения, задаваемого в постфиксной форме. Выражение может состоять из однобуквенных операндов и знаков операций сложения, вычитания, умножения и деления. В качестве рабочих использовать переменные вида Tn.
Например, выражению ABC*+DE--/ будет соответствовать следующая последовательность команд:
LD В
ML C
AD А
ST T1
LD D
SB E
ST T2
LD T1
DV T2
ST T1
Задача 17*. Составить программу, формирующую "перекрестные ссылки", т.е. печатающую список слов, которые встречаются в анализируемом файле, а для каждого слова - список номеров строк, в которых это слово встречается. При решении задачи рекомендуется использовать следующие структуры данных:
struct LIST // список номеров строк для данного слова
{
int num;
struct LISТ *p;
}
struct NODE // узел дерева с информацией об очередном слове
{
char * word;
struct LIST *lines;
struct NODE *left;
struct NODE *right;};