@tera1004

Как сделать вывод в цикле один раз?

Код проверяет является ли массив симметричным относительно главной диагонали.
Проблема у меня с выводом. Выводится каждый цикл. Нужно чтобы вывелось единственный раз в соответствии с результатом. Если каждый раз цикл If является true ,то массив "симметричен". Если же хоть раз выдал false ,то вывод "не симметричен"
int n = 3;
            int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
            for (int i = 0; i < a.GetLength(0); ++i)
             for (int j = 0; j < a.GetLength(1); ++j)
                 if (a[i, j] == a[j, i])
                Console.WriteLine("Симметрична");
                else Console.WriteLine("Ne simmetrichna");
  • Вопрос задан
  • 1422 просмотра
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
ну тогда уж:
int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
bool s = true;
for (int i = 0; i < a.GetLength(0) && s; ++i)
  for (int j = 0; j < a.GetLength(1) && s; ++j)
    s &= a[i, j] == a[j, i];
Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");

при этом можно и просто присваивать контрольке значение
int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
bool s = true;
for (int i = 0; i < a.GetLength(0) && s; ++i)
  for (int j = 0; j < a.GetLength(1) && s; ++j)
    s = a[i, j] == a[j, i];
Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");

а можно проверять квадратность матрицы до начала циклов, а так же перебирать "треугольник"
spoiler
using System;

namespace simm_array
{
    class Program
    {
        static void Main(string[] args)
        {
            var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
            var w = m.GetLength(0);
            var h = m.GetLength(1);
            var s = w == h;
            for (var x = 0; x < w && s; ++x)
                for (var y = x; y < h && s; ++y)
                    s = m[x, y] == m[y, x];
            Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
        }
    }
}

в каментах предложено не сканировать главную диагональ.. и это логично! )) .. ну собственно и просто делается
spoiler
using System;

namespace simm_array
{
    class Program
    {
        static void Main(string[] args)
        {
            var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
            var w = m.GetLength(0);
            var h = m.GetLength(1);
            var s = w == h;
            for (var x = 0; x < w && s; ++x)
                for (var y = x + 1; y < h && s; ++y)
                    s = m[x, y] == m[y, x];
            Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
        }
    }
}

ну и немного функционального стиля+синтаксического сахара
spoiler
using System;

namespace simm_array
{
    static class Program
    {
        static void Main(string[] args)
        {
            var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
            m.dump();
            m.isSymmetrical().report();
        }

        static bool isSymmetrical(this int[,] m)
        {
            var w = m.GetLength(0);
            var h = m.GetLength(1);
            var s = w == h;
            for (var x = 0; x < w && s; x++)
                for (var y = x + 1; y < h && s; y++)
                    s = m[x, y] == m[y, x];
            return s;
        }

        static void dump(this int[,] m)
        {
            var w = m.GetLength(0);
            var h = m.GetLength(1);
            for (var x = 0; x < w; x++)
            {
                for (var y = 0; y < h; y++)
                {
                    Console.Write($"\t{m[x, y]}");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }

        static void report(this bool s) => Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
    }
}

выхлоп
1P9RDij.png
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347
Crazy on performance...
int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
bool s = true;
for (int i = 0; s && i < a.GetLength(0); ++i)
  for (int j = 0; s && j < a.GetLength(1); ++j)
    s = s && a[i, j] == a[j, i];
Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
Ответ написан
@Farwisdomer
Если хоть 1 раз a [i, j] <> a[j, i] - значит мартица несимметрична. Значит достаточно поменять условие
if (a[i, j] <> a[j, i])
Console.WriteLine("Ne simmetrichna")
break;

если условие не выполнилось за циклом вывести - симметрична.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы