Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.03.2021
Сообщений: 5

Исправить код. Тема: умножение матриц методом Штрассена

09.06.2021, 17:59. Показов 647. Ответов 0

Студворк — интернет-сервис помощи студентам
Пожалуйста помогите исправить циклы в процедуре вычисления.
с 23 по 28 оно не циклит как надо и я не вижу ошибки вообще, код взят с:
Алгоритм Штрассена (найти ошибку)

Pascal
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
Const Max=500;    //верхний предел для размерности матриц
type ms{,aa,bb,cc:}= array [1..Max,1..Max] of Longint;
Var  
  aa,bb,cc: ms;
  ii,jj,i,j: Integer;   //нумерация по матрицам
  n: String;   // размерность матриц
  Num: Longint; Code,nn,nnn: Integer;    //для проверки введённог значения размерности матриц
  //ms: array [1..Max,1..Max] of Shortint;
procedure rand(var aa:ms; nn:integer);
var
  i,j: Integer;
begin
  for i:=1 to nn do
  for j:=1 to nn do begin
    aa[i,j]:= 50-random(100);
    end;
end;
 
procedure form(aa,bb:ms; nnn:integer; var cc:ms; nn:integer);
var
 p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14: ms;
 i1,i2,j1,j2: Integer;
begin   //накосячил с див
 if (nn>1) then begin
   i1:=1; i2:=(nn div 2)+1;
   while (i1<=nn div 2) and (i2<=nn) do begin
     j1:=1; j2:=(nn div 2)+1;
     while (j1<=nn div 2) and (j2<=nn) do begin2
       p1[i1,j1]:=aa[i1,j1]+aa[i2,j2];
       p2[i1,j1]:=bb[i1,j1]+bb[i2,j2];
       p3[i1,j1]:=aa[i2,j1]+aa[i2,j2];
       p4[i1,j1]:=bb[i1,j1];
       p5[i1,j1]:=aa[i1,j1];
       p6[i1,j1]:=bb[i1,j2]-bb[i2,j2];
       p7[i1,j1]:=aa[i2,j2];
       p8[i1,j1]:=bb[i2,j1]-bb[i1,j1];
       p9[i1,j1]:=aa[i1,j1]+aa[i1,j2];
       p10[i1,j1]:=bb[i2,j2];
       p11[i1,j1]:=aa[i2,j1]-aa[i1,j1];
       p12[i1,j1]:=bb[i1,j1]+bb[i1,j2];
       p13[i1,j1]:=aa[i1,j2]-aa[i2,j2];
       p14[i1,j1]:=bb[i2,j1]+bb[i2,j2];
       j1:=j1+1; j2:=j2+1;
     end;
     i1:=i1+1; i2:=i2+1;
    end;
   form(p1,p2,nnn,cc,nn div 2);
   form(p3,p4,nnn,cc,nn div 2);
   form(p5,p6,nnn,cc,nn div 2);
   form(p7,p8,nnn,cc,nn div 2);
   form(p9,p10,nnn,cc,nn div 2);
   form(p11,p12,nnn,cc,nn div 2);
   form(p13,p14,nnn,cc,nn div 2);
  end;
 i:=1; j:=1;
 while i<=nnn do
   begin
     j:=1;
     while j<=nnn do
       begin
       cc[i,j]:=cc[i,j]+p1[i,j]*p2[i,j]+p7[i,j]*p8[i,j]-p9[i,j]*p10[i,j]+p13[i,j]*p14[i,j];
       cc[i,j+1]:=cc[i,j+1]+p5[i,j]*p6[i,j]+p9[i,j]*p10[i,j];
       cc[i+1,j]:=cc[i+1,j]+p3[i,j]*p4[i,j]+p7[i,j]*p8[i,j];
       cc[i+1,j+1]:=cc[i+1,j+1]+p1[i,j]*p2[i,j]+p5[i,j]*p6[i,j]-p3[i,j]*p4[i,j]+p11[i,j]*p12[i,j];
       j:=j+2;
       end;
     i:=i+2;
   end;
end;
Begin
Randomize;
  Writeln('Введите размерность для двух квадратных матриц: ');
  repeat
      ReadLn(n);
  Val(n, Num, Code);
    if Code <> 0 then //проверка на число
    Write('Введено не числовое значение. перепроверьте: ');
  until Code = 0;
  nn:= StrToInt(n);   //преобразование введённой размерности после проверки, в целочисленное значение
  nnn:=nn;
  if (nn mod 2 = 0) then begin
    {if (nn=68) then begin 
    rand(aa,nn); rand(bb,nn);
    form(aa,bb,nnn,cc,nn);
    for i:=1 to nn do begin
    for j:=1 to nn do write(cc[i,j]:5); writeln; end;
    end else begin}
    for ii:= 1 to nn do    //запрос у пользователя каждый элемент для матрицы aa*
    for jj:= 1 to nn do begin    //циклит до момента пока не буду введены все элементы от одного до N*
        write('Введите A[',ii,',',jj,']:  ');
        readln(aa[ii,jj]);
      end;
      
    writeln('Введите B матрицу :  ');
    for ii:= 1 to nn do    //запрос у пользователя каждый элемент для матрицы bb*
    for jj:= 1 to nn do begin    //циклит до момента пока не буду введены все элементы от одного до N*
        write('Введите B[',ii,',',jj,']:  '); 
          readln(bb[ii,jj]);
      end;
 
form(aa,bb,nnn,cc,nn);
writeln('Результат умнажения матриц:  ');
  for ii:=1 to nn do begin
       for jj:= 1 to nn do
          write(cc[ii,jj]:5);
          writeln;
      end;
    end
  else WriteLn('Введённое значение не является кратным размерности степени два.');
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.06.2021, 17:59
Ответы с готовыми решениями:

Алгоритм Штрассена (умножение матриц)
Привет всем, помогите пожалуйста написать алгоритм Штрассена для умножения квадратных матриц на С++. Если можно с подробными...

Умножение матриц Штрассена-Винограда
Написал алгоритм Штрассена-Винограда, но он не работает на матрицах больше 10x10. Где моя ошибка? #include &quot;pch.h&quot; ...

Умножение матриц алгоритмом Штрассена
Всем привет! Ребят, ни у кого нет исходников Алгоритма Штрассена с использованием базовых примитивов синхронизации?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2021, 17:59
Помогаю со студенческими работами здесь

Умножение матриц, исправить код
Создан класс для работы с матрицами. Пытался реализовать умножение матриц, но результат отображается неправильно. Помогите исправить...

Быстрое умножение матриц по алгоритму Штрассена: умножается только часть матрицы
Нужно дописать код, это быстрое умножение Штрассена, но проблема в том, что умножается лишь часть матрицы. Я не делаю копии, а передаю...

Прокомментировать код - алгоритм Штрассена для умножения матриц
Народ Здравствуйте , есть такая задача ( Курсовая работа, алгоритм Штрассена для умножения матриц ) Пожалуйста сделайте в коде...

Умножение матриц. Исправить ошибку
Доброго времени суток. В университете получил задание реализовать программу умножающую две матрицы размером NxM и MxL и выводящую...

Исправить ошибку (умножение двух матриц)
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; void main() { SetConsoleOutputCP(1251); const int s = 2; int...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru