|
Реферат: Программирование на С++Реферат: Программирование на С++МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ. МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ им. К.Э. ЦИОЛКОВКОГО КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Курсовая работа второго курса второго семестра. Руководитель: Чернадский Дата сдачи: _____________ Подпись: _____________Студент: Лицентов Д.Б. Группа: 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 int TreeWork::SubMenu() choice: "; 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; coutBodyBody GoThroughTree(PL);} if (PL->RP!=NULL) {PL1=PL; PL=PL->RP; coutBodyBody 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 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();} Результаты работы программы. Начало работы:
Для создания списка выбираем пункт 1:
Вводим количество элементов в списке (предположим 4):
Успешное завершение ввода списка:
После ввода списка попадаем в главное меню где выбираем пункт добавления элемента :
Программа просит ввести количечтво элементов которое мы хотим добавит к нашему списку. Вводим 1 (для примера):
Далее происходит ввод списка как было описано выше. После удачного завершения добавления элемента в список мы вновь попадаем в главное меню, где выбираем пункт вывода списка на экран монитора:
Быстро проскользнув мимо Ваших глаз непонятные данные вы снова попадаете в главное меню, где выбираете пункт удаление элемента:
После чего элемент с введённым номером удален. После удачного завершения удаления элемента Вы снова попадаете в главное меню, где выбираете пункт сохранение списка:
После ввода имени файла данные из списка попадают на диск. И вы снова в главном меню, где выбираете удаление списка:
После чего все данные в списке безвозвратно умирают и Вы опять у главного списка, и выбираете Вы – открыть файл:
После чего ваш список оживает и … не надо «и» - лучше продолжим – Вы в главном меню и Вы выбираете найти элемент:
Вы вводите то что хотели найти и – находите в строчке ХХХХХ. Главное меню/Сортировка:
Ту мы можем сортировать по возрастанию или убыванию (ведь у человека всегда должен быть выбор!). После сортировки Главное меню/Выход! Всё программа завершилась успешно! А поскольку эти тесты никто не читает, то можно сказать что компьютеры в нашем институте сделаны из дуба. МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ. МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ им. К.Э. ЦИОЛКОВКОГО КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Лаботраторные работы второго курса второго семестра. Руководитель: Чернадский Дата сдачи: _____________ Подпись: _____________Студент: Лицентов Д.Б. Группа: 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 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);} Результаты работы.
Сперва прога просит ввести интервал. Далее вывоти плоды своей работы:
Лабороторная работа №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; } Результат работы.
Лабораторная работа №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); } Результаты работы
Вводим два числа и смотрим что получится при сложение умножении или возведение в третью степень. |
НОВОСТИ |
ВХОД |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |