346 lines
8.7 KiB
C++
346 lines
8.7 KiB
C++
//#####################################################
|
|
// LAB 2 I PUMA
|
|
// CRILLE & ROBIN 971208
|
|
// LÄNKAD TEMPLATE LISTA
|
|
//=====================================================
|
|
|
|
#include "lista.cpp"
|
|
#include "twindow.hpp"
|
|
|
|
const int BUFFERSIZE = 100; //för säkerinmatning
|
|
const int MAXSIZE = 5; //maximalt antal element
|
|
const int SIST = 0; //inmatning i listan
|
|
const int FORST=!SIST; //inmatning i listan
|
|
const int FALSE=0; //boolsk varabel
|
|
const int TRUE=!FALSE; //boolsk varabel
|
|
|
|
const int BREDD = 9; //fönstrets bredd
|
|
const int HOJD = 3; //fönstrets höjd
|
|
const int LEFT = 1; //fönstrets Y-position
|
|
const int TOP = 18; //fönstrets X-position
|
|
|
|
const int moveX = 0; //fönsterflyttning X-led
|
|
const int moveY = 5; //fönsterflyttning Y-led
|
|
|
|
//#####################################################
|
|
// SÄKER INMATNING
|
|
// SER TILL ATT BARA HELTAL MATAS IN
|
|
//=====================================================
|
|
int mataIn()
|
|
{
|
|
char buffer[BUFFERSIZE];
|
|
int f;
|
|
do
|
|
{
|
|
cin >> buffer;
|
|
if (strcmp(buffer,"0") == 0)
|
|
return 0;
|
|
else
|
|
{
|
|
f = atoi(buffer);
|
|
if (f!=0)
|
|
return f;
|
|
else
|
|
cout <<"Inget tal, forsok igen: ";
|
|
}
|
|
}while (!f);
|
|
}
|
|
//#####################################################
|
|
// SÄTTER IN ELEMENT I STACKEN
|
|
//=====================================================
|
|
void _push(stackClass <TWindow> &minStack)
|
|
{
|
|
int position = FORST;
|
|
TWindow *newItem;
|
|
newItem = new TWindow(LEFT, TOP,(BREDD+LEFT),(HOJD+TOP),BLUE,WHITE);
|
|
if(minStack.length() < MAXSIZE)
|
|
if(newItem)
|
|
{
|
|
cout << "Skriv in element!";
|
|
cout << *newItem;
|
|
newItem->editText();
|
|
if(minStack.duplicate(*newItem))
|
|
cout <<"\nElementet finns redan.";
|
|
else
|
|
{
|
|
minStack.push(position, *newItem);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
cout <<"\nMinnet tog slut";
|
|
else
|
|
cout <<"Maximalt antal element i stacken";
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// SÄTTER IN ELEMENT I KÖN
|
|
//=====================================================
|
|
void _ins(queueClass <TWindow> &minQueue)
|
|
{
|
|
TWindow *newItem;
|
|
int position = SIST;
|
|
newItem = new TWindow(LEFT, TOP,(BREDD+LEFT),(HOJD+TOP),BLUE,WHITE);
|
|
if(minQueue.length() < MAXSIZE)
|
|
if(newItem)
|
|
{
|
|
cout << "Skriv in element!";
|
|
cout << *newItem;
|
|
newItem->editText();
|
|
if(minQueue.duplicate(*newItem))
|
|
cout <<"\nElementet finns redan.";
|
|
else
|
|
{
|
|
minQueue.ins(position, *newItem);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
cout <<"\nMinnet tog slut";
|
|
else
|
|
cout <<"Maximalt antal element i kon";
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// TAR BORT ELEMENT I STACKEN
|
|
//=====================================================
|
|
void _pop(stackClass <TWindow> &minStack)
|
|
{
|
|
if(!minStack.isEmpty())
|
|
minStack.pop();
|
|
else
|
|
{
|
|
cout <<"Stacken ar tom.";
|
|
getch();
|
|
}
|
|
}
|
|
//#####################################################
|
|
// TAR BORT ELEMENT I KÖN
|
|
//=====================================================
|
|
void _del(queueClass <TWindow> &minQueue)
|
|
{
|
|
if(!minQueue.isEmpty())
|
|
minQueue.del();
|
|
else
|
|
{
|
|
cout <<"Kon ar tom.";
|
|
getch();
|
|
}
|
|
}
|
|
//#####################################################
|
|
// VISAR ÖVERSTA ELEMENTET I STACKEN
|
|
//=====================================================
|
|
void _top(stackClass <TWindow> &minStack)
|
|
{
|
|
if(!minStack.isEmpty())
|
|
minStack.top();
|
|
else
|
|
cout <<"Stacken ar tom.";
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// VISAR ÖVERSTA ELEMENTET I KÖN
|
|
//=====================================================
|
|
void _getFront(queueClass <TWindow> &minQueue)
|
|
{
|
|
if(!minQueue.isEmpty())
|
|
minQueue.getFront();
|
|
else
|
|
cout <<"Kon ar tom.";
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// VISAR ALLA ELEMENT I STACKEN
|
|
//=====================================================
|
|
void _stackDisplay(stackClass <TWindow> minStack)
|
|
{
|
|
if(!minStack.isEmpty())
|
|
{
|
|
cout << "Elementen ar: \n";
|
|
minStack.display();
|
|
}
|
|
else
|
|
cout <<"Stacken ar tom";
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// VISAR ALLA ELEMENT I KÖN
|
|
//=====================================================
|
|
void _queueDisplay(queueClass <TWindow> minQueue)
|
|
{
|
|
if(!minQueue.isEmpty())
|
|
{
|
|
cout << "Elementen ar: \n";
|
|
minQueue.display();
|
|
}
|
|
else
|
|
cout <<"Kon ar tom";
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// VISAR ANTALET ELEMENT I STACKEN
|
|
//=====================================================
|
|
void _stackAntal(stackClass <TWindow> minStack)
|
|
{
|
|
int antalElement;
|
|
if(minStack.isEmpty())
|
|
cout <<"Stacken ar tom.";
|
|
else
|
|
{
|
|
antalElement=minStack.length();
|
|
cout<<"Det finns "<< antalElement<< " element i stacken";
|
|
}
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// VISAR ANTALET ELEMENT I KÖN
|
|
//=====================================================
|
|
void _queueAntal(queueClass <TWindow> minQueue)
|
|
{
|
|
int antalElement;
|
|
if(minQueue.isEmpty())
|
|
cout <<"Kon ar tom.";
|
|
else
|
|
{
|
|
antalElement=minQueue.length();
|
|
cout<<"Det finns "<< antalElement<< " element i kon";
|
|
}
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// KOLLAR OM DET FINNS ELEMENT I STACEKN
|
|
//=====================================================
|
|
void _stackIsEmpty(stackClass <TWindow> minStack)
|
|
{
|
|
if(minStack.isEmpty())
|
|
cout <<"Ja, stacken ar tom.";
|
|
else
|
|
cout <<"Nej, det finns element i stacken";
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// KOLLAR OM DET FINNS ELEMENT I KÖN
|
|
//=====================================================
|
|
void _queueIsEmpty(queueClass <TWindow> minQueue)
|
|
{
|
|
if(minQueue.isEmpty())
|
|
cout <<"Ja, kon ar tom.";
|
|
else
|
|
cout <<"Nej, det finns element i kon";
|
|
getch();
|
|
}
|
|
//#####################################################
|
|
// STACK-MENY
|
|
//=====================================================
|
|
void stackMenuItems()
|
|
{
|
|
clrscr();
|
|
cout <<" Meny for stacken \n"
|
|
<<" ---------------- \n\n"
|
|
<<" 1. Lagg till ett element overst \n"
|
|
<<" 2. Ta bort oversta elementet \n"
|
|
<<" 3. Skriv ut oversta elementet \n"
|
|
<<" 4. Skriv ut alla element \n"
|
|
<<" 5. Hur många element finns det \n"
|
|
<<" 6. Ar stacken tom? \n"
|
|
<<" 0. Huvudmeny \n\n";
|
|
}
|
|
void stackMenu()
|
|
{
|
|
stackClass<TWindow> minStack;
|
|
char val = TRUE;
|
|
do
|
|
{
|
|
stackMenuItems();
|
|
cin >> val;
|
|
switch (val)
|
|
{
|
|
case '1' : _push(minStack);break;
|
|
case '2' : _pop(minStack);break;
|
|
case '3' : _top(minStack);break;
|
|
case '4' : _stackDisplay(minStack);break;
|
|
case '5' : _stackAntal(minStack);break;
|
|
case '6' : _stackIsEmpty(minStack);break;
|
|
case '0' : ;break;
|
|
default : cout <<" Fel val.";
|
|
}
|
|
}while(val!='0');
|
|
}
|
|
//#####################################################
|
|
// QUEUE-MENYN
|
|
//=====================================================
|
|
void queueMenuItems()
|
|
{
|
|
clrscr();
|
|
cout <<" Meny for kon \n"
|
|
<<" ---------------- \n\n"
|
|
<<" 1. Lagg till ett element sist i kon \n"
|
|
<<" 2. Ta bort forsta elementet \n"
|
|
<<" 3. Skriv ut forsta elementet \n"
|
|
<<" 4. Skriv ut alla element \n"
|
|
<<" 5. Hur många element finns det? \n"
|
|
<<" 6. Ar kon tom? \n"
|
|
<<" 0. Huvudmeny \n\n";
|
|
}
|
|
void queueMenu()
|
|
{
|
|
queueClass<TWindow> minQueue;
|
|
char val = TRUE;
|
|
do
|
|
{
|
|
queueMenuItems();
|
|
cin >> val;
|
|
switch (val)
|
|
{
|
|
case '1' : _ins(minQueue);break;
|
|
case '2' : _del(minQueue);break;
|
|
case '3' : _getFront(minQueue);break;
|
|
case '4' : _queueDisplay(minQueue);break;
|
|
case '5' : _queueAntal(minQueue);break;
|
|
case '6' : _queueIsEmpty(minQueue);break;
|
|
case '0' : ;break;
|
|
default : cout <<" Fel val.";
|
|
}
|
|
}while(val!='0');
|
|
}
|
|
//#####################################################
|
|
// MAIN-MENU-ITEMS
|
|
//=====================================================
|
|
void mainMenuItems()
|
|
{
|
|
clrscr();
|
|
TWindow justText;
|
|
justText.setText("Crille &Robin!");
|
|
cout << justText;
|
|
gotoxy(LEFT,TOP);
|
|
cout << " Continue...";
|
|
getch();
|
|
clrscr();
|
|
cout <<" Huvudmeny for lab 2 i PUMA. \n"
|
|
<<" --------------------------- \n\n"
|
|
<<" 1. Jobba med en stack. \n"
|
|
<<" 2. Jobba med en ko. \n"
|
|
<<" 0. Avsluta programmet. \n\n";
|
|
|
|
}
|
|
//#####################################################
|
|
// MAINFUNCTION
|
|
//=====================================================
|
|
void main()
|
|
{
|
|
char val = TRUE;
|
|
do
|
|
{
|
|
mainMenuItems();
|
|
cin >> val;
|
|
switch (val)
|
|
{
|
|
case '1' : stackMenu();break;
|
|
case '2' : queueMenu();break;
|
|
case '0' : cout <<" Programmet avslutat"<< endl;break;
|
|
default: cout <<" Fel val"<< endl;
|
|
}
|
|
}while (val != '0');
|
|
}
|
|
|
|
|