101225_/tex/binary4101125.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* (c) david vajda
 * updated 10/11/25
 * last updated on 10/12/25 - last little change
 * the number calculus system
 */

#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 ("last updated on 10/12/25 - last little change\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 < 0x0f;  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;
}