#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WORD (unsigned) 256 * 256
#define DOUBLE_WORD (unsigned) WORD * WORD
#define QUAD_WORD DOUBLE_WORD * DOUBLE_WORD
int main (void) {
unsigned a;
unsigned b;
time_t t;
int i;
char as [17];
char bs [17];
int X [10];
time_t rawtime;
struct tm *timeinfo;
char buffer[80];
printf ("(c) david vajda\n");
printf ("updated 10/11/25\n");
printf ("the number calculus system\n");
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);
printf("today date is%s\n\n", buffer);
srand ((unsigned) time (&t));
a = rand () % (256*256);
b = rand () % (256*256);
for (i = 0; i < 16; i++)
as [15-i] = '0' + ((a >> i) & 0x01);
for (i = 0; i < 16; i++)
bs [15-i] = '0' + ((b >> i) & 0x01);
as [16] = 0;
bs [16] = 0;
printf ("1.) Rechne die Zahl in binaer Darstellung in eine Dezimale Darstellung um\n");
printf ("%sb %ud\n", as, a);
printf ("2.) Rechne die Zahl in dezimal darstellung in eine Binaerdarstellung um\n");
printf ("%u %s\n", b, bs);
unsigned long int c;
unsigned long int d;
unsigned long int e;
unsigned long int f;
printf ("3.) Addiere die drei Zahlen schriftlich\n");
d = (rand () % (WORD-1))+1;
e = (rand () % (WORD-1))+1;
f = (rand () % (WORD-1))+1;
printf (" %16u\n", d);
printf ("+%16u\n", e);
printf ("+%16u\n", f);
printf ("-----------------\n");
printf (" %16u\n", d + e + f);
printf ("4.) Subtrahiere die letzten drei Zahlen schriftlich von der ersten schriftlich\n");
c = (rand () % (WORD-1))+1;
d = (rand () % (WORD/4-1))+1;
e = (rand () % (WORD/4-1))+1;
f = (rand () % (WORD/4-1))+1;
printf (" %16u\n", c);
printf ("-%16u\n", d);
printf ("-%16u\n", e);
printf ("-%16u\n", f);
printf ("-----------------\n");
printf (" %16i\n", c - d - e -f);
printf ("5.) Rechne die Zahl ins zweier komplement um, mit 8 Bit - und subtrahiere diese zahl von der ersten und rechne das Ergebnis nach dezimal\n");
signed char g;
signed char h;
char gs [9];
char hs [9];
char ghs [9];
gs [8] = 0;
hs [8] = 0;
ghs [8] = 0;
g = (rand () % 256);
h = (rand () % 128)-128;
for (i = 0; i < 8; i++)
gs [7-i] = '0' + ((g >> i) & 0x01);
for (i = 0; i < 8; i++)
hs [7-i] = '0' + ((h >> i) & 0x01);
for (i = 0; i < 8; i++)
ghs [7-i] = '0' + (((g+h) >> i) & 0x01);
printf ("%i %i = %i\n", g, h, g+h);
printf ("%s %s = %s\n", gs, hs, ghs);
printf ("6.) Multipliziere die zwei Zahlen schriftlich\n");
c = (rand () % (WORD-1))+1;
d = (rand () % (WORD-1))+1;
e = c*d;
printf ("%u*%u = %u\n", c, d, e);
printf ("7.) Dividiere die zwei Zahlen schriftlich\n");
c = (rand () % (WORD-1))+1;
d = (rand () % (WORD-1))+1;
e = c/d;
printf ("%u/%u = %u\n", c, d, e);
printf ("8.) Errechne x Logarithmisch mit dem Taschenrechner\n");
c = (rand () % (DOUBLE_WORD-1))+1;
d = (rand () % (WORD-1))+1;
printf ("%u^x = %u\n", d, c);
printf ("9.) Errechne mit dem Abakus\n");
for (i = 0; i < 9; i++) {
printf ("%i + ", X[i] = (rand () % 100));
}
printf ("%i\n", X [9] = (rand () % 100));
printf ("X = [");
for (i = 0; i < 9; i++)
printf ("%i, ", X [i]);
printf ("%i]\n", X [9]);
printf ("X_hex = [");
for (i = 0; i < 9; i++)
printf ("%02x, ", X [i]);
printf ("%02x]\n", X [9]);
printf ("XX_hex = [");
for (i = 0; i < 0x0e; i++)
printf ("%02x, ", (rand () % 0xff));
printf ("%02x]\n", (rand () % 0x0ff));
printf ("10.) Errechne mit dem Abakus\n");
for (i = 0; i < 9; i++) {
printf ("%i + ", rand () % 10000);
}
printf ("%i\n", rand () % 10000);
return 0;
}