Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
1

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

15.04.2010, 18:03. Показов 2848. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят помогите. Нужно создать две версии функции, используя механимз перегрузки, заголовки у которых должны быть такими: №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. Я новичёк поэтому пожалуста, не ругайте сильно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2010, 18:03
Ответы с готовыми решениями:

Механизм перегрузки
Здравствуйте, помогите решить задачу. С помощью механизма перегрузки функций организовать...

механизм перегрузки функций
С помощью механизма перегрузки функций реализовать функции для вывода на экран (первый параметр –...

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

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

18
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
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;
}
0
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
15.04.2010, 18:33  [ТС] 3
То есть нужно две эти версии слепить как одну?

Добавлено через 8 минут
insideone, все здорово. Разобралась. Последний вопрос - как теперь сделать, чтобы ввести самой значение x?
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
15.04.2010, 19:32 4
Так у вас в коде (начало темы) это и делается:
C++
1
cin >> x;
Это и есть ввод данных в переменную x.
0
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 строка
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.04.2010, 22:43 6
случайно, сори.
0
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
16.04.2010, 23:19  [ТС] 7
insideone, как мне изменить код внутри загаловка int main() чтоб при коде cin>>x программа работала?
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
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 это предупреждение а не ошибка, без неё должно все выполняться. Работает или нет? Если нет то скопируйте строку с ошибкой сюда + строку сверху и снизу. Короче ближайшие строки тоже нужно бы увидеть. Или вообще весь код
0
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.
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
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);
0
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
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
17.04.2010, 19:24 12
в 9 строке нужно
C++
1
float F(float x, float &y) {......
0
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 19:27  [ТС] 13
Vorona, нет. в задании сказано чтобы два загаловка были с void и float
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
17.04.2010, 19:30 14
но ведь void не может вернуть значения типа float да и вообще ничего не может вернуть
в ф-ции типа void вместо return должно быть y =
а в ф-ции типа float в 6 и 5 строках нужно дописать return перед sin и sqrt
1
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 19:37  [ТС] 15
Vorona, Точняк! Удалила return и терь прога пашет.

Добавлено через 2 минуты
Эээ...прога то пашет..поспешила радоваться...теперь если например введу число 7 она выводит
7; 0. Разве так и должно быть?
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
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
1
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 20:20  [ТС] 17
insideone, vorona - без вас я бы с ума сошла. Огромное спасибо
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
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;
}
эта верняк работает
1
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 82
17.04.2010, 21:59  [ТС] 19
Vorona, щикарно. Thanks!
0
17.04.2010, 21:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2010, 21:59
Помогаю со студенческими работами здесь

Используя механизм перегрузки функции, вычислить для разных типов параметров
Используя механизм перегрузки функции, разработать и отладить программу вычисление значения = f...

Перегрузки
Изменить программу предыдущей лабораторной работы. Функцию, определяющую бьет ли первая карта...

Перегрузки
Помогите пожалуйста написать программу. Описать производный класс, содержащий поле козырь, и...

Перегрузки
Помогите пожалуйста!!!! Перегрузку оператора – слева объект, справа другой тип данных вроде...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru