МИНИСТЕРСТВООБЩЕГО И ПРОФЕССИОНАЛЬНОГООБРАЗОВАНИЯРОССИЙСКОЙФЕДЕРАЦИИ.
МОСКОВСКИЙГОСУДАРСТВЕННЫЙАВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙУНИВЕРСИТЕТ
им. К.Э. ЦИОЛКОВКОГО
КАФЕДРАИНФОРМАЦИОННЫХТЕХНОЛОГИЙ
Курсоваяработа второгокурса второгосеместра.
Руководитель: Чернадский
Датасдачи: _____________
Студент:Лицентов Д.Б.
Группа: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(intDigit=0);
Tree *Root;
List *LNext;
List *LPrev;
};
List::List(intDigit)
{Root=NULL;
for (inti=Digit*10; i {Tree *PTree; PTree=newTree(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: voidTreeWorkStart(); private: intElementQuantity; int Mass; int i; List *BegP; List *PList; int MainMenu(); int Work(intTask); intMakeNewList(); intAddElements(); int PrintList(); void EraseList(); intDeleteElement(); intFindElement(); int SubMenu(); int SubWork(intTask); intSortByIncrease(); intSortByDecrease(); int SaveList(); int OpenList(); protected: voidGoThroughTree(Tree *L); void Erase(Tree*L); }; intTreeWork::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; } intTreeWork::SubMenu() {cout cout cout int i; cout do {cin>>i; if (i2) cout } while (i2); return i; } intTreeWork::SubWork(int Task) {switch (Task) {case 1 :SortByIncrease(); break; //Increase case 2 :SortByDecrease(); break; //Decrease } return 0; } intTreeWork::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; } voidTreeWork::TreeWorkStart() {ElementQuantity=0; do {} while(Work(MainMenu())!=-1); } intTreeWork::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=newList(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; } intTreeWork::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=newList(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; } intTreeWork::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; } voidTreeWork::GoThroughTree(Tree *L) {Tree *PL=L, *PL1; if (PL->LP!=NULL) {PL1=PL; PL=PL->LP; coutBodyBody GoThroughTree(PL);} if (PL->RP!=NULL) {PL1=PL; PL=PL->RP; coutBodyBody GoThroughTree(PL);} } voidTreeWork::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; } voidTreeWork::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; } } intTreeWork::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; } intTreeWork::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; } intTreeWork::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; } intTreeWork::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; } intTreeWork::SaveList() {if (BegP==NULL) {cout ofstream F; char *FileName=newchar[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; } intTreeWork::OpenList() {if (BegP!=NULL) {cout cout char *FileName=newchar[25]; cin>>FileName; ifstream f; ElementQuantity=0; f.open(FileName); char Next; Next=f.peek(); while (Next!=EOF) { f>>Mass; PList=newList(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 Задание: вывестизначение функцииsinh(x)/sin(x) и её производнона интервалеот А до Б в десятиточках. Значенияпроизводнойфункции должносчитаться двумяспособами:первое прямымвычислениеми второе в помощьюрядов. Значениепроизводнойфункции должносчитаться домашинного нуля. Текст программы. #include #include doublefunction(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,//массив дельта doublea,//граница отрезка doubleb)//граница отрезка { x = new double[10]; D = new double[10]; double *pr = newdouble[10]; double s = 0; for (inti=0;i { x[i] =s+a; s = (b-a)/k; a+=s; double d =s;//дельта int m = 0; doubled_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 D[i]=d_pred;//массив значенийдельта 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 Сперва прогапросит ввестиинтервал. Далеевывоти плодысвоей работы: первый столбик–номер эксперимента второй столбук- значение финкйии третий столбикзначение котороеполучается«напрямую» четвёртыйстолбик - значениекоторое получаетсявычислениемс помощью рядов пятый столбик– машинныйноль шестой столбик- количествоитераций котороебыло необходимодля вычисленияпроизводнойфункции домашинногонуля. Задание: написатьпрограммукоторая проситввести строку,нарезает этустроку на подстрокии выводит ихв обратномпорядке. Текст программы. #include #include #include class stroka { char *ch; int len; friend intoperator == (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 = newchar[len]; ch[len] = '\0'; len--; for (inti=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]; inti=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(intd=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(inta=0;a } } } } returnGodDame_Mother_F_; } int operator ==(stroka & a,stroka & b) { int k=0; a.string1(); b.string1(); if (a.len!=b.len)k--; else for (inti=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 Написать программус наследованиемклассов ивиртуальнымифункциями. Текст программы. #include class complex { public : double x,y; virtual void fun(int x=0, int y=0)=0; }; classWhat_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 : publicPlusssssss , public Umnojinia {public : void fun (int x) {cout }; void main (void) {What_the_hell_we_gotD, *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 Вводим двачисла и смотримчто получитсяпри сложениеумножении иливозведениев третью степень.
Подпись:_____________
Москва
Лабораторнаяработа номер1
Лабороторнаяработа №2
Лабораторнаяработа №3
Результатыработы