- [C++] Проблем с програма за изчисляване на факториел
WT форуми -> Софтуер Хардуер -> [C++] Проблем с програма за изчисляване на факториел
Създайте нова тема Напишете отговор 
Автор Съобщение
respec7_m3
Нов
Нов

Регистриран на: 30/06/2010 6:42 pm

Support: 0
Bonus: 0
Мнения: 169
Мнение 04/12/2014 9:04 pm     [C++] Проблем с програма за изчисляване на факториел Отговорете с цитат


Здравейте, ползвам 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");
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pLe0mAx
Нов
Нов

Регистриран на: 06/05/2009 10:32 am

Support: 8
Bonus: 15
Мнения: 137
Мнение 04/12/2014 9:38 pm      Отговорете с цитат


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


боц
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
respec7_m3
Нов
Нов

Регистриран на: 30/06/2010 6:42 pm

Support: 0
Bonus: 0
Мнения: 169
Мнение 04/12/2014 10:15 pm      Отговорете с цитат


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


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

Регистриран на: 06/05/2009 10:32 am

Support: 8
Bonus: 15
Мнения: 137
Мнение 04/12/2014 10:20 pm      Отговорете с цитат



#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");
}



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

Регистриран на: 11/06/2012 8:07 pm

Support: 157
Bonus: 313
Мнения: 1443
Мнение 04/12/2014 10: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/1420029/how-to-break-out-of-a-loop-from-inside-a-switch
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pLe0mAx
Нов
Нов

Регистриран на: 06/05/2009 10:32 am

Support: 8
Bonus: 15
Мнения: 137
Мнение 04/12/2014 11:04 pm      Отговорете с цитат


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

Регистриран на: 30/06/2010 6:42 pm

Support: 0
Bonus: 0
Мнения: 169
Мнение 04/12/2014 11:09 pm      Отговорете с цитат


Програмата тръгна и работи както трябва, сега ще я погледна по-обстойно и ако има нещо, което не разбирам ще питам и благодаря МНОГО!!! Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
respec7_m3
Нов
Нов

Регистриран на: 30/06/2010 6:42 pm

Support: 0
Bonus: 0
Мнения: 169
Мнение 05/12/2014 12:07 am      Отговорете с цитат


Добре колега, не разбирам защо трябва да използваме брояч във случая след като, когато пиша програма само за факториел без използване на 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");
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pLe0mAx
Нов
Нов

Регистриран на: 06/05/2009 10:32 am

Support: 8
Bonus: 15
Мнения: 137
Мнение 05/12/2014 8:54 am      Отговорете с цитат


За какъв брояч говориш? И в двата случая въртиш цикли. Седни и ги научи. В моя пример въртиш от 1 до n с for, в твоя пример въртиш от n до 1 с while.. ??? И двете работят това е ясно. Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> Софтуер Хардуер Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети