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

Неправильно работает функция - C++

Восстановить пароль Регистрация
 
miha64
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 34
11.12.2011, 22:47     Неправильно работает функция #1
Проблема заключается в том, что в случае, если пользователь вводит числа от 1 до 9 все работает правильно, а если от 10 и далее, то "Введите массу в кг" и "Введите конечную температуру" выводятся сразу, без паузы. Объясните пожалуйста в чем проблема.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
float cm()
{
float c;
float m;
float t2;
float t1;
char s;
cout << "Введите вещество на английском языке \n";
cout << "1.Aluminium \n";
cout << "2.Ice \n";
cout << "3.Iron \n";
cout << "4.Copper \n";
cout << "5.Spirit \n";
cout << "6.Steel \n";
cout << "7.Gold \n";
cout << "8.Tin \n";
cout << "9.Lead \n";
cout << "10.Mercury \n";
cout << "11.Zinc \n";
cout << "12.Brass \n";
cout << "13.Graphite \n";
cout << "14.Glass \n";
cout << "15.Brick \n";
cout << "16.Sunflower oil \n";
cout << "17.Kerosene \n";
cout << "18.Oak \n";
cout << "19.Water \n";
  cin >> s;
  if (s == '1')
      c = 920;
  else if (s == '2')
      c = 2100;
  else if (s == '3')
      c = 460;
  else if (s == '4')
      c = 400;
  else if (s == '5')
      c = 2500;
  else if (s == '6')
      c = 500;
  else if (s == '7')
      c = 130;
  else if (s == '8')
      c = 230;
  else if (s == '9')
      c = 140;
  else if (s == '10')
      c = 140;
  else if (s == '11')
      c = 400;
  else if (s == '12')
      c = 400;
  else if (s == '13')
      c = 750;
  else if (s == '14')
      c = 840;
  else if (s == '15')
      c = 880;
  else if (s == '16')
      c = 1700;
  else if (s == '17')
      c = 2100;
  else if (s == '18')
      c = 2400;
  else if (s == '19')
      c = 4200;
cout << "Введите массу в кг \n";
  cin >> m;
cout << "Введите конечную температуру \n";
  cin >> t2;
cout << "Введите начальную температуру \n";
  cin >> t1;
  float Q;
  Q = c * m * (t2 - t1);
cout << "Количество теплоты равно:" << Q;
  return 0;
}
Добавлено через 37 минут
up4eg
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ggmann
 Аватар для ggmann
20 / 20 / 1
Регистрация: 06.10.2008
Сообщений: 173
11.12.2011, 22:51     Неправильно работает функция #2
потомучто ты используеш ' ' вместо " ".
замени ' ' на " "

Добавлено через 34 секунды
и еще почитай об switch операторе)
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
11.12.2011, 23:13     Неправильно работает функция #3
сделайте переменную s целым числом. И вместо ' ' просто пишите цифру
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
float cm()
{
    float c;
    float m;
    float t2;
    float t1;
    int s;
    cout << "Введите вещество на английском языке \n";
    cout << "1.Aluminium \n";
    cout << "2.Ice \n";
    cout << "3.Iron \n";
    cout << "4.Copper \n";
    cout << "5.Spirit \n";
    cout << "6.Steel \n";
    cout << "7.Gold \n";
    cout << "8.Tin \n";
    cout << "9.Lead \n";
    cout << "10.Mercury \n";
    cout << "11.Zinc \n";
    cout << "12.Brass \n";
    cout << "13.Graphite \n";
    cout << "14.Glass \n";
    cout << "15.Brick \n";
    cout << "16.Sunflower oil \n";
    cout << "17.Kerosene \n";
    cout << "18.Oak \n";
    cout << "19.Water \n";
    cin >> s;
    if (s == 1)
        c = 920;
    else if (s == 2)
        c = 2100;
    else if (s == 3)
        c = 460;
    else if (s == 4)
        c = 400;
    else if (s == 5)
        c = 2500;
    else if (s == 6)
        c = 500;
    else if (s == 7)
        c = 130;
    else if (s == 8)
        c = 230;
    else if (s == 9)
        c = 140;
    else if (s == 10)
        c = 140;
    else if (s == 11)
        c = 400;
    else if (s == 12)
        c = 400;
    else if (s == 13)
        c = 750;
    else if (s == 14)
        c = 840;
    else if (s == 15)
        c = 880;
    else if (s == 16)
        c = 1700;
    else if (s == 17)
        c = 2100;
    else if (s == 18)
        c = 2400;
    else if (s == 19)
        c = 4200;
    cout << "Введите массу в кг \n";
    cin >> m;
    cout << "Введите конечную температуру \n";
    cin >> t2;
    cout << "Введите начальную температуру \n";
    cin >> t1;
    float Q;
    Q = c * m * (t2 - t1);
    cout << "Количество теплоты равно:" << Q;
    return 0;
}
Добавлено через 52 секунды
и вообще, зачем возвращать float, если функция возвращает 0? сделайте void
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
11.12.2011, 23:23     Неправильно работает функция #4
Если float cm() - это отдельная функция, то она должна возвращать переменную типа float, а у Вас же

Цитата Сообщение от miha64 Посмотреть сообщение
C++
1
2
3
...
return 0;
}
Если не нужно ничего возвращать, то функцию надо переписать как void cm() и убрать из нее return 0;

Далее в тип char нельзя записать два символа. Нужно обращать на предупреждения компилятора.

В общем ошибки исправил, но такое количество cout и if else - это не дело.
Вместо этого можно использовать массивы или файлы, например.
Вот Ваш вариант немного подправленный.
Если будет интересно, как упростить Ваш код - покажу на примере массивов.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
using namespace std;
 
void cm() {
    float c;
    float m;
    float t2;
    float t1;
    unsigned short s;
    cout << "Введите вещество на английском языке \n";
    cout << "1.Aluminium \n";
    cout << "2.Ice \n";
    cout << "3.Iron \n";
    cout << "4.Copper \n";
    cout << "5.Spirit \n";
    cout << "6.Steel \n";
    cout << "7.Gold \n";
    cout << "8.Tin \n";
    cout << "9.Lead \n";
    cout << "10.Mercury \n";
    cout << "11.Zinc \n";
    cout << "12.Brass \n";
    cout << "13.Graphite \n";
    cout << "14.Glass \n";
    cout << "15.Brick \n";
    cout << "16.Sunflower oil \n";
    cout << "17.Kerosene \n";
    cout << "18.Oak \n";
    cout << "19.Water \n";
    cin >> s;
    if ( s == 1 )
        c = 920;
    else if ( s == 2 )
        c = 2100;
    else if ( s == 3 )
        c = 460;
    else if ( s == 4 )
        c = 400;
    else if ( s == 5 )
        c = 2500;
    else if ( s == 6 )
        c = 500;
    else if ( s == 7 )
        c = 130;
    else if ( s == 8 )
        c = 230;
    else if ( s == 9 )
        c = 140;
    else if ( s == 10 )
        c = 140;
    else if ( s == 11 )
        c = 400;
    else if ( s == 12 )
        c = 400;
    else if ( s == 13 )
        c = 750;
    else if ( s == 14 )
        c = 840;
    else if ( s == 15 )
        c = 880;
    else if ( s == 16 )
        c = 1700;
    else if ( s == 17 )
        c = 2100;
    else if ( s == 18 )
        c = 2400;
    else if ( s == 19 )
        c = 4200;
    cout << "Введите массу в кг \n";
    cin >> m;
    cout << "Введите конечную температуру \n";
    cin >> t2;
    cout << "Введите начальную температуру \n";
    cin >> t1;
    float Q;
    Q = c * m * ( t2 - t1 );
    cout << "Количество теплоты равно:" << Q;
}
 
int main() {
    cm(); // вызываем функцию
    return 0;
}
Опередили, пока писал пояснения.
miha64
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 34
11.12.2011, 23:45  [ТС]     Неправильно работает функция #5
Спасибо большое, но у меня в Вашем варианте в конце пишет "Количество теплоты равно:-2.8014e+007".
П.C. насчет массивов интересно, объясните если не сложно
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
12.12.2011, 00:38     Неправильно работает функция #6
А чем Вас не устраивает вывод? Это научный формат, на мой взгляд очень удобен.
Лучше бы использовать вместо массивов контейнерные типы. В данном случае я бы организовал вектор пар, но для Вас сделал на массивах, так как думаю, что этот вариант Вам будет понятнее.
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
42
43
44
45
46
47
48
#include <iostream>
#include <cstring>
using namespace std;
 
void cm() {
    double c, m, t2, t1, Q;
    unsigned short s;
    const int dimm = 19;
    //  с массивами это хорошо, но с контейнерными типами лучше
    // я бы тут организовал вектор пар, на мой взгляд это хорошее решение было бы
    const string arr[ dimm ] = {
            "Aluminium", "Ice", "Iron", "Copper", "Spirit", "Steel", "Gold",
            "Tin", "Lead", "Mercury", "Zinc", "Brass", "Graphite", "Glass",
            "Brick", "Sunflower oil", "Kerosene", "Oak", "Water" };
 
    const unsigned int arr_c[ dimm ] = {
            920, 2100, 460, 400, 2500, 500, 130, 230, 140, 140, 400, 400, 750,
            840, 880, 1700, 2100, 2400, 4200 };
 
    cout << "Выберете вещество из представленных вариантов и введите его номер "
            << endl;
    // печатаем вещества
    for ( int i = 0; i < dimm; ++i )
        cout << i + 1 << "." << arr[ i ] << endl;
 
    // считываем s
    cin >> s;
    // высчитываем c
    c = arr_c[ s - 1 ];
    // считываем данные далее
    cout << "Введите массу в кг \n";
    cin >> m;
    cout << "Введите конечную температуру \n";
    cin >> t2;
    cout << "Введите начальную температуру \n";
    cin >> t1;
    // считаем Q
    Q = c * m * ( t2 - t1 );
    // выводим результат
    cout.precision( 2 ); //точность два знака после запятой
    cout.setf(ios::fixed); // выводить в формате с фиксированной точкой (то есть nnn.ddd)
    cout << "Количество теплоты равно:" << Q;
}
 
int main() {
    cm(); // вызываем функцию
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
12.12.2011, 01:11     Неправильно работает функция #7
miha64, такое
Цитата Сообщение от amor1k Посмотреть сообщение
if (s == 1)
* * * * * * * * c = 920;
* * * * else if (s == 2)
* * * * * * * * c = 2100;
* * * * else if (s == 3)
* * * * * * * * c = 460;
* * * * else if (s == 4)
* * * * * * * * c = 400;
* * * * else if (s == 5)
* * * * * * * * c = 2500;
* * * * else if (s == 6)
* * * * * * * * c = 500;
* * * * else if (s == 7)
* * * * * * * * c = 130;
* * * * else if (s == 8)
* * * * * * * * c = 230;
* * * * else if (s == 9)
* * * * * * * * c = 140;
* * * * else if (s == 10)
* * * * * * * * c = 140;
* * * * else if (s == 11)
* * * * * * * * c = 400;
* * * * else if (s == 12)
* * * * * * * * c = 400;
* * * * else if (s == 13)
* * * * * * * * c = 750;
* * * * else if (s == 14)
* * * * * * * * c = 840;
* * * * else if (s == 15)
* * * * * * * * c = 880;
* * * * else if (s == 16)
* * * * * * * * c = 1700;
* * * * else if (s == 17)
* * * * * * * * c = 2100;
* * * * else if (s == 18)
* * * * * * * * c = 2400;
* * * * else if (s == 19)
* * * * * * * * c = 4200;
- обычно легко реализуется с помощью switch
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.12.2011, 01:22     Неправильно работает функция #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
обычно легко реализуется с помощью switch
Да с ума сойдёшь такое что цепочкой if, что со switch делать. Номера по порядку идут, что бы им индексами массива с соответствующими значениями не быть? В две строчки всё веселье поместится хоть для всей таблицы Менделеева...

Добавлено через 2 минуты
Только сейчас заметил - Roof вот так как-раз и сделал.
Я бы, правда, чуть по-другому делал
C
1
2
3
4
5
6
7
typedef struct PTELEMENT {
    char * name;
    int s_whatever_they_means;
} ptelement_t;
/*...*/
ptelement_t elements[NUM_ELEMENTS] = { { "Aluminium", 920 }, /*...*/ };
/*...*/
так бы дальше всё проще было...
-=ЮрА=-
Заблокирован
Автор FAQ
12.12.2011, 01:24     Неправильно работает функция #9
Цитата Сообщение от easybudda Посмотреть сообщение
Да с ума сойдёшь такое что цепочкой if, что со switch делать.
- я предполагал совсем начальные знания у ТС, поэтому и подсказал за switch.
miha64
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 34
12.12.2011, 16:44  [ТС]     Неправильно работает функция #10
Спасибо большое, но в вашем коде компилятор ругается на строку
cout << i + 1 << "." << arr[ i ] << endl;
И хотелось бы узнать как привести результат в нормальный вид
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
12.12.2011, 17:07     Неправильно работает функция #11
В моем коде мой компилятор ни на что не ругается.
Проверяйте код посимвольно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2011, 17:55     Неправильно работает функция
Еще ссылки по теме:

Неправильно работает функция string::find_last_of C++
Почему функция atanh работает неправильно? C++
Неправильно работает функция strcmp c русскими буквами C++

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

Или воспользуйтесь поиском по форуму:
miha64
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 34
12.12.2011, 17:55  [ТС]     Неправильно работает функция #12
Ок, посмотрю, компилятор Visual c++ 2010
Yandex
Объявления
12.12.2011, 17:55     Неправильно работает функция
Ответ Создать тему
Опции темы

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