aboutsummaryrefslogtreecommitdiff
path: root/Semestr 4/ask/lista7/zad5.c
diff options
context:
space:
mode:
Diffstat (limited to 'Semestr 4/ask/lista7/zad5.c')
-rw-r--r--Semestr 4/ask/lista7/zad5.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/Semestr 4/ask/lista7/zad5.c b/Semestr 4/ask/lista7/zad5.c
new file mode 100644
index 0000000..d65cb4f
--- /dev/null
+++ b/Semestr 4/ask/lista7/zad5.c
@@ -0,0 +1,38 @@
+#include <stdio.h>
+
+typedef struct A {
+ long u[2];
+ long *v;
+} SA;
+
+typedef struct B {
+ long p[2];
+ long q;
+} SB;
+
+SB eval(SA s);
+long wrap(long x, long y, long z);
+
+SB eval_decoded(SA a) {
+ SB ret;
+ ret.p[0] = a.u[1] * (*a.v);
+ ret.p[1] = a.u[0] - (*a.v);
+ ret.q = a.u[0] - a.u[1];
+ return ret;
+}
+
+long wrap_decoded(long x, long y, long z) {
+ SA a;
+ a.v = &z;
+ a.u[0] = x;
+ a.u[1] = y;
+ SB b = eval_decoded(a);
+ long result = (b.p[1] + b.p[0]) * b.q;
+ return result;
+}
+
+int main() {
+ printf("%ld\n", wrap(15, 16, 17));
+ printf("%ld\n", wrap_decoded(15, 16, 17));
+ return 0;
+} \ No newline at end of file