#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <limits.h>
#include <string.h>

int main(int argc, char* argv[]) 
{ float gewichte[8]; 
  float gesamt; 
  int zahl=0; 
  char antwort; 
  int i,j; 
  int falsch=0; 
  float konstante=1.8; 
  srand(time(0));

        for (i=0;i<8;i++) gewichte[i]=rand();
        
        
        

        printf("Hallo, ich bin dein neuronales Netz. Bringst du mir was bei?\nIch will etwas ueber Zahlen lernen."); 
        printf(" Damit du siehst, was ich schon kann,\nwerde ich jetzt alle Zahlen von 1 bis 255 in gerade/ungerade "); 
        printf("Zahlen\neinordnen und selber ueberpruefen, ob meine Antworten stimmen.\n\n"); 
         

        for (zahl=1;zahl<256;zahl++) 
        {       gesamt=0; 
                for (i=0;i<8;i++) 
                {       gesamt+=gewichte[i]*(float)((zahl >> i)&1); 
                } 
                if ((gesamt>0) && (zahl % 2)) falsch++; 
        } 
        printf("Ohje, von den 255 Zahlen habe ich %d falsch eingeordnet.",falsch); 
        printf("Ich glaube,\ndu musst mir helfen."); 
        printf("Du sagst mir eine Zahl zwischen 1 und 255 und ich sage dir,\nob es eine gerade oder ungerade Zahl ist, ok?\n");
        printf("\nDanach sagst du mir, ob ich richtig oder falsch geantwortet habe.\n"); 
        printf("Wenn du keine Lust mehr hast, gib einfach 0 ein. Also los gehts.\n"); 

   while(1) 
   {    printf("\nBitte gib eine Zahl ein:"); 
        scanf("%d",&zahl); 
        if (zahl==0) break; 
        gesamt=0; 
        for (i=0;i<8;i++) 
        {       gesamt+=gewichte[i]*(float)((zahl >> i)&1); 
        } 
        konstante-=0.05; 
        if (konstante<0.1) konstante=0.1; 

        if (gesamt >0) {
        printf("Ich glaube, %d ist eine gerade Zahl.",zahl); 
        }
        else{
        printf("Ich glaube, %d ist eine ungerade Zahl.", zahl); 
        }
        printf("Ist das richtig?(j/n):"); 
        scanf("%s",&antwort); 

        if ((antwort=='n') && (gesamt>0.0)) 
        {        for (i=0;i<8;i++) gewichte[i]-=konstante*(float)((zahl >> i)&1); 
        } 
        if ((antwort=='n') && (gesamt<=0)) 
        {        for (i=0;i<8;i++) gewichte[i]+=konstante*(float)((zahl >> i)&1); 
        } 

        printf("Falsch klassifizierte Zahlen:\n\n"); 
        falsch=0; 
        for (zahl=1;zahl<256;zahl++) 
        {       gesamt=0; 
                for (i=0;i<8;i++) 
                {       gesamt+=gewichte[i]*(float)((zahl >> i)&1); 
                } 
                if ((gesamt>0) && (zahl % 2)!=0) { falsch++; printf("%8d",zahl);} 
                if ((gesamt<=0) && (zahl % 2)==0) {falsch++; printf("%8d",zahl);} 
        } 
        printf("\n\nSuper, durch deine Hilfe kann ich jetzt schon %d Zahlen richtig einordnen. Das sind nur %d falsche.",255-falsch,falsch); 
   } 
   system("PAUSE");
        return 0; 
}