Люди обьяснтете пожалуста такую ситуацию!!! Нужно в Паскале построить (написать програмку) паралельную форму на основе матрицы, т.е. У нас есть одна матрица 5x7, В етой матрице выполняются операции умножения,сложения,умножение+сложение!!!!! нужно все ети операции занести в паралельную форму (паралельная форма - это табличка 4X8)таким образом что бы в каждой ячейке выполнялась одна операция!!! Помогите пожалуста и подскажите с чего б его начать???? Я прикреплю саму скриншот матрицы 5X7!!! И скриншот самой паралельной формы которую я зделал в ворде.
metamfetamin
14.12.2007 15:48
Цитата(metamfetamin @ 14.12.2007 10:48)
Люди обьяснтете пожалуста такую ситуацию!!! Нужно в Паскале построить (написать програмку) паралельную форму на основе матрицы, т.е. У нас есть одна матрица 5x7, В етой матрице выполняются операции умножения,сложения,умножение+сложение!!!!! нужно все ети операции занести в паралельную форму (паралельная форма - это табличка 4X8)таким образом что бы в каждой ячейке выполнялась одна операция!!! Помогите пожалуста и подскажите с чего б его начать???? Я прикреплю саму скриншот матрицы 5X7!!! И скриншот самой паралельной формы которую я зделал в ворде.
Что касается матриц которые могли бы использыватся в программе то может прикрепленые подойдут??? Так как матрица которая прикреплена на втором скрине была получена именно с перемножених друг на друга итих двух матриц!!!!!!
Я вот не пойму.......может быть лучше будет в программе использывать файл .txt с уже готовой матрицей......как на втором скриншоте?????
metamfetamin
16.12.2007 15:50
Щас будет немного каламбура, но я все рвно спрошу!!!!!! Какие матрицы лучше использывать для построения паралельной формы(паралельная форма ето матрица в каждой ячейке которой находится одна операция, будь то + или * (взяты ети операции из матрицы С, которая была построена с матриц А и В)). Так вот, с какие матриц лучше строить параралельную форму с матрицы С как показано в первом посту на рисунках......либо использывать матрицы А и В. Мне кажется что проще будет строить с матрицы С!!!!!!!?????????????
metamfetamin
17.12.2007 17:56
Нашол в инете одну прогу!!! Но немогу понять какие под нее матрицы надо, с какими елементами?????
program matr; type Matrix = array[1..8,1..8] of integer; Algorithm = array[1..8,1..8] of integer; var A:Matrix; B:Matrix; C:Matrix; M, N, K: integer; H, W: integer; Results:Text; MatrA: Text; MatrB: Text; MatrC: Text; Alg: Algorithm;
procedure ReadMatrix(var Matr:Matrix;i,j,rows,columns:integer; var F: Text); var k,l:integer; begin {Schitat iz faila F elementy matritsy v peremennuju Matr} for k:=i to rows do begin for l:=j to columns do begin Read (F,Matr[k][l]); end; end; end;
procedure PrintMatrix(var Matr:Algorithm;i,j,rows,columns:integer;var F:Text); var k,l:integer; begin {Kazhdyj element matritsy Matr vyvesti na ekran2} for k:=i to rows do begin for l:=j to columns do begin Write (F,Matr[k][l], ' '); end; WriteLn(F);end;end;
procedure InitZeros(var Matr: Matrix; i, j, rows, columns: integer); var k,l:integer; begin {Kazhdomu elementu matritsy Matr prisvoit 0} for k:=i to rows do begin for l:=j to columns do begin Matr[k][l]:=0; end; end; end;
function FindNextNonZero(Var Matr:Matrix; var startx,starty,rows,columns:integer):boolean; var l:integer; begin l:= starty; {Prosmatrivaem vse elementy v massive рока ne najdem ne 0-j} while ((Matr[startx][l] = 0) and (startx <= rows)) do begin while ((Matr[startx][l] = 0) and (l <= columns)) do begin l:=l+ 1; end; if Matr[startx][l] = 0 then begin startx := startx + 1; l:=1; end; end; starty := 1; FindNextNonZero := (Matr[startx] [l]<>0); end;
procedure FindNextEmpty(startx:integer; var x, y: integer); var l:integer; begin l:=1; {Prosmatrivaem vse elementy v massive рока ne najdem pustuju stroku} while (Length(Alg[startx][l]) <> 0) do begin if l=8 then begin startx := startx + 1; l:=1; end else begin l:=l + 1; end; end; x := startx; y:=l; end;
function intToStr(I: Longint): String; { Convert any integer type to a string } var S:string [32]; begin Str(I, S); IntToStr:= S; end;
procedure ParseElement(i, j: integer); var l, v: integer; x_alg, y_alg: integer; begin l:=1; while (I <= K) and ((A[i][l] = 0) or (B[l][j] = 0)) do begin l:=l+1; end; if (A[i][l] <> 0) and (B[l][j] <> 0) then begin FindNextEmpty (1, x_alg, y_alg); Alg[x_alg][y_alg] := 'A' + IntToStr(i) + IntToStr(l) + '*B'+IntToStr(l)+IntToStr(j); H := x_alg; W := y_alg; end; v:=l+1; while (v <= K) and ((A[i][v] = 0) or (B[v][j] = 0)) do begin v:=v+1; end;
if (A[i][v] <> 0) and (B[v][j] <> 0) then begin FindNextEmpty (1, x_alg, y_alg);
i, j : integer; g, f: integer; begin i:=1; j:=1; for g:= 1 to 8 do for f:= 1 to 8 do Alg[g][f]:=' '; while (FindNextNonZero(C, i, j, M, K)) do begin ParseElement(i, j); if j = k then begin j:=i; i:=i+1; end else end; end; begin {Otkryt faily dlia chtenia ishodnyh matrits i dlia zapisi reultatov} Assign(Results, 'results4.txt'); Rewrite(Results); Assign(MatrA, 'A.txt'); Assign(MatrB, 'B.txt'); Assign(MatrC, 'C1.txt'); reset(MatrA); Reset(MatrB); Reset(MatrC); {Razmer matrits} M:=5;N:=6; K:=7; {Schitat matritsy A,B i C} ReadMatrix(A, 1,1, M, N, MatrA); ReadMatrix(B, 1,1, N, K, MatrB); ReadMatrix(C, 1,1, M, K, MatrC); {Opredeliaem algoritm MakeAlg;} {Vyvodim algoritm} WriteLn (Results); WriteLn (Results, 'Algorithm CO:'); PrintMatrix(Alg, 1,1,2, 8, Results);
С матрицами вродь разобрался. Те что подключаю - прикрепил!!!! Но выдает ошибку String expression expected в части программы
procedure FindNextEmpty(startx:integer; var x, y: integer); var l:integer; begin l:=1; {Prosmatrivaem vse elementy v massive рока ne najdem pustuju stroku} while (Length(Alg[startx][l]) <> 0) do {Здесь ошибка} begin if l=8 then begin startx := startx + 1; l:=1; end else begin l:=l + 1; end; end; x := startx; y:=l; end; ...
как я понимаю нужно выражение строкового типа. Но там все вродь правильноВ чем может быть проблема???? Саму программу и матрицу подключаемую в программу - прикрепил!!!!!
Client
20.12.2007 0:52
По-моему там не хватает скобки
while (Length(Alg[startx][l])) <> 0) do
А первая и последняя по-моему лишние
metamfetamin
20.12.2007 0:54
Цитата(Client @ 19.12.2007 20:52)
По-моему там не хватает скобки
while (Length(Alg[startx][l])) <> 0) do
А первая и последняя по-моему лишние
Та я уже и так и сяк пробовал!! Не то что-то!!!!! Как именно должно быть!????
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.