Смекни!
smekni.com

Программирование на С++

МИНИСТЕРСТВООБЩЕГО И ПРОФЕССИОНАЛЬНОГООБРАЗОВАНИЯРОССИЙСКОЙФЕДЕРАЦИИ.


МОСКОВСКИЙГОСУДАРСТВЕННЫЙАВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙУНИВЕРСИТЕТ

им. К.Э. ЦИОЛКОВКОГО


КАФЕДРАИНФОРМАЦИОННЫХТЕХНОЛОГИЙ


Курсоваяработа второгокурса второгосеместра.


Руководитель: Чернадский


Датасдачи: _____________


Подпись:_____________


Студент:Лицентов Д.Б.


Группа:3ИТ-2-26


Москва

1998

Постановказадачи.


Необходимореализоватьсписок вида:





Техническоеописание программы.


В программепредусмотренаработа со списком,которая включаетв себя:


  1. Созданиенового вписка;

  2. Добавлениеэлемента всписок;

  3. Выводсписка на дисплей;

  4. Сохранениеданных спискав файл;

  5. Читениеданных из файла;

  6. Удалениесписка из памятикомпьютера;

  7. Поискэлемента всписке;

  8. Сортировкасписка;

  9. Удалениеэлемента списка.


Спецификацияпрограммы.


Вводданных в программуможет осуществлятьсядвумя спосабами:ввод с клавиатурыили из файла.

Дляработы с файломнеобходимона соответствующийзапрос программыввести имяфайла, из которогобудут взятыданные дляпостроениясписка.


Длянормальнойработы программытребуется 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


Лабораторнаяработа номер1

Задание: вывестизначение функции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


Сперва прогапросит ввестиинтервал. Далеевывоти плодысвоей работы:

  • первый столбик–номер эксперимента

  • второй столбук- значение финкйии

  • третий столбикзначение котороеполучается«напрямую»

  • четвёртыйстолбик - значениекоторое получаетсявычислениемс помощью рядов

  • пятый столбик– машинныйноль

  • шестой столбик- количествоитераций котороебыло необходимодля вычисленияпроизводнойфункции домашинногонуля.


Лабороторнаяработа №2

Задание: написатьпрограммукоторая проситввести строку,нарезает этустроку на подстрокии выводит ихв обратномпорядке.


Текст программы.


#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



Лабораторнаяработа №3


Написать программус наследованиемклассов ивиртуальнымифункциями.


Текст программы.


#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


Вводим двачисла и смотримчто получитсяпри сложениеумножении иливозведениев третью степень.