Форум программистов, компьютерный форум CyberForum.ru

Механизм перегрузки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
15.04.2010, 18:03     Механизм перегрузки #1
Ребят помогите. Нужно создать две версии функции, используя механимз перегрузки, заголовки у которых должны быть такими: №1 float F(float x); №2 void F (float x, float &y).
1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <math.h>
using namespace std;
 
int main(){
    float F(float x){
    float y;
    cin>>x;
    if (fabs(x)<3)
        return y=sin(x);
    else if (fabs(x)<9)
        return y=sqrt(x*x+1)/sqrt(x*x+5);
    else return y=sqrt(x*x+1)-sqrt(x*x+5);
    cout<<y<<endl; 
    system("PAUSE");
    return 0;}
}
2)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <math.h>
using namespace std;
 
int main(){
    void F (float x, float &y){
    if (fabs(x)<3) y=sin(x);
    else if (fabs(x)<9) y=sqrt(x*x+1)/(x*x+5);
    else y=sqrt(x*x+1)-sqrt(x*x+5);
    cin>>x;
    cout<<y<<endl;
    system("PAUSE");
    return;}
}
В обоих версиях одна ошибка с F. Я новичёк поэтому пожалуста, не ругайте сильно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2010, 18:03     Механизм перегрузки
Посмотрите здесь:

Используя механизм перегрузки функций, разработать две версии функции F C++
механизм перегрузки функций C++
Перегрузки C++
C++ Перегрузки
C++ Механизм перегрузки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3623 / 901 / 48
Регистрация: 10.01.2010
Сообщений: 2,429
15.04.2010, 18:17     Механизм перегрузки #2
Функции нельзя писать внутри других функций, а main это тоже функция... поэтому вынесите код для функций F отдельно. К тому же чтобы они перегружали друг друга они должны быть написаны в одной программе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <math.h>
 
float F(float x) {
   // код функции float F(float x)
}
void F(float x, float &y) {
  // код функции void F (float x, float &y)
}
 
int main() {
   // код самой программы. вызовы вышенаписаных функций и т.д.
   float x = F(0.3f);
   float y = 0;
   F(0.3f, y);
   std::cout << x << "; " << y;
return 0;
}
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
15.04.2010, 18:33  [ТС]     Механизм перегрузки #3
То есть нужно две эти версии слепить как одну?

Добавлено через 8 минут
insideone, все здорово. Разобралась. Последний вопрос - как теперь сделать, чтобы ввести самой значение x?
insideone
Модератор
Автор FAQ
 Аватар для insideone
3623 / 901 / 48
Регистрация: 10.01.2010
Сообщений: 2,429
15.04.2010, 19:32     Механизм перегрузки #4
Так у вас в коде (начало темы) это и делается:
C++
1
cin >> x;
Это и есть ввод данных в переменную x.
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
15.04.2010, 21:10  [ТС]     Механизм перегрузки #5
Но когда я пишу cin>>x в третьем загаловке вижак выдает ошибку
Warning 1 warning C4552: '/' : operator has no effect; expected operator with side-effect 16 строка
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
15.04.2010, 22:43     Механизм перегрузки #6
случайно, сори.
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
16.04.2010, 23:19  [ТС]     Механизм перегрузки #7
insideone, как мне изменить код внутри загаловка int main() чтоб при коде cin>>x программа работала?
insideone
Модератор
Автор FAQ
 Аватар для insideone
3623 / 901 / 48
Регистрация: 10.01.2010
Сообщений: 2,429
16.04.2010, 23:44     Механизм перегрузки #8
Цитата Сообщение от LiLi R. Посмотреть сообщение
Но когда я пишу cin>>x в третьем загаловке вижак выдает ошибку
Warning 1 warning C4552: '/' : operator has no effect; expected operator with side-effect 16 строка
Warning это предупреждение а не ошибка, без неё должно все выполняться. Работает или нет? Если нет то скопируйте строку с ошибкой сюда + строку сверху и снизу. Короче ближайшие строки тоже нужно бы увидеть. Или вообще весь код
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 01:18  [ТС]     Механизм перегрузки #9
insideone,
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
include <iostream>
#include <math.h>
 
float F(float x) {
if (fabs(x)<3)
return sin(x);
else if (fabs(x)<9)
return sqrt(x*x+1)/sqrt(x*x+5);
else return sqrt(x*x+1)-sqrt(x*x+5);
}
void F(float x, float &y) {
  if (fabs(x)<3) sin(x);
else if (fabs(x)<9) sqrt(x*x+1)/(x*x+5);
else sqrt(x*x+1)-sqrt(x*x+5);
}
 int main() {
 float x = F(0.3f);
   float y = 0;
   F(0.3f, y);
   cin>>x;
   std::cout << x << "; " << y;
   system("PAUSE");
return 0;
}
решила исправится вместо warning получила error с cin.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3623 / 901 / 48
Регистрация: 10.01.2010
Сообщений: 2,429
17.04.2010, 02:19     Механизм перегрузки #10
нужно
C++
1
std::cin>>x;
а тут забыли дописать return
C++
1
2
3
  if (fabs(x)<3) return sin(x);
else if (fabs(x)<9) return  sqrt(x*x+1)/(x*x+5);
else return sqrt(x*x+1)-sqrt(x*x+5);
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 19:21  [ТС]     Механизм перегрузки #11
insideone,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <math.h>
 
float F(float x) {
if (fabs(x)<3) sin(x);
else if (fabs(x)<9)  sqrt(x*x+1)/sqrt(x*x+5);
else return sqrt(x*x+1)-sqrt(x*x+5);
}
void F(float x, float &y) {
  if (fabs(x)<3) return sin(x);
else if (fabs(x)<9) return sqrt(x*x+1)/(x*x+5);
else return sqrt(x*x+1)-sqrt(x*x+5);
}
 int main() {
 float x = F(0.3f);
   float y = 0;
   F(0.3f, y);
   std::cin>>x;
   std::cout << x << "; " << y;
   system("PAUSE");
return 0;
}
Теперь вот такие ошибки:
Warning 1 warning C4552: '/' : operator has no effect; expected operator with side-effect 6
Error 2 error C2562: 'F' : 'void' function returning a value 10
Error 3 error C2562: 'F' : 'void' function returning a value 11
Error 4 error C2562: 'F' : 'void' function returning a value 12
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
17.04.2010, 19:24     Механизм перегрузки #12
в 9 строке нужно
C++
1
float F(float x, float &y) {......
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 19:27  [ТС]     Механизм перегрузки #13
Vorona, нет. в задании сказано чтобы два загаловка были с void и float
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
17.04.2010, 19:30     Механизм перегрузки #14
но ведь void не может вернуть значения типа float да и вообще ничего не может вернуть
в ф-ции типа void вместо return должно быть y =
а в ф-ции типа float в 6 и 5 строках нужно дописать return перед sin и sqrt
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 19:37  [ТС]     Механизм перегрузки #15
Vorona, Точняк! Удалила return и терь прога пашет.

Добавлено через 2 минуты
Эээ...прога то пашет..поспешила радоваться...теперь если например введу число 7 она выводит
7; 0. Разве так и должно быть?
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
17.04.2010, 20:07     Механизм перегрузки #16
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
#include <iostream>
#include <cmath>
 
float F(float x) {
    if (fabs(x)<3) 
        return sin(x);
    if (fabs(x)<9 && fabs(x)>=3) 
        return sqrt(x*x+1)/sqrt(x*x+5);
    return sqrt(x*x+1)-sqrt(x*x+5);
}
void F(float x, float &y) {
    if (fabs(x)<3) 
        y = sin(x);
    if (fabs(x)<9 && fabs(x)>=3) 
        y = sqrt(x*x+1)/sqrt(x*x+5);
    y = sqrt(x*x+1)-sqrt(x*x+5);
}
int main() {
    float x;
    float y;
    std::cin >> x;
    std::cout << F(x) << std::endl;
    F(x, y);
    std::cout << x << "; " << y << std::endl;
    
    system("PAUSE");
    return 0;
}
я думаю, что ф-ции должны быть одинаковыми , а у вас отличались при abs(x)<9
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 20:20  [ТС]     Механизм перегрузки #17
insideone, vorona - без вас я бы с ума сошла. Огромное спасибо
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
17.04.2010, 20:39     Механизм перегрузки #18

Не по теме:

но все равно мне не нравится, что результаты отличаются
при х = 4
результат ф-ции с типом float
0.899735
ф-ции с типом void
4; -0.45947


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
#include <iostream>
#include <cmath>
 
float F(float x) {
    if (fabs(x)<3) 
                return sin(x);
        else if (fabs(x)<9 && fabs(x)>=3) 
                return sqrt(x*x+1)/sqrt(x*x+5);
    else
        return sqrt(x*x+1)-sqrt(x*x+5);
}
void F(float x, float &y) {
        if (fabs(x)<3) 
                y = sin(x);
    else if (fabs(x)<9 && fabs(x)>=3) 
                y = sqrt(x*x+1)/sqrt(x*x+5);
        else
        y = sqrt(x*x+1)-sqrt(x*x+5);
}
int main() {
        float x;
        float y;
        std::cin >> x;
        std::cout << F(x) << std::endl;
        F(x, y);
        std::cout << x << "; " << y << std::endl;
        
        system("PAUSE");
        return 0;
}
эта верняк работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2010, 21:59     Механизм перегрузки
Еще ссылки по теме:

C++ Перегрузки
Используя механизм перегрузки функций, разработайте две версии функции F C++
Используя механизм перегрузки функции, вычислить для разных типов параметров C++

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

Или воспользуйтесь поиском по форуму:
LiLi R.
 Аватар для LiLi R.
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 21:59  [ТС]     Механизм перегрузки #19
Vorona, щикарно. Thanks!
Yandex
Объявления
17.04.2010, 21:59     Механизм перегрузки
Ответ Создать тему
Опции темы

Текущее время: 04:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru