mantap

Dependencies:   mbed

Committer:
asyrofi
Date:
Tue Apr 17 13:19:59 2018 +0000
Revision:
0:d6253d3647d4
alhamdulillah berhasil..

Who changed what in which revision?

UserRevisionLine numberNew contents of line
asyrofi 0:d6253d3647d4 1 //#include<iostream>
asyrofi 0:d6253d3647d4 2 //#include <stdio.h>
asyrofi 0:d6253d3647d4 3 #include<math.h>
asyrofi 0:d6253d3647d4 4 #include<stdlib.h>
asyrofi 0:d6253d3647d4 5 #include "mbed.h"
asyrofi 0:d6253d3647d4 6 #include "Serial.h"
asyrofi 0:d6253d3647d4 7 #include <algorithm>
asyrofi 0:d6253d3647d4 8 Serial uart1(USBTX,USBRX);
asyrofi 0:d6253d3647d4 9 #define MAX 20
asyrofi 0:d6253d3647d4 10 #define k 4
asyrofi 0:d6253d3647d4 11 using namespace std;
asyrofi 0:d6253d3647d4 12 enum category{SHORT,TALL,AVERAGE};
asyrofi 0:d6253d3647d4 13 class data{
asyrofi 0:d6253d3647d4 14 int x,y;
asyrofi 0:d6253d3647d4 15 category cat;
asyrofi 0:d6253d3647d4 16 public:
asyrofi 0:d6253d3647d4 17 void setd(int a,int b,category c){
asyrofi 0:d6253d3647d4 18 x=a;
asyrofi 0:d6253d3647d4 19 y=b;
asyrofi 0:d6253d3647d4 20 cat=c;
asyrofi 0:d6253d3647d4 21 }
asyrofi 0:d6253d3647d4 22 int getx(){return x;}
asyrofi 0:d6253d3647d4 23 int gety(){return y;}
asyrofi 0:d6253d3647d4 24 category getcat(){
asyrofi 0:d6253d3647d4 25 return cat;
asyrofi 0:d6253d3647d4 26 }
asyrofi 0:d6253d3647d4 27 };//end of class
asyrofi 0:d6253d3647d4 28 int dis(data d1,data d2)
asyrofi 0:d6253d3647d4 29 {
asyrofi 0:d6253d3647d4 30 //return sqrt(pow((d2.getx()-d1.getx()),2)+pow((d2.gety()-d1.gety()),2));
asyrofi 0:d6253d3647d4 31 return sqrt(pow(((double)d2.getx()-(double)d1.getx()),2.0)+pow(((double)d2.gety()-(double)d1.gety()),2.0));
asyrofi 0:d6253d3647d4 32 }
asyrofi 0:d6253d3647d4 33 int main()
asyrofi 0:d6253d3647d4 34 {
asyrofi 0:d6253d3647d4 35 uart1.baud(9600);
asyrofi 0:d6253d3647d4 36 do{
asyrofi 0:d6253d3647d4 37 int p,q; //input
asyrofi 0:d6253d3647d4 38 int a[MAX]; //store distances
asyrofi 0:d6253d3647d4 39 int b[k]; //to get min distances, used in calc
asyrofi 0:d6253d3647d4 40 int c[k]; //to store freq
asyrofi 0:d6253d3647d4 41 for(int i=0;i<k;i++){ //initiLIZATION
asyrofi 0:d6253d3647d4 42 b[i]=-1;
asyrofi 0:d6253d3647d4 43 c[i]=0;
asyrofi 0:d6253d3647d4 44 } int min=1000;
asyrofi 0:d6253d3647d4 45 //cout<<"Enter x,y(negative value to exit): ";
asyrofi 0:d6253d3647d4 46 uart1.printf("Enter x,y(negative value to exit):");
asyrofi 0:d6253d3647d4 47 //cin>>p>>q;
asyrofi 0:d6253d3647d4 48 uart1.scanf("%ld,%ld",&p,&q);
asyrofi 0:d6253d3647d4 49 if((p < 0) | (q < 0))
asyrofi 0:d6253d3647d4 50 exit(0);
asyrofi 0:d6253d3647d4 51 data n; //data point to classify
asyrofi 0:d6253d3647d4 52 n.setd(p,q,SHORT);
asyrofi 0:d6253d3647d4 53 data d[MAX]; //training set
asyrofi 0:d6253d3647d4 54
asyrofi 0:d6253d3647d4 55 d[0].setd(1,1,SHORT);
asyrofi 0:d6253d3647d4 56 d[1].setd(1,2,SHORT);
asyrofi 0:d6253d3647d4 57 d[2].setd(1,3,SHORT);
asyrofi 0:d6253d3647d4 58 d[3].setd(1,4,SHORT);
asyrofi 0:d6253d3647d4 59 d[4].setd(1,5,SHORT);
asyrofi 0:d6253d3647d4 60 d[5].setd(1,6,SHORT);
asyrofi 0:d6253d3647d4 61 d[6].setd(1,7,SHORT);
asyrofi 0:d6253d3647d4 62 d[7].setd(2,1,SHORT);
asyrofi 0:d6253d3647d4 63 d[8].setd(2,2,SHORT);
asyrofi 0:d6253d3647d4 64 d[9].setd(2,3,AVERAGE);
asyrofi 0:d6253d3647d4 65 d[10].setd(2,4,AVERAGE);
asyrofi 0:d6253d3647d4 66 d[11].setd(2,5,AVERAGE);
asyrofi 0:d6253d3647d4 67 d[12].setd(2,6,AVERAGE);
asyrofi 0:d6253d3647d4 68 d[13].setd(2,7,AVERAGE);
asyrofi 0:d6253d3647d4 69 d[14].setd(5,1,TALL);
asyrofi 0:d6253d3647d4 70 d[15].setd(5,2,TALL);
asyrofi 0:d6253d3647d4 71 d[16].setd(5,3,TALL);
asyrofi 0:d6253d3647d4 72 d[17].setd(5,4,TALL);
asyrofi 0:d6253d3647d4 73 d[18].setd(5,5,TALL);
asyrofi 0:d6253d3647d4 74 d[19].setd(5,6,TALL);
asyrofi 0:d6253d3647d4 75 for(int i=0;i<20;i++){
asyrofi 0:d6253d3647d4 76 a[i]=dis(n,d[i]);
asyrofi 0:d6253d3647d4 77 //cout<<"\t\t"<<a[i]<<endl;
asyrofi 0:d6253d3647d4 78 uart1.printf("\t\t %d\n", a[i]);
asyrofi 0:d6253d3647d4 79 }
asyrofi 0:d6253d3647d4 80 //k-nearest neighbours calculation i.e smallest k distances
asyrofi 0:d6253d3647d4 81 for(int j=0;j<k;j++)
asyrofi 0:d6253d3647d4 82 {
asyrofi 0:d6253d3647d4 83 min=1000;
asyrofi 0:d6253d3647d4 84 for(int i=0;i<20;i++)
asyrofi 0:d6253d3647d4 85 {
asyrofi 0:d6253d3647d4 86 if(i!=b[0]&&i!=b[1]&&i!=b[2])
asyrofi 0:d6253d3647d4 87 {
asyrofi 0:d6253d3647d4 88 if((a[i]<=min))
asyrofi 0:d6253d3647d4 89 {
asyrofi 0:d6253d3647d4 90 min=a[i];
asyrofi 0:d6253d3647d4 91 b[j]=i;
asyrofi 0:d6253d3647d4 92 }
asyrofi 0:d6253d3647d4 93 }
asyrofi 0:d6253d3647d4 94 }
asyrofi 0:d6253d3647d4 95 //cout<<min<<endl;
asyrofi 0:d6253d3647d4 96 uart1.printf("%d\n",min);
asyrofi 0:d6253d3647d4 97 }
asyrofi 0:d6253d3647d4 98 //counting frequency of a class in each neighbour
asyrofi 0:d6253d3647d4 99 for(int i=0;i<k;i++)
asyrofi 0:d6253d3647d4 100 {
asyrofi 0:d6253d3647d4 101 switch (d[b[i]].getcat())
asyrofi 0:d6253d3647d4 102 {
asyrofi 0:d6253d3647d4 103 case SHORT:
asyrofi 0:d6253d3647d4 104 c[0]++;
asyrofi 0:d6253d3647d4 105 break;
asyrofi 0:d6253d3647d4 106 case AVERAGE:
asyrofi 0:d6253d3647d4 107 c[2]++;
asyrofi 0:d6253d3647d4 108 break;
asyrofi 0:d6253d3647d4 109 case TALL:
asyrofi 0:d6253d3647d4 110 c[1]++;
asyrofi 0:d6253d3647d4 111 break;
asyrofi 0:d6253d3647d4 112 }
asyrofi 0:d6253d3647d4 113 } //counting max frequency
asyrofi 0:d6253d3647d4 114 int max=-1,j;
asyrofi 0:d6253d3647d4 115 for(int i=0;i<k;i++)
asyrofi 0:d6253d3647d4 116 {
asyrofi 0:d6253d3647d4 117 if(c[i]>max){
asyrofi 0:d6253d3647d4 118 max=c[i];
asyrofi 0:d6253d3647d4 119 j=i;
asyrofi 0:d6253d3647d4 120 }
asyrofi 0:d6253d3647d4 121 }
asyrofi 0:d6253d3647d4 122 //cout<<"Prediction is : ";
asyrofi 0:d6253d3647d4 123 printf("Prediction is:");
asyrofi 0:d6253d3647d4 124 switch (j)
asyrofi 0:d6253d3647d4 125 {
asyrofi 0:d6253d3647d4 126 case 0:
asyrofi 0:d6253d3647d4 127 //cout<<"SHORT"<<endl;
asyrofi 0:d6253d3647d4 128 uart1.printf("SHORT\n");
asyrofi 0:d6253d3647d4 129 break;
asyrofi 0:d6253d3647d4 130 case 1:
asyrofi 0:d6253d3647d4 131 //cout<<"TALL"<<endl;
asyrofi 0:d6253d3647d4 132 uart1.printf("TALL\n");
asyrofi 0:d6253d3647d4 133 break;
asyrofi 0:d6253d3647d4 134 case 2:
asyrofi 0:d6253d3647d4 135 //cout<<"AVERAGE"<<endl;
asyrofi 0:d6253d3647d4 136 uart1.printf("AVERAGE\n");
asyrofi 0:d6253d3647d4 137 break;
asyrofi 0:d6253d3647d4 138 }
asyrofi 0:d6253d3647d4 139 }while(true);
asyrofi 0:d6253d3647d4 140 return 0;
asyrofi 0:d6253d3647d4 141 }