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

Всичко за извъндизайнерският профил на Вашият компютър
Post Reply
respec7_m3
Нов
Нов
Posts: 170
Joined: Wed Jun 30, 2010 4:42 pm

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

Post by respec7_m3 » Thu Dec 04, 2014 7:04 pm

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

Code: Select all

#include <iostream>
using namespace std;

void main&#40;&#41;
&#123;
	int n, result = 1, choice;

	do
	&#123;

		cout << "1. First selection for n!\n"
			"2. End of program" << endl;
		cin >> choice;
		switch &#40;choice&#41;
		&#123;
		case 1&#58;
			cout << "n!&#58; ";
			cin >> n;
			if &#40;n <= 1&#41;
			&#123;
				result *= n;
				n--;
			&#125;
				cout << "n! = " << result << endl;
		case 2&#58;
			cout << "THE END" << endl; break;
		&#125;
	&#125; while &#40;true && choice != 2&#41;;
	system&#40;"pause"&#41;;
&#125;

User avatar
pLe0mAx
Нов
Нов
Posts: 137
Joined: Wed May 06, 2009 8:32 am

Post by pLe0mAx » Thu Dec 04, 2014 7:38 pm

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


боц

respec7_m3
Нов
Нов
Posts: 170
Joined: Wed Jun 30, 2010 4:42 pm

Post by respec7_m3 » Thu Dec 04, 2014 8:15 pm

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


боц
Ами всъщност аз съм начинаещ все още и не съм много на ти с нещата и ако не е нахално бих помолил ако може да ми направиш кода работещ, защото аз се справих с това да направя програмка, която да изчислява факториел, но после трябваше да я направя с менюта тази програма и малко се обърках... от няколко часа пробвам различни вариянти, но не се получава.[/code]

User avatar
pLe0mAx
Нов
Нов
Posts: 137
Joined: Wed May 06, 2009 8:32 am

Post by pLe0mAx » Thu Dec 04, 2014 8:20 pm

Code: Select all

#include <iostream>
using namespace std;

void main&#40;&#41;
&#123;
   int i,n, result = 1, choice;

   do
   &#123;

      cout << "1. First selection for n!\n"
         "2. End of program" << endl;
      cin >> choice;
      switch &#40;choice&#41;
      &#123;
      case 1&#58;
         cout << "n!&#58; ";
         cin >> n;
         for &#40;i = 1; i <= n; i++&#41;
          &#123; result *=  i;&#125;
            cout << "n! = " << result << endl;
      case 2&#58;
         cout << "THE END" << endl; break;
      &#125;
   &#125; while &#40;true && choice != 2&#41;;
   system&#40;"pause"&#41;;
&#125;

Така би трябвало да стане. Няма в момента къде да го компилирам, може да има някоя козметична грешка от недоглеждане. Въпроса е да схванеш цикъла как с върти и как смята факториела, а не просто да копнеш и да кажеш готов съм ;)

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1580
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 163
Location: Parse error: unexpected "}" in /home/index.php on line 26

Post by anonimen » Thu Dec 04, 2014 8:58 pm

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/1420 ... e-a-switch

User avatar
pLe0mAx
Нов
Нов
Posts: 137
Joined: Wed May 06, 2009 8:32 am

Post by pLe0mAx » Thu Dec 04, 2014 9:04 pm

В case-a след cout няма break, в примера го нямаше, не съм го и забелязъл за да го добавя.. Цикъла for ще си се изпълни и ще излезе от него, не му е нужен break. Да кажем, че въведем n = 5, цикъла върти 5 пъти и си трупа в/у резултата, излиза от цикъла и принтва резултата. Вече след него трябва break, за да излезе от case-a и да се върне към менюто

respec7_m3
Нов
Нов
Posts: 170
Joined: Wed Jun 30, 2010 4:42 pm

Post by respec7_m3 » Thu Dec 04, 2014 9:09 pm

Програмата тръгна и работи както трябва, сега ще я погледна по-обстойно и ако има нещо, което не разбирам ще питам и благодаря МНОГО!!! :)

respec7_m3
Нов
Нов
Posts: 170
Joined: Wed Jun 30, 2010 4:42 pm

Post by respec7_m3 » Thu Dec 04, 2014 10:07 pm

Добре колега, не разбирам защо трябва да използваме брояч във случая след като, когато пиша програма само за факториел без използване на do...while и case, програмата ми тръгва по следният начин:

Code: Select all

#include <iostream>
using namespace std;

void main&#40;&#41;

&#123;
	int n, result = 1;
	cout << "Input value for n!&#58; ";
	cin >> n;

	while &#40;true&#41;
	&#123;
		if &#40;n <= 1&#41;
		&#123;
			break;
		&#125;
		result *= n;
		n--;
	&#125;
	cout << "n! = " << result << endl;
	system&#40;"pause"&#41;;
&#125;

User avatar
pLe0mAx
Нов
Нов
Posts: 137
Joined: Wed May 06, 2009 8:32 am

Post by pLe0mAx » Fri Dec 05, 2014 6:54 am

За какъв брояч говориш? И в двата случая въртиш цикли. Седни и ги научи. В моя пример въртиш от 1 до n с for, в твоя пример въртиш от n до 1 с while.. ??? И двете работят това е ясно. :)

Post Reply