[C++] Проблем с програма за изчисляване на факториел

respec7_m3

Registered
Здравейте, ползвам Visual Studio 2013 под Windows 8 и се опитвам да направя програма изчисляваща факториел на въведено число от клавиатурата. Трябва ми програма, която да работи с меню и смея да твърдя, че я направих, но явно сметките за факториела не ми излизат и бих искал да помоля за помощ и да благодаря на всеки отзовал се!

Код:
#include <iostream>
using namespace std;

void main()
{
	int n, result = 1, choice;

	do
	{

		cout << "1. First selection for n!\n"
			"2. End of program" << endl;
		cin >> choice;
		switch (choice)
		{
		case 1:
			cout << "n!: ";
			cin >> n;
			if (n <= 1)
			{
				result *= n;
				n--;
			}
				cout << "n! = " << result << endl;
		case 2:
			cout << "THE END" << endl; break;
		}
	} while (true && choice != 2);
	system("pause");
}
 
Малко си далеч от истината, трябва ти цикъл, а може и с рекурсия да го направиш.В твоя случай ако въведа n=5 даже няма и да вляза в if-a, така и result няма да се промени. Погледни линка отдолу и ако имаш въпроси по кода питай. :)


боц
 
pLe0mAx каза:
Малко си далеч от истината, трябва ти цикъл, а може и с рекурсия да го направиш.В твоя случай ако въведа n=5 даже няма и да вляза в if-a, така и result няма да се промени. Погледни линка отдолу и ако имаш въпроси по кода питай. :)


боц
Ами всъщност аз съм начинаещ все още и не съм много на ти с нещата и ако не е нахално бих помолил ако може да ми направиш кода работещ, защото аз се справих с това да направя програмка, която да изчислява факториел, но после трябваше да я направя с менюта тази програма и малко се обърках... от няколко часа пробвам различни вариянти, но не се получава.[/code]
 
Код:
#include <iostream>
using namespace std;

void main()
{
   int i,n, result = 1, choice;

   do
   {

      cout << "1. First selection for n!\n"
         "2. End of program" << endl;
      cin >> choice;
      switch (choice)
      {
      case 1:
         cout << "n!: ";
         cin >> n;
         for (i = 1; i <= n; i++)
          { result *=  i;}
            cout << "n! = " << result << endl;
      case 2:
         cout << "THE END" << endl; break;
      }
   } while (true && choice != 2);
   system("pause");
}

Така би трябвало да стане. Няма в момента къде да го компилирам, може да има някоя козметична грешка от недоглеждане. Въпроса е да схванеш цикъла как с върти и как смята факториела, а не просто да копнеш и да кажеш готов съм ;)
 
pLe0mAx, дори това (май?) няма да тръгне, защото break-а, който се предполага да прекрати цикъла, се намира в switch-case-a, което няма да повлияе на цикъла, а на самия switch. Всъщност имаш нещо такова:

while (...) {

switch (some_var) {
case 1:
cout << "ddadada";
break;//този ред няма да прекъсне цикъла, а ще прекъсне Switch-a
case 2:
//neshto drugo
}

}


Точно този проблем ще намериш тук: http://stackoverflow.com/questions/1420029/how-to-break-out-of-a-loop-from-inside-a-switch
 
В case-a след cout няма break, в примера го нямаше, не съм го и забелязъл за да го добавя.. Цикъла for ще си се изпълни и ще излезе от него, не му е нужен break. Да кажем, че въведем n = 5, цикъла върти 5 пъти и си трупа в/у резултата, излиза от цикъла и принтва резултата. Вече след него трябва break, за да излезе от case-a и да се върне към менюто
 
Програмата тръгна и работи както трябва, сега ще я погледна по-обстойно и ако има нещо, което не разбирам ще питам и благодаря МНОГО!!! :)
 
Добре колега, не разбирам защо трябва да използваме брояч във случая след като, когато пиша програма само за факториел без използване на do...while и case, програмата ми тръгва по следният начин:

Код:
#include <iostream>
using namespace std;

void main()

{
	int n, result = 1;
	cout << "Input value for n!: ";
	cin >> n;

	while (true)
	{
		if (n <= 1)
		{
			break;
		}
		result *= n;
		n--;
	}
	cout << "n! = " << result << endl;
	system("pause");
}
 
За какъв брояч говориш? И в двата случая въртиш цикли. Седни и ги научи. В моя пример въртиш от 1 до n с for, в твоя пример въртиш от n до 1 с while.. ??? И двете работят това е ясно. :)
 

Горе