Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 02.12.2011
Сообщений: 34

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

11.12.2011, 22:47. Показов 1259. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема заключается в том, что в случае, если пользователь вводит числа от 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
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2011, 22:47
Ответы с готовыми решениями:

Неправильно работает функция gets( )
..... char *str = new char; gets( str ); printf( &quot;%s&quot;, str ); .....

Неправильно работает функция
You are given natural number n. Calculate 12+22+...+n2. Example Input Output 2 5 Добавлено через 1 минуту #include...

Неправильно работает функция
void FreeTop( Tree *&amp;tree ) { if( tree-&gt;d == NULL )delete tree; else FreeTop( tree-&gt;d ); } это моя функция освобождения...

11
 Аватар для ggmann
21 / 21 / 7
Регистрация: 06.10.2008
Сообщений: 173
11.12.2011, 22:51
потомучто ты используеш ' ' вместо " ".
замени ' ' на " "

Добавлено через 34 секунды
и еще почитай об switch операторе)
0
Студент
 Аватар для amor1k
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
11.12.2011, 23:13
сделайте переменную 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
0
 Аватар для Roof
155 / 155 / 44
Регистрация: 03.11.2010
Сообщений: 393
11.12.2011, 23:23
Если 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;
}
Опередили, пока писал пояснения.
0
0 / 0 / 1
Регистрация: 02.12.2011
Сообщений: 34
11.12.2011, 23:45  [ТС]
Спасибо большое, но у меня в Вашем варианте в конце пишет "Количество теплоты равно:-2.8014e+007".
П.C. насчет массивов интересно, объясните если не сложно
0
 Аватар для Roof
155 / 155 / 44
Регистрация: 03.11.2010
Сообщений: 393
12.12.2011, 00:38
А чем Вас не устраивает вывод? Это научный формат, на мой взгляд очень удобен.
Лучше бы использовать вместо массивов контейнерные типы. В данном случае я бы организовал вектор пар, но для Вас сделал на массивах, так как думаю, что этот вариант Вам будет понятнее.
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;
}
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
12.12.2011, 01:11
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
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
12.12.2011, 01:22
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
обычно легко реализуется с помощью 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 }, /*...*/ };
/*...*/
так бы дальше всё проще было...
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
12.12.2011, 01:24
Цитата Сообщение от easybudda Посмотреть сообщение
Да с ума сойдёшь такое что цепочкой if, что со switch делать.
- я предполагал совсем начальные знания у ТС, поэтому и подсказал за switch.
0
0 / 0 / 1
Регистрация: 02.12.2011
Сообщений: 34
12.12.2011, 16:44  [ТС]
Спасибо большое, но в вашем коде компилятор ругается на строку
cout << i + 1 << "." << arr[ i ] << endl;
И хотелось бы узнать как привести результат в нормальный вид
0
 Аватар для Roof
155 / 155 / 44
Регистрация: 03.11.2010
Сообщений: 393
12.12.2011, 17:07
В моем коде мой компилятор ни на что не ругается.
Проверяйте код посимвольно.
0
0 / 0 / 1
Регистрация: 02.12.2011
Сообщений: 34
12.12.2011, 17:55  [ТС]
Ок, посмотрю, компилятор Visual c++ 2010
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2011, 17:55
Помогаю со студенческими работами здесь

Неправильно работает функция
Господа, написал следующий код, цель - заполнить имеющийся вектор структур данными из файла + вывести количество символа @ Проблема...

Функция scanf() неправильно работает
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; int main() { unsigned char c1, c2; bool b=true; while (b==true)...

Неправильно работает функция replace()?
Нужно написать программу, которая заменяет в строке символ '/' на строку &quot;&quot;. Ниже дан цикл, в котором это происходит. Но замена почему-то...

Неправильно работает функция CArray.Add()
Вобщем вызываю CellAr.Add(DictCell(&quot;sda&quot;,823)) но в сам массив записывается объект созданный конструктором без параметров, хотя через...

Почему функция atanh работает неправильно?
Задание http://content-15.foto.my.mail.ru/mail/megabayt_m/_answers/i-359.jpg Кусок кода for (double X = Xn; X &lt;= Xk; X += dX) { ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru