рефераты

Рефераты

рефераты   Главная
рефераты   Краткое содержание
      произведений
рефераты   Архитектура
рефераты   Астрономия
рефераты   Банковское дело
      и кредитование
рефераты   Безопасность
      жизнедеятельности
рефераты   Биографии
рефераты   Биология
рефераты   Биржевое дело
рефераты   Бухгалтерия и аудит
рефераты   Военное дело
рефераты   География
рефераты   Геодезия
рефераты   Геология
рефераты   Гражданская оборона
рефераты   Животные
рефераты   Здоровье
рефераты   Земельное право
рефераты   Иностранные языки
      лингвистика
рефераты   Искусство
рефераты   Историческая личность
рефераты   История
рефераты   История отечественного
      государства и права
рефераты   История политичиских
      учений
рефераты   История техники
рефераты   Компьютерные сети
рефераты   Компьютеры ЭВМ
рефераты   Криминалистика и
      криминология
рефераты   Культурология
рефераты   Литература
рефераты   Литература языковедение
рефераты   Маркетинг товароведение
      реклама
рефераты   Математика
рефераты   Материаловедение
рефераты   Медицина
рефераты   Медицина здоровье отдых
рефераты   Менеджмент (теория
      управления и организации)
рефераты   Металлургия
рефераты   Москвоведение
рефераты   Музыка
рефераты   Наука и техника
рефераты   Нотариат
рефераты   Общениеэтика семья брак
рефераты   Педагогика
рефераты   Право
рефераты   Программирование
      базы данных
рефераты   Программное обеспечение
рефераты   Промышленность
      сельское хозяйство
рефераты   Психология
рефераты   Радиоэлектроника
      компьютеры
      и перифирийные устройства
рефераты   Реклама
рефераты   Религия
рефераты   Сексология
рефераты   Социология
рефераты   Теория государства и права
рефераты   Технология
рефераты   Физика
рефераты   Физкультура и спорт
рефераты   Философия
рефераты   Финансовое право
рефераты   Химия - рефераты
рефераты   Хозяйственное право
рефераты   Ценный бумаги
рефераты   Экологическое право
рефераты   Экология
рефераты   Экономика
рефераты   Экономика
      предпринимательство
рефераты   Юридическая психология

 
 
 

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


МИНИСТЕРСТВО
ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ.
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ
им. К.Э. ЦИОЛКОВКОГО
КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
Курсовая
работа второго курса второго семестра.
 Руководитель:        Чернадский
Дата сдачи: _____________
                                                          Подпись: _____________
Студент:
Лицентов Д.Б.
Группа: 3ИТ-2-26
Москва
1998
Постановка задачи.
    Необходимо реализовать список вида:
Техническое описание
программы.
    В программе предусмотрена работа со списком,
которая включает в себя:
1.
Создание
нового вписка;
2.
Добавление
элемента в список;
3.
Вывод
списка на дисплей;
4.
Сохранение
данных списка в файл;
5.
Читение
данных из файла;
6.
Удаление
списка из памяти компьютера;
7.
Поиск
элемента в списке;
8.
Сортировка
списка;
9.
Удаление
элемента списка.
Спецификация программы.
    Ввод данных в программу может осуществляться
двумя спосабами: ввод с клавиатуры или из файла.
Для
работы  с файлом необходимо на
соответствующий запрос программы ввести имя файла, из которого будут взяты
данные для построения списка.
    Для нормальной работы программы
требуется PC совместимый компьютер и компилятор Borland 3.01 и выше. При использование иного сочетая характеристик системы на
которой будет тестироваться программа возможны некоторые расхождения с
результатами теста, но в основном ничего страшного произойти не должно.
Текст программы.
#include <iostream.h>
#include <fstream.h>
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<Digit*10+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()
  

int TreeWork::SubMenu()
 
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<<endl<<"You have existing list!"; return 0;}
  int Quant;
 
cout<<endl<<"Input quantity of elements: ";
  do
  
{cin>>Quant;
    if
(Quant<1)
    
cout<<endl<<"Error! Try againt: ";
   }
  while
(Quant<1);
  for (int i=0;
i<Quant; i++)
  
{cout<<endl<<"Input digit: ";
    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<<endl<<"Input quantity of elements: ";
  do
  
{cin>>Quant;
    if
(Quant<1)
    
cout<<endl<<"Error! Try again: ";
   }
  while
(Quant<1);
  for (int i=0;
i<Quant; i++)
  
{cout<<endl<<"Input digit: ";
    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<<endl<<"The list is empty!"<<endl;
return -1;}
 
cout<<endl<<"Total elements:
"<<ElementQuantity<<endl;
  PList=BegP;
  int i=1;
  do
  
{cout<<endl<<" "<<i<<" element:
"<<endl;
   
GoThroughTree(PList->Root);
   
cout<<endl;
    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<<"("<<PL1->Body<<","<<PL->Body<<")
";
   
GoThroughTree(PL);}
  if
(PL->RP!=NULL)
   {PL1=PL;
    PL=PL->RP;
   
cout<<"("<<PL1->Body<<","<<PL->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<<endl<<"Input number of element: ";
  int Number=0;
 
cin>>Number;
  if
(Number>ElementQuantity || Number<0)
  
{cout<<endl<<"Error!"; return -1;}
  Number--;
  PList=BegP;
  for (int i=0;
i<Number; 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<<endl<<"Input number, you want to find:
";
  int Number=0;
 
cin>>Number;
  PList=BegP;
  do
   {Tree
*PT=PList->Root;
    if
(Number>PT->Body && Number<PT->Body+10)
    
{cout<<endl<<"Element with this number:
"<<endl;
     
GoThroughTree(PList->Root);
      PList=NULL;
cout<<endl; return 0;}
   
PList=PList->LNext;
   }
  while
(PList!=BegP);
 
cout<<endl<<"There aren't such number in
list!"<<endl;
  PList=NULL;
  return -1;
 }
int TreeWork::SortByIncrease()
 {
  if(BegP==NULL)
{cout<<endl<<"Error!"<<endl; return -1;}
  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<<endl<<"Error!"<<endl; return -1;}
  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::SaveList()
 {if (BegP==NULL)
  
{cout<<endl<<"The list is empty!"<<endl;
return -1;}
  ofstream F;
  char
*FileName=new char[25];
 
cout<<endl<<"Input file name: ";
cin>>FileName;
 
F.open(FileName);
  PList=BegP;
  do
   {i=0;
   
Mass=PList->Root->Body;
   
PList=PList->LNext;
    if
(PList!=BegP)
    
F<<Mass<<endl;
    else
    
F<<Mass;
   }
  while
(PList!=BegP);
  F.close();
  delete []
FileName;
  return 0;
 }
int TreeWork::OpenList()
 {if (BegP!=NULL)
  
{cout<<endl<<"The list is alredy
exist!"<<endl; return -1;}
 
cout<<endl<<"Input file name: ";
  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 <iostream.h>
#include <math.h>
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<10;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<=100)));//вычисляем
до машинного нуля
       D[i]=d_pred;//массив значений дельта
       pr[i]=f_pred;//значения производной
       cout << "\n x[" << i
<<"] " << x[i] << "\t"
<<f_pred<<"\t"
       <<dir(x[i])<<"\t"<<D[i];
       cout << "\t"<< m;
      }
 return pr;
}
void main(void)
{  double a , b ,
*x , *D, (*f)(double)=function,*result;
      int i ;
      do
      {  i=0;
            cout
<< "Input a:";
            cin
>> a;
            cout
<< "Input b:";
            cin
>> b;
            if
(a>b)
              {cout <<"Input a <b";
                  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<iostream.h>
#include<string.h>
#include<stdlib.h>
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
<<(ostream & out, stroka & a );
      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<len;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
<<"\n"<<*Friend0(s0);
}
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<=c.len;i++){
            if(((c.ch[i]=='
'||c.ch[i]=='.')&&((c.ch[i+1]!=' ')||(c.ch[i-1]!=' ')))){
                  //cout<<c.ch[i]<<"\tI
won!!!";
                  k++;
                  //j=0;
                  g=0;
                  for(k;k<i;k++){
                        if(c.ch[k]!='
'){
                              //cout<<c.ch[k];
                              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<g;f++)cout<<GodDame_Mother_F_2[0].ch[f];
            //cout<<'\n';
            int
s,s1;
            for(int
d=i;d<c.len;d++){
                  s1=0;
                        for(f=0;f<g;f++){
                              s=0;
                              if(GodDame_Mother_F_2[0].ch[f]!=c.ch[d+f]){
                                    //cout<<"I
won!!!!!";
                                    s=1;
                              }
                              if(s!=0){s1=1;}
                        }
                        if(s1==0&&GodDame_Mother_F_2[0].ch[f+1]=='
'){
                              cout<<"I
won!!!!!";
                              for(int
a=0;a<g;a++)cout<<GodDame_Mother_F_2[0].ch[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<a.len;i++)
             if (a.ch[i]!=b.ch[i]) {k--;break;}
      return k;
}
istream &operator >>(istream &in,stroka
& A)
{ cout <<"\n\tInput string : ";
 
in.getline(A.ch,80,'\n');
  return in;
}
ostream &operator <<(ostream &out,stroka
& A)
{ out << A.ch;
  return out;
}
Результат работы. Input string : demon13 13 mon de
Лабораторная работа №3
Написать программу с наследованием классов и виртуальными
функциями.
Текст программы.
#include <iostream.h>
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<<"\n What_the_hell_we_got "<<
x<<"\t"<<y;}
};
class Plusssssss: public complex
{ public :
 void fun (int
x=0, int y=0)
 
{cout<<"\n Plusssssss\tx+y ="<< x+y;}
};
class Umnojinia : public What_the_hell_we_got
{public :
 void fun (int x)
 
{cout<<"\n Umnojinia\tx*x ="<< x*x;}
};
class xz : public Plusssssss , public Umnojinia
{public :
 void fun (int x)
 
{cout<<"\n Xzubla\t\tx^3 ="<< x*x*x;}
};
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
Вводим два числа и смотрим что получится при сложение
умножении или возведение в третью степень.

© 2011 Рефераты