Skip to content

Commit d9d0316

Browse files
committed
poo
1 parent 4cc1bbf commit d9d0316

File tree

4 files changed

+60
-88
lines changed

4 files changed

+60
-88
lines changed

Hanoi/generateDisks.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ int getDisks() {
2626

2727
int getJogadas(Stack *stack, int disks) {
2828
for(int i = disks; i >= 1; i--) {
29-
push(stack, i);
29+
stack->push(i);
3030
}
3131

3232
int difficulty = 1;

Hanoi/play.hpp

+21-51
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,32 @@
22

33
enum TYPE {
44
ORIGIN,
5-
DESTINY,
65
WORK,
6+
DESTINY,
77
};
88

9-
void logic(Stack context, Stack helper1, Stack helper2) {
10-
9+
bool logic(Stack *toPop, Stack *toPush) {
10+
if(toPop->peek() < toPush->peek() || toPush->underflow()) {
11+
int popValue = toPop->pop();
12+
toPush->push(popValue);
13+
return true;
14+
}
1115

16+
return false;
1217
}
1318

1419
bool playLogic(Stack *leftStack, Stack *centerStack, Stack *rightStack) {
1520
string firstChoice;
1621
string secondChoice;
1722
int popValue;
1823

19-
cout << " [O]rigem [T]rabalho [D]estino" << endl;
24+
cout << " Origem[O] Trabalho[T] Destino[D]" << endl;
2025
cout << "\nEscolha a pilha de onde deseja retirar um disco: ";
2126
getline(cin, firstChoice);
2227
fflush(stdin);
2328

24-
25-
2629
if(firstChoice == "o" || firstChoice == "O") {
27-
if(underflow(leftStack)) {
30+
if(leftStack->underflow()) {
2831
return false;
2932
}
3033

@@ -33,80 +36,47 @@ bool playLogic(Stack *leftStack, Stack *centerStack, Stack *rightStack) {
3336
getline(cin, secondChoice);
3437
fflush(stdin);
3538

39+
3640
if(secondChoice == "t" || secondChoice == "T") {
37-
if(peek(leftStack) < peek(centerStack) || underflow(centerStack)) {
38-
popValue = pop(leftStack);
39-
push(centerStack, popValue);
40-
return true;
41-
} else {
42-
return false;
43-
}
41+
return logic(leftStack, centerStack);
4442
} else if(secondChoice == "d" || secondChoice == "D") {
45-
if(peek(leftStack) < peek(rightStack) || underflow(rightStack)) {
46-
popValue = pop(leftStack);
47-
push(rightStack, popValue);
48-
return true;
49-
} else {
50-
return false;
51-
}
43+
return logic(leftStack, rightStack);
5244
} else {
5345
return false;
5446
}
5547

5648
} else if(firstChoice == "t" || firstChoice == "T") {
57-
if(underflow(centerStack))
49+
if(centerStack->underflow()) {
5850
return false;
51+
}
5952

6053
cout << "\nVocê escolheu remover um disco do TRABALHO!" << endl;
6154
cout << "\nEscolha para onde deseja enviar o disco: ";
6255
getline(cin, secondChoice);
6356
fflush(stdin);
6457

6558
if(secondChoice == "o" || secondChoice == "O") {
66-
if(peek(centerStack) < peek(leftStack) || underflow(leftStack)) {
67-
popValue = pop(centerStack);
68-
push(leftStack, popValue);
69-
return true;
70-
} else {
71-
return false;
72-
}
59+
return logic(centerStack, leftStack);
7360
} else if(secondChoice == "d" || secondChoice == "D") {
74-
if(peek(centerStack) < peek(rightStack) || underflow(rightStack)) {
75-
popValue = pop(centerStack);
76-
push(rightStack, popValue);
77-
return true;
78-
} else {
79-
return false;
80-
}
61+
return logic(centerStack, rightStack);
8162
} else {
8263
return false;
8364
}
8465
}
8566
if(firstChoice == "d" || firstChoice == "D") {
86-
if(underflow(rightStack))
67+
if(rightStack->underflow()) {
8768
return false;
69+
}
8870

8971
cout << "\nVocê escolheu remover um disco do DESTINO!" << endl;
9072
cout << "\nEscolha para onde deseja enviar o disco: ";
9173
getline(cin, secondChoice);
9274
fflush(stdin);
9375

9476
if(secondChoice == "t" || secondChoice == "T") {
95-
if(peek(rightStack) < peek(centerStack)|| underflow(centerStack)) {
96-
popValue = pop(rightStack);
97-
push(centerStack, popValue);
98-
return true;
99-
} else {
100-
return false;
101-
}
77+
return logic(rightStack, centerStack);
10278
} else if(secondChoice == "o" || secondChoice == "O") {
103-
if(peek(rightStack) < peek(leftStack) || underflow(leftStack)) {
104-
popValue = pop(rightStack);
105-
push(leftStack, popValue);
106-
return true;
107-
} else {
108-
return false;
109-
}
79+
return logic(rightStack, leftStack);
11080
} else {
11181
return false;
11282
}

Main.cpp

+1-5
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ int main() {
1212

1313
Stack leftStack, centerStack, rightStack;
1414

15-
set(&leftStack);
16-
set(&centerStack);
17-
set(&rightStack);
18-
1915
leftStack.disks = centerStack.disks = rightStack.disks = getDisks();
2016

2117
int remainingPlays = getJogadas(&leftStack, leftStack.disks);
@@ -30,7 +26,7 @@ int main() {
3026
getchar();
3127
}
3228

33-
if(overflow(&rightStack)) {
29+
if(rightStack.overflow()) {
3430
showAll(&leftStack, &centerStack, &rightStack, remainingPlays, true);
3531
cout << "\nVocê venceu o jogo, Parabéns!!!!" << endl;
3632
break;

Stack.hpp

+37-31
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,55 @@
11
#define TAM 8
22

3-
struct Stack {
3+
class Stack {
4+
public:
45
int disks;
56
int sizeT;
67
int top;
78
int base;
89
int data[TAM];
9-
};
1010

11-
void set(Stack *stack) {
12-
stack->sizeT = TAM;
13-
stack->base = -1;
14-
stack->top = stack->base;
11+
Stack() {
12+
sizeT = TAM;
13+
base = -1;
14+
top = base;
15+
16+
for(int i = 0; i < sizeT; i++) {
17+
data[i] = NULL;
18+
}
19+
}
20+
21+
bool overflow() {
22+
return (top == (disks - 1)) ? true : false;
23+
}
1524

16-
for(int i = 0; i < stack->sizeT; i++) {
17-
stack->data[i] = NULL;
25+
bool underflow() {
26+
return (top == base) ? true : false;
1827
}
19-
}
2028

21-
bool overflow(Stack *stack) {
22-
return (stack->top == (stack->disks - 1)) ? true : false;
23-
}
29+
void push(int num) {
30+
top = top + 1;
31+
data[top] = num;
32+
}
2433

25-
bool underflow(Stack *stack) {
26-
return (stack->top == stack->base) ? true : false;
27-
}
34+
int pop() {
35+
int value = NULL;
2836

29-
void push(Stack *stack, int num) {
30-
stack->top = stack->top + 1;
31-
stack->data[stack->top] = num;
32-
}
37+
if (!underflow()) {
38+
value = data[top];
39+
data[top] = NULL;
40+
top--;
41+
}
3342

34-
int pop(Stack *stack) {
35-
int value = NULL;
43+
return value;
44+
}
3645

37-
if (!underflow(stack)) {
38-
value = stack->data[stack->top];
39-
stack->data[stack->top] = NULL;
40-
stack->top--;
46+
int peek() {
47+
return !underflow() ? data[top] : -1;
4148
}
49+
};
50+
51+
52+
53+
4254

43-
return value;
44-
}
4555

46-
int peek(Stack *stack) {
47-
if(!underflow(stack))
48-
return (stack->data[stack->top]);
49-
}

0 commit comments

Comments
 (0)