Определить среднее геометрическое элементов массива - C (СИ)
Формулировка задачи:
Здравствуйте, дано задание:
Определить значения и позиции первого и последнего отрицательного элементов массива. Рассмотреть случаи, когда отрицательных элементов нет, имеется только один отрицательный элемент, имеются два и более отрицательных элементов. Для последнего случая определить среднее геометрическое элементов, которые расположены между первым и последним отрицательными элементами массива.
Если с первым я разобрался, то последние не могу понять как сделать. может кто то объяснит?
Вот исходник:
#include "stdafx.h" #include"stdio.h" #include"math.h" #include"conio.h" #include"windows.h" #include"cmath" #include<iostream> int _tmain(int argc, _TCHAR* argv[]) { int i, n, //позиции первого и последнего отрицательных элементов, одновременно флаги ifirst, ilast; const int massiv = 20; double x[massiv] = { 2, 6, 13.6, -36.6, 16.3, -34.5, 18.6, 7.4, 12.2, -56.1, 13, 18, 34, -102, 66, -38, -71, 23, 25.4, 15 }, fminus, lminus; //set Russian setlocale(0, "rus"); //Ввод и контроль размерности массива printf("Введите размер массива <=20!\n"); printf("Ваше значение массива = "); scanf_s("%d", &n); //условие на проверку превышения значения массива if (n <= 0 || n>massiv) { printf("\nОШИБКА!!!!!!!\n", n); printf("Размер вашего массива равный %d элементам, не соответствует размеру массива от 1 до 20 элементов\n", n); printf("\nДля завершения программы нажмите любую клавишу\n"); _getch(); exit(0); } printf("\n-----------------------------------------------\n"); //Вывод исходного массива printf("Исходный массив х размером %d\n", n); for (i = 0; i<n; i++) printf("%8.2lf", x[i]); ifirst = -1; //Это признак того, что первый отрицательный элемент пока не найден. //Индексы элементов массива 0,1,2,...,19 ilast = -1; //Это признак того, что последний отрицательный элемент пока не найден. for (i = 0; i<n && x[i] >= 0; i++); if (i<n) { ifirst = i; fminus = x[i]; for (i = n - 1; i>ifirst && x[i] >= 0; i--); if (i>ifirst) { ilast = i; lminus = x[i]; } } //Проверка: сколько найдено отрицательных элементов if (ifirst == -1) { printf("\n-----------------------------------------------\n"); printf("\nОтрицательных элементов нет\n"); } else if (ilast == -1){ printf("\n-----------------------------------------------\n"); printf("\nОдин отрицательный элемент = %8.2lf, его позиция = %d\n", x[ifirst], ifirst); } else { printf("\n-----------------------------------------------\n"); printf("\nПервый отрицательный элемент = %8.2lf, его позиция = %d\n", x[ifirst], ifirst); printf("\nПоследний отрицательный элемент = %8.2lf, его позиция = %d\n", x[ilast], ilast); printf("\n-----------------------------------------------\n"); } //определяю среднее геометрическое элементов, которые расположены между первым и последним отрицательными элементами массива. //the end printf("\nДля завершения программы нажмите любую клавишу\n"); _getch(); return 0; }
Решение задачи: «Определить среднее геометрическое элементов массива»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> const int N = 10; int main() { int i, n = 0, first, last, a[10] = {4, 18, -12, 6, 22, 15, 36, 72, -90, 6}; double mult = 1.0; for(i = 0; i < N; ++i){ if(a[i] < 0){ first = i; printf("The first negative elment is a[%d] = %d\n", first, a[i]); break; } if(i == N -1) printf("The array haven't any negativ elements\n"); } for(i = N -1; i >= 0; --i) if(a[i] < 0){ last = i; printf("The Last negative elment is a[%d] = %d\n", last, a[i]); break; } if(first == last) printf("The array have only one negative element\n"); else { for(i = first; i <= last; ++i){ mult = mult * abs(a[i]); ++n;} printf("The geometric mean of elements between first and last negative is \n%e\n", pow(mult, 1.0/n)); } return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с стандартными функциями ввода-вывода, математикой и памятью.
- Задаем размер массива N = 10.
- Создаем переменную
i
для цикла, переменнуюn
для подсчета количества отрицательных элементов, переменныеfirst
иlast
для определения индексов первого и последнего отрицательного элемента. - Инициализируем массив a[10] = {4, 18, -12, 6, 22, 15, 36, 72, -90, 6} значениями элементов.
- Устанавливаем начальное значение переменной
mult
равным 1.0. - В цикле проверяем каждый элемент массива на отрицательность, используя условие a[i] < 0. Если элемент отрицательный, то запоминаем его индекс в переменную
first
, выводим значение элемента и прерываем цикл. - Если в цикле не было найдено отрицательных элементов, выводим сообщение об этом.
- Во втором цикле, начиная с N-1, проверяем каждый элемент массива на отрицательность, используя условие a[i] < 0. Если элемент отрицательный, то запоминаем его индекс в переменную
last
, выводим значение элемента и прерываем цикл. - Если в цикле не было найдено отрицательных элементов, выводим сообщение об этом.
- Если индексы первого и последнего отрицательного элемента совпадают, выводим сообщение о том, что в массиве есть только один отрицательный элемент.
- В противном случае, в цикле, начиная с
first
и доlast
, умножаем значение переменнойmult
на абсолютное значение каждого элемента и увеличиваем счетчикn
на единицу. - Выводим сообщение о геометрическом среднем элементов между первым и последним отрицательным элементом, используя формулу pow(mult, 1.0/n).
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д