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

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

01.12.2015, 01:36. Показов 617. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru