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

Не срабатывает вложенные If/else

02.08.2013, 11:23. Показов 896. Ответов 5
Метки нет (Все метки)

Написал программу, в программе в цикле while есть большой список if/else который по величине SS суммирует определенные ячейки массива sales. Если мы вводим, например, 2000, то переменная SS получается равна 200 + 0.09 * 2000 = 380, следовательно ячейка массива sales[1] должна увеличиваться на 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<iostream>
using namespace std ;
 
int main()
{
    int sales [9] = {0} ;
    int S;
    float SS ;
    cout << "Enter sale (-1 for exit): " ;
    cin >> S ;
    while (S != -1)
    {
        SS = 200.0 + 0.09 * (float) S ;
        if (SS >= 200 && S < 300)
            sales[0]++ ;
        else if (SS >= 300.0 && S < 400.0)
            sales[1]++ ;
        else if (SS >= 400.0 && S < 500.0)
            sales[2]++ ;
        else if (SS >= 500.0 && S < 600.0)
            sales[3]++ ;
        else if (SS >= 600.0 && S < 700.0)
            sales[4]++ ;
        else if (SS >= 700.0 && S < 800.0)
            sales[5]++ ;
        else if (SS >= 800.0 && S < 900.0)
            sales[6]++ ;
        else if (SS >= 900.0 && S < 1000.0)
            sales[7]++ ;
        else 
            sales[8]++ ;
        cout << "Enter sale (-1 for exit): " ;
        cin >> S ;
    }
    for (int x = 0 ; x < 9 ; x++)
        cout << x + 1 << "\t" << sales[x] << endl ;
    return 0 ;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.08.2013, 11:23
Ответы с готовыми решениями:

Запрос срабатывает в SQL Server, но не корректно срабатывает в Visual Studio 2017
(SELECT ROW_NUMBER() over (ORDER BY AVG(Отметки.Отметка) DESC) ID, .ФИО, .Группа, Отметки.,...

Таймер срабатывает раньше времени или вообще не срабатывает
Помогите, пожалуйста, разобраться, что нетак с таймером. Браузер Chrome При создании записи,...

Вложенные классы и статические вложенные классы - нужен пример
Добрый вечер, форумчане! :) Поделитесь примерами практических задач, при решении которых полезно...

Вложенные циклы
Найти все натуральные числа в диапазоне между m и n (m&lt;n), в записи которых нет двух одинаковых...

5
0x10
02.08.2013, 11:30
  #2

Не по теме:

Подумайте о написании функции, которая в зависимости от входного параметра вычисляет индекс в массиве. Само наличие такой портянки условий уже говорит о том, что подход вряд ли верный.

0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
02.08.2013, 11:40 3
Цитата Сообщение от mikhail90 Посмотреть сообщение
if (SS >= 200 && SS < 300)
C++
1
SS = 200.0 + 0.09 * (float) S ;
А зачем явное приведение к float?
1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
02.08.2013, 11:41  [ТС] 4
Да, так вот заработало. И ошибку свою увидел в 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
39
40
41
#include<iostream>
using namespace std ;
void Schet (int [], int );
int main()
{
    int sales [9] = {0} ;
    int S;
    cout << "Enter sale (-1 for exit): " ;
    cin >> S ;
    while (S != -1)
    {
        Schet (sales, S) ;
        cout << "Enter sale (-1 for exit): " ;
        cin >> S ;
    }
    for (int x = 0 ; x < 9 ; x++)
        cout << x + 1 << "\t" << sales[x] << endl ;
    return 0 ;
}
void Schet (int A[] , int P)
{
    float P2 = 200.0 + 0.09 * (float) P ;
        if (P2 >= 200 && P2 < 300)
            A[0]++ ;
        else if (P2 >= 300 && P2 < 400)
            A[1]++ ;
        else if (P2 >= 400 && P2 < 500)
            A[2]++ ;
        else if (P2 >= 500 && P2 < 600)
            A[3]++ ;
        else if (P2 >= 600 && P2 < 700)
            A[4]++ ;
        else if (P2 >= 700 && P2 < 800)
            A[5]++ ;
        else if (P2 >= 800 && P2 < 900)
            A[6]++ ;
        else if (P2 >= 900 && P2 < 1000)
            A[7]++ ;
        else 
            A[8]++ ;
}
0
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.08.2013, 12:00 5
mikhail90, ключевое слово было - вычисляет. Что-то вроде index = static_cast<int>(P2) / 100 - 2; ++A[index];

Пока будут такие простыни условий - будут ошибки из-за опечаток.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.08.2013, 12:15 6
mikhail90, а что если?
C++
1
2
3
4
5
void Schet (int A[] , int P)
{
    float P2 = 200.0 + 0.09 * P ;
    A[ (P2-200)/100 ]++;
}
p.s. Эх, 0x10 опередил
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2013, 12:15
Помогаю со студенческими работами здесь

Вложенные циклы
Помогите решить с помощью вложенных циклов. Ввести число строк! вывести похожее на следующее =...

вложенные таблицы
Всем доброго времени суток.Делая подменюшку для сайта столкнулся вот с такой проблемой: когда...

Вложенные циклы for
По учебной необходимости приступил к изучению C++, ранее пользовался только паскалем, и то это было...

Вложенные списки
Вот есть код: &lt;ul&gt; &lt;li&gt;Пункт 1 &lt;ul&gt; &lt;li&gt;Пункт 1.1&lt;/li&gt; &lt;li&gt;Пункт 1.2&lt;/li&gt; ...


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

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

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