Member 14765979 Ответов: 3

Возможно ли иметь такой код?


не могли бы вы сказать мне, пожалуйста, почему это возможно иметь такие коды?
#include <iostream>

using namespace std;

int main()
{
    int arr[4][4];
    int a, b;
    int temp;
    cout << "Enter four numbers: \n";
    for (a=0; a<4; a++)
    {
        cin >> arr[a][a];  >especially in this case is it alright to have code like this and why? because i was so confuse why is it okay to have a code like that  
    }
    cout << endl;
    cout <<"Even numbers: \n";
    for (a=0;a<4;a++)
    {
        if (arr[a][a]%2==0)
        {
            cout << arr[a][a]<<endl;
        }
    }
    cout << endl;
    cout << "Highest to lowest: "<< endl;
    for (a=0; a<4;a++)
    {
        for (b=a+1;b<4;b++)
        {
            if (arr[a][a]<arr[b][b])
            {
                temp=arr[a][a];  >and also can you please explain how sorting works? 
                arr[a][a]=arr[b][b];
                arr[b][b]=temp;
            }
        }
    }
    for(a=0;a<4;a++)
    {
        if (arr[a][a]%2==0)
        {
            cout<<arr[a][a]<<endl;
        }
    }
    return 0;
}
I'm sorry if I ask too much because I was a beginner in programming :< thank you


Что я уже пробовал:

Я пробовал этот код, но не ожидал, что он будет работать

Patrice T

Откуда у тебя этот код ?

jusjua

Я просто сделал его сам, потому что это было лабораторное занятие в моей школе

3 Ответов

Рейтинг:
1

OriginalGriff

Просто потому, что вы выделяете массив 4 x 4 (16 элементов), это не означает, что вы должны их использовать - компилятор не знает (или не заботится), что вы этого не делаете, пока все элементы, к которым вы пытаетесь получить доступ, находятся в блоке 4 x 4:

0, 0  0, 1  0, 2  0, 3
1, 0  1, 1  1, 2  1, 3
2, 0  2, 1  2, 2  2, 3
3, 0  3, 1  3, 2  3, 3
И причина, по которой ему все равно, проста: он понятия не имеет, закончили ли вы свой код или написали его немного, проверяете, что он работает, и расширит количество элементов, которые вы используете позже с дополнительным кодом, когда все будет в порядке. Это разумный способ делать вещи - я делаю это все время, пишу немного, проверяю это, пишу еще немного, проверяю это, повторяю.

Так что да, ваш код может быть проще:
int arr[4];
    int a, b;
    int temp;
    cout << "Enter four numbers: \n";
    for (a=0; a<4; a++)
    {
        cin >> arr[a];
    }
    cout << endl;
    cout <<"Even numbers: \n";
    for (a=0;a<4;a++)
    {
        if (arr[a]%2==0)
        {
            cout << arr[a]<<endl;
        }
    }
    cout << endl;
Но совершенно справедливо написать более сложный код, который делает то же самое!


Рейтинг:
0

phil.o

Вполне допустимо использовать одно и то же значение для обоих измерений двумерного массива. При условии, что это значение является допустимым индексом в обоих измерениях.
Здесь, a переменная получает последовательные значения 0, 1, 2 и 3; это приводит к доступу соответственно a[0][0], a[1][1], a[2][2] и a[3][3] Почему вы думаете, что это не должно работать?


Member 14765979

потому что я не ожидал, что он будет работать

phil.o

Да, именно это вы и сказали. Мой вопрос: почему вы не ожидаете, что он будет работать? Почему вы считаете это неправильным?

jusjua

О, потому что я новичок и всегда думаю, что 2d массив совместим только в этом коде, как этот arr[a][b], поэтому, когда я попробовал код arr[a][a], я был смущен и в то же время счастлив, потому что программа принимает мой код

phil.o

a и b являются просто переменными; логически, arr[a][a] и arr[a][b] эквивалентны всякий раз, когда a == b Здесь использование одного и того же значения для обоих измерений просто означает, что вы получаете доступ к элементам диагонали квадратной матрицы, представленной массивом (см. Решение 2 для графического представления).
Единственное ограничение к a и b заключается в том, что они должны быть допустимым индексом в массиве. В частности, они должны быть больше или равны нулю и меньше числа элементов в соответствующем измерении.

Member 14765979

так можно ли так кодировать в cin>>arr[a][a]?

phil.o

Так долго как a это допустимый индекс в обоих измерениях, это нормально.

Member 14765979

большое вам спасибо :D

Рейтинг:
0

Greg Utas

Вы также спрашивали о сортировке. Алгоритм, который вы используете, называется пузырьковой сортировкой[^]. Связанная статья содержит ссылки на другие статьи, описывающие другие методы сортировки.