//##################################################### // 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 &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 &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 &minStack) { if(!minStack.isEmpty()) minStack.pop(); else { cout <<"Stacken ar tom."; getch(); } } //##################################################### // TAR BORT ELEMENT I KÖN //===================================================== void _del(queueClass &minQueue) { if(!minQueue.isEmpty()) minQueue.del(); else { cout <<"Kon ar tom."; getch(); } } //##################################################### // VISAR ÖVERSTA ELEMENTET I STACKEN //===================================================== void _top(stackClass &minStack) { if(!minStack.isEmpty()) minStack.top(); else cout <<"Stacken ar tom."; getch(); } //##################################################### // VISAR ÖVERSTA ELEMENTET I KÖN //===================================================== void _getFront(queueClass &minQueue) { if(!minQueue.isEmpty()) minQueue.getFront(); else cout <<"Kon ar tom."; getch(); } //##################################################### // VISAR ALLA ELEMENT I STACKEN //===================================================== void _stackDisplay(stackClass 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 minQueue) { if(!minQueue.isEmpty()) { cout << "Elementen ar: \n"; minQueue.display(); } else cout <<"Kon ar tom"; getch(); } //##################################################### // VISAR ANTALET ELEMENT I STACKEN //===================================================== void _stackAntal(stackClass 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 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 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 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 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 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'); }