Advertisement
oshuej

Leha_KR_1

May 19th, 2020
1,158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.46 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void findMinAndDelete(int *array, int *length);
  5. void findMaxAndDelete(int *array, int *length);
  6. void addNumberToBeginningOfArray(int *array, int *length, int number);
  7.  
  8. int main() {
  9.     int
  10.         *inputNumbers = NULL, n = 0, elem = 0,
  11.         negativeNumbersSum = 0, positiveNumbersSum = 0,
  12.         maxValue = INT32_MIN, minValue = INT32_MAX;
  13.  
  14.     // начало ввода даных
  15.     do {
  16.         printf("a[%d]= ", n);
  17.         scanf("%d", &elem);
  18.         inputNumbers = (int*) realloc(inputNumbers, (n + 1) * sizeof(int));         // выделяем память
  19.         inputNumbers[n] = elem;
  20.         if (elem >= 0) {
  21.             positiveNumbersSum += elem;
  22.         } else {
  23.             negativeNumbersSum += elem;
  24.         }
  25.  
  26.         if (elem > maxValue) {                      // ищем максимальное значение
  27.             maxValue = elem;
  28.         } else if (elem < minValue) {               // ищем минимальное значение
  29.             minValue = elem;
  30.         }
  31.  
  32.         n++;
  33.     } while (positiveNumbersSum >= -negativeNumbersSum);
  34.     // конец ввода данных
  35.  
  36.     if (n > 1) {                                                    // проверяем, что было введено более чем 1 значение
  37.         for (int i = 1; i < n; i++) {
  38.             if (inputNumbers[i] < inputNumbers[i - 1]) {
  39.                 printf("Массив не отсортирован по возрастанию\n");
  40.                 findMinAndDelete(inputNumbers, &n);
  41.                 findMaxAndDelete(inputNumbers, &n);
  42.                 addNumberToBeginningOfArray(inputNumbers, &n, maxValue + minValue);
  43.                 break;
  44.             } else if (i == n - 1) {
  45.                 printf("Массив отсортирован по возрастанию\n");
  46.                 return 0;
  47.             }
  48.         }
  49.     }
  50.  
  51.     for (int i = 0; i < n; i++) {
  52.         printf("%d ", inputNumbers[i]);
  53.     }
  54.  
  55.     return 0;
  56. }
  57.  
  58. void findMinAndDelete(int *array, int *length) {                                // функция находит минмимальное число и удаляет его
  59.     int minValue = INT32_MAX, minValueIndex = 0;
  60.     for (int i = 0; i < *length; i++) {
  61.         if (array[i] < minValue) {
  62.             minValue = array[i];
  63.             minValueIndex = i;
  64.         }
  65.     }
  66.  
  67.     for (int i = minValueIndex; i < *length - 1; i++) {
  68.         array[i] = array[i + 1];
  69.     }
  70.     *length -= 1;
  71. }
  72.  
  73. void findMaxAndDelete(int *array, int *length) {                                // функция находит максимальное число и удаляет его из массива
  74.     int maxValue = INT32_MIN, maxValueIndex = 0;
  75.     for (int i = 0; i < *length; i++) {
  76.         if (array[i] > maxValue) {
  77.             maxValue = array[i];
  78.             maxValueIndex = i;
  79.         }
  80.     }
  81.  
  82.     for (int i = maxValueIndex; i < *length - 1; i++) {
  83.         array[i] = array[i + 1];
  84.     }
  85.     *length -= 1;
  86. }
  87.  
  88. void addNumberToBeginningOfArray(int *array, int *length, int number) {         // сдвигаем все элементы массива вправо, а первым элементом ставим переданное число
  89.     array = (int*) realloc(array, (*length + 1) * sizeof(int));
  90.     for (int i = *length; i > 0; i--) {
  91.         array[i] = array[i - 1];
  92.     }
  93.     array[0] = number;
  94.     *length += 1;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement