Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 73
07.11.2017, 16:24  [ТС] 1
Author24 — интернет-сервис помощи студентам
Здраствуйте! Суть задания была в том, чтобы отобразить правую половину матрицы на левую зеркально симметрично относительно вертикальной оси.
Но как же её сделать универсальнее, чтобы при более большом массиве, например, 20х20 программа работала?

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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    int a = 3, b = 3, x, y;
    int masiv[3][3];
    cout << "Random matrix: \n";
    for (x = 0; x<a; x++) {
        for (y = 0; y<b; y++) {
            masiv[x][y] = rand() % 100;
            cout << masiv[x][y] << "\t";
        }
        cout << "\n";
    }
    cout << "\nSymmetric matrix: \n";
    for (x = 0; x<a; x++) {
        for (y = 0; y<b; y++) {
            switch (y) {
            case 0:
                masiv[x][0] = masiv[x][2];
                break;
            // Множество "Case" не вариант
            }
            cout << masiv[x][y] << "\t";
        }
        cout << "\n";
    }
 
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
07.11.2017, 16:46 2
Цитата Сообщение от Desolar Посмотреть сообщение
чтобы при более большом массиве, например, 20х20 программа работала?
Сделать массив динамическим, например
0
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 73
07.11.2017, 19:18  [ТС] 3
MrGluck, хм, достаточно скудные у меня знания сишки, да и за рамки учебной программы не могу выходить. Есть ещё альтернативы?
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
07.11.2017, 19:20 4
Увеличьте размер массива в 8й строке. Например

C++
1
int masiv[20][20];
Сделайте возможность a и b задавать с клавиатуры.
0
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 73
07.11.2017, 19:29  [ТС] 5
QuakerRUS, я об этом думал, но мне интересен именно момент переноса правой части зеркально на левую при большом массиве, а не удобность ввода значений. Или может я вас не до конца понимаю? Ибо думаю, что нужно менять программу с 20 строки.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.11.2017, 19:40 6
Замените 22 строку на
C++
1
massiv[x][y] = massiv[x][b-1-y];
switch не нужен. Возможно нужны другие изменения, какие - подумайте.
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
07.11.2017, 19:46 7
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>
#include <iomanip>
#include <cstdlib>
using namespace std;
 
int main()
{
    int a = 20, b = 20, x, y, t;
    int masiv[20][20];
    cout << "Random matrix: \n";
    for (x = 0; x < a; x++) {
        for (y = 0; y < b; y++) {
            masiv[x][y] = rand() % 100;
            cout << setw(3) << masiv[x][y];
        }
        cout << "\n";
    }
    for (x = 0; x < a; x++)
        for (y = 0; y < b / 2; y++)
        {
            t = masiv[x][y];
            masiv[x][y] = masiv[x][b - y - 1];
            masiv[x][b - y - 1] = t;
        }
    cout << "\nSymmetric matrix: \n";
    for (x = 0; x<a; x++) {
        for (y = 0; y<b; y++) {
            cout << setw(3) << masiv[x][y];
        }
        cout << "\n";
    }
 
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 73
07.11.2017, 20:22  [ТС] 8
QuakerRUS, спасибо. Достаточно интересно получилось, она ещё делает симметрию с левой части на правую, но с этим я уже разберусь.
Кстати, в 19 строке, если я правильно понял "b/2" определяет середину матрицы? Ибо как раз думал над этим после сообщения likehood.
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
07.11.2017, 20:24 9
Desolar, да, все верно.
0
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru