Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2023, 12:36   #1
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию С++ проверить на симметричность каждый элемент строки матрицы, тогда строка матрицы симметрична

Задание следующее: Дана матрица А (n x m), элементами которой являются вещественные числа. Определить для каждой строки, все ли ее элементы являются симметричными. Составьте функцию или программу, проверяющую симметричность числа.

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

я написала программу, а она у меня проверяет строку относительно центра строки на симметричность, а не так как надо по условию. Как это исправить?

Код:
#include <iostream>
#include <iomanip>
#include <time.h>
 
using namespace std;
 
bool func(double* a, int m)
{
    for (int i = 0; i < m / 2; i++)
        if (a[i] != a[m - 1 - i]) 
            return false;
            return true;
}
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int i, j, m, n;
 
    cout << ("\nВведите размер двумерного массива (n x m):  ");
    cout << ("\nвведите число строк n = ");
    cin >> n;
    cout << ("\nвведите число столбцов m = ");
    cin >> m;
 
    double** a = new double* [n];
    for (i = 0; i < n; i++)
        a[i] = new double[m];
 
    double* b = new double[n];
 
    cout << "\nВведите элементы двумерного массива А: \n";
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf(" x[%d][%d] = ", i + 1, j + 1);
            cin >> a[i][j];
        }
    }
    printf("\n Массив a\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            printf("  %5.2f", a[i][j]);
        printf("\n");
    }
   
    cout << "\n Массив проверки на симметричность (в числах) B:\n";
 
    for (int i = 0; i < n; i++)
    {
        if (func(a[i], m)) b[i] = 1;
        else b[i] = 0;
        cout << b[i] << " ";
    }
    cout << "\n";
 
    cout << "\n Массив проверки на симметричность (словами):\n";
 
    for (int i = 0; i < n; i++)
    {
        if (func(a[i], m)) cout << "симмертично\n";
        else cout << "несиммертично\n";
    }
    cout << "\n";
 
    for (int i = 0; i < n; i++)
        delete[]a[i];
        delete[]a;
        delete[]b;
 
    system("pause");
    return 0;
}
lenaiv вне форума Ответить с цитированием
Старый 28.03.2023, 14:19   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Для проверки симметрии в матрице надо проверять не строку на симметричность, а строку и столбец с одинаковыми номерами
Код:
 // a - матрица целиком
// k - номер проверяемой строки
// m - размер матрицы (если m != n, тогда матрица не симметричная однозначно)
bool func(double** a, int k, int m)
{
    for (int i = 0; i < m; ++i)
        if (a[i][k] != a[k][i]) 
            return false;
            return true;
}
macomics вне форума Ответить с цитированием
Старый 28.03.2023, 14:34   #3
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию

это проверяет матрицу, а мне нужно элемент . Например:
77 99 11
12 32 12
14 33 1

1 строка: симметрична
2 строка: несимметрична
3 строка: несимметрична
lenaiv вне форума Ответить с цитированием
Старый 28.03.2023, 15:09   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Тогда переведите число в строку и проверяйте строку от начала и от конца, пока оба индекса не пересекутся на равенство.
Код:
   for (int i = 0, j = len - 1; i < j; ++i, --j)
      if (str[i] != str[j])
         return false;
         return true;
Но вещественные числа не всегда могут быть точно представимы и число 666.666 будет не симметричным
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Вывести таблицу Пифагора в виде матрицы 10 X 10. Каждый элемент матрицы в таблице Пифагора вычисляется по формуле а= i * j. dimadon456 Помощь студентам 0 08.05.2017 21:24
Дублируется строка при сортировке матрицы и не может вывести минимальный элемент строки schoolboy99 Помощь студентам 10 10.03.2015 11:50
Первый элемент - размерность матрицы, остальные образуют строки этой матрицы Anastasiya_Pot Помощь студентам 2 10.04.2012 09:46
Проверка строки матрицы на симметричность. EVIL Помощь студентам 2 26.11.2007 23:23