0 / 0 / 0
Регистрация: 09.10.2017
Сообщений: 21
1

Trouble with operator Switch

16.10.2017, 19:15. Показов 460. Ответов 12
Метки нет (Все метки)

Почему при входном потоке 1 5, мне считает по формуле и выводит ответ, хотя не должно проходить по if в case 1?
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
#include <stdio.h>
#include <Windows.h>
#include <math.h>
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n,f;
    double y,x;
    scanf("%d%f",&n,&x);
    f=0;
    switch(n)
    {
    case 1: 
        if (x>0 && x<=2,05)
        {
            y=(0,77777*pow(x,3)+pow(x,1/7))/log((0,77777+sqrt(x)));
            f=1;
        } break;
    case 2:
        if (x>2,05 && x<3)
        {
                y=sin((pow(x,2)-1,234567));
                f=1;
        } break;
    default: 
        {
        printf("Выр1");
        f=2;
        }
    }
    if (f!=2)
    if (f==0)
        printf("Выр2",n,x);
    else
        if (f==1)
        printf("%f",y);
}
По логике вещей, должно попасть в ветку с case 1, не пройти по if, f остается 0, а значит, должно вывести Выр2
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2017, 19:15
Ответы с готовыми решениями:

Operator switch
помогите пожалуйста.. Разработать программу, которая выводит на экран дисплея сообщения о...

Перегрузка операторов operator> и operator* для чисел в разных системах счисления
Мне нужно Перегрузить операции&gt; (сравнение двух целых чисел с учетом системы счисления), *...

Operator Switch
Единицы массы пронумерованы следующим образом: 1 – килограмм, 2 – миллиграмм, 3 – грамм, 4 – тонна,...

Operator switch
Кто может объяснить что именно делает и как работает оператор switch? int i=1; switch (i) ...

12
283 / 231 / 114
Регистрация: 07.09.2016
Сообщений: 584
16.10.2017, 19:49 2
потому что вы не правильно число с плавающей точкой задали. нужна точка, а не запятая:
C++
1
2
3
...
if (x>0 && x <= 2.05)
...
а с замятой у вас x сравнивался с 5 и в целом условие в if было true.
в других местах тоже исправьте.
1
0 / 0 / 0
Регистрация: 09.10.2017
Сообщений: 21
16.10.2017, 20:41  [ТС] 3
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
#include <stdio.h>
#include <Windows.h>
#include <math.h>
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n,f;
    double y,x;
    scanf("%d%f",&n,&x);
    f=0;
    switch(n)
    {
    case 1: 
        if (x>0 && x<=2.05)
        {
            y=(0.77777*pow(x,3)+pow(x,1/7))/log((0.77777+sqrt(x)));
            f=1;
        } break;
    case 2:
        if (x>2.05 && x<3)
        {
                y=sin((pow(x,2)-1.234567));
                f=1;
        } break;
    default: 
        {
        printf("Для заданного номера варианта n нет решения.");
        f=2;
        }
    }
    if (f!=2)
    if (f==0)
        printf("Для заданных n=%d и x=%f нет решений",n,x);
    else
    if (f==1)
        printf("%f",y);
}
Исправил на точки, но результат все равно не тот. Возможно, я упустил что-то еще?
Изображения
 
0
283 / 231 / 114
Регистрация: 07.09.2016
Сообщений: 584
16.10.2017, 20:43 4
упустили.
C++
1
2
pow(x,1/7)
pow(x,1.0/7)
1/7 == 0, т.к. тут целочисленная арифметка. 1/7 == 0
а вот с точкой будет то, что вам скорее всего надо.
0
0 / 0 / 0
Регистрация: 09.10.2017
Сообщений: 21
16.10.2017, 20:49  [ТС] 5
Да, действительно, на результат это повлияло, правда, не думаю, что он должен получаться таким. Поэтому, скорее, нужно было оставить 1/7 (мне нужно получить корень 7-ой степени из числа). Но так как результат на выходе изменился, значит, что программа продолжает проходить по этому if.
Изображения
 
0
0 / 0 / 0
Регистрация: 09.10.2017
Сообщений: 21
16.10.2017, 22:11  [ТС] 6
Нашел проблему, нужно было при объявлении переменных написать вместо double - float. И программа заработала.
0
Модератор
Эксперт С++
12067 / 9752 / 5896
Регистрация: 18.12.2011
Сообщений: 26,178
17.10.2017, 07:19 7
Цитата Сообщение от John404 Посмотреть сообщение
написать вместо double - float
Нельзя так делать. Забудьте про существование float.
Ошибка в использовании scanf (не %f, а %lf).
Находить ошибки лучше всего отладчиком
Как пользоваться отладчиком (в Visual Studio)
И скорее переходите на iostream, чтобы такие ошибки не случались.
1
0 / 0 / 0
Регистрация: 09.10.2017
Сообщений: 21
21.10.2017, 20:22  [ТС] 8
Как пользоваться отладчиком (в Visual Studio)
И скорее переходите на iostream, чтобы такие ошибки не случались.
Я пользуюсь MinGW Developer Studio, все руки не доходят скачать Visual. Посмотрел, данной библиотеки
iostream
в MinGW не нашел. Думаю, и не должен был?
0
3535 / 2096 / 388
Регистрация: 09.09.2017
Сообщений: 8,618
21.10.2017, 22:17 9
Цитата Сообщение от John404 Посмотреть сообщение
в MinGW не нашел. Думаю, и не должен был?
это стандартный файл для С++ а не для MS VS. У меня работает в g++ на линуксе. Используется так:
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main(){
  double var;
  std::cin >> var; //вместо scanf
  std::cout << var << std::endl; //вместо printf
  return 0;
}
Преимущество в автоматической типизации, не перепутаете флаги форматной строки. Недостаток - несколько меньше возможностей форматирования.
0
Mental handicap
1245 / 623 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
21.10.2017, 22:25 10
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
несколько меньше возможностей форматирования
форматирования всмысле при выводе? мне кажется их даже больше чем в Си.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Недостаток
недостаток скорее это скорость
0
lArtl
21.10.2017, 23:12
  #11
0
Azazel-San
21.10.2017, 23:17
  #12

Не по теме:

Цитата Сообщение от lArtl Посмотреть сообщение
Эта библиотека для форматирования строк мне понравилась, прям как в шарпе),
к чему это вообще? человек на Си пока ещё пишет, а вы ему сразу питоновский i/o суете, не путайте людей)

0
3535 / 2096 / 388
Регистрация: 09.09.2017
Сообщений: 8,618
21.10.2017, 23:47 13
Цитата Сообщение от Azazel-San Посмотреть сообщение
форматирования всмысле при выводе? мне кажется их даже больше чем в Си.
Не знаю, глубоко не копал. Вроде бы не так просто вывести ASCII код char'а или шестнадцатеричное представление числа. Не невозможно, но сложнее чем printf'ом. А скорость зависит от реализации.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2017, 23:47
Помогаю со студенческими работами здесь

Почему в данном случае используется operator int, а не operator double?
Вот программа using System; class ThreeD { int x, y, z; // трехмерные координаты ...

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to...

Вызов operator[] через operator[] const
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный...

Перегрузка operator>> и operator<< в абстрактном классе
Здрасьте! Есть необходимость перегрузить потоки, Я знаю как это сделать через friend, но вот...

operator char() или operator int()
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он...

Реализация operator + через operator +=
внутри следующей темы возник вопрос, ответ на который так и не был получен:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru