Как научиться быстро понимать похожий код?

Имеется код, сортирующий 3 числа по возрастанию.
int main()
{
    int A,B,C;
    while(true)
    {
        cout<<"Enter A : ";cin>>A;
        cout<<"Enter B : ";cin>>B;
        cout<<"Enter C : ";cin>>C;
        if(C < A)
        {
            C = A + C;
            A = C - A;
            C = C - A;
        }
        if(B < A)
        {
            B = A + B;
            A = B - A;
            B = B - A;
        }
        if(C < B)
        {
            C = B + C;
            B = C - B;
            C = C - B;
        }
        cout<<"Sorted numbers :\n"
            <<A<<" "<<B<<" "<<C
            <<endl;
    }
    return 0;

Мне не сразу становится очевидно как подобный код работает. Спустя несколько минут я разобрался, но потраченное время на разбор простого кода огорчает. Следовательно вопрос: что нужно прочитать\изучить, чтобы "щелкать" похожий код за пару секунд? С математикой(линейной и дискретной) проблем не было, всегда любил решать математические задачи, просто может быть знаний маловато? Или из-за редких вычислений мозг обленился?
  • Вопрос задан
  • 918 просмотров
Решения вопроса 1
@Beltoev
Живу в своё удовольствие
... просто может быть знаний маловато?
Если быть точнее - маловато практики. Для данного примера много знаний как бы и не нужно, хватит базового владения синтаксисом.

Чаще программируйте и такой код будете легко воспринимать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
tlito
@tlito
drupal, c++, seo
не только у вас так. для нормальных программистов существует правило
программа без комментариев и документации - это безделушка никому не нужная.
в данном примере программист позаботился не организовать лишнюю переменную и меняет местами переменные путем перетасовок данных внутри них. это конечно его выбор, но оттого программа и становится непонятной.
в этом коде нет комментариев, а и алгоритм на мой взгляд не лучший и не самый понятный.
если хотите этот код можно было бы реализовать так:

#include <iostream>
using namespace std;

int main()
{
    int A,B,C;
    cout << "Программа сортировка по возрастанию\n";
    cout << "Введите три целых числа через пробел:\n";
    cin >> A >> B >> C;
    //opredelyaem poryadok sortirovki
    if (A > B) {
        if (B > C) {
          // A > B > C
          //poryadok ostaetsa pryamym
          //nichego ne delat
        } else {
            if (A > C) {
                // A > C > B
                //menyaem B i C
                B += C;
                C = B - C;
                B -= C;
            } else {
                // C > A > B
                //menyaem A i C, potom B i C
                A += C;
                C = A - C;
                A -= C;

                B += C;
                C = B - C;
                B -= C;
            }
        }
    } else {
        //esli A < B
        if (A > C) {
            // B > A > C
            //menyaem tolko A i B
            B += A;
            A = B - A;
            B -= A;
        } else {
            if (B > C) {
                // B > C > A
                //menyaem C i A, i potom A i B
                C += A;
                A = C - A;
                C -= A;

                B += A;
                A = B - A;
                B -= A;
            } else {
                // C > B > A
                // menyaem A i C
                C += A;
                A = C - A;
                C -= A;
            }
        }
    }
    cout << "По возрастанию: \n";
    cout << C << " " << B << " " << A;
    return 0;
}


признаю, код в вопросе лучше чем в этом ответе. но тут хотя бы комментарии
Ответ написан
@abcd0x00
Рисуй блок-схемы, сначала на бумаге (обязательный этап), потом в голове.

Так ты легко выделишь всего один кусок
//
        if(C < A)
        {
            C = A + C;
            A = C - A;
            C = C - A;
        }

и поймёшь, что он везде повторяется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы