0 / 0 / 0
Регистрация: 05.12.2017
Сообщений: 65
1

Реализовать класс через .h .cpp и main

18.10.2018, 21:45. Показов 602. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код где все реализовано в мейне. Нужно реализовать класс через .h .cpp и main.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <cmath>
 
using namespace std;
 
class cQuadraticEquation
{
public:
    cQuadraticEquation()
        : A(.0), B(.0), C(.0) {}
    cQuadraticEquation(double a, double b, double c)
        : A(a), B(b), C(c) {}
    int isSolution()
    {
        if(discriminant() > 0)
            return 2;
        else if(discriminant() == 0)
            return 1;
        else return 0;
    }
    bool Solution(double * x1, double * x2)
    {
        int solution = isSolution();
        switch (solution) {
        case 2:
        {
            *(x1) = (-B + sqrt(discriminant())) / (2 * A);
            *(x2) = (-B - sqrt(discriminant())) / (2 * A);
            return true;
        }
        case 1:
        {
            double x = - B / (2 * A);
            x1 = x2 = &x;
            return true;
        }
        default:
            return false;
        }
    }
private:
    double discriminant()
    {
        return pow(B, 2.0) - 4 * A * C;
    }
private:
    double A;
    double B;
    double C;
};
int main(int argc, char * argv[])
{
    (void)argc;
    (void)argv;
 
    setlocale(LC_ALL, "");
 
    cout << "OK" << endl;
 
    double a, b, c;
    cout << "Введите коэффициенты уравнения: " << endl;
    cout << "A = "; cin >> a;
    cout << "B = "; cin >> b;
    cout << "C = "; cin >> c;
 
    cQuadraticEquation equation(a, b, c);
    int solution = equation.isSolution();
    if(solution != 0)
    {
        cout << "Уравнение имеет " << solution << " корнь(я)" << endl;
        double x1, x2;
        equation.Solution(&x1, &x2);
        if(solution == 2)
            cout << "X1 = " << x1 << endl << "X2 = " << x2 << endl;
        else
            cout << "X1 = X2 = " << x1 << endl;
    }
    else
        cout << "Уравнение не имеет корней" << endl;
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2018, 21:45
Ответы с готовыми решениями:

Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope
Написал программу и выдает ошибку. #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std;...

Main.cpp In file included from main.cpp
//class.cpp #include &quot;class.h&quot; Ticket::Ticket() { prise = 0; marshrut = &quot;none&quot;; time =...

Есть три файла. файл main.cpp и Source.cpp знают только Header.h, так как он подключен. как же подключается Source.cpp
main.cpp #include &lt;iostream&gt; #include&quot;Header.h&quot; using namespace std; int main() { A ob;...

Как передать переменные и массивы из main.cpp в mainwindow.cpp?
Как передать переменные и массивы из main.cpp в mainwindow.cpp? main.cpp #include &quot;mainwindow.h&quot;...

1
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,874
19.10.2018, 09:51 2
Файл не настолько большой чтобы его имело смысл делить. В данном случае это только усложнит работу: придется переключаться между несколькими файлами. Впрочем, если хотите просто посмотреть как обычно выносят библиотеки из программы, можно вынести класс:
QuadEq.h (лично мне не нравятся слишком длинные имена, их долго набирать)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef __QUADEQ_H__ //защита от множественного включения
#define __QUADEQ_H__
 
class QuadEq{
private:
  double A;
  double B;
  double C;
  double discriminant();
public:
    QuadEq() : A(.0), B(.0), C(.0) {} //конструкторы можно оставить инлайновыми, в них немного кода
    QuadEq(double a, double b, double c) : A(a), B(b), C(c) {}
    int isSolution();
    bool Solution(double &x1, double &x2); //В С++ можно передавать параметры по ссылке
};
 
#endif
QuadEq.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "QuadEq.h"
#include <math.h>
 
double QuadEq::discriminant(){
  return pow(B, 2.0) - 4 * A * C;
}
 
int QuadEq::isSolution(){
  if(discriminant() > 0)
    return 2;
  else if(discriminant() == 0)
    return 1;
  else return 0;
}
 
bool QuadEq::Solution(double &x1, double &x2){
  int solution = isSolution();
  switch (solution){
    case 2:
      x1 = (-B + sqrt(discriminant())) / (2 * A);
      x2 = (-B - sqrt(discriminant())) / (2 * A);
      return true;
    case 1:
      //double x = - B / (2 * A);
      //x1 = x2 = &x; //вы пытались передать указатель на локальную временную переменную. ТАК ДЕЛАТЬ НЕЛЬЗЯ!
      x1 = x2 = - B / (2 * A);
      return true;
    default:
      return false;
  }
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include "QuadEq.h"
 
int main(int argc, char * argv[]){
  (void)argc;
  (void)argv;
  
  setlocale(LC_ALL, "");
  
  std::cout << "OK" << std::endl;
  
  double a, b, c;
  std::cout << "Введите коэффициенты уравнения: " << std::endl;
  std::cout << "A = "; std::cin >> a;
  std::cout << "B = "; std::cin >> b;
  std::cout << "C = "; std::cin >> c;
  
  QuadEq equation(a, b, c);
  int solution = equation.isSolution();
  if(solution != 0) {
    std::cout << "Уравнение имеет " << solution << " корнь(я)" << std::endl;
    double x1, x2;
    equation.Solution(x1, x2);
    if(solution == 2)
      std::cout << "X1 = " << x1 << std::endl << "X2 = " << x2 << std::endl;
    else
      std::cout << "X1 = X2 = " << x1 << std::endl;
  }
  else
    std::cout << "Уравнение не имеет корней" << std::endl;
  
  system("pause");
  return 0;
}
Компилируем по отдельности:
Код
$ g++ QuadEq.cpp -Os -Wall -Wextra -c
$ g++ main.cpp -Os -Wall -Wextra -c
$ g++ main.o QuadEq.o -lm
$ ./a.out 
OK
Введите коэффициенты уравнения: 
A = 0 1 0 1
B = C = Уравнение имеет 2 корнь(я)
X1 = -nan
X2 = -inf
sh: 1: pause: not found
Как видим, все работает. Правда, вырожденные случаи вы не обрабатываете.
0
19.10.2018, 09:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2018, 09:51
Помогаю со студенческими работами здесь

Включение библиотек в main.cpp и my_func.cpp
Здравствуйте, Подскажите пожалуйста, ни как не могу понять, вот если: //main.cpp #include...

Подключение файлов main.cpp some.cpp some.h
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как...

Вот: source_file.cpp: In function 'int main()': source_file.cpp:10:12: error: 'strlen' was not declared in this scope
#include&lt;iostream&gt; using namespace std; int main() { char a,b; int i,j; cout&lt;&lt;&quot;Напишите...

Вывод данных из одного класса через класс Main
Есть главный класс Main public class Main { public static void main(String args) {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru