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

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

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

Intialization problem - C++

07.07.2012, 18:31. Просмотров 577. Ответов 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 : pow - C++
Для натуральных чисел a и n вычислить an. Ввод В первой строке находятся разделённые пробелом a и n. Вывод Выводится одно число...

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

Возникла problem по классам - C++
#include &quot;Sales_item.h&quot; #include &lt;iostream&gt; using namespace std; int main() { Sales_item book; cin &gt;&gt;...

В чем problem ребята? - C++
C:\Program Files\Microsoft Visual Studio\MyProjects\1\2.cpp(3) : error C2146: syntax error : missing ';' before identifier 'main' ...

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

Problem with passing a list variable by a reference - C++
Здравствуйте. Не знал, как нормально сформулировать заглавие на русском! :D В общем такая проблема. Есть C++ Win32 Empty Project...

Problem 2: Connect the Cows [Brian Dean, 2012] - C++
Problem 2: Connect the Cows Каждый день Фермер Джон обходит свою ферму, чтобы проведать N (1 &lt;= N &lt;= 10) своих коров. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
509 / 461 / 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
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 90
07.07.2012, 19:58  [ТС]     Intialization problem #3
Спасибо. Щас попробую исправить.

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


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

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

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

return (a > b) ? a : b;
что значит знак вопроса? и двоеточие?
Немог бы ты расшифровать именно этот return?
Catstail
Модератор
22515 / 10920 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
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
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 90
08.07.2012, 16:55  [ТС]     Intialization problem #8
Спасибо) Вроде все понял...
Нашел баг кстати:
При вводе 9 9 3, выдает 9 3 3
Catstail
Модератор
22515 / 10920 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
08.07.2012, 18:08     Intialization problem #9
Это не баг. В данном случае непонятно, что считать "средним"...
Flaker
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 90
08.07.2012, 18:09  [ТС]     Intialization problem #10
Как это наилучшим образом исправить?
Catstail
Модератор
22515 / 10920 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
08.07.2012, 18:34     Intialization problem #11
Зависит от постановки задачи.
xADMIRALx
67 / 61 / 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
Еще ссылки по теме:

Problem - Pascal
George likes arithmetics very much. Especially he likes the integers series. His most favourite thing is the infinite sequence of digits,...

Problem - C++ Builder
New-&gt;Other-&gt;File CPP пишу код cout&lt;&lt;&quot;ll&quot;; getch(); и никак запустить не могу. при F9 реакция ноль. при Ctrl+F9(in memory to...

Problem CPU - Процессоры
Привет, друзья! Вчера купил процессор (t7300) на свой ноутбук asus x51l. Температура чуть выше моего старого t2390. При обычной...

problem with image - Delphi
Как случайно загрузить одну из трьох картинок в Image?

Windows 7 ЦП problem - Windows 7
Проблема такая: Компьютер работает хорошо, ничего не виснет и т.д. При включении любой игры ЦП прыгает до 90% и не сползает. Не знаю...


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

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

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