Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 33

Автоматическая проверка умножения матриц

01.04.2017, 15:52. Показов 1856. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток!

У меня огромная просьба в помощи следующего характера:
Необходимо написать программу (язык не важен), которая бы автоматически проверяла лабораторную работу по теме "Умножение матриц"

Студенту предлагаются две матрицы, которые необходимо умножить. Он пишет программу в Matlab и отсылает мне m-файл на проверку. Идея состоит в автоматизации этого процесса. Но я не сильна в программировании. Я так понимаю, что нужно стянуть исходнsе данные его, умножить две матрицы и сравнить свои результаты работы со студенческими. Пример высылаемых мне m-файлов приведен ниже:

clc
clear all
A = [ 0.9501 0.7621 0.6154 0.4057 0.0579;
0.2311 0.4565 0.7919 0.9355 0.3529;
0.6068 0.0185 0.9218 0.9169 0.8132;
0.4860 0.8214 0.7382 0.4103 0.0099;
0.8913 0.4447 0.1763 0.8936 0.1389]
B = [0.2028 0.0153;
0.1987 0.7468;
0.6038 0.4451;
0.2722 0.9318;
0.1988 0.4660]
C = A*B

Файлы пересылаются мне через систему Moodle ( система управления курсами (электронное обучение), также известная как система управления обучением или виртуальная обучающая среда (англ.). Является аббревиатурой от англ. Modular Object-Oriented Dynamic Learning Environment (модульная объектно-ориентированная динамическая обучающая среда). Представляет собой свободное (распространяющееся по лицензии GNU GPL) веб-приложение, предоставляющее возможность создавать сайты для онлайн-обучения.)
В настоящее время в мире существует немало проверяющих систем для проведения соревнований по программированию. Поэтому логичным представляется решение, при котором уже разработанная проверяющая система интегрируется в систему «Moodle» и используется для тестирования студенческих работ. Одной из таких проверяющих систем, является система «Ejudge». Данная система также распространяется под лицензией GNU GPL и работает под управлением ОС Linux. Система «Еjudge» широко используется в рамках различных соревнований по программированию, в частности – в проекте «Московские олимпиады по программированию». Система «Еjudge» не только проверяет корректность решения, но и обеспечивает защиту от потенциально опасных действий со стороны тестируемых программ: ограничение процессорного времени с точностью до миллисекунды, жесткий контроль размера адресного пространства процесса и размера стека процесса.
Для интеграции системы «Еjudge» в систему «Moodle» еще не разработаны модули. Но может быть что-то простенькое можно придумать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.04.2017, 15:52
Ответы с готовыми решениями:

Написать процедуру для сложения, умножения квадратных матриц N*N, и умножения матрицы на вектор
Написать процедуру для сложения, умножения квадратных матриц N*N, и умножения матрицы на вектор

Функции сложения матриц и умножения матриц на число
Найти k – количество нечетных чисел ниже побочной диагонали матрицы T и m – количество нечетных чисел матрицы C.Если k>m, найти...

Умножения матриц, цикл
Всем привет, помогите пожалуйста, у меня есть 4 х CSpinEdit'a и 3 х StringGrid'a, с помощью CSpinEdita можно настроить размерность матрицы...

2
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
07.04.2017, 10:28
Лучший ответ Сообщение было отмечено ЕкатеринаК как решение

Решение

Цитата Сообщение от ЕкатеринаК Посмотреть сообщение
нужно стянуть исходнsе данные его, умножить две матрицы и сравнить свои результаты работы со студенческими
Исходник и exe - в присоединенных файлах. Язык - C#(VS 2010, FW2.0). Скомпилировано под windows, если нужен линукс - можно перекомпилить под Mono.

Парсер:
Кликните здесь для просмотра всего текста
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
    public class MParser
    {
        public Dictionary<string, string> Definitions { get; set; }
 
        public MParser()
        {
            Definitions = new Dictionary<string, string>();
        }
 
        public void ParseDefinitions(string fileName)
        {
            var isOpenedDef = false;
            var currDef = "";
            var currDefName = "";
            foreach(var line in File.ReadAllLines(fileName))
            {
                var parts = line.Split(new char[] {'='}, 2);
                if (parts.Length == 2) //is Definition
                {
                    currDefName = parts[0].Trim();
                    currDef = parts[1];
                    if(currDef.Contains("*"))
                        Definitions.Add(currDefName, currDef);
                    else
                        isOpenedDef = true;
                }
                else
                if (isOpenedDef)
                    currDef += line;
 
                if (isOpenedDef && currDef.Contains("]"))
                {
                    isOpenedDef = false;
                    Definitions.Add(currDefName, currDef);
                }
            }
 
            if (isOpenedDef && currDef.Contains("]"))
                Definitions.Add(currDefName, currDef);
        }
 
        public static Size GetMatrixDim(string definition)
        {
            if(string.IsNullOrEmpty(definition))
                throw new Exception("Matrix is empty");
 
            var rows = definition.Trim(' ', ';', ']', '[').Split(';');
 
            //sizes of rows are equals ?
            var colCount = rows[0].Trim().Split(' ').Length;
            for (int i = 1; i < rows.Length; i++)
                if (colCount != rows[i].Trim().Split(' ').Length)
                    throw new Exception("Rows have different column count");
 
            return new Size(colCount, rows.Length);
        }
 
        public void CheckMatrixMult(string expression)
        {
            var parts = expression.Trim(' ', ';').Split('*');
            if (parts.Length != 2) throw new Exception("Wrong expression");
 
            var matrixName1 = parts[0].Trim();
            if(!Definitions.ContainsKey(matrixName1)) throw new Exception("Unknown matrix: " + matrixName1);
            var matrixName2 = parts[1].Trim();
            if(!Definitions.ContainsKey(matrixName2)) throw new Exception("Unknown matrix: " + matrixName2);
 
            var dim1 = GetMatrixDim(Definitions[matrixName1]);
            var dim2 = GetMatrixDim(Definitions[matrixName2]);
 
            if (dim1.Width != dim2.Height) throw new Exception(string.Format("Matrix dimensions are not fit: ({0}x{1}) * ({2}x{3})", dim1.Height, dim1.Width, dim2.Height, dim2.Width));
 
            return;//all right
        }
    }


В окошке выбора файлов можно выбирать несколько файлов для проверки:


Результат:
Вложения
Тип файла: zip MParser_source.zip (63.2 Кб, 2 просмотров)
Тип файла: zip MParser_exe.zip (7.1 Кб, 1 просмотров)
1
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 33
09.04.2017, 00:18  [ТС]
Мдаааа, совсем простенько... Я не ожидала, что это такие сложности....ОГРОМНОЕ СПАСИБО. Под linux не надо!
Для себя поняла, что если я хочу все 8 лабораторных работ проверять автоматически, то мне осталось написать 7 программных кодов. Универсально-шаблонным методом. Теперь понятно, почему таких функций не встретить. Индивидуальный подход к каждой лабе. Ну, теперь доцент кафедры высшей математики будет развлекаться. По Вашему программному коду творить программы проверки остальных 7 работ. А что, отпуск 3 летних месяца, убью время

Добавлено через 2 минуты
Да, и еще по быстрому выучить Си шарп. Легко!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2017, 00:18
Помогаю со студенческими работами здесь

Функция умножения матриц
Так получилось , что я решила перейти в другой вуз на другую специальность. Программирование - это не мое . Но нужно сдать сессию , а на...

умножения матриц массивы
не могу понять почему умножает неправильно. И как это написать функцией #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; ...

Скорость умножения матриц
Всем привет. Решил написать 2 метода умножения матриц, и проверить скорость их выполнения. Имеем класс Mat4 в котором данные описаны...

Подпрограмма умножения 2 матриц
#include&lt;iostream.h&gt; const int N=20;const int M=25; double m,l,n; void d(double x,double y,double z) void main () { int i,j; ...

Функция умножения матриц
В общем вопрос в том, что я не знаю как составить са код в цикле for...вроде передаю в функцию три массива, а вот с этими счетчиками...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru