Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
5 / 6 / 0
Регистрация: 31.01.2017
Сообщений: 21

Перемножить два массива char

22.10.2017, 20:54. Показов 2361. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть слово, я его передаю как каждый элемент массива, чтобы получился типа столбец :
C#
1
2
3
4
5
6
7
8
            String s = "привет";
 
            char[] text = s.ToArray();
 
            for (int i = 0; i < text.Length; i++)
            {
                Console.WriteLine(text[i]);
            }
При выводе, все нормально : в столбец выводится каждый символ (то, что и хотел).

Потом я создал матрицу и просто заполнил ее буквами англ. алфавита :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            int col = s.Length;
            int row = 3;
 
 
            char[,] textS = new char[row, col];
 
            char alpha = 'a';
 
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    textS[i, j] = alpha++;
 
                    Console.Write(textS[i, j] + " ");
                }
 
                Console.WriteLine();
            }
Опять же, вывожу ее, чтобы убедиться, что все правильно. Все как надо выводится.

Хочу получить следующее : чтобы каждый каждый элемент первого массива, умножился на соответсвующий ему элемент второго массива. Т.е выглядеть должно так :
"пaрbиcвdтe".
п(1ый элемент, 1-го массива)a(1ый элемент, 2-го массива)р(2ой элемент, 1-го массива)b(2ой элемент, 2-го массива) и так далее.

1) Подскажите, как мне перемножить эти два массива, чтобы получилось, как нужно(описал выше, что нужно иметь на выходе)?
2) Я догадываюсь**, что на выходе будет массив типа char размером[1, col](получится просто строка), поэтому сразу еще один вопрос, как мне из этого массива сделать строку типа String,чтобы дальше с ней работать и возможно вообще такое?

**Как и сказала выше, я пытался многое делать, и у меня получилось(не так как нужно и хотелось бы), когда я работал с типом int. Там у меня все, конечно же, перемножилось, но на выходе получил просто массив(строку) чисел, а нужны буквы. Вот такой код был у меня :
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
class Program
    {
        static void Main(string[] args)
        {
            String s = "привет";
 
            char[] text = s.ToArray();
 
            for (int i = 0; i < text.Length; i++)
            {
                Console.WriteLine(text[i]);
            }
            
            Console.WriteLine();
 
            Console.ReadKey();
            
            int col = s.Length;
            int row = 3;
 
            int[,] matrix = new int[row, col];
            Random random = new Random();
 
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    matrix[i, j] = random.Next(10);
 
                    Console.Write(matrix[i, j] + " ");
                }
                Console.WriteLine();
            }
 
 
            int[,] result = new int[1, col];
 
            for (int i = 0; i < 1; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    result[i, j] = text[i] * matrix[i, j];
 
                    Console.Write(result[i, j] + " ");
                }
 
                Console.WriteLine();
            }
 
            Console.ReadKey();
 
        }
     
    }
Помогите решить задачу, пожалуйста. Все, что мог перепробовал, но видимо не хватает знаний. Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2017, 20:54
Ответы с готовыми решениями:

Сравнить два массива типа char
char mass1 = { 'c', 'c', 'a', 'c', 'a', 'd', 'd', 'a', 'b', 'b', 'b', 'a', 'c', 'c', 'a', 'a', 'b', 'c', 'a', 'a', 'a', 'a', 'b', 'a', 'c',...

Перемножить два сверхдлинных числа из файла
Здравствуйте, вот есть такое задание, помогите реализовать пожалуйста: 1.Перемножить два сверхдлинных целых числа, записанных в файле....

Как перемножить два числа, сгенерированных случайно?
Как перемножить два числа, сгенерированных случайно в C# ?.

9
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
22.10.2017, 21:06
ничего не понял...создал двумерный массив, но при этом
Цитата Сообщение от Sobytatel Посмотреть сообщение
Хочу получить следующее : чтобы каждый каждый элемент первого массива, умножился на соответсвующий ему элемент второго массива. Т.е выглядеть должно так :
"пaрbиcвdтe".
п(1ый элемент, 1-го массива)a(1ый элемент, 2-го массива)р(2ой элемент, 1-го массива)b(2ой элемент, 2-го массива) и так далее.
получается 2 одномерных, так какой нужен?
и чем конечная цель? просто вывести на экран или же получить строку?
0
5 / 6 / 0
Регистрация: 31.01.2017
Сообщений: 21
22.10.2017, 23:46  [ТС]
Ну получается, у меня есть исходная строка(она у меня s = "привет"). Эту строку нужно было сделать в вектор-столбец, что я собственно и сделал в пером отрывке кода (как мне кажется).
Потом мне нужно эту строку умножить на матрицу. Я создал собственно эту матрицу - это второй отрывок кода.
Потом мне нужно их перемножить, т.е мою строку на эту матрицу. И вот тут и вопрос, как это сделать?

И конечная цель - это получить строку, которая будет равна перемножение моей исходной строки на матрицу, чтобы я мог дальше с ней работать.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
23.10.2017, 01:32
кхм, перемножить можно числа и только числа, остальное можно присоединить, объединить, "конкатинировать" и прочие извращения...что нужно сделать с символами(char), что бы твоём понимании это было произведением(умножить это же == произведение)? можно перемножить их ASCII-коды, только на-парку-а?
что же все таки требуется? изложи простыми словами, если,конечно, сам понял задачу
0
5 / 6 / 0
Регистрация: 31.01.2017
Сообщений: 21
23.10.2017, 10:59  [ТС]
Простыми словами суть задания такая :
Есть исходная строка. Эту строку нужно умножить на матрицу(абсолютно любую и любого типа). На выходе нужно получить уже другое слово.

И потом с этим словом работать в дальнейших заданиях.
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
23.10.2017, 11:03
Цитата Сообщение от Sobytatel Посмотреть сообщение
Эту строку нужно умножить на матрицу(абсолютно любую и любого типа)
Осталось определить операцию умножения для не числовых типов.
0
5 / 6 / 0
Регистрация: 31.01.2017
Сообщений: 21
23.10.2017, 11:16  [ТС]
Цитата Сообщение от woldemas Посмотреть сообщение
Осталось определить операцию умножения для не числовых типов.
Я извиняюсь, но что это значит? Я же вроде бы и так умножаю или я неправильно понимаю вас?
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
23.10.2017, 13:20
Sobytatel, это значит следующее, 2*3=6, 4*5=20 (числа умеют перемножать, надеюсь, все), а вот 'a'*'b'=?
'z'*'n'=?...чему равен результат умножения двух "букв"? поведай нам правила умножения буквы на букву, буквы на цифру, буквы на ... массив же может быть заполнен и экземплярами какого-нибудь класса
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
23.10.2017, 16:55
Sobytatel, судя по https://www.cyberforum.ru/ado-... 78454.html, достаточно все char'ы заменить на их коды, и перемножать уже численные матрицы.

Цитата Сообщение от Sobytatel Посмотреть сообщение
т.е как бы визуально в dataGridView он стал отображаться, скажем "b31e2B", но когда юзер будет логиниться, он будет вводить "123b"
Если хочешь показывать результат на экране, то полученные числа следует обратно заменить на char'ы. Но не все символы будут оботражаться на экране. Поэтому, лучше где-то зафиксировать допустимые символы для пароля (алфавит) и использовать вместо char-кодов порядковые номера в этом алфавите. А матрицы вычислять по модулю длины этого алфавита. У меня было шифрование Хилла, можешь посмотреть:
Хилл
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
static class Program
{
    static void Main()
    {
        string alphabet = "abcdefghijklmnopqrstuvwxyz";
        string key = "gybnqkurp";
        string input = "testpassword";
        string hash = Hill(input, key, alphabet, true);
        string pass = Hill(hash, key, alphabet, false);
        Console.WriteLine($"{input} -> {hash} -> {pass}");
        Console.ReadLine();
    }
 
    // Возвращает номер символа в алфавите
    static int CharToInt(char c, string alph)
        => alph.IndexOf(c);
 
    // Возвращает символ алфавита по номеру
    static char IntToChar(int i, string alph)
        => alph[i % alph.Length];
 
    // Получает матрицу по символьному ключу (деля на n строк по m символов)
    static ModularMatrix GetKeyMatrix(string key, int n, int m, string alph)
        => new ModularMatrix(n, m, alph.Length, 
            (i, j) => CharToInt(key[i * m + j], alph));
 
    // Получает либо саму матрицу либо её лево-обратную (для расшифровки)
    // Левая обратность нужна на случай если матрица не квадратная
    static ModularMatrix GetKeyMatrix(string key, int n, int m, string alph, bool encode)
        => encode ? 
            GetKeyMatrix(key, n, m, alph) : 
            GetKeyMatrix(key, n, m, alph).InversedLeft;
 
    // Целочисленный Хилл
    static int[] Hill(int[] Text, ModularMatrix Key)
        => Enumerable // Делим текст на блоки по длине ключа
            .Range(0, 1 + (Text.Length - 1) / Key.N)
            .Select(i => new ModularMatrix(Key.N, 1, Key.Mod, 
                (j, _) => Text[(i * Key.N + j) % Text.Length]))
            .Select(v => Key * v) // Перемножаем каждый блок с ключем
            .SelectMany(v => v.Cast<int>()) // Объединяем все
            .Take(Text.Length) // Отрезаем лишний хвост (если длина текста не кратна длине ключа)
            .ToArray();
 
    static string Hill(string text, string key, string alph, bool encode)
        => new string(
            Hill(text.Select(c => CharToInt(c, alph)).ToArray(),
                GetKeyMatrix(key, (int)Math.Sqrt(key.Length), (int)Math.Sqrt(key.Length), alph, encode))
            .Select(i => IntToChar(i, alph))
            .ToArray());
}
Модульные матрицы
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
class ModularMatrix : IEnumerable<int>
{
    public readonly int Mod;
    private readonly int[,] Data;
    public int N => Data.GetLength(0);
    public int M => Data.GetLength(1);
 
    public ModularMatrix(int N, int M, int Mod, Func<int, int, int> BuilderFn = null)
    {
        this.Data = new int[N, M];
        this.Mod = Mod;
 
        if (BuilderFn == null) return;
        for (int i = 0; i < N; i++)
            for (int j = 0; j < M; j++)
                this[i, j] = BuilderFn(i, j);
    }
 
    public int this[int i, int j]
    {
        get => Data[i, j];
        set => Data[i, j] = (value % Mod + Mod) % Mod;
    }
 
    public static ModularMatrix operator *(ModularMatrix a, ModularMatrix b)
        => new ModularMatrix(a.N, b.M, a.Mod, (i, j) =>
            Enumerable.Range(0, a.M).Sum(k => a[i, k] * b[k, j]));
 
    public static ModularMatrix operator *(ModularMatrix a, int b)
        => new ModularMatrix(a.N, a.M, a.Mod, (i, j) => a[i, j] * b);
 
    public ModularMatrix Transposed
        => new ModularMatrix(M, N, Mod, (i, j) => this[j, i]);
 
    public ModularMatrix Minor(int i, int j)
        => new ModularMatrix(N - 1, M - 1, Mod, (y, x) => this[y < i ? y : y + 1, x < j ? x : x + 1]);
 
    public int Determinant
        => N == 0 ? 1 :
            N == 1 ? this[0, 0] :
            Enumerable.Range(0, N).Sum(i => (i % 2 == 0 ? 1 : -1) * this[i, 0] * Minor(i, 0).Determinant);
 
    public ModularMatrix Inversed
        => new ModularMatrix(N, M, Mod, (i, j) => ((i + j) % 2 == 0 ? 1 : -1) * Minor(i, j).Determinant)
            .Transposed * inv(Determinant, Mod);
 
    public ModularMatrix InversedLeft
        => (Transposed * this).Inversed * Transposed;
 
    public ModularMatrix InversedRight
        => Transposed * (this * Transposed).Inversed;
 
    private int inv(int a, int m, int x = 0, int y = 1)
        => a == 0 ? x : inv(m - m / a * a, a, y, x - m / a * y);
        
    public IEnumerator<int> GetEnumerator()
        => Data.Cast<int>().GetEnumerator();
 
    IEnumerator IEnumerable.GetEnumerator()
        => GetEnumerator();
}
0
0 / 0 / 1
Регистрация: 04.02.2020
Сообщений: 8
09.02.2023, 17:26
Код для умножения двух двумерных массивов

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
// Метод для заполнения двумерного массива случайными элементами от 0 до 9
int[,] FillMatrix(int rows, int cols)
{
    int[,] matr = new int[rows, cols];
    Random rand = new Random();
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            matr[i, j] = rand.Next(0, 10);
        }
    }
    return matr;
}
 
// Метод для вывода элементов массива
void PrintMatrix(int[,] matr)
{
    for (int i = 0; i < matr.GetLength(0); i++)
    {
        for (int j = 0; j < matr.GetLength(1); j++)
        {
            System.Console.Write(matr[i, j] + "\t");
        }
        System.Console.WriteLine();
    }
}
 
// Метод для формирования двумерного массива,
// который является результатом произведения двух 
// двумерных массивов
int[,] MultiplicationMatrix(int[,] array1, int[,] array2)
{
    int arrRow1 = array1.GetLength(0);
    int arrCol1 = array1.GetLength(1);
    int arrRow2 = array2.GetLength(0);
    int arrCol2 = array2.GetLength(1);
 
    // Проверка возможности формирования итогового массива
    if (arrRow1 == arrRow2 && arrCol1 == arrCol2 ||
        arrRow1 == arrCol2 && arrCol1 == arrRow2)
    {
        System.Console.WriteLine("Размеры матриц удовлетворяют требованиям!");
        System.Console.WriteLine("Начат процесс формирования произведения массивов");
 
        // Блок определения размера двумерного массива с итогами
        int row = 0;
        int col = 0;
        if (arrRow1 < arrRow2) row = arrRow1;
        else row = arrRow2;
        if (arrCol1 < arrCol2) col = arrCol1;
        else col = arrCol2;
        int[,] FatalArray = new int[row, col];
 
        for (int i = 0; i < arrRow1; i++)
        {
            for (int j = 0; j < arrCol2; j++)
            {
                for (int k = 0; k < arrRow2; k++)
                {
                    FatalArray[i, j] += array1[i, k] * array2[k, j];
                }
            }
        }
        return FatalArray;
    }
    else
    {
        System.Console.WriteLine("Произведение массивов невозможно");
        int[,] a = new int[1, 1];
        return a;
    }
}
 
 
/*****************************************************************************/
//Основной блок программы
System.Console.WriteLine("Программа для нахождения произведения двух матриц");
int[,] array1_Task3 = FillMatrix(3, 3);
System.Console.WriteLine("Первая матрица: ");
PrintMatrix(array1_Task3);
 
int[,] array2_Task3 = FillMatrix(3, 3);
System.Console.WriteLine("Вторая матрица: ");
PrintMatrix(array2_Task3);
 
int[,] FinalMultiplivationArr = MultiplicationMatrix(array1_Task3, array2_Task3);
PrintMatrix(FinalMultiplivationArr);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2023, 17:26
Помогаю со студенческими работами здесь

Перемножить две матрицы (два двумерных массивов)
Добрый день Уважаемые программисты, помогите пожалуйста разобраться девушке. С# плохо знаю, но надо срочно сделать данное задание.

Перемножить два двухмерных массива.
Перемножить два двухмерных массива.

Перемножить два двухмерных массива
Перемножить два двухмерных массива

Перемножить два массива на языке vbs
Всем привет, есть вопросик. Задание: С использованием оператора цикла FOR и функцииRND сгенерировать массивы из n действительных чисел,...

Сложить два массива типа unsigned char
Необходимо создать метод класса для сложения двух массивов типа unsigned char. Числа в нем хранятся в формате '0'...'9' так как запись идет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru