Автор Тема: Въпрос за "малко" по-напреднали в ООП  (Прочетена 670 пъти)

Proxain

  • Участници
  • ***
  • Публикации: 9
    • Профил
Здравейте, беше ми зададена следната задача(прилагам я с моето решение):

Код:
/* Представяне на функционална зависимост между три реални числа
имащи вида: F(X, Y, Z) = (X сигма1 Y) сигма2 (X сигма3 Z),
където всчка от операциите сигма1, сигма2 и сигма3 е заместена
със някое от математическите дейстшия събиране, изваждане,
умножение, деление.

  @Изготвил: Тодор Тодоров

  */

#include <iostream>
using namespace std;

class mathFunc { // Създаване на клас mathFunc
char SIGMA1, SIGMA2, SIGMA3;
public:
mathFunc() {}

void Read() { // Въвеждане на сигма1, сигма2, сигма3

cout<<"Vyvedete stoinosti za Sigma:\n";
cout<<"SIGMA1 = ";
cin>>SIGMA1;
cout<<"SIGMA2 = ";
cin>>SIGMA2;
cout<<"SIGMA3 = ";
cin>>SIGMA3;

}

double Sum(double x,double y, double z) {
/* Използвайки сигма1. сигма2 сигма3 създаваме метод, чрез който
да решим дадената функция
*/


double sum=0, sum1=0, sum2=0;

switch (SIGMA1) { //В sum1 се записва получената стойност на Х и У

case '+':
sum1 = x+y;
break;
case '-':
sum1 = x-y;
break;
case '*':
sum1 = x*y;
break;
case '/':
sum1 = x/y;
break;
default:
sum1 = x*y;
break;
}

switch (SIGMA3) { //В sum2 се записва получената стойност на Х и Z

case '+':
sum2 = x+z;
break;
case '-':
sum2 = x-z;
break;
case '*':
sum2 = x*z;
break;
case '/':
sum2 = x/z;
break;
default:
sum2 = x*z;
break;
}

switch (SIGMA2) {
/* Тук се пресмятат междинните стойности получени в sum1 и sum2
и получаваме решение на функцията със зададените параметри
  */

case '+':
sum = sum1+sum2;
break;
case '-':
sum = sum1-sum2;
break;
case '*':
sum = sum1*sum2;
break;
case '/':
sum = sum1/sum2;
break;
default:
sum = sum1*sum2;
break;
}

return sum;
}

void Write (double x,double y, double z) { // Изход

cout<<"F("<<x<<", "<<y<<", "<<z<<") = ("<<x<<" "<<SIGMA1<<" "<<y<<") "<<SIGMA2<<
" ("<<x<<" "<<SIGMA3<<" "<<z<<") = "<<Sum(x,y,z)<<endl;
}
};

int main () {
double x,y,z;
    do {
/* В цикъл до въвеждане на стойност единица за Z се въвеждат
тройки стойности за X, Y, Z, както и сигма1, сигма2 и сигма3
   */

cout<<"Vyvedete stoinosti za x, y, z: \n";
cout<<" X = "; 
cin>>x;
cout<<" Y = ";
cin>>y;
cout<<" Z = ";
cin>>z;

cout<<"F("<<x<<", "<<y<<", "<<z<<") = ("<<x<<" SIGMA1 "<<y
<<") SIGMA2 ("<<x<<" SIGMA3 "<<z<<")\n";

mathFunc F1;
F1.Read();
F1.Sum(x,y,z);
F1.Write(x,y,z);
} while (z != 1);

return 0;

}

Въпросът ми е следният. Някой може ли да ми каже има ли начин тези 3 switch case-a да могат да се заместят само с един или пък с отделен метод при използването на който да се извършва определеното аритметично действие за подадени x,y или x,z например.
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Re: Въпрос за "малко" по-напреднали в ООП
« Отговор #1 -: May 16, 2011, 13:45 »
Здравей, има начин:

за пример:
Код:
double applySigma( char sigma, double arg1, double arg2 )
{
      double result = 0;

      switch (sigma) { //В sum1 се записва получената стойност на Х и У

case '+':
sum1 = x+y;
break;
case '-':
sum1 = x-y;
break;
case '*':
sum1 = x*y;
break;
case '/':
sum1 = x/y;
break;
default:
sum1 = x*y;
break;
     }

     return result;
}

и тогава F(X, Y, Z) ще ти е: applySigma( sigma2 ,applySigma( sigma1, X, Y, ), applySigma( sigma3, X, Z ) )

т.е double Sum(double x,double y, double z) { return applySigma( SIGMA2 ,applySigma( SIGMA1, x, y, ), applySigma( SIGMA3, x, z ) )  }
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
HDD ext3 recover, "Stellar Phoenix Linux" ??
Настройка на хардуер
help40 3 11722 Последна публикация Sep 20, 2012, 21:51
от Acho
"paskal case" / "camel case"
Общ форум
Apache 3 13891 Последна публикация Aug 11, 2006, 10:01
от ivak
Проблем с "struct cdev" и "struct semaphore"
Общ форум
halturata 22 20900 Последна публикация Aug 14, 2007, 17:31
от tarator
Проблем с "reboot", "halt" и т.н.
Настройка на програми
turboshark 5 13791 Последна публикация Sep 22, 2007, 00:13
от turboshark
Превод на "Prentice Hall C++ GUI Programming with Qt4 2nd Edition Feb2008"
Преводи на документация
LinuxFanUNIX 25 36019 Последна публикация Jan 26, 2009, 00:23
от LinuxFanUNIX