mantap jaya

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
asyrofi
Date:
Sun Apr 15 04:01:33 2018 +0000
Commit message:
bismillah bisa...

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 3d12bad4186e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Apr 15 04:01:33 2018 +0000
@@ -0,0 +1,82 @@
+#include<stdio.h>
+#include "mbed.h"
+#include "Serial.h"
+Serial uart1(USBTX,USBRX); 
+/* Function to find the cross over point (the point before
+   which elements are smaller than or equal to x and after
+   which greater than x)*/
+int findCrossOver(int arr[], int low, int high, int x)
+{
+    // Base cases
+  if (arr[high] <= x) // x is greater than all
+    return high;
+  if (arr[low] > x)  // x is smaller than all
+    return low;
+    
+  // Find the middle point
+  int mid = (low + high)/2;  /* low + (high - low)/2 */
+ 
+  /* If x is same as middle element, then return mid */
+  if (arr[mid] <= x && arr[mid+1] > x)
+    return mid;
+ 
+  /* If x is greater than arr[mid], then either arr[mid + 1]
+    is ceiling of x or ceiling lies in arr[mid+1...high] */
+  if(arr[mid] < x)
+      return findCrossOver(arr, mid+1, high, x);
+ 
+  return findCrossOver(arr, low, mid - 1, x); 
+}  
+
+// This function prints k closest elements to x in arr[].
+// n is the number of elements in arr[]
+void printKclosest(int arr[], int x, int k, int n)
+{
+    // Find the crossover point
+    int l = findCrossOver(arr, 0, n-1, x);
+    int r = l+1;   // Right index to search
+    int count = 0; // To keep track of count of elements already printed
+ 
+    // If x is present in arr[], then reduce left index
+    // Assumption: all elements in arr[] are distinct
+    if (arr[l] == x) l--;
+ 
+    // Compare elements on left and right of crossover
+    // point to find the k closest elements
+    while (l >= 0 && r < n && count < k)
+    {
+        if (x - arr[l] < arr[r] - x)
+            uart1.printf("%d ", arr[l--]);
+        else
+            uart1.printf("%d ", arr[r++]);
+        count++;
+    }
+ 
+    // If there are no more elements on right side, then
+    // print left elements
+    while (count < k && l >= 0)
+        uart1.printf("%d ", arr[l--]), count++;
+ 
+    // If there are no more elements on left side, then
+    // print right elements
+    while (count < k && r < n)
+        uart1.printf("%d ", arr[r++]), count++;
+}
+
+/* Driver program to check above functions */
+int main()
+{
+   uart1.baud(9600);
+   wait(0.1);
+   int arr[] ={12, 16, 22, 30, 35, 39, 42,
+               45, 48, 50, 53, 55, 56};
+   int n = sizeof(arr)/sizeof(arr[0]);
+   int x = 35, k = 4;
+   printKclosest(arr, x, 4, n);
+   while(1)
+   {
+       wait(0.1);
+       uart1.printf("%d \n",printKclosest);
+   }
+   //return 0;
+}
\ No newline at end of file
diff -r 000000000000 -r 3d12bad4186e mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Apr 15 04:01:33 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/4f6c30876dfa
\ No newline at end of file