Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Flaker
2 / 2 / 1
Регистрация: 07.07.2012
Сообщений: 90
#1

Intialization problem

07.07.2012, 18:31. Просмотров 603. Ответов 12
Метки нет (Все метки)

Доброго времени суток.
Изучаю C++ вот уже 50 минут, решил попробовать написать программу, которая из 3 введеных чисел, определяет, какое из них самое большое, среднее и самое маленькое.
Без цикла While программа работала нормально вроде, но после каждого вычисления приходилось ее перезапускать.
Внес бесконечный цикл while, что бы не нужно было перезапускать программу после каждого действия.

Возникли такие ошибки:

В первом шаге цикла вычисляет все нормально, а во втором ошибки:
Run-Time Check Failure #3 - The variable 'max' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'mdl' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'min' is being used without being initialized.


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
#include <iostream>
using namespace std;
 
int main(){
    setlocale(0, "");
    char contin = 'y';
 
    int a,b,c;
    int max,mdl,min;
 
    while ( contin == 'y' ) {
 
        cout << "Введи 3 числа, через пробел:";
        cin >> a >> b >> c;
 
        if ( a > b ) {
            if ( a > c ) {
                max = a;
                if ( b > c ) {
                    mdl = b;
                    min = c;
                } else if ( c > b ) { 
                    mdl = c;
                    min = b;
                }
            } else if ( c > a ) {
                max = c;
                mdl = a;
                min = b;
            }
        } else if ( b > a ) {
            if ( c > a ) {
                min = a;
                if ( c > b ) {
                    mdl = b;
                    max = c;
                } else {
                    mdl = c;
                    max = b;
                }
            }
        }
 
        cout << "Максимальное число: " << max << endl;
        cout << "Среднее число: " << mdl << endl;
        cout << "Минимальное число: " << min << endl;
    }
    
 
    system("pause");
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2012, 18:31
Ответы с готовыми решениями:

Problem : pow
Для натуральных чисел a и n вычислить an. Ввод В первой строке находятся...

Problem - Undefined reference to
Доброго времени суток и спасибо заранее за Вашу помощь. В качестве хобби...

Возникла problem по классам
#include &quot;Sales_item.h&quot; #include &lt;iostream&gt; using namespace std; int...

В чем problem ребята?
C:\Program Files\Microsoft Visual Studio\MyProjects\1\2.cpp(3) : error C2146:...

Problem - switch - не работает break
Возникла проблема со switch. Всегда при вводе символа выполняется и case, и...

12
Schizorb
510 / 462 / 82
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
07.07.2012, 19:18 #2
C++
1
2
if ( a > b ) ....
else if ( b > a )
А если a == b, то что? Тогда в переменных max, mdl, min остается мусор. Правда это должно выясниться уже на первом шаге цикла.
0
Flaker
2 / 2 / 1
Регистрация: 07.07.2012
Сообщений: 90
07.07.2012, 19:58  [ТС] #3
Спасибо. Щас попробую исправить.

Странный вопросик, но почему я немогу сделать название темы примерно такое: "Проблема инициализации"... пишет, что нельзя использовать русские и английские символы в названии темы.


Во время выполнения запроса произошли ошибки, возможные причины:
Слова, указанные в заголовке темы, находятся в списке запрещенных
Использование русских и английских символов в одном слове запрещено
Проблема

Вернитесь назад и исправьте ошибки
0
alsav22
5439 / 4834 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2012, 05:55 #4
Цитата Сообщение от Flaker Посмотреть сообщение
В первом шаге цикла вычисляет все нормально, а во втором ошибки:
Получается, что наоборот. В первом цикле, если вводится два равных числа, будет переход от 14 строки к 44 и попытка вывода неинициализированных переменных max, min, mdl. Если же после 14 будет заход в какой-либо из if, то переменные инициализируются и ошибок в следующих циклах while уже не будет.
0
Catstail
Модератор
23550 / 11660 / 2040
Регистрация: 12.02.2012
Сообщений: 19,019
08.07.2012, 13:40 #5
Хочу предложить более лаконичный код:

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
#include "iostream.h"
 
int max(int a, int b)
{
    return (a > b) ? a : b;
}
 
int min(int a, int b)
{
    return (a < b) ? a : b;
}
 
int main(int argc, char* argv[])
{
    
   int x,y,z,mmax,mmin,mmid;
 
   cout << "Enter 3 numbers" << endl;
 
   cin >> x >> y >> z;
 
    mmax=max(max(x,y),z);
    mmin=min(min(x,y),z);
 
    mmid=z;
    
    if ((mmax > x) && (mmin < x)) mmid=x;
    if ((mmax > y) && (mmin < y)) mmid=y;
 
    cout << "Max: " << mmax << endl;
    cout << "Min: " << mmin << endl;
    cout << "Mid: " << mmid << endl;
 
    return 0;
}
1
Flaker
2 / 2 / 1
Регистрация: 07.07.2012
Сообщений: 90
08.07.2012, 15:56  [ТС] #6
Catstail, спасибо, крайне интересный код.
Только я не все понимаю в нем. Немог бы ты коментариями подрепить, если не сложно.

Непонятки:
Что возвращают функции max и min?
Вернее я понял что они возвращают максимальное или минимальное из 2 данных чисел, но как?

return (a > b) ? a : b;
что значит знак вопроса? и двоеточие?
Немог бы ты расшифровать именно этот return?
0
Catstail
Модератор
23550 / 11660 / 2040
Регистрация: 12.02.2012
Сообщений: 19,019
08.07.2012, 16:08 #7
Операция "?" - это тернарная (трехоперандная) операция в С/C++.

Общий ее вид таков:

Условие ? Если_истинно : Если_ложно

Работает она так:

1) Вычисляется условие.
2) Если оно истинно, то вычисляется выражение "Если_истинно"
3) Иначе вычисляется выражение "Если_ложно"

В обоих случаях результат всей операции будет равен значению вычисленного выражения.

Например: пусть x=7; тогда: (x >= 7) ? x*x : x-3 при вычислении даст 49.

Поскольку операция возвращает результат, то ее можно употреблять, например в операторе return.
Получается очень лаконичная, сишная по духу запись.

Остальное должно быть понятно. функции min и max возвращают минимум и максимум из двух чисел. А их повторное применение к максимуму (минимуму) из двух и третьему - дает максимуму (минимуму) из трех чисел.
0
Flaker
2 / 2 / 1
Регистрация: 07.07.2012
Сообщений: 90
08.07.2012, 16:55  [ТС] #8
Спасибо) Вроде все понял...
Нашел баг кстати:
При вводе 9 9 3, выдает 9 3 3
0
Catstail
Модератор
23550 / 11660 / 2040
Регистрация: 12.02.2012
Сообщений: 19,019
08.07.2012, 18:08 #9
Это не баг. В данном случае непонятно, что считать "средним"...
0
Flaker
2 / 2 / 1
Регистрация: 07.07.2012
Сообщений: 90
08.07.2012, 18:09  [ТС] #10
Как это наилучшим образом исправить?
0
Catstail
Модератор
23550 / 11660 / 2040
Регистрация: 12.02.2012
Сообщений: 19,019
08.07.2012, 18:34 #11
Зависит от постановки задачи.
1
xADMIRALx
67 / 61 / 5
Регистрация: 09.06.2012
Сообщений: 291
08.07.2012, 19:19 #12
Можна проста поставить проверку что бы не было совподений.. или же если числа похожи то 1 из них ++
1
Catstail
Модератор
23550 / 11660 / 2040
Регистрация: 12.02.2012
Сообщений: 19,019
08.07.2012, 20:50 #13
Да, что-нибудь в этом роде.
0
08.07.2012, 20:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2012, 20:50

Problem with passing a list variable by a reference
Здравствуйте. Не знал, как нормально сформулировать заглавие на русском! :D В...

Problem 2: Connect the Cows [Brian Dean, 2012]
Problem 2: Connect the Cows Каждый день Фермер Джон обходит свою ферму,...

Problem with Visual Studio 10
Начал писать на OpenGL написал инициализацию (писал без тестовых компиляций)...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru