cookchar

Fun With Arrays

Oct 17th, 2016
114
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //Coded by Charlie Cook
  4.  
  5. void printBackwards(int *array, int lastIndex) {
  6.     if (lastIndex == 0) {printf("%d]\n", array[lastIndex]);}
  7.     else {
  8.         printf("%d, ", array[lastIndex]);
  9.         lastIndex--;
  10.         printBackwards(array, lastIndex);
  11.     }
  12. }
  13.  
  14. void minMax2(int *array, int arraySize) {
  15.     switch (arraySize) {
  16.         int k;
  17.         case 1 : {printf("Your max and min is %d. Such a tiny array!\n", array[0]);break;}
  18.         case 2 : {
  19.             if (array[0] > array[1]) {
  20.                 printf("Your min is %d and your max is %d.\n", array[1], array[0]);
  21.             } else  if (array[0] < array[1]) {
  22.                 printf("Your min is %d and your max is %d.\n", array[0], array[1]);
  23.             } else {
  24.                 printf("Your min and max is %d. What a boring array!\n", array[0]);
  25.             }
  26.             break;
  27.         }
  28.         default : {
  29.             int min, max;
  30.             min = array[0];
  31.             max = array[0];
  32.  
  33.             for (k = 0; k < arraySize; k++) {
  34.                 if (array[k] > max) {max = array[k];}
  35.                 else if (array[k] < min) {min = array[k];}
  36.             }
  37.  
  38.             if (min == max) {
  39.                 printf("Your min and max is %d. What a boring array!\n", min);
  40.             } else {
  41.                 int moreThanThree = 0;
  42.                 for (k = 0; k < arraySize; k++) {
  43.                     if (array[k] != min && array[k] != max) {
  44.                         moreThanThree++;
  45.                         break;
  46.                     }
  47.                 }
  48.  
  49.                 if (moreThanThree) {
  50.                     int min2 = max;
  51.                     int max2 = min;
  52.  
  53.                     for (k = 0; k < arraySize; k++) {
  54.                         if (array[k] > min && array[k] < min2) {min2 = array[k];}
  55.                         if (array[k] < max && array[k] > max2) {max2 = array[k];}
  56.                     }
  57.  
  58.                     if (min2 == max2) {
  59.                         printf("Your min is %d, your max is %d, and your second min and second max is %d.\n", min, max, min2);
  60.                     } else {
  61.                         printf("Your min is %d, your max is %d, your second min is %d and your second max is %d.\n", min, max, min2, max2);
  62.                     }
  63.                 } else {
  64.                     printf("Your min is %d, your max is %d, and there is no second min nor second max.\n", min, max);
  65.                 }
  66.             }
  67.         }
  68.     }
  69. }
  70.  
  71. void swap(int *g, int *h) {
  72.     int temp = *g;
  73.     *g = *h;
  74.     *h = temp;
  75. }
  76.  
  77. void bubbleSort(int *array, int arraySize) {
  78.     printf("\nNow bubble sorting your array!\n");
  79.     for (int m = 0; m < arraySize - 1; m++) {
  80.         for (int n = 0; n < arraySize - 1; n++) {
  81.             if (array[n] > array[n + 1]) {
  82.                 swap(&array[n], &array[n + 1]);
  83.             }
  84.         }
  85.     }
  86.     printf("Your array is now sorted!\n");
  87. }
  88.  
  89. void printArray(int *array, int arraySize) {
  90.     printf("Your array is: [");
  91.  
  92.     for (int j = 0; j < arraySize; j++) {
  93.         if (j + 1 < arraySize) {printf("%d, ", array[j]);}
  94.         else {printf("%d]\n",array[j]);}
  95.     }
  96. }
  97.  
  98. int min(int *array, int arraySize) {
  99.     int resMin = array[0];
  100.     for (int p = 0; p < arraySize; p++) {
  101.         if (array[p] < resMin) {resMin = array[p];}
  102.     }
  103.     return resMin;
  104. }
  105.  
  106. int max(int *array, int arraySize) {
  107.     int resMax = array[0];
  108.     for (int q = 0; q < arraySize; q++) {
  109.         if (array[q] > resMax) {resMax = array[q];}
  110.     }
  111.     return resMax;
  112. }
  113.  
  114. void printCountArray(int *countArray, int countArraySize) {
  115.     printf("Your counting array says your original array has:\n[ number | amount ]\n");
  116.  
  117.     for (int s = 0; s < countArraySize; s++) {
  118.         if (countArray[s] != 0) {
  119.             printf("[ %d | %d ]\n", s, countArray[s]);
  120.         }
  121.     }
  122. }
  123.  
  124. void makeCountArray(int *array, int arraySize) {
  125.     int arrayMin = min(array, arraySize);
  126.     int arrayMax = max(array, arraySize);
  127.     int countArraySize = arrayMax + 1;
  128.  
  129.     printf("\nNow making a counting array of your original array!\n");
  130.  
  131.     int *c;
  132.     c = (int*) calloc(countArraySize, sizeof(int));
  133.     for (int r = 0; r < arraySize; r++) {
  134.         c[array[r]]++;
  135.     }
  136.     printCountArray(c, countArraySize);
  137. }
  138.  
  139. void main() {
  140.     int size = 0;
  141.     int *a;
  142.  
  143.     do {
  144.         printf("How many spaces do you want in your array?\n--{ ");
  145.         scanf("%d", &size);
  146.     } while (size <= 0);
  147.  
  148.     a = (int*) calloc(size, sizeof(int));
  149.  
  150.     if (size == 1) {
  151.         printf("\nPlease enter %d number.\n--{ ", size);
  152.     } else {
  153.         printf("\nPlease enter %d numbers, separated by spaces.\n--{ ", size);
  154.     }
  155.    
  156.     for (int i = 0; i < size; i++) {scanf("%d", &a[i]);}
  157.  
  158.     printArray(a, size);
  159.  
  160.     printf("Your array backwards is: [");
  161.     printBackwards(a, size - 1);
  162.  
  163.     minMax2(a, size);
  164.  
  165.     bubbleSort(a, size);
  166.     printArray(a, size);
  167.  
  168.     makeCountArray(a, size);
  169. }
RAW Paste Data