mantap

Dependencies:   mbed

Revision:
0:d6253d3647d4
diff -r 000000000000 -r d6253d3647d4 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Apr 17 13:19:59 2018 +0000
@@ -0,0 +1,141 @@
+//#include<iostream>
+//#include <stdio.h>
+#include<math.h>
+#include<stdlib.h>
+#include "mbed.h"
+#include "Serial.h"
+#include <algorithm>  
+Serial uart1(USBTX,USBRX);
+#define MAX 20
+#define k 4
+using namespace std;
+enum category{SHORT,TALL,AVERAGE};
+class data{
+    int x,y;
+    category cat;
+    public:
+    void setd(int a,int b,category c){
+        x=a;
+        y=b;
+        cat=c;
+    }
+    int getx(){return x;}
+    int gety(){return y;}
+    category getcat(){
+        return cat;
+    }
+};//end of class
+int dis(data d1,data d2)
+{
+    //return sqrt(pow((d2.getx()-d1.getx()),2)+pow((d2.gety()-d1.gety()),2));
+    return sqrt(pow(((double)d2.getx()-(double)d1.getx()),2.0)+pow(((double)d2.gety()-(double)d1.gety()),2.0));
+}
+int main()
+{
+    uart1.baud(9600);
+    do{
+        int p,q; //input
+        int a[MAX]; //store distances
+        int b[k]; //to get min distances, used in calc
+        int c[k]; //to store freq
+        for(int i=0;i<k;i++){ //initiLIZATION
+            b[i]=-1;
+            c[i]=0;
+        } int min=1000;
+        //cout<<"Enter x,y(negative value to exit): ";
+        uart1.printf("Enter x,y(negative value to exit):");
+        //cin>>p>>q;
+        uart1.scanf("%ld,%ld",&p,&q);
+        if((p < 0) | (q < 0))
+            exit(0);
+        data n; //data point to classify
+        n.setd(p,q,SHORT);
+        data d[MAX]; //training set
+        
+        d[0].setd(1,1,SHORT);
+        d[1].setd(1,2,SHORT);
+        d[2].setd(1,3,SHORT);
+        d[3].setd(1,4,SHORT);
+        d[4].setd(1,5,SHORT);
+        d[5].setd(1,6,SHORT);
+        d[6].setd(1,7,SHORT);
+        d[7].setd(2,1,SHORT);
+        d[8].setd(2,2,SHORT);
+        d[9].setd(2,3,AVERAGE);
+        d[10].setd(2,4,AVERAGE);
+        d[11].setd(2,5,AVERAGE);
+        d[12].setd(2,6,AVERAGE);
+        d[13].setd(2,7,AVERAGE);
+        d[14].setd(5,1,TALL);
+        d[15].setd(5,2,TALL);
+        d[16].setd(5,3,TALL);
+        d[17].setd(5,4,TALL);
+        d[18].setd(5,5,TALL);
+        d[19].setd(5,6,TALL);
+        for(int i=0;i<20;i++){
+            a[i]=dis(n,d[i]);
+            //cout<<"\t\t"<<a[i]<<endl;
+            uart1.printf("\t\t %d\n", a[i]);
+        }
+        //k-nearest neighbours calculation i.e smallest k distances
+        for(int j=0;j<k;j++)
+        {
+            min=1000;
+            for(int i=0;i<20;i++)
+            {
+                if(i!=b[0]&&i!=b[1]&&i!=b[2])
+                { 
+                    if((a[i]<=min))
+                    {
+                        min=a[i];
+                        b[j]=i;
+                    }
+                }
+            } 
+            //cout<<min<<endl;
+            uart1.printf("%d\n",min);
+        }
+        //counting frequency of a class in each neighbour   
+        for(int i=0;i<k;i++)
+        {
+            switch (d[b[i]].getcat())
+            { 
+            case SHORT:
+                c[0]++;
+                break;
+            case AVERAGE:
+                c[2]++;
+                break;
+            case TALL:
+                c[1]++;
+                break;
+            }
+        } //counting max frequency
+        int max=-1,j;
+        for(int i=0;i<k;i++)
+        {    
+            if(c[i]>max){
+                max=c[i];
+                j=i;
+            }
+        }
+        //cout<<"Prediction is : ";
+        printf("Prediction is:");
+        switch (j)
+        {    
+        case 0:
+            //cout<<"SHORT"<<endl;
+            uart1.printf("SHORT\n");
+            break;
+        case 1:
+            //cout<<"TALL"<<endl;
+            uart1.printf("TALL\n");
+            break;
+        case 2:
+            //cout<<"AVERAGE"<<endl;
+            uart1.printf("AVERAGE\n");
+            break;
+        }
+    }while(true);
+    return 0;
+}
\ No newline at end of file