Определить среднее геометрическое элементов массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, дано задание: Определить значения и позиции первого и последнего отрицательного элементов массива. Рассмотреть случаи, когда отрицательных элементов нет, имеется только один отрицательный элемент, имеются два и более отрицательных элементов. Для последнего случая определить среднее геометрическое элементов, которые расположены между первым и последним отрицательными элементами массива. Если с первым я разобрался, то последние не могу понять как сделать. может кто то объяснит? Вот исходник:
Листинг программы
  1. #include "stdafx.h"
  2. #include"stdio.h"
  3. #include"math.h"
  4. #include"conio.h"
  5. #include"windows.h"
  6. #include"cmath"
  7. #include<iostream>
  8.  
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11. int i, n,
  12. //позиции первого и последнего отрицательных элементов, одновременно флаги
  13. ifirst, ilast;
  14. const int massiv = 20;
  15. double x[massiv] = { 2, 6, 13.6, -36.6, 16.3, -34.5, 18.6, 7.4, 12.2, -56.1,
  16. 13, 18, 34, -102, 66, -38, -71, 23, 25.4, 15 }, fminus, lminus;
  17. //set Russian
  18. setlocale(0, "rus");
  19. //Ввод и контроль размерности массива
  20. printf("Введите размер массива <=20!\n");
  21. printf("Ваше значение массива = ");
  22. scanf_s("%d", &n);
  23. //условие на проверку превышения значения массива
  24. if (n <= 0 || n>massiv)
  25. {
  26. printf("\nОШИБКА!!!!!!!\n", n);
  27. printf("Размер вашего массива равный %d элементам, не соответствует размеру массива от 1 до 20 элементов\n", n);
  28. printf("\nДля завершения программы нажмите любую клавишу\n");
  29. _getch(); exit(0);
  30. }
  31. printf("\n-----------------------------------------------\n");
  32. //Вывод исходного массива
  33. printf("Исходный массив х размером %d\n", n);
  34. for (i = 0; i<n; i++)
  35. printf("%8.2lf", x[i]);
  36. ifirst = -1; //Это признак того, что первый отрицательный элемент пока не найден.
  37. //Индексы элементов массива 0,1,2,...,19
  38. ilast = -1; //Это признак того, что последний отрицательный элемент пока не найден.
  39. for (i = 0; i<n && x[i] >= 0; i++);
  40. if (i<n)
  41. {
  42. ifirst = i; fminus = x[i];
  43. for (i = n - 1; i>ifirst && x[i] >= 0; i--);
  44. if (i>ifirst)
  45. {
  46. ilast = i; lminus = x[i];
  47. }
  48. }
  49. //Проверка: сколько найдено отрицательных элементов
  50. if (ifirst == -1)
  51. {
  52. printf("\n-----------------------------------------------\n");
  53. printf("\nОтрицательных элементов нет\n");
  54. }
  55. else
  56. if (ilast == -1){
  57. printf("\n-----------------------------------------------\n");
  58. printf("\nОдин отрицательный элемент = %8.2lf, его позиция = %d\n", x[ifirst], ifirst);
  59. }
  60. else
  61. {
  62. printf("\n-----------------------------------------------\n");
  63. printf("\nПервый отрицательный элемент = %8.2lf, его позиция = %d\n", x[ifirst], ifirst);
  64. printf("\nПоследний отрицательный элемент = %8.2lf, его позиция = %d\n", x[ilast], ilast);
  65. printf("\n-----------------------------------------------\n");
  66. }
  67. //определяю среднее геометрическое элементов, которые расположены между первым и последним отрицательными элементами массива.
  68. //the end
  69. printf("\nДля завершения программы нажмите любую клавишу\n");
  70. _getch();
  71. return 0;
  72. }

Решение задачи: «Определить среднее геометрическое элементов массива»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. const int N = 10;
  5. int main()
  6. {
  7.     int i, n = 0, first, last, a[10] = {4, 18, -12, 6, 22, 15, 36, 72, -90, 6};
  8.     double mult = 1.0;
  9.     for(i = 0; i < N; ++i){
  10.         if(a[i] < 0){
  11.             first = i;
  12.             printf("The first negative elment is a[%d] = %d\n", first, a[i]);
  13.             break;
  14.         }
  15.         if(i == N -1)
  16.             printf("The array haven't any negativ elements\n");
  17.     }
  18.     for(i = N -1; i >= 0; --i)
  19.         if(a[i] < 0){
  20.             last = i;
  21.             printf("The Last negative elment is a[%d] = %d\n", last, a[i]);
  22.             break;
  23.     }
  24.     if(first == last)
  25.         printf("The array have only one negative element\n");
  26.     else {
  27.         for(i = first; i <= last; ++i){
  28.             mult = mult * abs(a[i]);
  29.             ++n;}
  30.     printf("The geometric mean of elements between first and last negative is \n%e\n",
  31.             pow(mult, 1.0/n));
  32.     }
  33.     return 0;
  34. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с стандартными функциями ввода-вывода, математикой и памятью.
  2. Задаем размер массива N = 10.
  3. Создаем переменную i для цикла, переменную n для подсчета количества отрицательных элементов, переменные first и last для определения индексов первого и последнего отрицательного элемента.
  4. Инициализируем массив a[10] = {4, 18, -12, 6, 22, 15, 36, 72, -90, 6} значениями элементов.
  5. Устанавливаем начальное значение переменной mult равным 1.0.
  6. В цикле проверяем каждый элемент массива на отрицательность, используя условие a[i] < 0. Если элемент отрицательный, то запоминаем его индекс в переменную first, выводим значение элемента и прерываем цикл.
  7. Если в цикле не было найдено отрицательных элементов, выводим сообщение об этом.
  8. Во втором цикле, начиная с N-1, проверяем каждый элемент массива на отрицательность, используя условие a[i] < 0. Если элемент отрицательный, то запоминаем его индекс в переменную last, выводим значение элемента и прерываем цикл.
  9. Если в цикле не было найдено отрицательных элементов, выводим сообщение об этом.
  10. Если индексы первого и последнего отрицательного элемента совпадают, выводим сообщение о том, что в массиве есть только один отрицательный элемент.
  11. В противном случае, в цикле, начиная с first и до last, умножаем значение переменной mult на абсолютное значение каждого элемента и увеличиваем счетчик n на единицу.
  12. Выводим сообщение о геометрическом среднем элементов между первым и последним отрицательным элементом, используя формулу pow(mult, 1.0/n).
  13. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы