Консультация № 180320
14.10.2010, 20:40
0.00 руб.
0 10 1
Здравствуйте,помогите переделать задание на c#
Дана непустая последовательность положительных целых чисел,за которой следует 0(это признак конца последовательности).Вычислить среднее геометрическое этих чисел по операторам ветвления,числа вводятся с клавиатуры и вычисляются по формуле корень n степени из суммы a1+a2+...an


Приложение:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 0 };
double sg=1; //среднее геометрическое

for(int i = 0;i<x.Length-1;i++)
{

if (x[i] > 0)// ограничение только положительные числа
{
sg = sg * x[i];

}

}
sg=Math .Exp(Math .Log (sg )*(x.Length-1));
Console.Write(" среднее геометрическое = " + sg.ToString());
Console.Write("\nДля выхода из программы нажмите [Enter]:");
string ankey = Console.ReadLine();
}
}
}

Обсуждение

Неизвестный
14.10.2010, 23:24
общий
среднее геометрическое вроде: pow(x1*x2*...xn,1/n); а то что у тебя я не понимаю это е в степени логарифма с основанием 2 от sg умноженное на количество элементов.
Неизвестный
14.10.2010, 23:25
общий
если с твоим уравнением то могу щас скинуть
Неизвестный
14.10.2010, 23:34
общий
это ответ
Здравствуйте, Benqq!

примерно так я думаю.

использовать надо

using System;
using System.Text;

Приложение:
//с твоим вариантом подсчета
//вводить числа используя запятую для отделения целой от дробной.
class Programm
{
static void Main()
{
double x;
double sg = 1;
int count = 0;
for (; ; )
{
x = double.Parse(Console.ReadLine());
if (x == 0)
break;
else
{
count++;
sg *= x;
}
}
sg = Math.Exp(Math.Log(sg) * (count));
Console.Write(" среднее геометрическое = " + sg.ToString());
Console.Write("\nДля выхода из программы нажмите [Enter]:");
string ankey = Console.ReadLine();
}
}

//с вариантом из википедии подсчета среднегеометрического

class Programm
{
static void Main()
{
double x;
double sg = 1;
int count = 0;
for (; ; )
{
x = double.Parse(Console.ReadLine());
if (x == 0)
break;
else
{
count++;
sg *= x;
}
}
sg = Math.Pow(sg, count);
Console.Write(" среднее геометрическое = " + sg.ToString());
Console.Write("\nДля выхода из программы нажмите [Enter]:");
string ankey = Console.ReadLine();
}
}
Неизвестный
15.10.2010, 00:16
общий
что-то я тупанул, но корень суммы это не средне геометрическое.
Неизвестный
15.10.2010, 00:23
общий
средне геометрическое это корень н-ой степени от произведения н членов, или я не прав? поправьте меня.
Неизвестный
15.10.2010, 00:29
общий
я там накосячил в sg = Math.Pow(sg, count);
надо sg = Math.Pow(sg, 1/count);
Неизвестный
15.10.2010, 09:16
общий
жду еще варианты
Неизвестный
15.10.2010, 12:14
общий
В моем примере была ошибка, исправил
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double[] x = { 1, 2, 3,4, 0 };
double sg = 1; //среднее геометрическое

for (int i = 0; i < x.Length - 1; i++)
{

if (x[i] > 0)// ограничение только положительные числа
{
sg = sg * x[i];

}

}
sg = Math.Exp(Math.Log(sg) / (x.Length - 1));
Console.Write(" среднее геометрическое = " + sg.ToString());
Console.Write("\nДля выхода из программы нажмите [Enter]:");
string ankey = Console.ReadLine();
}
}
}


было sg = Math.Exp(Math.Log(sg) * (x.Length - 1));
а так правильно sg = Math.Exp(Math.Log(sg) / (x.Length - 1));
среднее геометрическое это корень n степени из произведения a1*a2*...an

а если из суммы то так но я не скажу как это называется
пример такой

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 0 };
double sg=0; //среднее геометрическое

for(int i = 0;i<x.Length-1;i++)
{

if (x[i] > 0)// ограничение только положительные числа
{
sg = sg + x[i];

}

}
sg=Math .Exp(Math .Log (sg )/(x.Length-1));
Console.Write(" среднее геометрическое = " + sg.ToString());
Console.Write("\nДля выхода из программы нажмите [Enter]:");
string ankey = Console.ReadLine();
}
}
}
Неизвестный
15.10.2010, 17:57
общий
все не то(
Неизвестный
15.10.2010, 19:21
общий
посмотрите следующий вариант среднее геометрическое это корень n степени из произведения a1*a2*...an


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{

int ind = 0;
string s;
Console.Write(" Введите размер массива ");
ind=int.Parse (Console.ReadLine());
UInt32[] x = new UInt32[ind];
UInt32 d = 0;
Console.Write(" Введите положительное целое число, закончить ввод 0: ");
s=Console.ReadLine();
ind = 0;
while (s != "0" && ind < x.Length)
{

if (UInt32.TryParse(s, out d) == true )
{
x[ind] = d;
ind++;
}
else { Console.WriteLine("Это не положительное целое число"); }
Console.Write(" Введите положительное целое число: ");
s = Console.ReadLine();

}
UInt32 sg = 1; //среднее геометрическое

for (int i = 0; i < ind ; i++)
{

if (x[i] > 0)// ограничение только положительные числа
{
sg = sg * x[i];

}

}
double sgd = 0;
sgd = Math.Exp(Math.Log(sg) / (ind ));
Console.Write(" среднее геометрическое = " + sgd.ToString());
Console.Write("\nДля выхода из программы нажмите [Enter]:");
string ankey = Console.ReadLine();
}
}
}


}

если надо среднее геометрическое это корень n степени из сумма a1+a2+...an
измените строчку
UInt32 sg = 1; //среднее геометрическое
на UInt32 sg = 0; //среднее геометрическое
и
sg = sg * x[i];
на sg = sg + x[i];


Форма ответа