Найти остаток и целую часть средн. геометрического
|
|
Fess | Дата: Понедельник, 08.04.2013, 14:42 | Сообщение # 1 |
Добрый админ
Сообщений: 2339
Статус: 
| Программа, которая находит среднее геометрическое (это как среднее арифметическое, только вместо складывания чисел мы перемножаем их), затем разбивает средн. геометрическое на целую часть и остаток.
Код Program Celoe_ostatok; var x,y,z,cel:integer; g,f:real;
begin readln(x); readln(y); readln(z); {вводим 3 числа}
g:=x*y*z/3; {формула средн. геометр.}
writeln('--------'); writeln('Формула: ',x,' * ',y,' * ',z,' / 3');
cel:=Trunc(g); {Выделяем целую часть} f:=g - cel;
writeln('Среднее геометрическое: ', g:4:2); writeln('Целая часть: ', cel); writeln('Остаток: ', f:4:2); end.
|
|
| |
DarthVader | Дата: Понедельник, 03.06.2013, 03:42 | Сообщение # 2 |
Группа: Удаленные
| Оу, кажется вышла ошибочка. Среднее геометрическое - это корень n-ной степени из из произведения n чисел. А в коде просто произведение 3-х чисел делится на 3 ((( Вычислить среднее геометрическое 2 чисел - проще простого, это будет так: sqrt(a*b). А вот если три или больше... Тут надо возводить в произвольную степень... С тремя числами, думаю, можно так:
Код g:=exp((1/3)*ln(a*b*c)); По моему, такая штука должна работать. Я, правда, сам не знаю, каким образом (xD), но, по идее, такая команда возводит число в скобках функции ln в степень числа 1/3 (что равносильно извлечению кубического корня). Естественно, можно указывать любую степень и любое число. Сам я не проверял, как это работает)Добавлено (03.06.2013, 03:42) --------------------------------------------- Вообще, думаю, неплохо было бы обобщить программу на случай произвольного n (то бишь кол-ва чисел, из которых высчитывается ср. геометрическое). Ну, то есть, создать массив, считать n, потом заносить каждое число в a (использую цикл, естественно), потом их перемножить и посчитать exp((1/n)*ln(pr)), где pr - произведение чисел из массива. Могу написать код по-нормальному, если кто-нибудь попросит)
|
|
| |
Fess | Дата: Понедельник, 03.06.2013, 21:46 | Сообщение # 3 |
Добрый админ
Сообщений: 2339
Статус: 
| Цитата (DarthVader) Оу, кажется вышла ошибочка. Среднее геометрическое - это корень n-ной степени из из произведения n чисел. А в коде просто произведение 3-х чисел делится на 3 ((( Позор моим математическим познаниям хД
Цитата (DarthVader) Вообще, думаю, неплохо было бы обобщить программу на случай произвольного n (то бишь кол-ва чисел, из которых высчитывается ср. геометрическое). Ну, то есть, создать массив, считать n, потом заносить каждое число в a (использую цикл, естественно), потом их перемножить и посчитать exp((1/n)*ln(pr)), где pr - произведение чисел из массива. Могу написать код по-нормальному, если кто-нибудь попросит) Уважаемый DarthVader, давай пиши! хД Чтобы можно было прямо вставить красивый код и всё работало)))
|
|
| |
DarthVader | Дата: Вторник, 04.06.2013, 01:20 | Сообщение # 4 |
Группа: Удаленные
| Код VAR a : array [1..256] of real; ii, n : integer; pr, g: real;
BEGIN readln (n); {количество чисел} for ii:=1 to n do readln (a[ii]); {вводим n чисел} pr:=1; for ii:=1 to n do pr:=pr*a[ii]; {перемножаем их} g:=exp ((1/n)*ln(pr)); {извлекаем корень n-ной степени} writeln ('Целая часть: ', trunc(g)); {выводим результаты} writeln ('Остаток: ', g-trunc(g)); readln; END.
Добавлено (04.06.2013, 00:36) --------------------------------------------- Как то так xDДобавлено (04.06.2013, 01:20) --------------------------------------------- P.S. Вместо ii должно быть i.
Сообщение отредактировал DarthVader - Вторник, 04.06.2013, 01:19 |
|
| |