NIKOLAY_TETUS

Lab_ex1

May 9th, 2022 (edited)
1,078
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.85 KB | None | 0 0
  1. /*
  2.  * firstMethod, secondMethod, thirdMethod - различные способы обращения к эле-
  3.  * ментам массива (см. вариант)
  4.  *
  5.  * size_t используется вместо int, т.к. он позволяет вместить в себя любой
  6.  * индескс массива, вне зависимости от платформы
  7.  */
  8.  
  9. #include <stdio.h>
  10. #include <limits.h>
  11.  
  12. //Функции максимума и минимума
  13. #define MIN(a,b) (((a)<(b))?(a):(b))
  14. #define MAX(a,b) (((a)>(b))?(a):(b))
  15.  
  16. #define n 40
  17.  
  18. //Структура - элемент массива
  19. //Содержит индекс и значение элемента
  20. //Используется для удобства и упрощения программы
  21. struct element
  22. {
  23.     size_t index;   //Индекс элемента
  24.     int value;          //Значение элемента
  25. };
  26.  
  27. //Обращение к элементам массиве в форме индексного выражения
  28. double firstMethod(int arr[n], size_t numbersAmount)
  29. {    
  30.     //Вводим элементы массива
  31.     for (size_t i = 0; i < numbersAmount; i++)
  32.         scanf("%d", &arr[i]);
  33.  
  34.     printf("Исходные данные:\n");
  35.     for (size_t i = 0; i < numbersAmount; i++)
  36.         printf("%d) %d\n", i, arr[i]);
  37.    
  38.     struct element maxElement,  //Элемент с максимальным значением
  39.                    minElement;  //Элемент с минимальным значением
  40.    
  41.     maxElement.value = INT_MIN;
  42.     minElement.value = INT_MAX;
  43.    
  44.     //Цикл по массиву, до numbersAmount
  45.     for (size_t i = 0; i < numbersAmount; i++)
  46.     {
  47.         //Проверяем на наибольшее значение
  48.         if (arr[i] > maxElement.value)
  49.         {
  50.             maxElement.value = arr[i];
  51.             maxElement.index = i;
  52.         }
  53.        
  54.         //Проверяем на наименьшее значение
  55.         if (arr[i] < minElement.value)
  56.         {
  57.             minElement.value = arr[i];
  58.             minElement.index = i;
  59.         }
  60.     }
  61.    
  62.     int elementsSum     = 0,    //Сумма элементов в промежутке
  63.         elementsCount   = 0;    //Количество элементов в промежутке
  64.    
  65.     //Цикл между минимальным и максимальным элементом
  66.     for (size_t i = MIN(minElement.index, maxElement.index);
  67.                 i <= MAX(minElement.index, maxElement.index); i++)
  68.     {
  69.         elementsSum += arr[i];  //Прибавляем к сумме значение текущего элемента
  70.         elementsCount++;        //Увеличиваем счётчик элементов
  71.     }
  72.    
  73.     //Возвращаем среднее арифметическое значение
  74.     return (double)elementsSum / (double)elementsCount;
  75. }
  76.  
  77. //Обращение к элементам массиве в форме указателя-переменной
  78. double secondMethod(int arr[n], size_t numbersAmount)
  79. {
  80.     //Объявляем указатель
  81.     int *arrPtr;
  82.    
  83.     //Устанавливаем указатель на начало массива
  84.     arrPtr = arr;
  85.    
  86.     //Вводим элементы массива
  87.     for (size_t i = 0; i < numbersAmount; i++)
  88.         scanf("%d", arrPtr++);
  89.    
  90.     //Устанавливаем указатель на начало массива
  91.     arrPtr = arr;
  92.    
  93.     printf("Исходные данные:\n");
  94.     for (size_t i = 0; i < numbersAmount; i++)
  95.         printf("%d) %d\n", i, *(arrPtr++));
  96.    
  97.     //Устанавливаем указатель на начало массива
  98.     arrPtr = arr;
  99.    
  100.     struct element maxElement,  //Элемент с максимальным значением
  101.                    minElement;  //Элемент с минимальным значением
  102.    
  103.     maxElement.value = INT_MIN;
  104.     minElement.value = INT_MAX;
  105.    
  106.     //Задаём указатель на начало массива
  107.     arrPtr = arr;
  108.    
  109.     //Цикл по массиву, до numbersAmount
  110.     for (size_t i = 0; i < numbersAmount; i++)
  111.     {
  112.         //Проверяем на наибольшее значение
  113.         if (*(arrPtr) > maxElement.value)
  114.         {
  115.             maxElement.value = *(arrPtr);
  116.             maxElement.index = i;
  117.         }
  118.        
  119.         //Проверяем на наименьшее значение
  120.         if (*(arrPtr) < minElement.value)
  121.         {
  122.             minElement.value = *(arrPtr);
  123.             minElement.index = i;
  124.         }
  125.        
  126.         arrPtr++;
  127.     }
  128.    
  129.     int elementsSum     = 0,    //Сумма элементов в промежутке
  130.         elementsCount   = 0;    //Количество элементов в промежутке
  131.    
  132.     arrPtr = arr;   //Передвигаем указатель на начало массива
  133.    
  134.     //Цикл между минимальным и максимальным элементом
  135.     for (size_t i = MIN(minElement.index, maxElement.index);
  136.                 i <= MAX(minElement.index, maxElement.index); i++)
  137.     {
  138.         elementsSum += *(arrPtr++);  //Прибавляем к сумме значение текущего элемента
  139.         elementsCount++;        //Увеличиваем счётчик элементов
  140.     }
  141.    
  142.     //Возвращаем среднее арифметическое значение
  143.     return (double)elementsSum / (double)elementsCount;
  144. }
  145.  
  146. //Обращение к элементам массиве в форме указателя-константы
  147. double thirdMethod(int arr[n], size_t numbersAmount)
  148. {
  149.     //Объявляем указатель на начало массива
  150.     int *arrPtr = arr;
  151.    
  152.     //Вводим элементы массива
  153.     for (size_t i = 0; i < numbersAmount; i++)
  154.         scanf("%d", (arrPtr+i));
  155.    
  156.     printf("Исходные данные:\n");
  157.     for (size_t i = 0; i < numbersAmount; i++)
  158.         printf("%d) %d\n", i, *(arrPtr+i));
  159.  
  160.     struct element maxElement,  //Элемент с максимальным значением
  161.                    minElement;  //Элемент с минимальным значением
  162.    
  163.     maxElement.value = INT_MIN; //Задаём минимально возможное значение
  164.     minElement.value = INT_MAX; //Задаём максимально возможное значение
  165.    
  166.     //Цикл по массиву, до numbersAmount
  167.     for (size_t i = 0; i < numbersAmount; i++)
  168.     {
  169.         //Проверяем на наибольшее значение
  170.         if (*(arrPtr+i) > maxElement.value)
  171.         {
  172.             maxElement.value = *(arrPtr+i);
  173.             maxElement.index = i;
  174.         }
  175.        
  176.         //Проверяем на наименьшее значение
  177.         if (*(arrPtr+i) < minElement.value)
  178.         {
  179.             minElement.value = *(arrPtr+i);
  180.             minElement.index = i;
  181.         }
  182.     }
  183.    
  184.     int elementsSum     = 0,    //Сумма элементов в промежутке
  185.         elementsCount   = 0;    //Количество элементов в промежутке
  186.    
  187.     //Цикл между минимальным и максимальным элементом
  188.     for (size_t i = MIN(minElement.index, maxElement.index);
  189.                 i <= MAX(minElement.index, maxElement.index); i++)
  190.     {
  191.         elementsSum += *(arrPtr+i);  //Прибавляем к сумме значение текущего элемента
  192.         elementsCount++;        //Увеличиваем счётчик элементов
  193.     }
  194.    
  195.     //Возвращаем среднее арифметическое значение
  196.     return (double)elementsSum / (double)elementsCount;
  197. }
  198.  
  199. int main()
  200. {
  201.     int elementsAmount = 0; //Количество элементов в массиве
  202.    
  203.     //Вводим количество элементов
  204.     printf("n>");
  205.     scanf("%d", &elementsAmount);
  206.    
  207.     //Проверяем количество элементов
  208.     if (elementsAmount > 40)
  209.     {
  210.         //Выводим ошибку
  211.         printf("n должно быть <= 40");
  212.        
  213.         //Выходим из программы
  214.         return 0;
  215.     }
  216.    
  217.     //Инициализируем массив
  218.     int arr[40] = {};
  219.    
  220.     //Вызываем разные варианты выполнения задания
  221.     printf("Результат: %lf\n", firstMethod(arr, elementsAmount));
  222.     printf("Результат: %lf\n", secondMethod(arr, elementsAmount));
  223.     printf("Результат: %lf\n", thirdMethod(arr, elementsAmount));
  224.    
  225.     return 0;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment