Contoh Program If Else Tebak Angka Bahasa C; Contoh Program Do While Bahasa C; Contoh Program Berat Badan Bahasa C; Contoh Program Kelulusan If Else Bahasa C; Contoh Program If Else Lalu Lintas bahas C; Contoh Program Switch Case Chanel TV Switch Case. Contoh Program Kalkulator Switch Case dan If Else. Contoh Program Penjumlahan dan. Ayo Belajar C dasar di seri Tutorial C Bahasa Indonesia untuk pemula. Latihan membuat calculator / kalkulator Yeah!!!, selamat datang di seri video tutorial C paling kece se-youtube.
gistfile1.c
// Implement a post-fix calculator using a stack. |
#include<stdio.h> |
#include<stdlib.h> |
#include<stdbool.h> |
#include<string.h> |
#defineMAX_ELEMENTS100 |
#defineROGUE_VALUE -99999 |
typedefintstackdata_t; |
typedefstruct{ |
int top; |
stackdata_t SA[MAX_ELEMENTS]; |
} arrstack_t; |
arrstack_t* init_stack(); |
stackdata_tevaluate_expression(constcharconst*, size_t); |
stackdata_tpop(arrstack_t*); |
boolpush(arrstack_t*, stackdata_t); |
boolempty(arrstack_t*); |
boolfull(arrstack_t*); |
voidprintstack(arrstack_t*); |
intgettoken(constcharconst*, int); |
intmain(){ |
char buf[20]; |
char expression[20]; |
char *prompt = 'Enter a postfix expression: '; |
stackdata_t d; |
size_t strlength; |
printf('%s', prompt); |
fgets(buf, sizeof buf, stdin); |
sscanf(buf, '%[a-zA-Z0-9 +-*/]s', expression); |
strlength = strlen(expression); |
d = evaluate_expression(expression, strlength); |
printf('Expression value: %dn', d); |
return0; |
} |
arrstack_t* init_stack(){ |
arrstack_t *s = malloc(sizeof *s); |
s->top = -1; |
return s; |
} |
stackdata_tevaluate_expression(constcharconst *expression, size_t strlength){ |
printf('The expression: %sn', expression); |
int startpos = 0; |
int endpos = 0; |
char token[10]; |
arrstack_t *stack = init_stack(); |
stackdata_t n, m; |
while(endpos < strlength){ |
endpos = gettoken(expression, startpos); |
strncpy(token, expression + startpos, endpos - startpos); |
//printf('Token: %sn', token); |
// Push digits, pop for operations. |
if(sscanf(token, '%d', &n)){ |
push(stack, n); |
} |
else{ |
m = pop(stack); |
n = pop(stack); |
if(strncmp(token, '+', 1) 0){ |
push(stack, n+m); |
} |
elseif(strncmp(token, '-', 1) 0){ |
push(stack, n-m); |
} |
elseif(strncmp(token, '/', 1) 0){ |
push(stack, n/m); |
} |
else { |
push(stack, n*m); |
} |
} |
startpos = endpos+1; |
memset(token, '0', sizeof token); |
} |
n = pop(stack); |
return n; |
} |
intgettoken(constcharconst *exp_str, int i){ |
char c = exp_str[i]; |
while (c != '' && c != '0'){ |
i++; |
c = exp_str[i]; |
} |
return i; |
} |
stackdata_tpop(arrstack_t *stack){ |
stackdata_t d; |
if(empty(stack)){ |
d = ROGUE_VALUE; |
} |
else{ |
d = stack->SA[stack->top]; |
stack->top--; |
} |
return d; |
} |
boolpush(arrstack_t *stack, stackdata_t data){ |
if(full(stack)){ |
returnfalse; |
} |
else{ |
stack->top++; |
stack->SA[stack->top] = data; |
returntrue; |
} |
} |
boolempty(arrstack_t *stack){ |
return stack->top -1; |
} |
boolfull(arrstack_t *stack){ |
return stack->top (MAX_ELEMENTS-1); |
} |
voidprintstack(arrstack_t *stack){ |
stackdata_t d; |
while(!empty(stack)){ |
d = pop(stack); |
printf('%dn', d); |
} |
} |
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment