МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ.
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ им. К. Э. ЦИОЛКОВКОГО КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Курсовая работа второго курса второго семестра. Руководитель: Чернадский Дата сдачи: _____________ Подпись: _____________ Студент: Лицентов Д. Б. Группа: 3ИТ-2-26 Москва 1998 Постановка задачи. Необходимо реализовать список вида: Техническое описание программы.
В программе предусмотрена работа со списком, которая включает в себя: Создание нового вписка; Добавление элемента в список; Вывод списка на дисплей; Сохранение данных списка в файл; Читение данных из файла; Удаление списка из памяти компьютера; Поиск элемента в списке; Сортировка списка; Удаление элемента списка. Спецификация программы.
Ввод данных в программу может осуществляться двумя спосабами: ввод с клавиатуры или из файла.
Для работы с файлом необходимо на соответствующий запрос программы ввести имя файла, из которого будут взяты данные для построения списка.
Для нормальнойработы программы требуется PC совместимый компьютер и компилятор Borland 3. 01 и выше. При использование иного сочетая характеристик системы на которой будет тестироваться программа возможны некоторые расхождения с результатами теста, но в основном ничего страшного произойти не должно. Текст программы. #include #include class List {struct Tree {int Body; Tree *LP; Tree *RP; Tree(int Bdy=0) {Body=Bdy; LP=NULL; RP=NULL; } ~Tree() {Body=0; LP=NULL; RP=NULL; } }; public: List(int Digit=0); Tree *Root; List *LNext; List *LPrev; }; List: :List(int Digit) {Root=NULL; for (int i=Digit*10; i {Tree *PTree; PTree=new Tree(i); PTree->LP=NULL; PTree->RP=NULL; if (Root==NULL) Root=PTree; else {Tree *PTree1=Root; do {if (PTree1->LP! =NULL) PTree1=PTree1->LP; } while (PTree1->LP! =NULL); PTree1->LP=PTree; PTree=NULL; PTree1=NULL; } } } class TreeWork : private List {public: void TreeWorkStart(); private: int ElementQuantity; int Mass; int i; List *BegP; List *PList; int MainMenu(); int Work(int Task); int MakeNewList(); int AddElements(); int PrintList(); void EraseList(); int DeleteElement(); int FindElement(); int SubMenu(); int SubWork(int Task); int SortByIncrease(); int SortByDecrease(); int SaveList(); int OpenList(); protected: void GoThroughTree(Tree *L); void Erase(Tree *L); }; int TreeWork: :MainMenu() {cout cout cout cout cout cout cout cout cout cout cout cout int i; do {cin>>i; if (i9) cout } while (i9); return i; } int TreeWork: :SubMenu() {cout cout cout int i; cout do {cin>>i; if (i2) cout } while (i2); return i; } int TreeWork: :SubWork(int Task) {switch (Task) {case 1 : SortByIncrease(); break; //Increase case 2 : SortByDecrease(); break; //Decrease } return 0; } int TreeWork: :Work(int Task) {switch (Task)
{case 1 : ElementQuantity=MakeNewList(); break; //Make New List case 2 : ElementQuantity+=AddElements(); break; //Add Element case 3 : PrintList(); break; //Print List case 4 : DeleteElement(); break; //Delete Element case 5 : SaveList(); break; //Save List case 6 : ElementQuantity=0; EraseList(); break; //Erase List case 7 : OpenList(); break; //Open File case 8 : FindElement(); break; //Find Element case 9 : SubWork(SubMenu()); break; //Sort List case 0 : EraseList(); return -1; //Exit } return 0; } void TreeWork: :TreeWorkStart() {ElementQuantity=0; do {} while (Work(MainMenu())! =-1); } int TreeWork: :MakeNewList() {if (BegP! =NULL) {cout int Quant; cout do {cin>>Quant; if (Quant cout } while (Quant for (int i=0; i {cout int Digit; cin>>Digit; PList=new List(Digit); if (BegP==NULL) {BegP=PList; BegP->LNext=BegP; BegP->LPrev=BegP; PList=NULL; } else {List *PList1=BegP->LPrev; if (PList1==BegP) {BegP->LNext=PList; BegP->LPrev=PList; PList->LNext=BegP; PList->LPrev=BegP; PList=NULL; PList1=NULL; } else {BegP->LPrev=PList; PList1->LNext=PList; PList->LNext=BegP; PList->LPrev=PList1; PList=NULL; PList1=NULL; } } } return Quant; } int TreeWork: :AddElements() {if (BegP==NULL) {MakeNewList(); return 0; } int Quant; cout do {cin>>Quant; if (Quant cout } while (Quant for (int i=0; i {cout int Digit; cin>>Digit; PList=new List(Digit); List *PList1=BegP->LPrev; if (PList1==BegP) {BegP->LNext=PList; BegP->LPrev=PList; PList->LPrev=BegP; PList->LNext=BegP; PList1=NULL; PList=NULL; } else {BegP->LPrev=PList; PList->LNext=BegP; PList->LPrev=PList1; PList1->LNext=PList; PList=NULL; PList1=NULL; } } return Quant; } int TreeWork: :PrintList() {if (BegP==NULL) {cout cout PList=BegP; int i=1; do {cout GoThroughTree(PList->Root); cout i++; PList=PList->LNext; } while (PList! =BegP); return 0; } void TreeWork: :GoThroughTree(Tree *L) {Tree *PL=L, *PL1; if (PL->LP! =NULL) {PL1=PL; PL=PL->LP; cout
Body
Body GoThroughTree(PL); } if (PL->RP! =NULL) {PL1=PL; PL=PL->RP; cout
Body
Body GoThroughTree(PL); } } void TreeWork: :Erase(Tree *L) {Tree *PL=L; if (PL->LP! =NULL) {PL=PL->LP; Erase(PL); } if (PL->RP! =NULL) {PL=PL->RP; Erase(PL); } PL->LP=NULL; PL->RP=NULL; } void TreeWork: :EraseList() {if (BegP! =NULL) {do {List *PList1=BegP->LNext; PList=PList1->LNext; BegP->LNext=PList; PList->LPrev=BegP; Erase(PList1->Root); delete [] PList1; } while (PList! =BegP); BegP=NULL; PList=NULL; } } int TreeWork: :DeleteElement() {cout int Number=0; cin>>Number; if (Number>ElementQuantity || Number {cout Number--; PList=BegP; for (int i=0; i PList=PList->LNext; List *PList1=PList->LNext, *PList2=PList->LPrev; if (PList==BegP) {PList1->LPrev=PList2; PList2->LNext=PList1; PList->LNext=NULL; PList->LPrev=NULL; delete [] PList; BegP=PList1; PList1=NULL; PList2=NULL; } else {PList1->LPrev=PList2; PList2->LNext=PList1; PList->LNext=NULL; PList->LPrev=NULL; delete [] PList; PList1=NULL; PList2=NULL; } ElementQuantity--; return 0; } int TreeWork: :FindElement() {cout int Number=0; cin>>Number; PList=BegP; do {Tree *PT=PList->Root; if (Number>PT->Body && Number
Body+10) {cout GoThroughTree(PList->Root); PList=NULL; cout PList=PList->LNext; } while (PList! =BegP); cout PList=NULL; return -1; } int TreeWork: :SortByIncrease() { if(BegP==NULL) {cout List *PList1=BegP; PList=BegP; do {do {if (PList1->Root->Body>PList->Root->Body) {Tree *PT; PT=PList1->Root; PList1->Root=PList->Root; PList->Root=PT; PT=NULL; } PList1=PList1->LNext; } while (PList1! =BegP); PList=PList->LNext; } while (PList! =BegP); return 0; } int TreeWork: :SortByDecrease() { if(BegP==NULL) {cout List *PList1=BegP; PList=BegP; do {do {if (PList1->Root->Body
Root->Body) {Tree *PT; PT=PList1->Root; PList1->Root=PList->Root; PList->Root=PT; PT=NULL; } PList1=PList1->LNext; } while (PList1! =BegP); PList=PList->LNext; } while (PList! =BegP); return 0; } int TreeWork: :SaveList() {if (BegP==NULL) {cout ofstream F; char *FileName=new char[25]; cout>FileName; F. open(FileName); PList=BegP; do {i=0; Mass=PList->Root->Body; PList=PList->LNext; if (PList! =BegP) F else F } while (PList! =BegP); F. close(); delete [] FileName; return 0; } int TreeWork: :OpenList() {if (BegP! =NULL)
{cout char *FileName=new char[25]; cin>>FileName; ifstream f; ElementQuantity=0; f. open(FileName); char Next; Next=f. peek(); while (Next! =EOF) { f>>Mass; PList=new List(Mass/10); if (BegP==NULL) {BegP=PList; BegP->LNext=BegP; BegP->LPrev=BegP; PList=NULL; } else {List *PList1=BegP->LPrev; if (PList1==BegP) {BegP->LNext=PList; BegP->LPrev=PList; PList->LNext=BegP; PList->LPrev=BegP; PList=NULL; PList1=NULL; } else {BegP->LPrev=PList; PList1->LNext=PList; PList->LNext=BegP; PList->LPrev=PList1; PList=NULL; PList1=NULL; } } Next=f. peek(); ElementQuantity++; } f. close(); delete [] FileName; return 0; } TreeWork TW; void main() {TW. TreeWorkStart(); } Результаты работы программы. Начало работы: Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : Для создания списка выбираем пункт 1: Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 1 Input kol-vo of elements: Вводим количество элементов в списке (предположим 4): Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 1 Input kol-vo of elements: 4 Input digit: Успешное завершение ввода списка: Input kol-vo of elements: 4 Input digit: 1 Input digit: 2 Input digit: 3 Input digit: 4 Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice :
После ввода списка попадаем в главное меню где выбираем пункт добавления элемента : Input digit: 1 Input digit: 2 Input digit: 3 Input digit: 4 Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 2 Input kol-vo of elements:
Программа просит ввести количечтво элементов которое мы хотим добавит к нашему списку. Вводим 1 (для примера): Input digit: 2 Input digit: 3 Input digit: 4 Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 2 Input kol-vo of elements: 1 Input digit: Далее происходит ввод списка как было описано выше.
После удачного завершения добавления элемента в список мы вновь попадаем в главное меню, где выбираем пункт вывода списка на экран монитора: 1 element: 1234 2 element: 2345 3 element: 3456 4 element: 4567 5 element: 2345 Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice :
Быстро проскользнув мимо Ваших глаз непонятные данные вы снова попадаете в главное меню, где выбираете пункт удаление элемента: 2 element: 2345 3 element: 3456 4 element: 4567 5 element: 2345 Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 4 Input number of element: 5
После чего элемент с введённым номером удален. После удачного завершения удаления элемента Вы снова попадаете в главное меню, где выбираете пункт сохранение списка: Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 5 Input file name: demon13. txt
После ввода имени файла данные из списка попадают на диск. И вы снова в главном меню, где выбираете удаление списка: 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 5 Input file name: demon13. txt Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 6
После чего все данные в списке безвозвратно умирают и Вы опять у главного списка, и выбираете Вы– открыть файл: 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 6 Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 7 Input file name: demon13. txt
После чего ваш список оживает и … не надо “и” - лучше продолжим – Вы в главном меню и Вы выбираете найти элемент: Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 8 Input number, you want to find: 2 The first element that we fined out: 1234
Вы вводите то что хотели найти и – находите в строчке ХХХХХ. Главное меню/Сортировка: Main Menu: 1. Make New List. 2. Add Element. 3. Print List. 4. Delete Element. 5. Save List. 6. Erase List. 7. Open File. 8. Find Element. 9. Sort List. 0. Exit. Your choice : 9 Sub Menu: 1. Sort list by increase. 2. Sort list by decrease. Your choice:
Ту мы можем сортировать по возрастанию или убыванию (ведь у человека всегда должен быть выбор! ). После сортировки Главное меню/Выход! Всё программа завершилась успешно! А поскольку эти тесты никто не читает, то можно сказать что компьютеры в нашем институте сделаны из дуба.
МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ.
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ им. К. Э. ЦИОЛКОВКОГО КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Лаботраторные работы второго курса второго семестра. Руководитель: Чернадский Дата сдачи: _____________ Подпись: _____________ Студент: Лицентов Д. Б. Группа: 3ИТ-2-26 Москва 1998 Лабораторная работа номер 1
Задание: вывести значение функции sinh(x)/sin(x) и её производно на интервале от А до Б в десяти точках. Значения производной функции должно считаться двумя способами: первое прямым вычислением и второе в помощью рядов. Значение производной функции должно считаться до машинного нуля. Текст программы. #include #include double function(double x) { return sinh(x)/sin(x); } double dir(double x) { return (cosh(x)*sin(x)-cos(x)*sinh(x))/(sin(x)*sin(x)); } double *derives( double (*f) (double), //функция double *x, //массив значений иксов
double k, //кол-во точек на интервале в которос берется производная double *D, //массив дельта double a, //граница отрезка double b)//граница отрезка { x = new double [10]; D = new double [10]; double *pr = new double[10]; double s = 0; for (int i=0; i { x[i] =s+a; s = (b-a)/k; a+=s; double d = s; //дельта int m = 0; double d_pred, f_pred, f0=0; do { d = d /2; f_pred = f0; f0 = (-f(x[i])+f(x[i]+d))/(d); m++; }
while (((f0! =f_pred)&&(m pr[i]=f_pred; //значения производной cout cout } return pr; } void main(void) { double a , b , *x , *D, (*f)(double)=function, *result; int i ; do { i=0; cout cin >> a; cout cin >> b; if (a>b) {cout i=1; } } while (i==1); result = derives(function, x, 10, D, a, b); } Результаты работы. Input a: 1 Input b: 5 x[0] 1 0. 93704 0. 937041 3. 9346e-311 33 x[1] 1. 8 3. 895777 3. 895777 3. 9346e-311 53 x[2] 2. 12 7. 899375 7. 899994 3. 9346e-311 39
x[3] 2. 408 17. 496182 17. 496226 3. 9346e-311 33 x[4] 2. 6672 46. 255806 46. 383292 3. 9346e-311 43 x[5] 2. 90048 203. 810226 192. 558503 3. 9346e-311 47 x[6] 3. 110432 11886. 359648 11886. 359648 3. 9346e-311 51 x[7] 3. 299389 454. 965295 454. 757697 3. 9346e-311 43 x[8] 3. 46945 96. 558946 96. 562709 3. 9346e-311 36 x[9] 3. 622505 36. 997996 36. 99798 3. 9346e-311 32
Сперва прога просит ввести интервал. Далее вывоти плоды своей работы: первый столбик –номер эксперимента второй столбук - значение финкйии третий столбик значение которое получается “напрямую”
четвёртый столбик - значение которое получается вычислением с помощью рядов пятый столбик – машинный ноль
шестой столбик - количество итераций которое было необходимо для вычисления производной функции до машинного нуля. Лабороторная работа №2
Задание: написать программу которая просит ввести строку, нарезает эту строку на подстроки и выводит их в обратном порядке. Текст программы. #include #include #include class stroka { char *ch; int len; friend int operator == (stroka & a , stroka & b); friend stroka* Friend0(stroka c); friend istream& operator >>(istream & in, stroka & a ); friend ostream& operator public : stroka(int N=80) {ch = new char [N]; ch[0]='\0'; } stroka (const char *s) { int j=0; while (ch[j++]); ch = new char[len]; ch[len] = '\0'; len--; for (int i=0; i ch[i]= s[i]; } void string1(void) { int j=0; while (ch[j++]); len = j-1; } ~stroka (){delete [] ch ; } } ; void main() { stroka s0, *s1; cin >> s0; s0. string1(); cout } stroka* Friend0(stroka c) { stroka *GodDame_Mother_F_1; stroka *GodDame_Mother_F_2; stroka *GodDame_Mother_F_; GodDame_Mother_F_1 = new stroka[c. len]; GodDame_Mother_F_2 = new stroka[c. len]; GodDame_Mother_F_ = new stroka[c. len]; int i=0, j=0, k=-1, h=0, g=0, f=0; for(i=0; i
if(((c. ch[i]==' '||c. ch[i]=='. ')&&((c. ch[i+1]! =' ')||(c. ch[i-1]! =' ')))){ //cout k++; //j=0; g=0; for(k; k if(c. ch[k]! =' '){ //cout GodDame_Mother_F_1[0]. ch[j++]=c. ch[k]; GodDame_Mother_F_2[0]. ch[g++]=c. ch[k]; } } h++; //for(f=0; f //cout int s, s1; for(int d=i; d s1=0; for(f=0; f s=0; if(GodDame_Mother_F_2[0]. ch[f]! =c. ch[d+f]){ //cout s=1; } if(s! =0){s1=1; } } if(s1==0&&GodDame_Mother_F_2[0]. ch[f+1]==' '){ cout for(int a=0; a } } } } return GodDame_Mother_F_; } int operator == (stroka & a, stroka & b) { int k=0; a. string1(); b. string1(); if (a. len! =b. len) k--; else for (int i=0; i if (a. ch[i]! =b. ch[i]) {k--; break; } return k; } istream &operator >>(istream &in, stroka & A) { cout in. getline(A. ch, 80, '\n'); return in; } ostream &operator { out return out; } Результат работы. Input string : demon13 13 mon de Лабораторная работа №3
Написать программу с наследованием классов и виртуальными функциями. Текст программы. #include class complex { public : double x, y; virtual void fun (int x=0, int y=0)=0; }; class What_the_hell_we_got: public complex { public : void fun (int x, int y) {cout }; class Plusssssss: public complex { public : void fun (int x=0, int y=0) {cout }; class Umnojinia : public What_the_hell_we_got {public : void fun (int x) {cout }; class xz : public Plusssssss , public Umnojinia {public : void fun (int x) {cout }; void main (void) { What_the_hell_we_got D, *pcom1 = &D; Plusssssss C2, *pc2 = &C2; int k, x; cin>>x>>k; pcom1 -> fun(k, x); pc2 -> fun (k, x); Umnojinia C3, *pc3 = & C3; pc3 -> fun (x); pcom1=pc3; pcom1->fun(k, x); xz C4, *pc4 = & C4; pc4 -> fun (x); } Результаты работы 3 4 What_the_hell_we_got 4 3 Plusssssss x+y =7 Umnojinia x*x =9 What_the_hell_we_got 4 3 Xzubla x^3 =27
Вводим два числа и смотрим что получится при сложение умножении или возведение в третью степень.