Как найти среднее геометрическое число паскаль

  • В этой теме 0 ответов, 1 участник, последнее обновление 6 лет, 2 месяца назад сделано Васильев Владимир Сергеевич.
  • Сообщения

    • Написать программу, которая выводит среднее геометрическое двух и трех вещественных чисел.

      Решение:

      Среднее геометрическое двух чисел определяется по формуле:
      $$sqrt{|a|cdot|b|}$$
      Аналогично для трех и более чисел.

      program line_5;
      uses crt;
      var
        a, b, c, g: real;
      begin
        clrscr;
        write('a = '); readln(a);
        write('b = '); readln(b);
        write('c = '); readln(c);
        g:=exp(1/3*ln(Abs(a)*Abs(b)*Abs(c)));
        write('Среднее геометрическое = ', g:4:2);
        readkey;
      end.

      Для вычисления корня квадратного в этой программе используется возведение экспоненты в степень (функция exp) и натуральный логарифм (функция ln), так как:
      $$
      a^b = e^{bcdot log_e{a}}
      $$
      В данном случае нужно извлечь корень кубический — ведь считаем среднее геометрическое для трех чисел, поэтому b = 1/3.

  • Автор

    Сообщения

  • Для ответа в этой теме необходимо авторизоваться.

I wanna solve this problem with your support.
Assume that, there is an array in variable named $ar, and exist 5 numbers in this array, so i want to calculate geometric average of these numbers through Pascal or PHP programming language. How can i do ?

asked May 19, 2012 at 15:56

xaal's user avatar

Here is PHP version:

function geometric_average($a) {  
   foreach($a as $i=>$n) $mul = $i == 0 ? $n : $mul*$n;  
   return pow($mul,1/count($a));  
}

//usage
echo geometric_average(array(2,8)); //Output-> 4

answered May 19, 2012 at 16:05

Engineer's user avatar

EngineerEngineer

47.5k12 gold badges88 silver badges91 bronze badges

6

Possible solution in «standard» Pascal:

program GeometricAvarage;

const SIZE = 5;

function GeoAvg(A:array of real):real;
var
  avg: real;
  i: integer;

begin
avg := 1;
for i:=0 to (SIZE) do
  avg := avg * A[i];
avg :=Exp(1/SIZE*Ln(avg));
Result:=avg;
end;

begin

var
ar: array [1..SIZE] of real :=(1,2,3,4,5);

writeln('Geometric Avarage = ', GeoAvg(ar)); {Output should be =~2.605}
readln;
end.

If you want to use dynamic arrays this should be done in Delphi or ObjectPascal for example.

answered May 25, 2012 at 9:29

Razor's user avatar

RazorRazor

111 silver badge4 bronze badges

For someone that had an issue with this, as I have stated in the comment to the PHP answer, that answer may not be suitable for everyone, especially with ones looking to find geometric average/mean for large numbers or large number of numbers as PHP will simply not store it.

Pretty easy solution is to split the initial array into chunks, calculate mean and then multiply them:

function geometricMean(array $array)
{
    if (!count($array)) {
        return 0;
    }

    $total = count($array);
    $power = 1 / $total;

    $chunkProducts = array();
    $chunks = array_chunk($array, 10);

    foreach ($chunks as $chunk) {
        $chunkProducts[] = pow(array_product($chunk), $power);
    }

    $result = array_product($chunkProducts);
    return $result;
}

Note the 10 — it’s the number of elements in a chunk, you may change that if you need to do so. If you get INF as a result, try lowering that.

answered Oct 14, 2015 at 12:16

Sergey Telshevsky's user avatar

Best-pm07

..:::BesT:::..

8 / 8 / 5

Регистрация: 19.03.2009

Сообщений: 195

1

Среднее геометрическое

02.11.2010, 00:11. Показов 9814. Ответов 12

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Задание:
Найти среднее геометрическое отлицательных нечетных элементов массива.

Вообщем нужно исправить эту программу, чтобы работала по заданию и правильно считала.
Среднее геометрическое: всё умноженное, а потом корень n-ной степени

Вот что-то написал, но уверен, что недописал и формула возможно не правильная, т.к. пересчитывал и не получил нужный результат.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses wincrt;
var
   a:array[1..100] of integer;
   i,kol,n:integer;
   otv:real;
begin
write('Ââåäèòå êîëè÷åñòâî ýëåìåíòîâ: ');
readln(n);
writeln('Ìàññèâ');
randomize;
for i:=1 to n do
 begin
  a[i]:=random(9);
  write(a[i]:3);
end;
otv:=exp(1/n*ln(a[i]));
writeln;
writeln('OTVET: ',otv:5:3);
end.

Добавлено через 1 минуту
Тут точно считает не нечетные, а все.
Нужно, чтобы работало с нечетными.



0



pryda

Неадекват и грубиян

310 / 297 / 301

Регистрация: 22.02.2010

Сообщений: 645

02.11.2010, 00:49

2

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var a:array[1..20]of integer;
    i,k:integer; sg:real;
begin
randomize;
sg:=1; k:=0;
for i:=1 to 20 do
begin
     a[i]:=random(20)-10;
     if (a[i]<0)and(odd(a[i])) then
     begin
          sg:=sg*a[i];
          inc(k);
     end;
end;
sg:=power(sg,1/k);
writeln(sg);
end.



1



Best-pm07

..:::BesT:::..

8 / 8 / 5

Регистрация: 19.03.2009

Сообщений: 195

02.11.2010, 19:07

 [ТС]

3

Вот переделал, но есть НЕДОЧЕТЫ, которые я не понимаю как ИСПРАВИТЬ.
А именно:
Например, у меня сгенерировало числа:
5 2 3 0 1
Программа считает так:
— Выбирает положительные (5 2 3 1)
— Отсеивает четные (5 3 1)
— И вычисляет следующим образом
—> корень 5 степени из (5x3x1)
В итоге: 1,718771928…

Когда должно быть:
—> корень 3 степени из (5x3x1) // 3 степени (!), так как элементов у нас, после отсеивания, 3.
Поэтому ПРАВИЛЬНЫЙ ответ: 2,466212074…

Помогите сделать, чтобы в

Pascal
1
kol

было ПРАВИЛЬНОЕ значение СТЕПЕНИ.
Сколько сижу — не пойму как.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
uses wincrt;
var a:array[1..100]of integer;
    i,n,kol:integer;
    p,geom:real;
begin
write('Ââåäèòå êîëè÷åñòâî ýëåìåíòîâ: ');
readln(n);
writeln('Ìàññèâ');
randomize;
for i:=1 to n do
begin
     a[i]:=random(20);
     write(a[i]:3);
end;
p:=1;
for i:=1 to n do
begin
if (a[i]>0) and (odd(a[i])) then
P:=p*a[i];
inc(kol);
geom:=exp(ln(p)*(1/kol));
end;
writeln;
write('Srednee geometricheskoe: ',geom:3:5);
end.



0



Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

02.11.2010, 19:11

4

Выбирает положительные (5 2 3 1)//по условию отрицательные
— Отсеивает четные (5 3 1)
— И вычисляет следующим образом
—> корень 5 степени из (5x3x1)//с какого 5 степень если чисел 3?



1



..:::BesT:::..

8 / 8 / 5

Регистрация: 19.03.2009

Сообщений: 195

02.11.2010, 19:14

 [ТС]

5

я проверял и пересчитывал в ручную,
да, в программе даже после отсеивания считает степень стольки элементов, сколько мы вводим для генерирования



0



..:::BesT:::..

8 / 8 / 5

Регистрация: 19.03.2009

Сообщений: 195

02.11.2010, 19:17

 [ТС]

6

а то, что по условию отрицательные — я знаю.
но вот это видать в условии ошибка, ведь невозможно считать среднее геометрическое из отрицательных елементов?
разве если этих елементов будет четное кол-во (т.к. минус на минус = плюс) и тогда корень извлечется.
но чтобы это реализовать у меня не хватит мозгов(
поэтому решил поменять на положительные



0



Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

02.11.2010, 19:22

7

Цитата
Сообщение от Best-pm07
Посмотреть сообщение

ведь невозможно считать среднее геометрическое из отрицательных елементов?

Если только одни отрицательные, то можно.
Например -3 -1 -5 ср.геом.= -2,466 -5 -6 ср.геом.=5,477

Добавлено через 2 минуты

Цитата
Сообщение от Best-pm07
Посмотреть сообщение

да, в программе даже после отсеивания считает степень стольки элементов, сколько мы вводим для генерирования

Так считай сколько элементов выбрано и корень этой степени извлекай.



1



..:::BesT:::..

8 / 8 / 5

Регистрация: 19.03.2009

Сообщений: 195

02.11.2010, 19:28

 [ТС]

8

это сложно сделать для отрицательных, нужно именно определить, где какая степень и сколько знаков, чтобы считало отрицательные — и опять же устранить проблему со степенью корня.

со знаками разобрался, вот в реализации, все равно я не понимаю, почему оно не в той степени считает…

если есть возможность скажите что добавитьизменить в коде, чтобы все заработало правильно (если возможно с отрицательными)
зараннее спасибо

Добавлено через 1 минуту
вот этого я и понять не могу — как считать, чтолько отсеяно.
вот над этим и сидел)

саму реализацию кол-ва отсеянных не понимаю.



0



Puporev

Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

02.11.2010, 19:39

9

Цитата
Сообщение от Best-pm07
Посмотреть сообщение

это сложно сделать для отрицательных, нужно именно определить, где какая степень и сколько знаков, чтобы считало отрицательные — и опять же устранить проблему со степенью корня.

Степень определяется количеством выбранных отрицательных чисел, если оно четное, то sg:=exp(ln(p)/k);
если нечетное, то sg:=-exp(ln(abs(p))/k);

Добавлено через 3 минуты
Примитивная задача, а написал уже целый роман. Потому что не знаешь ничего и слушать не хочешь, шибка умный.
Вот как нужно считать для положительных

Pascal
1
2
3
4
5
6
7
8
p:=1;kol:=0;
for i:=1 to n do
if (a[i]>0) and (odd(a[i])) then
 begin
  P:=p*a[i];
  inc(kol);
 end; 
geom:=exp(ln(p)*(1/kol));



1



..:::BesT:::..

8 / 8 / 5

Регистрация: 19.03.2009

Сообщений: 195

02.11.2010, 22:56

 [ТС]

10

Так считай сколько элементов выбрано и корень этой степени извлекай.

Это главное, чего я прошу.
Я не пойму как это сделать((
И код, который вы написали последним такой же как и выше написанный мною (разве что kol:=0, что ничего не изменяет, по моему мнению).
написал целый роман дабы легче можно было меня понять, вы ведь поняли о чем я, но напиисали совсем не то, что я хотел услышать.

Возможно, кто-нибудь и форумчан сможет мне подсказать как сделать дальше?



0



Puporev

Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

02.11.2010, 23:02

11

Цитата
Сообщение от Best-pm07
Посмотреть сообщение

И код, который вы написали последним такой же как и выше написанный мною

Ерунду не мели, посмотри как расставлены опероторские скобки у тебя и у меня. Вместо того чтобы рыдать, давно бы уже проверил.
Вот твоя чушь

Pascal
1
2
3
4
5
6
7
for i:=1 to n do
  begin
   if (a[i]>0) and (odd(a[i])) then
   P:=p*a[i];
   inc(kol);
   geom:=exp(ln(p)*(1/kol));
 end;

А вот как нужно

Pascal
1
2
3
4
5
6
for i:=1 to n do
if (a[i]>0) and (odd(a[i])) then
 begin
  P:=p*a[i];
  inc(kol);
 end;

Сравни как скобки стоят.



1



Puporev

Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

02.11.2010, 23:02

12

Цитата
Сообщение от Best-pm07
Посмотреть сообщение

И код, который вы написали последним такой же как и выше написанный мною

Ерунду не мели, посмотри как расставлены опероторские скобки у тебя и у меня. Вместо того чтобы рыдать, давно бы уже проверил.
Вот твоя чушь

Pascal
1
2
3
4
5
6
7
for i:=1 to n do
  begin
   if (a[i]>0) and (odd(a[i])) then
   P:=p*a[i];
   inc(kol);
   geom:=exp(ln(p)*(1/kol));
 end;

А вот как нужно

Pascal
1
2
3
4
5
6
for i:=1 to n do
if (a[i]>0) and (odd(a[i])) then
 begin
  P:=p*a[i];
  inc(kol);
 end;

Сравни как скобки стоят.



1



..:::BesT:::..

8 / 8 / 5

Регистрация: 19.03.2009

Сообщений: 195

02.11.2010, 23:26

 [ТС]

13

Все спасибо, я очень не внимательный.



0



Begin9. Даны два неотрицательных числа $$a$$ и $$b$$. Найти их среднее геометрическое, то есть квадратный корень из их произведения: $$sqrt{a*b}$$ .

Решение:

Delphi/Pascal

1

2

3

4

5

6

7

8

9

10

11

program Begin9;

var

  a,b,SG: Real;

begin

  Write(‘Введите число a: ‘);

  Readln(a);

  Write(‘Введите число b: ‘);

  Readln(b);

  SG:=sqrt(a*b);

  Writeln(‘Среднее геометрическое a и b равно: ‘,SG);

end.

Другие задачи из раздела Begin можно посмотреть здесь.

Среднее арифметическое в pascal

Среднее арифметическое равняется сумме чисел деленное на их количество. Рассчитывается по формуле: S=(x1+x2+x3+. +xn)/n, где n – количество элементов. В Turbo Pascal среднее арифметическое найти можно как с массивом, так и без него. Во втором случае необходимо предусмотреть ввод количества элементов n (как в примере ниже), либо при каждой новой записи в цикле производить ее инкремент.

writeln(‘Введите количество чисел’);

writeln(‘Введите ‘,i,’ число’);

writeln(‘Среднее арифметическое =’,s/n:5:2);

Среднее геометрическое в pascal

Среднее геометрическое положительных чисел – число, которым можно заменить, каждое из заданных элементов, при этом произведение остается неизменным. Рассчитывается по формуле: (x1*x2*x3*. *xn) 1/n , где n – количество элементов. В Turbo Pascal среднее геометрическое находится аналогично среднему арифметическому за исключением знака операции и того, что результат необходимо не делить на общее количество элементов n, а возвести в степень обратного числа (1/n). Возвести в дробную степень можно, используя универсальную функцию возведения в степень.

Среднее арифметическое – Вычисление среднего арифметического в Паскале

Среднее арифметическое без наибольшего и наименьшего – Программа аналогичная предыдущей, не учитывая максимальный и минимальный элементы

Условие задачи : Вычислить среднее арифметическое кубов двух чисел и среднее геометрическое их модулей (Язык Pascal).

Сложность : легкая .

Для начала продумаем наше решение. Оно ну очень простое. Введем числа, потом просто подставим их в формулу среднего арифметического и среднего геометрического и всё)

Для того чтобы решить задачу нам понадобятся следующее переменные :

1. Переменные num1 и num2 — для наших двух чисел
2. Переменная sredA — для среднего арифметического
3. Переменная sredG — для среднего геометрического

Начнем мы с каркаса нашей программы :

Тут мы объявили переменные и попросили пользователя ввести значения. Теперь стоит сказать как находятся среднее арифметическое и геометрическое.

1. Среднее арифм. — это сумма всех чисел деленная на кол-во чисел, т.е. в нашем случае два числа, значит будет (num1+num2)/2

2. Среднее геометр. — это корень из произведения всех чисел, т.е. надо умножить все числа и извлечь корень.

И так сначала давайте для среднего арифметического :

Тут всё просто. Дальше для среднего геометрического, в условии сказано что там модуль чисел, поэтому :

Вот и всё. Осталось только вывести результаты.

Дана кв. матрица
6 3 2 5
1 4 7 9
3 8 10 11
5 3 6 9
Найти среднее геометрич положительных эл-тов массива,у которых сумма номеров строки и столбца есть нечётное число.

Только не надо говорить что это легко( я это и сама знаю), но не могу решить(((. Помогите.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как составить тест для исследования
  • Как найти дистрибьютеров для продажи
  • Как найти воевавшего в чечне
  • Как найти размер предложения в информатике
  • Ошибки в посадке брюк как исправить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии