summaryrefslogtreecommitdiff
path: root/3/6_control/27_while_for.c
diff options
context:
space:
mode:
authorMike Vink <mike@pionative.com>2024-05-28 08:49:46 +0200
committerMike Vink <mike@pionative.com>2024-05-28 08:49:46 +0200
commitb424517a33bf61aedff29eed74a665402ab496ba (patch)
tree1897e147cf15f5c7a121a73fc003b32639a697ea /3/6_control/27_while_for.c
parent758543aef80c3b3568a20b0dff20202c796a4819 (diff)
procedures
Diffstat (limited to '3/6_control/27_while_for.c')
-rw-r--r--3/6_control/27_while_for.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/3/6_control/27_while_for.c b/3/6_control/27_while_for.c
new file mode 100644
index 0000000..f7f73f7
--- /dev/null
+++ b/3/6_control/27_while_for.c
@@ -0,0 +1,46 @@
+#include <stdio.h>
+
+long fact_for(long n) {
+ long i;
+ long result = 1;
+ for (i = 2; i <= n; i++) {
+ result *= i;
+ }
+ return result;
+}
+
+// guarded do
+//
+// init-s
+// t = test-e;
+// if (!t) goto done;
+//
+// loop:
+// body-s
+// update-e;
+// t = test-e;
+// if (t) goto loop;
+//
+// done:
+
+long fact_for_gd_goto(long n) {
+ long i = 2;
+ long result = 1;
+
+ int t = i<=n;
+ if (!t) {
+ goto done;
+ }
+loop:
+ result *= i;
+ i++;
+ t = i<=n;
+ if (t) goto loop;
+done:
+ return result;
+}
+
+int main() {
+ printf("for: %ld, goto: %ld\n", fact_for(5), fact_for_gd_goto(5));
+ return 0;
+}