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

Сделать симметричную матрицу несимметричной. Где ошибка? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В чем ошибка? http://www.cyberforum.ru/cpp-beginners/thread1072997.html
#include <iostream.h> #include <conio.h> #include <stdio.h> class Okno{ int verhni_levui; int pravu_nigni; char* svet_fona; public: Okno(){
C++ дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не сим помогите пожалуйста. условие: дана квадратичная матрица z. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не симметричной, сдвинув строку, содержащую элемент с максимальным значением на 1 элемент вправо. сижу уже который день. то условие проверки не работает, то еще что-то. совсем не получается. помогите пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread1072988.html
Комбинации C++
Здраствуйте форумчани. Столкнулся с проблемой что немогу решить головоломку. Допустим у нас есть строка символ AAB. В результате программа должна показать такой результат: AAB ABA BAA Подкиньте идею как это можно реализовать. Я уже написал программу которая показывает все возможные варианты если в строке символ все элементы уникальные - ABC. char sym = {'A','B','C'}; int i = {0,0,0}; ...
C++ Стиль автора
Доброго времени суток дорогие друзья, очень вас прошу о помощи. Известно, что одной из характеристик стиля автора является длина предложений. Дан текст, состоящий их нескольких предложений, записанных на n строках. Определить среднее количество слов в предложении. Первое слово предложения записывается с прописной буквы, а заканчивается предложение одним из следующих знаков препинания: "." ,...
C++ Builder Очистка StringGrid-а кроме первой строки и первого столбца http://www.cyberforum.ru/cpp-beginners/thread1072950.html
Мне нужно очистить таблицу, но чтобы первая строка и первый столбик оставались нетронутыми. Я смог добиться только чтобы не удалялась первая строка, помогите доработать код. for(int i=0;i<StringGrid1->RowCount;i++) { StringGrid1->Rows->Clear(); }
C++ Сортировка матрицы (С++ Builder 6) Всем доброго времени суток, прошу вашей помощи. Задание: Заменить столбец с минимальным числом нулей на столбец с элементами из заданного массива Х размером m. #include <stdio.h> // подключение библиотеки ввода/вывода #include <conio.h> // подключение библиотеки консольного ввода/вывода #include <math.h> // подключение математической библиотеки main() { int a, n, m, b; //... подробнее

Показать сообщение отдельно
ldenush
1 / 1 / 2
Регистрация: 17.02.2013
Сообщений: 12
18.01.2014, 11:45     Сделать симметричную матрицу несимметричной. Где ошибка?
Заинтересовался вашей задачей. Захотелось решить. Никаких премудростей здесь нет,
так как изучаю с++ всего несколько недель, может где-то можно программу сократить или улучшить.
Код может выглядит и не очень, но для введенных мною нескольких значений выдает верные результаты.

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
using namespace std;
 
const int N = 4;           //объявляем константу, выражающую количество строк и столбцов
void outM(int [N][N]);      //объявляем функцию вывода матрицы на экран
void sdvig(int [N][N]);     //объявляем функция сдвига строки с максимальным элементом
bool compareSim(int [N][N]);    //объявляем функцию, сравнивающую исходную матрицу и транспонированную
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int a[N][N] = {{1, 9, 3, 3},    //инициализация матрицы
                   {9, 7, 6, 5},    //
                   {3, 6, 7, 1},    //
                   {3, 5, 1, 2}};   //
    bool comp;          //переменная, которая скажет нам, симметрична матрица или нет
 
    cout << "Дана исходная матрица: " << endl;
    outM(a);            // вызов функции(вывод матрицы на экран)
 
    comp = compareSim(a);       //вызов ф-ции(сравнение обычной матрицы и транспонированной)
    if ( comp == 1)
        cout << "Матрица симметрична" << endl;
    else
        cout << "Матрица не симметрична" << endl;
 
    if (comp == 1)
    sdvig(a);     //вызов ф-ции(если матрица симметрична, сдвигает строку с максимальным значением)
 
    system("pause");
    return 0;
}
 
void outM(int mas[N][N])       // обычный вывод на экран
{
    for (int i = 0; i < N; i ++)
    {
        for (int j = 0; j < N; j++)
            cout << mas[i][j] << ' ';
        cout << endl << endl;
    }
}
 
 
bool compareSim(int A[N][N])            
{                                       // сравниваем каждый элемент обычной
    for (int i = 0; i < N; i++)         // матрицы c  симметричным ему элементом 
        for (int j = 0; j < N; j++)     // транспонированной матрицы
        {                               
            if (A[i][j] != A[j][i])     // возвращаем 0, если хотя бы 2 симметричных 
                return 0;               // элемента не равны
        }
    return 1;               
}
 
void sdvig(int A[N][N])             //ф-ция, сдвигающая строки с максимальным элементом
{                                   //выглядит ужасно, но работает 
    int temp;
    int max = A[0][0];      
    int imax[N], n = 0, M;  // объявляем массив(если будет несколько макс. значений),
    imax[0] = 0;            // где будет храниться номер строки с макс. элементом
 
    for (int i = 0; i < N; i++)         // просто ищем макс. элемент и 
        for (int j = 0; j < N; j++)     // запоминаем номер строки
            if (max < A[i][j])
            {
                max = A[i][j];
                imax[n] = i;
            }
 
    for (int i = 0; i < N; i++)         // тут снова перебираем все элементы 
        for (int j = 0; j < N; j++)     // и запоминаем все строки, в которых
            if (max == A[i][j])         // встречается макс. значение
                if (imax[n] != i)
                {
                    n++;
                    imax[n] = i;
                }
 
    M = n + 1;   // количество строк с макс. элементом
    for (n = 0; n < M; n++)  // сдвигаем поочередно нужные строки
    {
    temp = A[imax[n]][N - 1];  // запоминаем значение последнего элемента в строке, чтобы не потерять его
    for (int j = N - 1; j >= 0; j--)    // сам сдвиг( начинается с конца строки)
        A[imax[n]][j] = A[imax[n]][j-1];
    A[imax[n]][0] = temp;
    }
 
    cout << "Матрица со сдвинутой строкой:" << endl;
    outM(A);
 
}
 
Текущее время: 11:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru