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

Переменные в функциях - C++

Восстановить пароль Регистрация
 
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
28.01.2013, 02:18     Переменные в функциях #1
Разбираясь с передачей и приемом функциями различных типов данных, столкнулся с такой проблемой.Написал 2 похожие функции и стал объявлять разные типы данных.С целыми числами все нормально,а с дробными возникла проблема.При объявлении переменных типа float в этом коде
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
#include <iostream>
#include <iomanip>
float OkrD (float);
 
using namespace std;
 
int main()
{
float D;
 
 
cout << "Vvedite chislo" << endl;
cin >> D;
D = OkrD (D);
 cout << setw (15) << D << endl;
return 0;
}
float OkrD (float D)
{
 float d;
 
 if (D==0.38)
 d = 0.38;
 if ((D >= 0.39)&&(D < 0.43))
 d = 0.40;
 if ((D>=0.43)&&(D<0.47))
 d=0.45;
 if ((D>=0.47)&&(D <=0.51))
 d=0.50;
 if ((D>0.51)&&(D<=0.54))
 d=0.53;
 if ((D>0.54)&&(D<=0.57))
 d=0.56;
return d;
}

программа работает не верно.Ввожу 0.38,получаю 4.68376е-039,ввожу 0.39 тоже самое.0.4 и больше все правильно. По моему для таких чисел типа float вполне достаточно,а получается что нет.Объявляю переменные, в этом же коде,типом double все работает верно.
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
#include <iostream>
#include <iomanip>
double OkrD (double);
 
using namespace std;
 
int main()
{
double D;
 
cout << "Vvedite chislo" << endl;
cin >> D;
D = OkrD (D);
 cout << setw (15)<< D << endl;
return 0;
}
double OkrD (double D)
{
 double d;
 if (D==0.38)
 d = 0.38;
 if ((D >= 0.39)&&(D < 0.43))
 d = 0.40;
 if ((D>=0.43)&&(D<0.47))
 d=0.45;
 if ((D>=0.47)&&(D <=0.51))
 d=0.50;
 if ((D>0.51)&&(D<=0.54))
 d=0.53;
 if ((D>0.54)&&(D<=0.57))
 d=0.56;
return d;
}
в этом коде

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
#include <iostream>
#include <iomanip>
#include <math.h>
float  PrisS (int);
float const pi = 3.14159;
using namespace std;
 
int main()
{
int  counter,i,j;
float d;
 
 counter = 1;
 i =  counter;
 j =  counter;
cout << setw (15) << "Si" << setw (15) << "Sj" <<  setw (15) << "di" << endl << endl << endl;
 
for (i = 1,d =PrisS ( i); i <=6; i ++,d ++)
for (j = 1,d =PrisS ( j); j <=6; j ++,d ++)
cout << setw (15) << PrisS ( i) << setw (15) <<PrisS ( j)
     << setw (15) << 2*(sqrt ((PrisS ( i))/pi)) <<endl;
 
return 0;
}
float  PrisS (int counter)
{
    float d1, S;
    if (counter == 1)
    d1 = 0.38;
    if (counter == 2)
    d1 = 0.39;
    if (counter ==3)
    d1 = 0.45;
    if (counter == 4)
    d1 = 0.56;
    if (counter == 5)
    d1 = 0.95;
    if (counter == 6)
    d1 = 1.12;
    return S = ((d1/2)* (d1/2))*pi;
}

при таких же переменных и типе float все работает верно хотя числа получаются меньше чем в первом случае.Почему так происходит не могу понять.
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2013, 02:18     Переменные в функциях
Посмотрите здесь:

Структуры в функциях C++
Массивы в функциях C++
О виртуальных функциях C++
Указатели в функциях C++
vector в функциях C++
Ошибка в функциях с++ C++
C++ Ошибки в функциях
Окончание W и A в функциях C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6167 / 2896 / 282
Регистрация: 04.12.2011
Сообщений: 7,697
Записей в блоге: 3
28.01.2013, 03:06     Переменные в функциях #2
Вот так лучше выходит:
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
#include <iostream>
#include <iomanip>
float OkrD (float);
 
using namespace std;
 
int main()
{
float D;
 
cout << "Vvedite chislo" << endl;
cin >> D;
D = OkrD (D);
 cout << setw (15)<< D << endl;
cout<<endl;
system("pause");
return 0;
}
float OkrD (float D)
{
 float d;
 if (D==0.38f)
 d = 0.38f;
 if ((D >= 0.39f)&&(D < 0.43f))
 d = 0.40f;
 if ((D>=0.43f)&&(D<0.47f))
 d=0.45;
 if ((D>=0.47f)&&(D <=0.51f))
 d=0.50f;
 if ((D>0.51f)&&(D<=0.54f))
 d=0.53f;
 if ((D>0.54f)&&(D<=0.57f))
 d=0.56f;
return d;
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
28.01.2013, 10:28  [ТС]     Переменные в функциях #3
Спасибо.А я делал так
C++
1
if ((D >= 0.39)&&(D < 0.43))
C++
1
d = 0.40f;
и у меня ничего не получалось.Почему то в условиях сравнения думал что это не обязательно.Прочитал ,что при присвоении надо так делать.Уж теперь запомню надолго.Спасибо.
Yandex
Объявления
28.01.2013, 10:28     Переменные в функциях
Ответ Создать тему
Опции темы

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