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

Перемножить элементы строк матрицы и получить из этих произведений вектор

06.12.2013, 13:42. Показов 1487. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем жителям сего форума!

Вот писал программку для ввода матриц размерностью 5х4 (A и B), после чего происходило вычисление по некоторым формулам, а так же транспонирование суммы, в итоге матрица получилась размером 5х5. Задача состоит в том, чтобы перемножить элементы строк матрицы и получить из этих произведений вектор. Я так понял, что надо сначала преобразовать элементы в числовые значения, а после перемножить, но так и не разобрался как все это делается.

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Объявляем массивы
            double[,] A = new double[5, 4];
            double[,] B = new double[5, 4];
            double[,] C = new double[5, 5];
 
            string s;
 
            // Ввод матриц A
            for (int i = 0; i < 5; i++)
            {                
                Console.WriteLine("Введите [{0}]-ю строку матрицы A", i);
                s = Console.ReadLine();
                string[] ts = s.Split(' ');
 
                for (int j = 0; j < 4; j++)
                    A[i, j] = Convert.ToDouble(ts[j]);
            }
 
            // Ввод матрицы B
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("Введите [{0}]-ю строку матрицы B", i);
                s = Console.ReadLine();
                string[] ts = s.Split(' ');
 
                for (int j = 0; j < 4; j++)
                    A[i, j] = Convert.ToDouble(ts[j]);
            }
 
            // C=(A+B)^T*(B-A)
            double [,] SAB = new double [5,4]; // сумма A и B
            double [,] RBA = new double [5,4]; // разность A и B
            double [,] TAB = new double [4,5]; // транспонирование суммы A и B
            double [,] PTP = new double [5,5]; // C
                        
            // A + B
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < 4; j++)
                SAB[i, j] = A[i, j] + B[i, j]; 
            // B - A
            for (int i = 0; i < 5; i++)
                for (int j =0; j < 4; j++)
                    RBA [i,j] = B[i,j] - A[i,j];
 
            // транспонирование
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < 4; j++)
                    TAB[j, i] = SAB[i, j];                      
 
            // произаедение
            for (int i = 0; i < 5; ++i)
            {
                for (int j = 0; j < 5; ++j)
                {
                    PTP[i, j] = 0;
                    for (int k = 0; k < 4; ++k)
                    {
                        PTP[i, j] += SAB[i, k] * TAB[k, j];
                    }
                }
            }                                       
 
            // Вывод результатов
            Console.WriteLine("");
            Console.WriteLine("C=(A+B)^T*(B-A):");
 
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                    Console.Write(PTP[i, j] + " ");
 
                Console.WriteLine();
            }
 
            // Press Any Key
            Console.WriteLine("");
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();          
            
        }
    }
}
Добавлено через 5 часов 6 минут

Какими-то неведомыми силами получилось составить алгоритм среднего гармонического, но при выводе данных мне требуется форматировать, чтоб вывод был с двумя знаками после запятой.

Пробовал таким методом: Console.WriteLine("{0:f2}", ZV);
Выводит просто 0.00

В чем косяк?

Теперишний код:
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Объявляем массивы
            double[,] A = new double[5, 4];
            double[,] B = new double[5, 4];
            double[,] C = new double[5, 5];
 
            string s;
 
            // Ввод матриц A
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("Введите [{0}]-ю строку матрицы A", i);
                s = Console.ReadLine();
                string[] ts = s.Split(' ');
 
                for (int j = 0; j < 4; j++)
                    A[i, j] = Convert.ToDouble(ts[j]);
            }
 
            // Ввод матрицы B
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("Введите [{0}]-ю строку матрицы B", i);
                s = Console.ReadLine();
                string[] ts = s.Split(' ');
 
                for (int j = 0; j < 4; j++)
                    A[i, j] = Convert.ToDouble(ts[j]);
            }
 
            // C=(A+B)^T*(B-A)
            double[,] SAB = new double[5, 4]; // сумма A и B
            double[,] RBA = new double[5, 4]; // разность A и B
            double[,] TAB = new double[4, 5]; // транспонирование суммы A и B
            double[,] PTP = new double[5, 5]; // C
 
            // A + B
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < 4; j++)
                    SAB[i, j] = A[i, j] + B[i, j];
 
            // B - A
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < 4; j++)
                    RBA[i, j] = B[i, j] - A[i, j];
 
            // транспонирование
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < 4; j++)
                    TAB[j, i] = SAB[i, j];
 
            // произаедение
            for (int i = 0; i < 5; ++i)
            {
                for (int j = 0; j < 5; ++j)
                {
                    PTP[i, j] = 0;
                    for (int k = 0; k < 4; ++k)
                    {
                        PTP[i, j] += SAB[i, k] * TAB[k, j];
                    }
                }
            }
 
            // Вектор
            double[] v = new double[5];
            for (int r = 0; r < 5; r++)
            {
                v[r] = 1;
                for (int c = 0; c < 5; c++) v[r] *= PTP[r, c];
            }
 
            // Среднее гармоническое
            double ZV = 0;            
                                    
            for (int i = 1; i < 5; i++)
            ZV += 1 / v[i];
            ZV = ZV/5;
                                    
            // Вывод результатов
            Console.WriteLine("");
            Console.WriteLine("C=(A+B)^T*(B-A):");
 
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    Console.Write(PTP[i, j] + " ");
                }
                Console.WriteLine();
            }
 
            // Вектор
            Console.WriteLine("");
            Console.WriteLine("Вектор:");
            for (int i = 0; i < 5; i++)
            Console.Write("{0} ", v[i]);
            Console.WriteLine();
 
            // Среднее гармоническое            
            Console.WriteLine("");
            Console.WriteLine("Среднее гармоническое вектора:");            
            Console.WriteLine("{0:f2}", ZV);                    
 
            // Press Any Key
            Console.WriteLine("");
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
 
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2013, 13:42
Ответы с готовыми решениями:

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

Вектор произведений чисел каждого столбца матрицы
Необходимо выполнить заданную обработку числового двумерного массива, имеющего произвольное количество строк(N) и столбцов(M). N &lt;= 7, M...

Получить вектор скалярных произведений строк матрицы на ее последний столбец
Решить задачу в с++ билдере 2 способами: с подпрограммой и без. Условие: Получить вектор скалярных произведений строк матрицы вещественных...

8
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
06.12.2013, 13:48
значит ZV у тебя действительно ноль
0
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 4
06.12.2013, 13:53  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
значит ZV у тебя действительно ноль
Неа, не ноль, увы (8Е-06).
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
06.12.2013, 13:58
вот это
Цитата Сообщение от alek7eich Посмотреть сообщение
C#
1
Console.WriteLine("{0:f2}", ZV);
гарантированно выведет в консоли значение ZV, округлив до сотых
0
 Аватар для akafeanor
60 / 59 / 15
Регистрация: 04.05.2010
Сообщений: 161
06.12.2013, 14:02
Ищи разгадку здесь:
v[r] *= PTP[r, c];
элементы массива v будут довольно таки большие,а когда ты делаешь
C#
1
ZV += 1 / v[i];
так, то у тебя получается довольно таки малое число.


Пробуй так:
C#
1
Console.WriteLine("{0:f20}", ZV);
0
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 4
06.12.2013, 14:10  [ТС]
Получилось с f20 так вот 0,00000076293945312500
а без f20 так - 7,62939453125Е-07. Чет не пойму.
0
 Аватар для akafeanor
60 / 59 / 15
Регистрация: 04.05.2010
Сообщений: 161
06.12.2013, 14:11
Ну..как ты написал код, так и считает. c# не при чём.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
06.12.2013, 14:16
Цитата Сообщение от pincet Посмотреть сообщение
Машинная программа выполняет то, что вы ей приказали делать, а не то, что бы вы хотели, чтобы она делала. Закон Грида.
Золотые слова
0
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 4
06.12.2013, 17:46  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
Золотые слова
Я и не спрашиваю какова причина, я спрашиваю в чем косяк в коде. А то, что она выполняет код - Америку блин открыли.

Добавлено через 21 минуту
Загвоздку решил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2013, 17:46
Помогаю со студенческими работами здесь

Получить элементы квадратной матрицы. Сформировать из матрицы А вектор. Используя вектор Х получить значение п
Нет времени переписать задание в текстовыв вид, чуть позже смогу. Подскажите, как сделать данное задание? Ввожу массив Uses crt; ...

Получить вектор, элементы которого равны суммам элементов соответствующих строк матрицы
Пожалуйста, помогите с решением. Дана матрица A(n на m) целых чисел. Получить вектор, элементы которого равны суммам элементов...

Вычислить вектор произведений четных элементов нечетных строк матрицы
Условие задание сделать через функцию Размер 5х5 Тип целый

Получить вектор столбец, элементами которого являются наибольшие по модулю элементы строк исходной матрицы
задать матрицу А размером n*n. получить вектор столбец, элементами которого являются наибольшие по модулю элементы строк исходной матрицы

Получить новую матрицу из произведений минимумов строк одной матрицы и максимумов столбцов другой матрицы
Пусть даны две вещественные матрицы порядка n. Получите новую мат- рицу следующим способом (для нахождения минимального элемента и...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru