АЯиП отчеты по лабам (кроме 24) (отчет 29)

Посмотреть архив целиком

Лабораторная работа 29.

Программирование с использованием классов в С++. Создание контейнеров.


Задача: Моделировать очередь, в качестве элементов которой могут использоваться числа и слова. Операции: добавление элемента, удаление элемента, печать элементов очереди. Создать класс - потомок, который содержит процедуру определения слова максимальной длины. Тестировать полученную модель.

В отчете представить структуру использованных классов и обосновать выбранную структуру представления данных.


Диаграмма классов:



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


Файл TElement.h


#ifndef _TElement_h_100508_

#define _TElement_h_100508_


class TElement

{

public: TElement *pre,*suc;

TElement () {pre=suc=NULL;}

virtual void Print ()= 0;

virtual int Type ()= 0;

};


#endif





Файл TSpisok.h


#ifndef _TSpisok_h_100508_

#define _TSpisok_h_100508_


class TSpisok

{

private: TElement *first,*last,*cur;

public: TSpisok () {first=last=cur=NULL;}

~TSpisok ();

void Add (TElement *e);

void Del ();

void ForEach (void (*f)(TElement *e));

TElement *First () {return cur=first;}

};


TSpisok::~TSpisok ()

{

cur=first;

while (cur!=NULL)

{

first=first->suc;

delete cur;

cur=first;

}

}


void TSpisok::ForEach (void (*f)(TElement *e))

{

cur=first;

while (cur!=NULL)

{

(*f)(cur);

cur=cur->suc;

}

}


void TSpisok::Add (TElement *e)

{

if (first==NULL)

first=last=e;

else

{

e->suc=first;

first->pre=e;

first=e;

first->pre=NULL;

}

}


void TSpisok::Del ()

{

TElement *tmp;

tmp=first;

if (first!=NULL)

{

first=first->suc;

if (first!=NULL) first->pre=NULL;

delete tmp;

}

else first=NULL;

}


#endif


Файл TNum.h


#ifndef _TNum_h_100508_

#define _TNum_h_100508_


class TNum: public TElement

{

public: int num;

TNum (int n):TElement(),num(n) {}

virtual void Print () {printf ("%d ",num);}

virtual int Type () {return 1;}

};


#endif


Файл TStr.h


#ifndef _TStr_h_100508_

#define _TStr_h_100508_



#include


class TStr: public TElement

{

public: char str[20];

TStr (char s[20]):TElement() {strcpy (str,s);}

virtual void Print () {printf ("%s ",str);}

virtual int Type () {return 0;}

};


#endif


Файл TSort.h


#ifndef _TSort_h_100508_

#define _TSort_h_100508_


class TSort: public TSpisok

{

public: TSort ():TSpisok () {}

void MaxLen ();

};


void TSort::MaxLen ()

{

TElement *c,*max,*q;

int tmp,t1;

c=TSpisok::First();

if(TStr *q=dynamic_cast(c))

{

tmp=strlen(((TStr *) c)->str);

max=c;

c=c->suc;

}

else tmp=0;

if (c!=NULL)

while (c!=NULL)

{

if (c->Type()==0)

{

t1=strlen(((TStr *) c)->str);

if (t1>tmp)

{

tmp=t1;

max=c;

}

}

c=c->suc;

}

printf ("\nSlovo maksimalnoi dliny - %s\n\n",((TStr *) max)->str);

}


#endif


Файл lab29.cpp


// laba 29.cpp : Defines the entry point for the console application.

//Моделировать очередь, в качестве элементов которой могут использоваться числа и слова.

//Операции: добавление элемента, удаление элемента, печать элементов очереди.

//Соз-дать класс - потомок, который содержит процедуру определения слова максимальной длины.

//Тестировать полученную модель.

//В отчете представить структуру использованных классов и обосновать выбранную структуру представления данных.



#include "stdafx.h"

#include "TElement.h"

#include "TSpisok.h"

#include "TNum.h"

#include "TStr.h"

#include "TSort.h"

#include

#include

#include

#include



void Show (TElement *e) {e->Print();}


TSort N;

TElement *p;


void Mainmenu ()

{

puts ("");

puts ("- GLAVNOE MENU -");

puts ("1. Dobavit elementy");

puts ("2. Ydalit pervyi element");

puts ("3. Opredelenie slova maksimalnoi dliny");

puts ("4. Vyxod");

puts ("Vvedennye znachenia:");

N.ForEach (Show);

puts ("");

printf ("Vvedite nomer vypolniaemoi komandy: ");

}


void AddMenu ()

{

int k;

char *st;


puts ("- Menu dobavlenia elementov -");

puts ("");

printf ("Vvedite znachenie:\n");

st=new char [20];

while ((strcmp(st,"end")!=0) & (strlen(st)!=1))

{

scanf ("%s",st);

if (strstr (st,"")!=NULL)

{


k=atoi (st);

if (k||(strlen(st)==1 && st[0]=='0'))

p=new TNum (k);

else

p=new TStr (st);

N.Add (p);

}

}

}



void main()

{

int act=0;


do

{

Mainmenu();

scanf ("%d",&act);

switch (act)

{

case 1: AddMenu();break;

case 2: N.Del();break;

case 3: N.MaxLen();break;

}

}

while (act!=4);

}



Тест:


Случайные файлы

Файл
59594.rtf
32063.rtf
133300.rtf
28103.rtf
28649.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.