Тестирование и использование приложения
1.Запустите приложение на выполнение, нажав быстрые кнопки Сохранить все и Запуск.
2.Выполните тестирование по рис.7.5. Рекомендуется добавлять и удалять элементы с включенным индикатором. Команда Вывести список необходима при отладке и тестировании приложения.
3.Составьте и выполните тесты, которые проверят правильность всех случаев добавления и удаления элементов подсписков (см. комментарии в файлах f_7.cpp и LR_7.cpp).
4.Убедитесь в правильности сохранения списка в файле.
5.Модифицируйте код, переместив данные-элементы классов TRollи TBikeв закрытые части классов. Выполните отладку. Результаты продемонстрируйте преподавателю.
Рис.7.5 – форма с результатами тестирования
Файл реализации LR_7.cpp модуля LR_7
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "LR_7.h"
#include "f_7.h"
#include<string.h>
#include<fstream.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//при создании формы создаем заголовок таблицы
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->FixedRows=1;
StringGrid1->RowCount=1;
StringGrid1->FixedCols=0;
StringGrid1->ColCount=8;
StringGrid1->Cells[0][0]="номер";
StringGrid1->Cells[1][0]="изделие";
StringGrid1->Cells[2][0]="кол-во(шт) в п/сп";
StringGrid1->Cells[3][0]="дата поступления";
StringGrid1->Cells[4][0]="производитель";
StringGrid1->Cells[5][0]="диам колес(мм)";
StringGrid1->Cells[6][0]="вес(кг)";
StringGrid1->Cells[7][0]="кол-во скоростей";
}
//---------------------------------------------------------------------------
//активация компонентов для ввода данных элемента списка - велосипед
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
GroupBox1->Caption="Велосипед";
DateTimePicker1->SetFocus();
LabeledEdit3->Enabled=true;
CSpinEdit1->Enabled=true;
Label2->Enabled=true;
}
//---------------------------------------------------------------------------
//подготовка компонентов для ввода данных элемента
// списка - ролик. коньки
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
GroupBox1->Caption="Ролик. коньки";
DateTimePicker1->SetFocus();
LabeledEdit3->Enabled=false;
CSpinEdit1->Enabled=false;
Label2->Enabled=false;
}
//---------------------------------------------------------------------------
list spisok;//создаем объект класса - список
void __fastcall TForm1::AddExecute(TObject *Sender)
{
if(RadioButton1->Checked)
{ //создаем элемент списка - велосипед
TBike *bike=new TBike;
strcpy(bike->date,(DateToStr(DateTimePicker1->Date)).c_str());
if(LabeledEdit1->Text=="")
{
MessageBox(NULL,"Введите название производителя!","Ошибка", 0);
LabeledEdit1->SetFocus();
return;
}
strcpy(bike->comp,(LabeledEdit1->Text).c_str());
if(LabeledEdit2->Text==""||!isdigit(LabeledEdit2->Text[1]))
{
MessageBox(NULL,"Введите диаметр колес!","Ошибка",0);
LabeledEdit2->SetFocus();
return;
}
bike->diam=StrToInt(LabeledEdit2->Text);
if(LabeledEdit3->Text==""||!isdigit(LabeledEdit3->Text[1]))
{
MessageBox(NULL,"Введите вес!","Ошибка",0);
LabeledEdit3->SetFocus();
return;
}
bike->weight=StrToFloat(LabeledEdit3->Text);
bike->speeds=CSpinEdit1->Value;
//созданный элемент добавляем в список
spisok.append_bike(bike);
}
if(RadioButton2->Checked)
{ //создаем элемент списка - роликовые коньки
TRoll *roll=new TRoll;
strcpy(roll->date,(DateToStr(DateTimePicker1->Date)).c_str());
if(LabeledEdit1->Text=="")
{
MessageBox(NULL,"Введите название производителя!","Ошибка",0);
LabeledEdit1->SetFocus();
return;
}
strcpy(roll->comp,(LabeledEdit1->Text).c_str());
if(LabeledEdit2->Text==""||!isdigit(LabeledEdit2->Text[1]))
{
MessageBox(NULL,"Введите диаметр колес!","Ошибка",0);
LabeledEdit2->SetFocus();
return;
}
roll->diam=StrToInt(LabeledEdit2->Text);
//созданный элемент добавляем в список
spisok.append_roll(roll);
}
MessageBox(NULL,"Элемент добавлен!","",0);
//если индикатор включен - список выводится в таблицу
if(CheckBox1->Checked)spisok.out_list();
//вывод информации о списке
Form1->StatusBar1->SimpleText="Количество подсписков - "+
IntToStr(spisok.count_dsp)+" "+"Количество элементов в списке - "+
IntToStr(spisok.count_elem_sp);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::A_exitExecute(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
//вывод списка в таблицу
void __fastcall TForm1::OutExecute(TObject *Sender)
{
spisok.out_list();
}
//---------------------------------------------------------------------------
int r; //переменная для номера строки выделенной ячейки в таблице
bool flag=true; //флаг - нет выделенной ячейки в таблице
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
r=ARow; //номер строки выделенной ячейки сохранен в переменной r
flag=false; //ячейка в таблице выделена
}
//---------------------------------------------------------------------------
//удаляем из списка элемент, соответствующий номеру
//строки выделенной в таблице ячейки
void __fastcall TForm1::DelExecute(TObject *Sender)
{
if(spisok.is_empty)//если список пуст
{
MessageBox(NULL,"Список пуст!","",0);
return;
}
if(flag) //если ячейка в таблице не выделена
{
MessageBox(NULL,"Выделите элемент в таблице!","Ошибка",0);
return;
}
//удаляем из списка элемент, соответствующий значению переменной r
spisok.del(r);
//если индикатор включен - список выводится в таблицу
if(CheckBox1->Checked)spisok.out_list();
flag=true;//можно снова выделять ячейку в таблице
}
//---------------------------------------------------------------------------
//удаляем из списка подсписок, соответствующий номеру
// строки выделенной в таблице ячейки
void __fastcall TForm1::Clear_downExecute(TObject *Sender)
{
if(spisok.is_empty) //если список пуст
{
MessageBox(NULL,"Список пуст!","",0);
return;
}
if(flag) //если ячейка в таблице не выделена
{
MessageBox(NULL,"Выделите элемент в таблице!","Ошибка",0);
return;
}
//удаляем из списка подсписок, соответствующий значению переменной r
spisok.clear_down(r);
//если индикатор включен - список выводится в таблицу
if(CheckBox1->Checked)spisok.out_list();
flag=true; //можно снова выделять ячейку в таблице
}
//---------------------------------------------------------------------------
//уничтожаем список
void __fastcall TForm1::ClearExecute(TObject *Sender)
{
if(spisok.is_empty) //если список пуст
{
MessageBox(NULL,"Список пуст!","",0);
return;
}
//для объекта - список вызывается функция уничтожения списка
spisok.clear();
//уничтожение списка контролируется выводом в таблицу
spisok.out_list();
}
//---------------------------------------------------------------------------
AnsiString fn=""; //строка для имени файла
//вспомогательная строка для вывода списка из таблицы в файл
char str[50];
int s;//вспомогательная переменная для вывода в файл
//количества элементов в списке
//---------------------------------------------------------------------------
//сохраняем список в файле
void __fastcall TForm1::FileSave1Execute(TObject *Sender)
{
if(fn!="") //если есть имя файла со списком
{
ofstream outfile(fn.c_str(),ios::out);//открываем файл для записи
//в переменную s заносим количество элементов в списке
s=spisok.count_elem_sp;
//выводим в файл число из переменной s побайтно
outfile.write((char*)&s,sizeof(s));
//из таблицы список выводим в файл
for(int i=1; i<=s; i++)
{
for(int j=0;j<8;j++)
{ //преобразовав элемент из таблицы к типу char*,
//копируем его в вспомогательную строку str
strcpy(str,Form1->StringGrid1->Cells[j][i].c_str());
//выводим побайтно содержимое str в файл
outfile.write((char*)&str,50);
}
}
outfile.close();//закрываем файл
}
else //если файл со списком отсутствует
//открывается диалог сохранения в файле и пользователь
//выбирает имя файла
if(SaveDialog1->Execute())
{ //выбранное имя файла сохраняется в строке fn
fn=SaveDialog1->FileName;
//создается и открывается для записи файл с выбранным именем
ofstream outfile(fn.c_str(),ios::out);
//в переменную s заносим количество элементов в списке
s=spisok.count_elem_sp;
//выводим в файл число из переменной s побайтно
outfile.write((char*)&s,sizeof(s));
//из таблицы список выводим в файл
for(int i=1; i<=s; i++)
{
for(int j=0;j<8;j++)
{ //преобразовав элемент таблицы к типу char*,
//копируем его во вспомогательную строку str
strcpy(str,Form1->StringGrid1->Cells[j][i].c_str());
//выводим побайтно содержимое str в файл
outfile.write((char*)&str,50);
}
}
outfile.close();//закрываем файл
}
}
//---------------------------------------------------------------------------
//выводим список из файла в таблицу
//по данным таблицы формируем список в оперативной памяти
void __fastcall TForm1::FileOpen1Execute(TObject *Sender)
{
spisok.clear();//уничтожаем список в оперативной памяти
//открываем файл на чтение с выбранным при сохранении именем
ifstream infile(fn.c_str(),ios::in);
if(!infile) //проверка, удалось ли открыть файл
{
MessageBox(NULL,"Файл не удается открыть!","Ошибка",0);
return;
}
//в переменную s читаем из файла количество элементов в списке
infile.read((char*)&s,sizeof(s));
//читаем файл в таблицу
for(int i=1; i<=s; i++)
{
Form1->StringGrid1->RowCount++;//добавляем строку в таблице
for(int j=0;j<8;j++)
{ //читаем в строку str из файла очередную запись в 50 байт
infile.read((char*)&str,50);
//из строки str переносим запись в элемент таблицы
Form1->StringGrid1->Cells[j][i]=(AnsiString)str;
}
}
infile.close();//закрываем файл, открытый на чтение
//из данных строк таблицы формируем элементы списка
//элементы списка добавляем в список
for(int i=1; i<=s; i++)
{
if(StringGrid1->Cells[1][i]=="Bike")
{ //формируем элемент списка - велосипед
TBike* bike=new TBike;
strcpy(bike->date,StringGrid1->Cells[3][i].c_str());
strcpy(bike->comp,StringGrid1->Cells[4][i].c_str());
bike->diam=StrToInt(StringGrid1->Cells[5][i]);
bike->weight=StrToFloat(StringGrid1->Cells[6][i]);
bike->speeds=StrToInt(StringGrid1->Cells[7][i]);
spisok.append_bike(bike);//добавляем в список
}
if(StringGrid1->Cells[1][i]=="Roll")
{ //формируем элемент списка - роликовые коньки
TRoll* roll=new TRoll;
strcpy(roll->date,StringGrid1->Cells[3][i].c_str());
strcpy(roll->comp,StringGrid1->Cells[4][i].c_str());
roll->diam=StrToInt(StringGrid1->Cells[5][i]);
spisok.append_roll(roll);//добавляем в список
}
}
spisok.out_list(); //выводим прочитанный список в таблицу
//вывод информации о прочитанном списке
StatusBar1->SimpleText="Количество подсписков - "+
IntToStr(spisok.count_dsp)+" "+
"Количество элементов в списке - "+
IntToStr(spisok.count_elem_sp);
}
//---------------------------------------------------------------------------
//сохраняем как...
void __fastcall TForm1::FileSaveAs1Execute(TObject *Sender)
{
//выбранное ранее имя файла заносится в свойство FileName
//компонента SaveDialog1 и предлагается пользователю по умолчанию
SaveDialog1->FileName=fn;
//если при открытии диалога пользователь выбрал новое имя
if(SaveDialog1->Execute())
{ //то новое имя файла сохраняется в строке fn
fn=SaveDialog1->FileName;
//создается и открывается для записи файл с новым именем
ofstream outfile(fn.c_str(),ios::out);
if(!outfile) //проверка, удалось ли создать и открыть файл
{
MessageBox(NULL,"Файл не удается создать!","Ошибка",0);
return;
}
//в переменную s заносим количество элементов в списке
s=spisok.count_elem_sp;
//выводим в файл число из переменной s побайтно
outfile.write((char*)&s,sizeof(s));
//из таблицы список выводим в файл
for(int i=1; i<=s; i++)
{
for(int j=0;j<8;j++)
{ //преобразовав элемент таблицы к типу char*,
//копируем его в вспомогательную строку str
strcpy(str,Form1->StringGrid1->Cells[j][i].c_str());
//выводим побайтно содержимое str в файл
outfile.write((char*)&str,50);
}
}
outfile.close(); //закрываем файл
}
}
//---------------------------------------------------------------------------
Контрольные вопросы
1.Расскажите о назначении базового класса.
2.Объясните содержание класса link, TBike, TRoll, list.
3.Как выполняется конструктор класса link, TBike, TRoll, list?
4.Как выполняется деструктор класса link, TBike, TRoll, list?
5.Укажите в коде точки, где вызывается конструктор класса link, TBike, TRoll, list.
6.Укажите в коде точки, где вызывается деструктор класса link, TBike, TRoll, list.
7.Как нужно изменить остальное содержание класса link, TBike, TRoll, list, если данные-элементы класса из открытой части класса перенести в закрытую часть класса?
8.Объясните, как в список заносится первый элемент.
9.Объясните, как в список добавляется второй и последующие элементы с разными типами, отличающимися от типа первого элемента.
10.Объясните, как добавляется элемент в подсписок.
11.Как добавляется в список новый подсписок?
12.Когда и как переназначаются указатели на начало и конец списка?
13.Как удалить элемент из первого подсписка (элемент – единственный в подсписке, первый в подсписке, последний в подсписке, находится внутри подсписка)?
14.Как удалить элемент из последнего подсписка (элемент – единственный в подсписке, первый в подсписке, последний в подсписке, находится внутри подсписка)?
15.Как удалить элемент из внутреннего подсписка (элемент – единственный в подсписке, первый в подсписке, последний в подсписке, находится внутри подсписка)?
16.Как удалить подсписок (первый, последний, внутренний, из одного элемента, из нескольких элементов)?
17.Как уничтожить список?
18.Как вывести список из ОП в таблицу?
19.Расскажите, как список сохранить в файле.
20.Как вывести список из файла в таблицу?
21.Как ввести список в ОП из таблицы? из файла, минуя таблицу?
22.Как по выделенной в таблице ячейке определить положение удаляемого элемента? подсписка?
23.Расскажите о назначении и возможностях диспетчера действий ActionManager. Что относится к полосам дествий ActionManager?
24.Расскажите об использовании Редактора Действий ActionManager.
25.Как создать меню, инструментальную панель с помощью ActionManager?
26.Как связать меню, инструментальную панель с ImageList?
27.Как сохранить настройки полос действий ActionManager?
Задания
1.Используя двунаправленный список, написать и протестировать функции, реализующие отдельные действия при игре в “новое домино”, в котором кроме традиционных правил игрок может на каждом ходу заменить любую конечную кость на свою. Необходимы следующие функции: а)проверить, можно ли сделать ход; б)сделать ход; в)проверить, можно ли сделать замену, г)заменить кость; д)определить, закончена ли игра.
2.Написать программу сложения двух длинных целых чисел, представленных в виде строк, используя круговой список.
3.Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для каждого поезда указывается: номер поезда, станция назначения, время отправления. Данные в информационной системе организованы в виде линейного списка. Составить программу, которая: 1)обеспечивает первоначальный ввод данных в информационную систему и формирование линейного списка; 2)производит вывод всего списка; 3)вводит номер поезда и выводит все данные об этом поезде; 4)вводит название станции назначения и выводит данные обо всех поездах, следующих до этой станции. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
4.На междугородной телефонной станции картотека абонентов, содержащая сведения о телефонах и их владельцах, организована как линейный список. Составить программу, которая: 1)обеспечивает начальное формирование картотеки в виде линейного списка; 2)производит вывод всей картотеки; 3)вводит номер телефона и время разговора; 4)выводит извещение на оплату телефонного разговора. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
5.Сложить два многочлена, используя представление многочлена в виде списка, в котором элементы расположены в порядке убывания степеней x, а поля элемента содержат соответственно коэффициент при x, степень x, указатель на следующий элемент. Нулевые слагаемые исключить из результирующего списка.
6.Составить программу, которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах содержат: номер УДК, фамилию и инициалы автора, название, год издания, количество экземпляров данной книги в библиотеке. Программа должна обеспечивать: а)начальное формирование данных о всех книгах в библиотеке в виде списка; б)добавление данных о книгах, вновь поступающих в библиотеку; в)удаление данных о списываемых книгах; г)по запросу выдавать сведения о наличии книг в библиотеке, упорядоченные по годам издания.
7.Используя представление многочлена в виде списка в порядке убывания степеней x, по многочлену S(x) построить его производную - многочлен P(x).
8.Картотека в бюро обмена квартир организована как линейный список. Сведения о каждой квартире содержат: количество комнат, этаж, площадь, адрес. Составить программу, которая обеспечивает: а)начальное формирование картотеки; б)ввод заявки на обмен; в)поиск в картотеке подходящего варианта: при равенстве количества комнат и этажа и различии площадей в пределах 10% выводится соответствующая карточка и удаляется из списка, в противном случае поступившая заявка включается в список; г)вывод всего списка. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
9.Перемножить два многочлена, задав их в виде списков.
10.Анкета для опроса населения содержит две группы вопросов. Первая группа содержит сведения о респонденте: возраст, пол, образование (начальное, среднее, высшее). Вторая группа содержит собственно вопрос анкеты, ответ на который либо ДА, либо НЕТ. Составить программу, которая: 1)обеспечивает начальный ввод анкет и формирует из них линейный список; 2)на основе анализа анкет выдает ответы на следующие вопросы: а)сколько мужчин старше 40 лет, имеющих высшее образование, ответили ДА на вопрос анкеты; б)сколько женщин моложе 30 лет, имеющих среднее образование, ответили НЕТ на вопрос анкеты; в)сколько мужчин моложе 25 лет, имеющих начальное образование, ответили ДА на вопрос анкеты; 3)производит вывод всех анкет и ответов на вопросы. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
11.Представить в виде списка распорядок рабочего дня. Написать функции для справок, изменения распорядка.
12.Написать и протестировать функции для включения, исключения и поиска элемента кругового списка для: а)списка без заголовка; б)списка с заголовком (заголовок может содержать некоторую информацию о списке, например, число элементов списка).
13.Написать программу, которая а)сцепляет два списка данных символьного типа; б)объединяет упорядоченные списки данных целого типа в единый упорядоченный список.
14.Написать программу, которая помещает заданное количество случайных целых чисел в диапазоне от 0 до 100 в упорядоченный список. Вычислить сумму элементов и среднее арифметическое.
15.Написать программу, которая создает связный список из заданного количества символов, а затем создаёт второй список - копию, но в обратной последовательности.
16.Написать программу, беспорядочно смешивающую буквы слова для создания слова-путаницы. Каждый символ в строке произвольно помещается либо в начало, либо в конец списка. Например, с вводом jumble последовательность случайных чисел 011001 создаёт lbjume.
17.Написать программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке. Сведения о каждом автобусе содержат: номер автобуса, фамилию водителя, номер маршрута. Программа должна обеспечивать: а)начальное формирование данных о всех автобусах в парке в виде списка; б)при выезде каждого автобуса из парка вводится номер автобуса, и программа удаляет данные об этом автобусе из списка автобусов, находящихся в парке, и записывает эти данные в список автобусов, находящихся на маршруте; в)при въезде каждого автобуса в парк вводится номер автобуса, и программа удаляет данные об этом автобусе из списка автобусов, находящихся на маршруте, и записывает эти данные в список автобусов, находящихся в парке; г)по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте.
18.Составить программу, которая содержит текущую информацию о заявках на авиабилеты. Каждая заявка содержит: пункт назначения, номер рейса, фамилию и инициалы пассажира, желаемую дату вылета. Программа должна обеспечивать: а)хранение всех заявок в виде списка; б)добавление заявок в список; в)удаление заявок; г)вывод заявок по заданному номеру рейса и дате вылета; д)вывод всех заявок.
19.Составить программу, которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах содержат: номер УДК, фамилию и инициалы автора, название, год издания, количество имеющихся экземпляров. Программа должна обеспечивать: а)начальное формирование данных о всех книгах в библиотеке в виде списка; б)при взятии каждой книги вводится номер УДК, и программа уменьшает значение количества книг на единицу или выдает сообщение о том, что требуемой книги в библиотеке нет или требуемая книга находится на руках; в)при возвращении каждой книги вводится номер УДК, и программа увеличивает значение количества книг на единицу; г)по запросу выдаются сведения о наличии книг в библиотеке.
20.Написать программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке. Сведения о каждом автобусе содержат: номер автобуса, фамилию и инициалы водителя, номер маршрута, признак того, где находится автобус – на маршруте или а парке. Программа должна обеспечивать: а)начальное формирование данных о всех автобусах в виде списка; б)при выезде каждого автобуса из парка вводится номер автобуса, и программа устанавливает значение признака “автобус на маршруте”; в)при въезде каждого автобуса в парк вводится номер автобуса, и программа устанавливает значение признака “автобус в парке”; г)по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте.
21.Составить программу, моделирующую заполнение гибкого диска. Общий объём памяти на диске 1,44 Мбайта. Файлы имеют произвольную длину от 72 байт до 128 Кбайт. В процессе работы файлы либо записываются на диск, либо удаляются с него. В начале работы файлы записываются подряд друг за другом. После удаления файла на диске образуется свободный участок памяти, и вновь записываемый файл размещается на свободном участке, либо, если файл не вмещается в свободный участок, размещается после последнего записанного файла. В случае, когда файл превосходит длину самого большого свободного участка, выдается аварийное сообщение. Требование на запись или удаление файла задается в командной строке, которая содержит имя файла, его длину в байтах, признак записи или удаления. Программа должна выдавать по запросу сведения о занятых и свободных участках памяти на диске. Указание: следует создать список занятых участков и список свободных участков памяти на диске.
22.В файловой системе каталог файлов организован как линейный список. Для каждого файла в каталоге содержатся следующие сведения: имя файла, дата создания, количество обращений к файлу. Составить программу, которая обеспечивает: а)начальное формирование каталога файлов; б)вывод каталога файлов; в)удаление файлов, дата создания которых меньше заданной; г)выборку файла с наибольшим количеством обращений. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
23.Предметный указатель организован как линейный список. Каждая компонента указателя содержит слово и номера страниц, на которых это слово встречается. Количество номеров страниц, относящихся к одному слову, от одного до десяти. Составить программу, которая обеспечивает: а)начальное формирование предметного указателя; б)вывод предметного указателя; в)вывод номеров страниц для заданного слова. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
24.Текст помощи для некоторой программы организован как линейный список. Каждая компонента текста помощи содержит термин (слово) и текст, содержащий пояснения к этому термину. Количество строк текста, относящихся к одному термину, от одной до пяти. Составить программу, которая обеспечивает: а)начальное формирование текста помощи; б)вывод текста помощи; в)вывод поясняющего текста для заданного термина. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
25.Используя двунаправленный список, написать программу сложения двух длинных целых чисел.
26.По введенной безошибочной записи многочлена от x построить его представление в виде списка, элемент которого содержит поля: коэффициент при x, степень x, указатель на следующий элемент ( в последнем - NULL).
27.Проверить на равенство два многочлена, представив каждый из многочленов в виде списка, в котором элементы расположены в порядке убывания степеней x.
28.В целочисленной точке x вычислить значение многочлена S(x), представленного в виде списка в порядке убывания степеней x..
29.Распечатать многочлен, заданный в виде списка, в обычном виде (например, так: 52y^3-6y^2+y).
30.Используя представление многочлена в виде списка, привести подобные члены в многочлене и расположить их по убыванию степеней x.
Дата добавления: 2020-10-14; просмотров: 497;