С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 2

Переписать программу с использованием структуры

01.12.2015, 01:36. Показов 635. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем,была программа, но ее нужно было переписать в структуру типа класс. Я в c++ новичок, поэтому количество глупых ошибок в этом треде зашкаливает.Код под спойлером. Ошибки:
Ошибка 6 error C3867: laba2::funct: в вызове функции отсутствует список аргументов; используйте "&laba2::funct" для создания указателя на член c:\users\hjh\documents\visual studio 2013\projects\consoleapplication11\conso leapplication11\исходный код.cpp 186 1 ConsoleApplication11

Тоже самое для nuton,simps,trap.
Явно что-то с указателями,но я не могу разобраться.

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#include <iostream>
#include <math.h>
#include <locale.h>
#include <iomanip> 
#include <ctime> 
using namespace std;
 
typedef float(*fun)(float);
typedef float(*method)(float, float, int, fun);
 
class laba2
{
public:
    int n1 = 15, n2 = 3;
    float a, b,eps = 0.001;
    float funct(float x);
    float trap(float a, float b, int n, fun f1);
    float rung1(float a, float b, int n2, fun f1);
    float simps(float a, float b, int n, fun f1);
    float rung(float a, float b, int n1, fun f1);
    float nuton(float a, float b, int n, fun f1);
    float rung2(float a, float b, int n2, fun f1);
    float integrate(float a, float b, float eps, method f, fun f1);
    laba2()
    {
        cout << "Введите вещественные значения переменных a и b :\n";
        cout << "\na = ";
        cin >> a;
        cout << "\nb = ";
        cin >> b;
    }
};
 
 
 
float laba2:: funct(float x)
{
    return 1 / log(x);
}
 
float laba2::trap(float a, float b, int n, fun f1)
{
    float h, sum, sum1, x;
    int i;
    sum = 0;
    sum1 = 0;
    h = (b - a) / n;
    sum += f1(a);
    sum += f1(b);
 
    for (i = 1; i<n; i++)
    {
        x = (a + i*h);
        sum1 += f1(x);
    }
 
    sum = (h / 2)*(sum + 2 * sum1);
 
    return sum;
}
 
 
float laba2::rung1(float a, float b, int n2, fun f1)
{
    float h1, sum, sum1, x;
    int i;
    sum = 0;
    sum1 = 0;
    h1 = (b - a) / n2;
    sum += f1(a);
    sum += f1(b);
    h1 = (b - a) / n2;
    for (i = 1; i<n2; i++)
    {
        x = (a + i*h1);
        sum1 += f1(x);
    }
 
    sum = (h1 / 2)*(sum + 2 * sum1);
 
    return sum;
}
 
 
float laba2::simps(float a, float b, int n, fun f1)
{
    float h, sum, x;
    int i, k;
    sum = 0;
    h = (b - a) / n;
    sum += f1(a);
    sum += f1(b);
    for (i = 1; i < n; i++)
    {
        x = a + i*h;
        if (i % 2 == 0)
            k = 2;
        else k = 4;
        sum += k*f1(x);
    }
 
    return (h / 3)*sum;
}
 
 
 
float laba2::rung(float a, float b, int n1, fun f1)
{
    float h1, sum, x;
    int i, k;
    sum = 0;
    h1 = (b - a) / n1;
    sum += f1(a);
    for (i = 1; i < n1; i++)
    {
        x = a + i*h1;
        if (i % 2 == 0) k = 2;
        else k = 4;
        sum += k*f1(x);
    }
    x = a + n1*h1;
    sum += f1(x);
    return 0.166*h1*sum;
}
 
float laba2::nuton(float a, float b, int n, fun f1)
{
    float h, sum, x;
    int i, k;
    sum = 0;
    h = (b - a) / n;
    sum += f1(a);
    sum += f1(b);
    for (i = 1; i < n; i++)
    {
        x = a + i*h;
        if (i % 3 == 0)
            sum += 2 * f1(x);
        else
            sum += 3 * f1(x);
 
    }
    return ((3 * h) / 8)*sum;
}
 
float laba2::rung2(float a, float b, int n2, fun f1)
{
    float h, sum, x;
    int i, k;
    sum = 0;
    h = (b - a) / n2;
    sum += f1(a);
    sum += f1(b);
    for (i = 1; i < n2; i++)
    {
        x = a + i*h;
        if (i % 3 == 0)
            sum += 2 * f1(x);
        else
            sum += 3 * f1(x);
 
    }
    return ((3 * h) / 8)*sum;
}
 
float laba2::integrate(float a, float b, float eps, method f, fun f1)
{
    int n = 100;
    float l, k;
    k = f(a, b, n, f1);
    do{
        l = k;
        n = n * 2;
        k = f(a, b, n, f1);
 
    } while (fabs(l - k)<eps);
    return k;
}
 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    float rez, rez1, run;
    laba2 func;
    rez1 = func.integrate(func.a,func.b,func.eps,func.trap,func.funct);
    cout << "Метод трапеций: " << rez1 << endl;
 
    run = func.rung1(func.a, func.b, func.n2, func.funct);
    printf("Правило Рунге:%1f\n\n", (abs(rez1 - run)) / 3);
 
    rez = func.integrate(func.a, func.b, func.eps, func.simps, func.funct);
    cout << "Метод Симпсона: " << rez << endl;
 
    run = func.rung(func.a, func.b, func.n1, func.funct);
    printf("Правило Рунге:%f\n\n", (abs(rez - run)) / 15);
 
    rez = func.integrate(func.a, func.b, func.eps, func.nuton, func.funct);
    cout << "Метод Ньютона: " << endl;
 
    run = func.rung(func.a, func.b, func.n2, func.funct);
    printf("Правило Рунге:%f\n\n", (abs(rez - run)) / 3);
 
    return 0;
}
Добавлено через 3 часа 24 минуты
попробовал так,но программа просто закрывается :<
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#include <iostream>
#include <math.h>
#include <locale.h>
#include <iomanip> 
#include <ctime> 
using namespace std;
 
 
 
 
class laba2
{
public:
    typedef float(*fun)(float);
    typedef float(*method)(float, float, int, fun);
    typedef float(*vaw)(method, fun);
    vaw f3;
    method f; 
    fun f1;
    int n1 = 15, n2 = 3, n = 100;
    float a, b, eps = 0.001;
    float funct(float x);
    float trap();
    float rung1(fun f1);
    float simps(fun f1);
    float rung(fun f1);
    float nuton(fun f1);
    float rung2(fun f1);
    float integrate();
    laba2()
    {
        cout << "Введите вещественные значения переменных a и b :\n";
        cout << "\na = ";
        cin >> a;
        cout << "\nb = ";
        cin >> b;
    }
};
 
float laba2::funct(float x)
{
    return 1 / log(x);
}
float laba2::trap()
{
    float h, sum, sum1, x;
    int i;
    sum = 0;
    sum1 = 0;
    h = (b - a) / n;
    sum += f1(a);
    sum += f1(b);
 
    for (i = 1; i<n; i++)
    {
        x = (a + i*h);
        sum1 += f1(x);
    }
 
    sum = (h / 2)*(sum + 2 * sum1);
 
    return sum;
}
 
 
float laba2::rung1( fun f1)
{
    float h1, sum, sum1, x;
    int i;
    sum = 0;
    sum1 = 0;
    h1 = (b - a) / n2;
    sum += f1(a);
    sum += f1(b);
    h1 = (b - a) / n2;
    for (i = 1; i<n2; i++)
    {
        x = (a + i*h1);
        sum1 += f1(x);
    }
 
    sum = (h1 / 2)*(sum + 2 * sum1);
 
    return sum;
}
 
 
float laba2::simps( fun f1)
{
    float h, sum, x;
    int i, k;
    sum = 0;
    h = (b - a) / n;
    sum += f1(a);
    sum += f1(b);
    for (i = 1; i < n; i++)
    {
        x = a + i*h;
        if (i % 2 == 0)
            k = 2;
        else k = 4;
        sum += k*f1(x);
    }
    sum = (h / 3)*sum;
    return sum;
}
 
 
 
float laba2::rung(fun f1)
{
    float h1, sum, x;
    int i, k;
    sum = 0;
    h1 = (b - a) / n1;
    sum += f1(a);
    for (i = 1; i < n1; i++)
    {
        x = a + i*h1;
        if (i % 2 == 0) k = 2;
        else k = 4;
        sum += k*f1(x);
    }
    x = a + n1*h1;
    sum += f1(x);
    return 0.166*h1*sum;
}
 
float laba2::nuton(fun f1)
{
    float h, sum, x;
    int i, k;
    sum = 0;
    h = (b - a) / n;
    sum += f1(a);
    sum += f1(b);
    for (i = 1; i < n; i++)
    {
        x = a + i*h;
        if (i % 3 == 0)
            sum += 2 * f1(x);
        else
            sum += 3 * f1(x);
 
    }
    sum = ((3 * h) / 8)*sum;
    return sum;
}
 
float laba2::rung2(fun f1)
{
    float h, sum, x;
    int i, k;
    sum = 0;
    h = (b - a) / n2;
    sum += f1(a);
    sum += f1(b);
    for (i = 1; i < n2; i++)
    {
        x = a + i*h;
        if (i % 3 == 0)
            sum += 2 * f1(x);
        else
            sum += 3 * f1(x);
 
    }
    return ((3 * h) / 8)*sum;
}
 
float laba2::integrate()
{
    int n = 100;
    float l, k;
    k = f(a, b, n, f1);
    do{
        l = k;
        n = n * 2;
        k = f(a, b, n, f1);
 
    } while (fabs(l - k)<eps);
    return k;
}
 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    float rez, rez1, run;
    laba2 func;
    rez1 = func.f3(func.f,func.f1);
    cout << "Метод трапеций: " << rez1 << endl;
 
    /*run = func.rung1(func.funct);
    cout << "Правило Рунге:\n"<< (abs(rez1 - run))/3;
 
    rez = func.integrate(func.simps, func.funct);
    cout << "Метод Симпсона: " << rez << endl;
 
    run = func.rung(func.funct);
    cout<<"Правило Рунге:\n"<< (abs(rez - run))/15;
 
    rez = func.integrate(func.nuton, func.funct);
    cout << "Метод Ньютона: " << endl;
 
    run = func.rung(func.funct);
    cout<<"Правило Рунге:\n"<< (abs(rez - run))/3;*/
 
    return 0;
}
Нагуглил о своей проблеме по ссылке ниже,но никак не могу привести в реальность все это.Сложная для меня конструкция какая-то :<
Как мне подсказали,проще использовать функторы, но я их еще не изучал :<
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2015, 01:36
Ответы с готовыми решениями:

Переписать программу с использованием функций
Здравствуйте, помогите пожалуйста с функциями. Оформить каждый пункт задания в виде функции. Все необходимые данные для функций должны...

Переписать программу с использованием функции
помогите переделать прогу, что бы работала через функцию через функцию! пожалуйста!!!! Прога меняет мкстами две строки массива. ...

Переписать программу с использованием функции
Помогите построить аналогичную программу с функцией завтра сдавать: #include &lt;iostream&gt; using namespace std; int main() { const...

2
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
01.12.2015, 02:05
вы пытаетесь использовать указатель на метод, как указатель на функцию. а это не одно и то же.
метод не вызывается без объекта. ну и в связи с этим там и синтаксис определения типа отличается, и синтаксис вызова. с функторами это все проще выглядит. вот пример:


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
#include <iostream>
#include <functional>
 
typedef std::function<void(int)> Func;
 
void FreeFunction(int val)
{
  std::cout << "FreeFunction: " << val << std::endl;
}
 
struct Foo
{
  void Method(int val)
  {
    std::cout << "Foo::Method: " << val << std::endl;
  }
};
 
 
int main()
{
  Foo foo;
  Func func1 = Func(FreeFunction);
  Func func2 = [&foo](int val) { foo.Method(val); };
  Func func3 = std::bind(&Foo::Method, &foo, std::placeholders::_1);
 
  func1(1);
  func2(2);
  func3(3);
 
  return 0;
}
0
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 2
01.12.2015, 03:09  [ТС]
Спасибо,но либо я уже долго сижу за этим,либо не понимаю.
Свободная функция в моем случае сама функция логарифма
Метод - например метод трапеций,но в нем мне нужно взять свободную функцию с возвращением значения.
Я не понимаю всей структуры.
Если было бы несложно, на моем примере с одним методом показать все это,но я понимаю, что не зачем решать за кого-то,особенно,если автор по примеру не может сделать сам (:
В общем,завтра,если ничего не останется, попробую проще это все как-то написать. ооп не мое,явно.
Время поджимает с этой лабой :<
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2015, 03:09
Помогаю со студенческими работами здесь

Переписать программу с использованием ООП
Была работа с динамическим массивом ,с рандомным заполнением, вводим интервал и все числа которые попали в него возводятся в квадрат,...

Переписать программу с использованием string
вот программа которая делает вот что: Даны две строки. Составить третью строку из слов, имеющихся в обеих данных строках. как можно...

Переписать программу с использованием классов
Добавить классы... # include &lt;iostream&gt; # include &lt;conio.h&gt; #include &lt;string&gt; #include&lt;stdio.h&gt; using namespace...

Переписать программу с использованием классов
Кто ни-будь помогите разбить на классы у меня небольшие проблемы с ООП (игра &quot;Сапер&quot;) #include &quot;stdafx.h&quot; #include...

Переписать программу с использованием функций
Добрый день. Помогите пожалуйста мою программу переписать так, чтобы она была с функциями. :( Она маленькая и простая. :) //...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru