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

Объяснить часть кода - C++

Восстановить пароль Регистрация
 
Aecttann
 Аватар для Aecttann
6 / 6 / 0
Регистрация: 19.10.2013
Сообщений: 272
21.12.2013, 17:07     Объяснить часть кода #1
Программка заполняет матрицу случайными числами и отображает правую половину матрицы на левую зеркально симметрично относительно вертикальной оси.
Подскажите пожалуйста, для чего нужна данная строка:

C++
1
for (j = m >> 1; j < m; j++)
и где именно в коде происходит отображение относительно вертикальной оси, а не, допустим, горизонтальной.

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
#include <iostream>
#include <cstdlib>
#include <locale.h>
#include <time.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
    srand(time(NULL));
 
    int n, m, i, j;
 
    cout << "Введите количество строк " << endl;
    cin >> n;
    cout << "Введите количество столбцов" << endl;
    cin >> m;
 
    int** matr = new int*[n];
    for (i = 0; i < n; i++)
        matr[i] = new int[m];
 
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            matr[i][j] = rand() % 100;
 
    cout << "Начальная матрица: " << endl;
    for (i = 0; i < n; i++, cout << endl)
        for (j = 0; j < m; j++)
            cout << matr[i][j] << " ";
 
    for (i = 0; i < n; i++)
        for (j = m >> 1; j < m; j++)
            matr[i][m - j - 1] = matr[i][j];
 
    cout << "Конечная матрица: " << endl;
    for (i = 0; i < n; i++, cout << endl)
        for (j = 0; j < m; j++)
            cout << matr[i][j] << " ";
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
21.12.2013, 17:14     Объяснить часть кода #2
Цитата Сообщение от Aecttann Посмотреть сообщение
j = m >> 1
побитовый сдвиг направо
было 1(1) стало 0(0)
было 10(2) стало 1(1)
было 11(3) стало 1(1)
было 100(4) стало 10(2)
было 101(5) стало 10(2)
было 110(6) стало 11(3)

Добавлено через 36 секунд
память у вас не освобождается.
Надо delete[] дописать в конце программы.
Aecttann
 Аватар для Aecttann
6 / 6 / 0
Регистрация: 19.10.2013
Сообщений: 272
21.12.2013, 17:24  [ТС]     Объяснить часть кода #3
Цитата Сообщение от MrGluck Посмотреть сообщение
побитовый сдвиг направо
было 1(1) стало 0(0)
было 10(2) стало 1(1)
было 11(3) стало 1(1)
было 100(4) стало 10(2)
было 101(5) стало 10(2)
было 110(6) стало 11(3)
Спасибо

а для чего эта строка?
C++
1
matr[i][m - j - 1] = matr[i][j];
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
21.12.2013, 17:24     Объяснить часть кода #4
Цитата Сообщение от Aecttann Посмотреть сообщение
matr[i][m - j - 1] = matr[i][j];
симметричное отображение элементов i-ой строки
Yandex
Объявления
21.12.2013, 17:24     Объяснить часть кода
Ответ Создать тему
Опции темы

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