Nie chce mi się pisać kodu, ale mam tu jakiś swój stary niedokończony program, który robi mniej więcej tyle co twój. Przeanalizuj go i spróbuj sobie coś z niego wykorzystać. ;)
#include <iostream>
#include <conio.h>
#ifdef __cplusplus__
#include <cstdlib>
#else
#include <stdlib.h>
#endif
using namespace std;
typedef struct element {
int value;
string comment;
} elementStruct;
typedef struct elementList {
element * elements;
size_t count;
} elementListStruct;
typedef struct registerStr {
string name;
int value;
} registerStruct;
typedef struct registers {
registerStruct * elements;
size_t count;
} registersStruct;
void allocElementList(elementListStruct & list)
{
list.elements = new element[list.count];
}
elementListStruct allocElementListSize(size_t size)
{
elementListStruct result;
result.count = size;
allocElementList(result);
return result;
}
void clearElementList(elementListStruct & list)
{
if(list.count > 0) {
delete [] list.elements;
list.count = 0;
}
}
void memcpyElementLists(elementListStruct & desitnation, elementListStruct & source, size_t offset=0, int maxLength=-1)
{
if(maxLength<0) maxLength=source.count;
for(size_t i=0; i<source.count && i<maxLength; i++) {
desitnation.elements[i+offset] = source.elements[i];
}
}
element getElementFromUser()
{
element result;
cout<<"Your element and comment past number: ";
cin>>result.value;
getline(cin, result.comment);
return result;
}
void pushElementOnTheStack(elementListStruct & stackElements)
{
element Element = getElementFromUser();
elementListStruct elementListToIncrase = allocElementListSize(stackElements.count+1);
memcpyElementLists(elementListToIncrase, stackElements);
elementListToIncrase.elements[elementListToIncrase.count-1] = Element;
clearElementList(stackElements);
stackElements = allocElementListSize(elementListToIncrase.count);
memcpyElementLists(stackElements, elementListToIncrase);
}
void popElementFromTheStack(elementListStruct & stackElements)
{
if(stackElements.count > 0) {
const size_t decreaseCount = stackElements.count - 1;
elementListStruct elementListToDecrase = allocElementListSize(decreaseCount);
memcpyElementLists(elementListToDecrase, stackElements, 0, decreaseCount);
clearElementList(stackElements);
stackElements = allocElementListSize(decreaseCount);
memcpyElementLists(stackElements, elementListToDecrase);
}
}
void allocRegistersList(registersStruct & list)
{
list.elements = new registerStruct[list.count];
}
registersStruct allocRegistersListSize(size_t size)
{
registersStruct result;
result.count = size;
allocRegistersList(result);
return result;
}
void clearRegistersList(registersStruct & list)
{
if(list.count > 0) {
delete [] list.elements;
list.count = 0;
}
}
void memcpyRegistersLists(registersStruct & desitnation, registersStruct & source, size_t offset=0, int maxLength=-1)
{
if(maxLength<0) maxLength=source.count;
for(size_t i=0; i<source.count && i<maxLength; i++) {
desitnation.elements[i+offset] = source.elements[i];
}
}
registerStruct getRegisterInfoFromUser()
{
registerStruct result;
cout<<"Type register name: ";
getline(cin, result.name);
cout<<"Enter register value: ";
int test;
cin>>test;
result.value = test;
cout<<result.name<<" "<<result.value;
cin.get();
return result;
}
void addRegisterToRegistersList(registersStruct & registers, registerStruct newRegister) {
cout<<registers.count<<endl;
const size_t newRegistersCount = registers.count+1;
registersStruct newRegistersList = allocRegistersListSize(newRegistersCount);
memcpyRegistersLists(newRegistersList, registers);
newRegistersList.elements[newRegistersList.count-1] = newRegister;
clearRegistersList(registers);
registers = allocRegistersListSize(newRegistersCount);
memcpyRegistersLists(registers, newRegistersList);
for(int i=0; i<registers.count; i++) cout<<registers.elements[i].name<<endl;
cout<<registers.count<<endl;
}
void createRegister(registersStruct & registers)
{
registerStruct newRegister = getRegisterInfoFromUser();
addRegisterToRegistersList(registers, newRegister);
cin.get();
}
int main()
{
bool appQuit = false;
elementListStruct stackElements = {NULL, 0};
registersStruct registers = {NULL, 0};
while(!appQuit)
{
if (system("CLS")) system("clear");
cout<<"1. Push element"<<endl;
cout<<"2. Pop element"<<endl;
cout<<"3. Create register"<<endl;
cout<<"4. Move data from register to register"<<endl;
cout<<"5. Exit"<<endl;
cout<<endl<<"Registers:"<<endl<<endl;
for(size_t i=0; i<registers.count; i++) cout<<registers.elements[i].name<<" : "<<registers.elements[i].value<<endl;
cout<<endl<<"Stack:"<<endl<<endl;
for(size_t i=0; i<stackElements.count; i++) cout<<i<<". - "<<stackElements.elements[i].value<<" ; "<<stackElements.elements[i].comment<<endl;
char choose = getch();
switch(choose)
{
case '1':
pushElementOnTheStack(stackElements);
break;
case '2':
popElementFromTheStack(stackElements);
break;
case '3':
createRegister(registers);
break;
case '5':
appQuit = true;
break;
}
}
delete [] stackElements.elements;
delete [] registers.elements;
return 0;
}