С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
#1

Передача символических имен функций - C++

05.07.2013, 14:26. Просмотров 754. Ответов 26
Метки нет (Все метки)

Здравствуйте,
Чтобы долго не объяснять, прилагаю условие задачи и мой код. Прошу Вашего совета по поводу вставки внутрь созданной функции указания на стандартную. Мне кажется, что моя запись ошибочна, но что именно не так, понять не могу. Вот код, задание ниже:
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define Nx  4
#define Ny  5
#define Nz  6
void vvod(float x[ ], int n, char q);
double brackets(float x[ ], int n, double a, double b, char f1, char f2);
{
double series = (f1(a*x[i])+ f2(b*x[i]));
return series;
}
main()
{
char str[50];
textbackground(2);
textcolor(15);
clrscr();
double x[Nx], y[Ny], z[Nz], w, a, b, c, g, r, q;
CharToOem("\nÂâåäèòå ýëåìåГ*ГІГ» Г¬Г*ññèâîâ x, y, z:\n", str);
printf(str);
vvod(x, Nx, 'x');
vvod(y, Ny, 'y');
vvod(z, Nz, 'z');
CharToOem("\nÂâåäèòå a:\n", str);
printf(str);
scanf("%lf",&x);
CharToOem("\n\nÂâåäèòå b:\n", str);
printf(str);
scanf("%lf",&y);
CharToOem("\n\nÂâåäèòå c:\n", str);
printf(str);
scanf("%lf",&z);
CharToOem("\n\nÂâåäèòå  g:\n", str);
printf(str);
scanf("%lf",&a);
CharToOem("\n\nÂâåäèòå  r:\n", str);
printf(str);
scanf("%lf",&b);
CharToOem("\n\nÂâåäèòå  q:\n", str);
printf(str);
scanf("%lf",&c);
w=sum(x, Nx)/znam+sum(z, Nz);
printf("w=%f\n",w);
{
int i;
float w=0;
for (i=0; i<n; i++)
w+=brackets(x[i]),Nx,a,b,sin(),cos())+brackets(y[i]),Ny,c,g,tan(),abc())+brackets(z[i]),Nz,r,q,cos(), sin());
printf("\nw = %f",w);
 
CharToOem("\nÄëÿ âûõîäГ* Г*Г*æìèòå ГЄГ«Г*ГўГЁГёГі Enter", str);
printf(str);
getch();
}
0
Миниатюры
Передача символических имен функций  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2013, 14:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача символических имен функций (C++):

Перегрузка имен функций - C++
Благодаря чему в С++ разрешена перегрузка имен функций?

Передача значений функций в главную программу, вызов функций - C++
Здравствуйте! Скорее всего, неправильно передаю значения функциям и в главную программу. Помогите найти ошибку! В итоге выводит...

Пространства имен и перегрузка функций - C++
описание: есть библиотека. Пространство имен namespace1, в нем есть несколько перегруженных функций func(). // header.h #ifndef...

"Автозаполнение" имен типов/функций/переменных - C++
Собственно вопрос в названии. Чтобы понимать, что за &quot;автозаполнение&quot; : когда вписываешь экземпляр класса/структуры, выдается окошко выбора...

Задачи из книги Прата (представить значения с помощью символических констант) - C++
Только начал изучать книгу Прата &quot;Язык программирования С++&quot;,столкнулся с такой задачей: Напишите программу, которая запрашивает широту в...

Передача в "свойской" функции флагов и имен контейнеров - C++
Добрый день! Пишу значит функцию, что она конкретно делает не важно в данном контексте: void GetDIR(const char *Target, ??????? )...

26
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 15:14  [ТС] #2
подумала, и слегка подправила код. Ошибка компиляции только одна (соответсвенно прилагаю). Подозреваю что ошибка именно вот тут:
C
1
2
3
4
double brackets(float x[ ], int n, double a, double b, double f1(double), double f2(double));
{
double series = (f1(a*x[i])+ f2(b*x[i]));
return series;
Подправленный код:
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define Nx  4
#define Ny  5
#define Nz  6
void vvod(float x[ ], int n, char q);
double brackets(float x[ ], int n, double a, double b, double f1(double), double f2(double));
{
double series = (f1(a*x[i])+ f2(b*x[i]));
return series;
}
main()
{
char str[50];
textbackground(2);
textcolor(15);
clrscr();
double x[Nx], y[Ny], z[Nz], w, a, b, c, g, r, q;
CharToOem("\nВведите элементы массивов x, y, z:\n", str);
printf(str);
vvod(x, Nx, 'x');
vvod(y, Ny, 'y');
vvod(z, Nz, 'z');
CharToOem("\nВведите a:\n", str);
printf(str);
scanf("%lf",&a);
CharToOem("\n\nВведите b:\n", str);
printf(str);
scanf("%lf",&b);
CharToOem("\n\nВведите c:\n", str);
printf(str);
scanf("%lf",&c);
CharToOem("\n\nВведите  g:\n", str);
printf(str);
scanf("%lf",&g);
CharToOem("\n\nВведите  r:\n", str);
printf(str);
scanf("%lf",&r);
CharToOem("\n\nВведите  q:\n", str);
printf(str);
scanf("%lf",&q);
w=sum(x, Nx)/znam+sum(z, Nz);
printf("w=%f\n",w);
{
int i;
float w=0;
for (i=0; i<n; i++)
w+=brackets(x[i]),Nx,a,b,sin,cos)+brackets(y[i]),Ny,c,g,tan,abc)+brackets(z[i]),Nz,r,q,cos,sin);
printf("\nw = %f",w);
 
CharToOem("\nДля выхода нажмите Enter", str);
printf(str);
getch();
}
0
Миниатюры
Передача символических имен функций  
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 19:39 #3
Точку с запятой, в 10 строке, уберите.

Добавлено через 3 минуты
В brackets(), i - это что?
C++
1
double series = (f1(a*x[i])+ f2(b*x[i]));
Добавлено через 2 минуты
Если создаёте массивы для double, то и:
C++
1
2
void vvod(double x[ ], int n, char q);
double brackets(double x[ ], int n, double a, double b, double f1(double), double f2(double))
Добавлено через 8 минут
C++
1
2
3
4
5
double brackets(double x, int n, double a, double b, double f1(double), double f2(double))
{
    double series = (f1(a * x)+ f2(b * x));
    return series;
}
C++
1
 w += brackets(x[i], Nx, a, b, sin, cos) + brackets(y[i], Ny, c, g, tan, abs) + brackets(z[i], Nz, r, q, cos, sin);
Добавлено через 2 минуты
Что за sum, znam, и n?
1
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 19:51  [ТС] #4
Что за sum, znam, и n?[/QUOTE]

Убрала, написала по дурости из другой задачи и не увидела. Внесла указанные Вами изменения: при компиляции вместо одной ошибки появилось девять. Вот они:
0
Миниатюры
Передача символических имен функций  
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
05.07.2013, 19:57 #5
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
typedef double (*Func)(double);
 
double sum(double *x,
           int n,
           double a,
           double b,
           Func f1,
           Func f2)
{
    double result = 0.0;
    while (n--)
        result += f1(a * x[n]) + f2(b * x[n]);
    return result;
}
 
double calc(double a,
            double b,
            double c,
            double g,
            double r,
            double q,
            double *x,
            double *y,
            double *z)
{
    double result =
        sum(x, 4, a, b, sin, cos) +
        sum(y, 5, c, g, tan, abs) +
        sum(z, 6, r, q, cos, sin);
    return result;
}
 
int main()
{
    double x[4] = {1, 2, 3, 4},
           y[5] = {5, 6, 7, 8, 9},
           z[6] = {10, 11, 12, 13, 14, 15},
           a = 1.5,
           b = 2.5,
           c = 3.3,
           g = 4.5,
           r = 5.5,
           q = 4.5;
    printf( "%4.2f", calc(a, b, c, g, r, q, x, y, z) );
    return 0;
}
1
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:05  [ТС] #6
Все равно не компилируется - есть ошибки. И, если не трудно, поясните, что это (*Func)
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
05.07.2013, 20:07 #7
Pendalfik, компилируется в любом компиляторе С - http://ideone.com/aaYanz
Цитата Сообщение от Pendalfik Посмотреть сообщение
И, если не трудно, поясните, что это (*Func)
C
1
typedef double (*Func)(double);
Func - имя типа, который указывает на функцию, которая принимает double и возвращает double
0
svk2140
-8 / 0 / 1
Регистрация: 04.07.2013
Сообщений: 274
05.07.2013, 20:21 #8
о боже мой почему ты не про инициализировал функции это же элементарный с++ даже такой чайник как я заметил)
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:37 #9
Цитата Сообщение от Pendalfik Посмотреть сообщение
Внесла указанные Вами изменения:
Какие вы изменения там внесли никому не видно. Код покажите с изменениями, а то вслепую всё...
0
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:43  [ТС] #10
Никак. Даже с компиляцией не в Borland результат выдает 0. С такими исходными данными должно быть Rezult w=21733.167969.
Простите, но может можно определить что неверно в моей программе, хотелось бы все-таки понять.....
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
05.07.2013, 20:45 #11
Цитата Сообщение от Pendalfik Посмотреть сообщение
С такими исходными данными должно быть Rezult w=21733.167969.
Посчитал руками и получилось 168.78. Мой код выше выдает аналогичный результат. В радианы не переводил.
1
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:48  [ТС] #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Какие вы изменения там внесли никому не видно. Код покажите с изменениями, а то вслепую всё...
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <windows.h>
#define Nx  4
#define Ny  5
#define Nz  6
void vvod(double x[ ], int n, char q);
double brackets(double x, int n, double a, double b, double f1(double), double f2(double))
{
    double series = (f1(a * x)+ f2(b * x));
    return series;
}
main()
{
char str[50];
textbackground(2);
textcolor(15);
clrscr();
double x[Nx], y[Ny], z[Nz], w, a, b, c, g, r, q;
CharToOem("\nВведите элементы массивов x, y, z:\n", str);
printf(str);
vvod(x, Nx, 'x');
vvod(y, Ny, 'y');
vvod(z, Nz, 'z');
CharToOem("\nВведите a:\n", str);
printf(str);
scanf("%lf",&a);
CharToOem("\n\nВведите b:\n", str);
printf(str);
scanf("%lf",&b);
CharToOem("\n\nВведите c:\n", str);
printf(str);
scanf("%lf",&c);
CharToOem("\n\nВведите  g:\n", str);
printf(str);
scanf("%lf",&g);
CharToOem("\n\nВведите  r:\n", str);
printf(str);
scanf("%lf",&r);
CharToOem("\n\nВведите  q:\n", str);
printf(str);
scanf("%lf",&q);
{
int i;
float w=0;
for (i=0; i<n; i++)
 w += brackets(x[i], Nx, a, b, sin, cos) + brackets(y[i], Ny, c, g, tan, abs) + brackets(z[i], Nz, r, q, cos, sin);
printf("\nw = %f",w);
 
CharToOem("\nДля выхода нажмите Enter", str);
printf(str);
getch();
}
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:52 #13
Добавлено через 3 минуты
C++
1
int main()
Скобку в 45 строке удалите. И определите, наконец, переменную n.
0
Pendalfik
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 31
05.07.2013, 20:53  [ТС] #14
Цитата Сообщение от Olivеr Посмотреть сообщение
Посчитал руками и получилось 168.78. Мой код выше выдает аналогичный результат. В радианы не переводил.
Другой компилятор кроме Borland использовать не могу. Ваш код уже просто скопировала и сохранила. При компиляции вот такие ошибки:
0
Миниатюры
Передача символических имен функций  
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2013, 20:55 #15
И разберитесь с w, она у вас float или double?
0
05.07.2013, 20:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 20:55
Привет! Вот еще темы с ответами:

Передача значений функций - C++
извините конечно за дурацкий вопрос, не нашёл, думаю, может вы поможете... задача такова: мне надо например сделать 3 разных функции...

Использование имен предопределенных объектов в качестве имен переменных - C++
Есть код: #include &lt;iostream&gt; using namespace std; void func() { int cout; cout &lt;&lt;cout &lt;&lt;endl; }

Не возникает ли коллизия имен, если использовать два пространства имен, и в каждом из них будут одноименные? - C++
Вот например namespace nms1 { int gh; } namespace nms2 { int gh;

Передача параметров указателями при написании функций - C++
Как написать вот такую программу : Вычислить и запомнить суммы положительных элементов каждой строки матрицы a(10,20), b(15,10)....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.