Files
2026-03-05 13:44:23 +01:00

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');
}