отчет 29 мод (АЯиП отчеты по лабам (кроме 24))
Описание файла
Файл "отчет 29 мод" внутри архива находится в следующих папках: АЯиП отчеты по лабам (кроме 24), Отчеты. Документ из архива "АЯиП отчеты по лабам (кроме 24)", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика" в общих файлах.
Онлайн просмотр документа "отчет 29 мод"
Текст из документа "отчет 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 <string.h>
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<TStr *>(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 <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
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);
}
Тест: