Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * firstMethod, secondMethod, thirdMethod - различные способы обращения к эле-
- * ментам массива (см. вариант)
- *
- * size_t используется вместо int, т.к. он позволяет вместить в себя любой
- * индескс массива, вне зависимости от платформы
- */
- #include <stdio.h>
- #include <limits.h>
- //Функции максимума и минимума
- #define MIN(a,b) (((a)<(b))?(a):(b))
- #define MAX(a,b) (((a)>(b))?(a):(b))
- #define n 40
- //Структура - элемент массива
- //Содержит индекс и значение элемента
- //Используется для удобства и упрощения программы
- struct element
- {
- size_t index; //Индекс элемента
- int value; //Значение элемента
- };
- //Обращение к элементам массиве в форме индексного выражения
- double firstMethod(int arr[n], size_t numbersAmount)
- {
- //Вводим элементы массива
- for (size_t i = 0; i < numbersAmount; i++)
- scanf("%d", &arr[i]);
- printf("Исходные данные:\n");
- for (size_t i = 0; i < numbersAmount; i++)
- printf("%d) %d\n", i, arr[i]);
- struct element maxElement, //Элемент с максимальным значением
- minElement; //Элемент с минимальным значением
- maxElement.value = INT_MIN;
- minElement.value = INT_MAX;
- //Цикл по массиву, до numbersAmount
- for (size_t i = 0; i < numbersAmount; i++)
- {
- //Проверяем на наибольшее значение
- if (arr[i] > maxElement.value)
- {
- maxElement.value = arr[i];
- maxElement.index = i;
- }
- //Проверяем на наименьшее значение
- if (arr[i] < minElement.value)
- {
- minElement.value = arr[i];
- minElement.index = i;
- }
- }
- int elementsSum = 0, //Сумма элементов в промежутке
- elementsCount = 0; //Количество элементов в промежутке
- //Цикл между минимальным и максимальным элементом
- for (size_t i = MIN(minElement.index, maxElement.index);
- i <= MAX(minElement.index, maxElement.index); i++)
- {
- elementsSum += arr[i]; //Прибавляем к сумме значение текущего элемента
- elementsCount++; //Увеличиваем счётчик элементов
- }
- //Возвращаем среднее арифметическое значение
- return (double)elementsSum / (double)elementsCount;
- }
- //Обращение к элементам массиве в форме указателя-переменной
- double secondMethod(int arr[n], size_t numbersAmount)
- {
- //Объявляем указатель
- int *arrPtr;
- //Устанавливаем указатель на начало массива
- arrPtr = arr;
- //Вводим элементы массива
- for (size_t i = 0; i < numbersAmount; i++)
- scanf("%d", arrPtr++);
- //Устанавливаем указатель на начало массива
- arrPtr = arr;
- printf("Исходные данные:\n");
- for (size_t i = 0; i < numbersAmount; i++)
- printf("%d) %d\n", i, *(arrPtr++));
- //Устанавливаем указатель на начало массива
- arrPtr = arr;
- struct element maxElement, //Элемент с максимальным значением
- minElement; //Элемент с минимальным значением
- maxElement.value = INT_MIN;
- minElement.value = INT_MAX;
- //Задаём указатель на начало массива
- arrPtr = arr;
- //Цикл по массиву, до numbersAmount
- for (size_t i = 0; i < numbersAmount; i++)
- {
- //Проверяем на наибольшее значение
- if (*(arrPtr) > maxElement.value)
- {
- maxElement.value = *(arrPtr);
- maxElement.index = i;
- }
- //Проверяем на наименьшее значение
- if (*(arrPtr) < minElement.value)
- {
- minElement.value = *(arrPtr);
- minElement.index = i;
- }
- arrPtr++;
- }
- int elementsSum = 0, //Сумма элементов в промежутке
- elementsCount = 0; //Количество элементов в промежутке
- arrPtr = arr; //Передвигаем указатель на начало массива
- //Цикл между минимальным и максимальным элементом
- for (size_t i = MIN(minElement.index, maxElement.index);
- i <= MAX(minElement.index, maxElement.index); i++)
- {
- elementsSum += *(arrPtr++); //Прибавляем к сумме значение текущего элемента
- elementsCount++; //Увеличиваем счётчик элементов
- }
- //Возвращаем среднее арифметическое значение
- return (double)elementsSum / (double)elementsCount;
- }
- //Обращение к элементам массиве в форме указателя-константы
- double thirdMethod(int arr[n], size_t numbersAmount)
- {
- //Объявляем указатель на начало массива
- int *arrPtr = arr;
- //Вводим элементы массива
- for (size_t i = 0; i < numbersAmount; i++)
- scanf("%d", (arrPtr+i));
- printf("Исходные данные:\n");
- for (size_t i = 0; i < numbersAmount; i++)
- printf("%d) %d\n", i, *(arrPtr+i));
- struct element maxElement, //Элемент с максимальным значением
- minElement; //Элемент с минимальным значением
- maxElement.value = INT_MIN; //Задаём минимально возможное значение
- minElement.value = INT_MAX; //Задаём максимально возможное значение
- //Цикл по массиву, до numbersAmount
- for (size_t i = 0; i < numbersAmount; i++)
- {
- //Проверяем на наибольшее значение
- if (*(arrPtr+i) > maxElement.value)
- {
- maxElement.value = *(arrPtr+i);
- maxElement.index = i;
- }
- //Проверяем на наименьшее значение
- if (*(arrPtr+i) < minElement.value)
- {
- minElement.value = *(arrPtr+i);
- minElement.index = i;
- }
- }
- int elementsSum = 0, //Сумма элементов в промежутке
- elementsCount = 0; //Количество элементов в промежутке
- //Цикл между минимальным и максимальным элементом
- for (size_t i = MIN(minElement.index, maxElement.index);
- i <= MAX(minElement.index, maxElement.index); i++)
- {
- elementsSum += *(arrPtr+i); //Прибавляем к сумме значение текущего элемента
- elementsCount++; //Увеличиваем счётчик элементов
- }
- //Возвращаем среднее арифметическое значение
- return (double)elementsSum / (double)elementsCount;
- }
- int main()
- {
- int elementsAmount = 0; //Количество элементов в массиве
- //Вводим количество элементов
- printf("n>");
- scanf("%d", &elementsAmount);
- //Проверяем количество элементов
- if (elementsAmount > 40)
- {
- //Выводим ошибку
- printf("n должно быть <= 40");
- //Выходим из программы
- return 0;
- }
- //Инициализируем массив
- int arr[40] = {};
- //Вызываем разные варианты выполнения задания
- printf("Результат: %lf\n", firstMethod(arr, elementsAmount));
- printf("Результат: %lf\n", secondMethod(arr, elementsAmount));
- printf("Результат: %lf\n", thirdMethod(arr, elementsAmount));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment