Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

val.minkov avatar val.minkov 0 Точки

Loops: Problem5 - Calculate

  1. Всичко работи добре на пръв поглед, но ми дава грешни резултати...

  2.  

  3.   static void Main(string[] args)

  4.         {

  5.             int x, n;

  6.             int result = 1;

  7.             n = int.Parse(Console.ReadLine());

  8.             x = int.Parse(Console.ReadLine());

  9.             double s=1;

  10.             int[] factorials = new int[15];           // съхранявам факториелите на числата от 1 до 16

  11.             for (int i = 0; i < n; i++)                  

  12.             {

  13.                 for (int j = 1; j < i; j++)                 // с върешния цикъл откривам факториелите

  14.                 {

  15.                     result = result * j;

  16.                 }

  17.                 factorials[i] = result;                     // с външния ги запазвам в масива

  18.             }

  19.             for (int m = 0; m <= n; m++)                     // в този цикъл извършвам изчисленията

  20.             {

  21.                 s = s + (factorials[m] / Math.Pow(x, m));

  22.             }

  23.             string sum = s.ToString();

  24.             String.Format("{0:0.00000}", sum);            //форматирам сумата да се извежда до 5 знака след запетаята

  25.             Console.WriteLine(sum);

  26.         }

Тагове:
0
Programming Basics
Filkolev avatar Filkolev 4482 Точки

Факториел над 25-30 препълва всички примитивни типове данни, включително unsigned long. Най-добре е да се ползва BigInteger за подобни сметки. В твоя случай не е задължително, но ограничаваш програмата до малки стойности (не знам в условието какво е казано, ако има подобно ограничение няма проблем).

На s викаш ToString(), след това викаш string.Format(), но резултата от метода не го записваш никъде. Друг проблем е, че подаваш стринг и се опитваш да го форматираш като число. Стандартно подаваш числото на Console.WriteLine() и вътре с плейсхолдъра задаваш и форматирането: Console.WriteLine("{0:F5}", sum)

Преименувай си някои от променливите (s, i, j, m), не е ОК да е нужно човек да чете коментарите, за да разбере какво точно се случва. Също така коментари на български - не.

 

1
val.minkov avatar val.minkov 0 Точки

Благодаря!

P.S.: Коментарите ги добавях при качването тук, във форума.

0
10/12/2015 17:15:11
Filkolev avatar Filkolev 4482 Точки

Пробвай да пазиш факториелите в масив от decimal и направи принтирането направо в Console.WriteLine(). Ако сметките са верни би трябвало да изкара резултатите, които се очакват.

0
val.minkov avatar val.minkov 0 Точки

Добре, обаче ми даде гршка с кастването при Math.Pow(x,m);  

 

0
ppbaev avatar ppbaev 157 Точки

Здрасти. След като запазиш поредна стойност на факториел в масива, трябва  да ресетваш променливата result пак на 1 и тогава работи донякъде кода.

След          factorials[i] = result;    добавяш  result = 1; 

1
gabi.ivanova avatar gabi.ivanova 370 Точки

Не схващам идеята масива да е с фиксирана големина, ако става въпрос за loops от programming basics?

S = 1 + 1!/x + 2!/x^2 + … + n!/x^n.   трябва да се изчисли факториел на числата от 1 до n, ако искаш масив може да го направиш с размер [n] или без масив като вкараш всичко в един цикъл

 for (int i = 1; i <= n; i++)
    {
       nFactoriel *= i;
       double xPow = Math.Pow(x, i);
       sum += (xFactoriel / xPow);
    }

 

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.