Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- float premeans1=0,premeans2=0;
- int count=0;
- float findMean(int arr[],int num){
- float sum=0;
- for(int i=0;i<num;i++){
- sum+=arr[i];
- }
- return sum/num;
- }
- void findObjection(int c1[],int c2[],float mean1,float mean2,int cn1,int cn2){
- float sum1=0,sum2=0;
- printf("nCluster 1: %dn",cn1);
- for(int i=0;i<cn1;i++){
- sum1+= fabsf(c1[i]-mean1);
- printf("%d ",c1[i]);
- }
- printf("nCluster 2: %dn",cn2);
- for (int i = 0; i < cn2; ++i) {
- sum2+=fabsf(c2[i]-mean2);
- printf("%d ",c2[i]);
- }
- printf("nMinimum objective function Value: %fn",sqrtf(sum1+sum2));
- }
- float calculateDistance(float n1,float n2){
- if(n1>n2){
- return n1-n2;
- } else{
- return n2-n1;
- }
- }
- void findCluster(int data[],int c1[],int c2[],int n,float cp1,float cp2){
- float diff1,diff2;
- int cn1=0,cn2=0;
- float mean1,mean2;
- for(int i=0;i<n;i++){
- diff1 = calculateDistance(cp1,data[i]);
- diff2 = calculateDistance(cp2,data[i]);
- if(diff1<diff2){
- c1[cn1++]=data[i];
- }else{
- c2[cn2++]=data[i];
- }
- }
- mean1 = findMean(c1,cn1);
- mean2 = findMean(c2,cn2);
- count++;
- if(premeans1==mean1 || premeans2==mean2){
- findObjection(c1,c2,mean1,mean2,cn1,cn2);
- printf("nTotal Count: %dn",count);
- return;
- }
- premeans1=mean1;
- premeans2=mean2;
- findCluster(data,c1,c2,n,mean1,mean2);
- }
- int main() {
- int n;
- printf("Enter number of datapoints: ");
- scanf("%d",&n);
- int data[n];//={515,648,521,759,846,512,621,555,854,315,489,765,915,486,498,500,895,154,359,814};
- int k=2;
- int c1[n],c2[n];
- for(int i=0;i<n;i++){
- scanf("%d",&data[i]);
- }
- int cp1,cp2;
- printf("Enter cluster1: ");//cp1=515 and cp2=814
- scanf("%d",&cp1);
- printf("Enter cluster2: ");
- scanf("%d",&cp2);
- findCluster(data,c1,c2,n,cp1,cp2);
- return 0;
- }
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char ** argv)
- {
- if (argc == 2) {
- int k;
- if ((sscanf(argv[1], "%d", &k) == 1) && (k >= 1)) {
- /* allocate the array to group the k arrays */
- int ** k_arrays = malloc(k * sizeof(int *));
- if (k_arrays == NULL) {
- puts("not enough memory");
- return -1;
- }
- /* allocate all the k arrays, here to contains k int */
- for (int i = 0; i != k; ++i) {
- if ((k_arrays[i] = malloc(k * sizeof(int))) == NULL) {
- puts("not enough memory");
- return -1;
- }
- }
- puts("allocations done");
- }
- }
- return 0;
- }
- pi@raspberrypi:/tmp $ gcc -pedantic -Wextra k.c
- pi@raspberrypi:/tmp $ ./a.out 12
- allocations done
Add Comment
Please, Sign In to add comment