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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
#1

Intialization problem - C++

07.07.2012, 18:31. Просмотров 569. Ответов 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");
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2012, 18:31     Intialization problem
Посмотрите здесь:

Problem C++ Builder
Problem Pascal
Delphi problem with image
C++ В чем problem ребята?
Problem : pow C++
C++ Problem 2: Connect the Cows [Brian Dean, 2012]
C++ Возникла problem по классам
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
07.07.2012, 19:18     Intialization problem #2
C++
1
2
if ( a > b ) ....
else if ( b > a )
А если a == b, то что? Тогда в переменных max, mdl, min остается мусор. Правда это должно выясниться уже на первом шаге цикла.
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
07.07.2012, 19:58  [ТС]     Intialization problem #3
Спасибо. Щас попробую исправить.

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


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

Вернитесь назад и исправьте ошибки
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2012, 05:55     Intialization problem #4
Цитата Сообщение от Flaker Посмотреть сообщение
В первом шаге цикла вычисляет все нормально, а во втором ошибки:
Получается, что наоборот. В первом цикле, если вводится два равных числа, будет переход от 14 строки к 44 и попытка вывода неинициализированных переменных max, min, mdl. Если же после 14 будет заход в какой-либо из if, то переменные инициализируются и ошибок в следующих циклах while уже не будет.
Catstail
Модератор
22140 / 10614 / 1728
Регистрация: 12.02.2012
Сообщений: 17,660
08.07.2012, 13:40     Intialization problem #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;
}
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
08.07.2012, 15:56  [ТС]     Intialization problem #6
Catstail, спасибо, крайне интересный код.
Только я не все понимаю в нем. Немог бы ты коментариями подрепить, если не сложно.

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

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

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

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

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

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

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

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

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

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

Windows 7 Windows 7 ЦП problem
Problem CPU
C++ Problem - Undefined reference to
C++ Problem - switch - не работает break
C++ Problem with passing a list variable by a reference

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

Или воспользуйтесь поиском по форуму:
Catstail
Модератор
22140 / 10614 / 1728
Регистрация: 12.02.2012
Сообщений: 17,660
08.07.2012, 20:50     Intialization problem #13
Да, что-нибудь в этом роде.
Yandex
Объявления
08.07.2012, 20:50     Intialization problem
Ответ Создать тему
Опции темы

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