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

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

Восстановить пароль Регистрация
 
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
02.08.2013, 11:23     Не срабатывает вложенные If/else #1
Написал программу, в программе в цикле 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 ;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 11:23     Не срабатывает вложенные If/else
Посмотрите здесь:

C++ вложенные циклы
Вложенные циклы С++ C++
Вложенные операторы С++ C++
вложенные классы C++
Вложенные циклы for C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
02.08.2013, 11:30
  #2

Не по теме:

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

Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
02.08.2013, 11:40     Не срабатывает вложенные If/else #3
Цитата Сообщение от mikhail90 Посмотреть сообщение
if (SS >= 200 && SS < 300)
C++
1
SS = 200.0 + 0.09 * (float) S ;
А зачем явное приведение к float?
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
02.08.2013, 11:41  [ТС]     Не срабатывает вложенные If/else #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]++ ;
}
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.08.2013, 12:00     Не срабатывает вложенные If/else #5
mikhail90, ключевое слово было - вычисляет. Что-то вроде index = static_cast<int>(P2) / 100 - 2; ++A[index];

Пока будут такие простыни условий - будут ошибки из-за опечаток.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.08.2013, 12:15     Не срабатывает вложенные If/else #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 опередил
Yandex
Объявления
02.08.2013, 12:15     Не срабатывает вложенные If/else
Ответ Создать тему
Опции темы

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