Initial commit
This commit is contained in:
101
examples/calculator.cm
Normal file
101
examples/calculator.cm
Normal file
@@ -0,0 +1,101 @@
|
||||
// Public domain / CC0. Use freely for any purpose. RoyR 2026
|
||||
// calculator.cm - Simple expression calculator
|
||||
// Demonstrates: global variables, function composition, control flow
|
||||
|
||||
void printf(uint8 *fmt);
|
||||
|
||||
// Global state for the calculator
|
||||
int32 last_result = 0;
|
||||
int32 operation_count = 0;
|
||||
|
||||
int32 add(int32 a, int32 b) {
|
||||
operation_count = operation_count + 1;
|
||||
last_result = a + b;
|
||||
return last_result;
|
||||
}
|
||||
|
||||
int32 subtract(int32 a, int32 b) {
|
||||
operation_count = operation_count + 1;
|
||||
last_result = a - b;
|
||||
return last_result;
|
||||
}
|
||||
|
||||
int32 multiply(int32 a, int32 b) {
|
||||
operation_count = operation_count + 1;
|
||||
last_result = a * b;
|
||||
return last_result;
|
||||
}
|
||||
|
||||
int32 divide(int32 a, int32 b) {
|
||||
if (b == 0) {
|
||||
printf("Error: Division by zero\n");
|
||||
return 0;
|
||||
}
|
||||
operation_count = operation_count + 1;
|
||||
last_result = a / b;
|
||||
return last_result;
|
||||
}
|
||||
|
||||
int32 power(int32 base, int32 exp) {
|
||||
operation_count = operation_count + 1;
|
||||
int32 result = 1;
|
||||
for (int32 i = 0; i < exp; i = i + 1) {
|
||||
result = result * base;
|
||||
}
|
||||
last_result = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
int32 factorial(int32 n) {
|
||||
operation_count = operation_count + 1;
|
||||
if (n <= 1) {
|
||||
last_result = 1;
|
||||
return 1;
|
||||
}
|
||||
int32 result = 1;
|
||||
for (int32 i = 2; i <= n; i = i + 1) {
|
||||
result = result * i;
|
||||
}
|
||||
last_result = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
void print_stats(void) {
|
||||
printf("\n=== Calculator Statistics ===\n");
|
||||
printf("Total operations: %d\n", operation_count);
|
||||
printf("Last result: %d\n", last_result);
|
||||
printf("============================\n");
|
||||
}
|
||||
|
||||
int32 main(void) {
|
||||
printf("Calculator Demo\n");
|
||||
printf("===============\n\n");
|
||||
|
||||
// Basic arithmetic
|
||||
printf("10 + 5 = %d\n", add(10, 5));
|
||||
printf("10 - 5 = %d\n", subtract(10, 5));
|
||||
printf("10 * 5 = %d\n", multiply(10, 5));
|
||||
printf("10 / 5 = %d\n", divide(10, 5));
|
||||
|
||||
// Power function
|
||||
printf("\n2^10 = %d\n", power(2, 10));
|
||||
printf("5^3 = %d\n", power(5, 3));
|
||||
|
||||
// Factorial
|
||||
printf("\n5! = %d\n", factorial(5));
|
||||
printf("10! = %d\n", factorial(10));
|
||||
|
||||
// Complex expression: (5 + 3) * (10 - 2)
|
||||
int32 a = add(5, 3);
|
||||
int32 b = subtract(10, 2);
|
||||
int32 result = multiply(a, b);
|
||||
printf("\n(5 + 3) * (10 - 2) = %d\n", result);
|
||||
|
||||
// Division by zero test
|
||||
printf("\nTesting division by zero:\n");
|
||||
divide(10, 0);
|
||||
|
||||
print_stats();
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user