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

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

Войти
Регистрация
Восстановить пароль
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
#1

Объясните почему так - C++

30.10.2012, 17:28. Просмотров 309. Ответов 7
Метки нет (Все метки)

Когда я ввожу следующие числа:
x = 2222222222
n = 3333333333

И

x = 2222222221 (один знак поменяли)
n = 3333333333

То ответы выходя одинаковые. С чем это связано?
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 <stdio.h>
#include <math.h>
 
void f(double x, double n)
{
    if(x-n>10) printf("kvad.koren: %f\n", pow(x-n, 1.0/2.0));
    if(x<=n) printf("kyb. koren: %f\n", pow(fabs(x-n),1.0/3.0));
    if(5<=x-n && x-n<=10) printf("raznost kvad. kornei: %f\n", (pow(x, 1.0/2.0)-pow(n, 1.0/2.0)));
    if(0<x-n && x-n<=5) printf("sin(x) - cos(n) = %f\n", (sin(3.14159265/180*x) - cos(3.14159265/180*n)));
}
 
int main() 
{
    double x, n;
    printf("vvedite X\n");
    scanf("%lf", &x);
    printf("vvedite N\n");
    scanf("%lf", &n);
    f(x, n);
 
    getchar();
    getchar();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2012, 17:28     Объясните почему так
Посмотрите здесь:

Объясните почему так - C++
#include &lt;iostream&gt; using namespace std; #define MAT(a,b) a/b; int main() { cout&lt;&lt;2*MAT(2+5,3); return 0; } В тестах...

Почему так работает, а так нет? - C++
так работает // Возведение b в степень s по модулю m float powmod(float b, long s) { float c=1; while (s) {

объясните, пожалуйста, что я делаю не так - C++
Ошибка LNK2005 &quot;bool __cdecl ForSortForBodyType(struct AutoCars &amp;,struct AutoCars &amp;)&quot; (?ForSortForBodyType@@YA_NAAUAutoCars@@0@Z) уже...

Объясните что не так с указателем в программе - C++
Функция defStart возвращает указатель на int . В main другой указатель присваивает значение(адрес) возвращенного указателя. Затем в цикле...

Объясните, почему программа циклится - C++
Не пойму, в чем дело, ведь логическое отрицание должно выполняться после попытки ввода, но программа все равно циклится. #include...

Файл: Объясните, почему не работает? - C++
Хочу в созданный пустой файл записать hello. Написал простенькую программу. Объясните, почему не работает? Компиляция проходит...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
30.10.2012, 17:31     Объясните почему так #2
Неверные условия у тебя, походу.
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 17:43  [ТС]     Объясните почему так #3
Цитата Сообщение от Герц Посмотреть сообщение
Неверные условия у тебя, походу.
Они верны, дело в другом. Мне говорили что дело в scanf, что мол он не может считывать нормально столь большие числа, но вот понять я никак не могу почему так. Кто-нибудь может разъяснить?
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.10.2012, 19:00     Объясните почему так #4
Цитата Сообщение от aleksand Посмотреть сообщение
Мне говорили что дело в scanf, что мол он не может считывать нормально столь большие числа
Это не тот случай. В данном случае, при таких входных данных, чтобы увидеть разницу напишите например так:
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 <stdio.h>
#include <math.h>
 
void f(double x, double n)
{
    if(x-n>10) printf("kvad.koren: %.10lf\n", pow(x-n, 1.0/2.0));
    if(x<=n) printf("kyb. koren: %.10lf\n", pow(fabs(x-n),1.0/3.0));
    if(5<=x-n && x-n<=10) printf("raznost kvad. kornei: %.10lf\n", (pow(x, 1.0/2.0)-pow(n, 1.0/2.0)));
    if(0<x-n && x-n<=5) printf("sin(x) - cos(n) = %.10lf\n", (sin(3.14159265/180*x) - cos(3.14159265/180*n)));
}
 
int main() 
{
    double x, n;
    printf("vvedite X\n");
    scanf("%lf", &x);
    printf("vvedite N\n");
    scanf("%lf", &n);
    f(x, n);
 
    getchar();
    getchar();
    return 0;
}
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 19:12  [ТС]     Объясните почему так #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Это не тот случай. В данном случае, при таких входных данных, чтобы увидеть разницу напишите например так:
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 <stdio.h>
#include <math.h>
 
void f(double x, double n)
{
    if(x-n>10) printf("kvad.koren: %.10lf\n", pow(x-n, 1.0/2.0));
    if(x<=n) printf("kyb. koren: %.10lf\n", pow(fabs(x-n),1.0/3.0));
    if(5<=x-n && x-n<=10) printf("raznost kvad. kornei: %.10lf\n", (pow(x, 1.0/2.0)-pow(n, 1.0/2.0)));
    if(0<x-n && x-n<=5) printf("sin(x) - cos(n) = %.10lf\n", (sin(3.14159265/180*x) - cos(3.14159265/180*n)));
}
 
int main() 
{
    double x, n;
    printf("vvedite X\n");
    scanf("%lf", &x);
    printf("vvedite N\n");
    scanf("%lf", &n);
    f(x, n);
 
    getchar();
    getchar();
    return 0;
}
А если ввести числа, состоящие из 100 символов, то это будет тот случай? В каком случае scanf не сможет прочесть то, что мы ему введём?
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.10.2012, 19:29     Объясните почему так #6
Цитата Сообщение от aleksand Посмотреть сообщение
А если ввести числа, состоящие из 100 символов, то это будет тот случай? В каком случае scanf не сможет прочесть то, что мы ему введём?
Это будет тот случай.
Не поленитесь, почитайте, очень интересная статья на эту тему:
http://www.cyberforum.ru/blogs/18334/blog88.html
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 19:31  [ТС]     Объясните почему так #7
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Это будет тот случай.
Не поленитесь, почитайте, очень интересная статья на эту тему:
http://www.cyberforum.ru/blogs/18334/blog88.html
Как раз подобное я сегодня и искал в гугле, но так нормальной статьи , не нашёл. Спасибо огромное.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 19:34     Объясните почему так
Еще ссылки по теме:

Объясните пожалуйста, почему не запускается? - C++
Найти все четырехзначные числа, у которых сумма крайних цифр равна сумме средних цифр, а само число делится на 6 и 27. #include...

Объясните пожалуйста, почему не работает условие! - C++
Начал изучать классы, хочу понять как работать с приватными переменнами! Есть такой вот метод: char* student::returnName() { ...

Объясните,почему шаблоны написаны через struct? - C++
Пришлось залезть в файл limits,обратил внимание,что все шаблоны написаны через struct.Можете объяснить,почему?В смысле почему не классы?В...

нарушение прав доступа при записи. объясните, почему? и как избежать? - C++
void Stroka::F1(char*word) { char *point; if((point=strstr(data,word))) { strrev(word); } } нарушение прав доступа при...


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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.10.2012, 19:34     Объясните почему так #8
Цитата Сообщение от aleksand Посмотреть сообщение
Спасибо огромное.
спасибо автору этой статьи, он старался.
Yandex
Объявления
30.10.2012, 19:34     Объясните почему так
Ответ Создать тему
Опции темы

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