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

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

01.12.2015, 01:36. Показов 656. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru