Форум «Всё о Паскале» _ Задачи _ Паскаль. Деление матриц. Немогу запустить программу!
Автор: metamfetamin 14.11.2007 2:19
Люди не могу запустить прогу. Пишет "file not open for input". В программе использывается 2 матрицы А и B которые находятся в 2-ух отдельных файлах. (прикреплены). Должно происходить деление матриц с выделением нулевого блока! Шаг 1.Вывод матриц А и В. Те что в файле!!! Шаг 2 Разбиение и собственно вывод блоков матриц А и В после деления:
Что касается того как должны быть поделены матрицы то нужно делить их так что бы выделить максимально большой нулевой блок и матрицу нужно брать которая больше, соответственно ето матрица B. В матрице В я выделил максимально большой нулевой блок(так как показано) в соответствии с тем как поделина мтрица В, матрица А делится соответствующим образом (т.е. что б поделить матрицу А, нужно смотреть на матрицу В и делить ее (матрицу А) с соответствием матрицы В)......потому что в дальнейшем мне нужно будет нахождить результирующую матрицу С которая будет получена в результате перемножения соответствующих блоков А и В.
Шаг 3. Вывод матрицы С полученой в результате перемножения блоков матриц А и В за следующим алшоритмом. Так как во втором шаге, только для матрицы С.
Код
Program Labor2; uses crt; var A:text; B:text; f:text; MatrA:array[1..7, 1..7] of integer; MatrB:array[1..7,1..7] of integer; TempMatr:array[1..7,1..7] of integer; A1:array[1..7,1..7] of integer; A0:array[1..7,1..7] of integer; A2:array[1..7,1..7] of integer; A3:array[1..7,1..7] of integer; B1:array[1..7,1..7] of integer; BO:array[1..7,1..7] of integer; B2:array[1..7,1..7] of integer; B3:array[1..7,1..7] of integer; C1:array[1..7,1..7] of integer; C2:array[1..7,1..7] of integer; C21:array[1..7,1..7] of integer; C22:array[1..7,1..7] of integer; C3:array[1..7,1..7] of integer; C4:array[1..1,1..7] of integer; i, j , k, x, y, rowa, cola, rowb, colb, sumcl, sumc2, rozbivAX, rozbivAY, rozbivBX,rozbivBY:integer; {Процедура чтения матриц А и В из файлов} procedure ReadAB; Begin Assign(f, 'A.txt'); Reset(f); Assign(f,'B.txt'); Reset(f); {init file} Readln(A); Read(A,rowa); Readln(A); Read(A,cola); Readln(A); Read(A,rozbivAX); Readln(A); Read(A,rozbivAY); Readln(A); {Chtenye MatrixA iz fila} For i:=1 to rowa do Begin For j:=1 to cola do Read(A,matrA[i,j]); Readln(A); End; Close(A); Readln(B); Read(B,rowb); Readln(B); Read(B,colb); Readln(B); Read(B,rozbivBX); Readln(B); Read(B,rozbivBY); Readln(B); Readln(B); {Chtenye MatrixA iz fila}
For i:=1 to rowb do Begin For j:=1 to colb do Read(B,matrB[i,j]); Readln(B); End; Close(B); end; {npoцедура вывода матрицы A} procedure writeMatrA; Begin writeln(f,'A'); writeln(f,'Matrica A budet hfpbita x= f,rozbivAX,f y= f,rozbivAY'); for i:=1 to rowa do begin for j:=1 to cola do write (f,MatrA[i,j]); writeln; end; writeln; writeln; End; {процедура вывода матрицы B} procedure writeMatrB; Begin writeln(f,'Matrica B'); writeln(f,'Matrica B budet hfpbita x= f,rozbivBX,f y= f,rozbivBY'); for i:=1 to rowb do begin for j:=1 to colb do write (f,MatrB[i,j]); writeln; end; writeln; writeln; End; {процедура разбиения матрицы A} procedure RozbivMatrixA; begin {Блок получения подматрицы A1} x:=1; y:=1; for i:=1 to rozbivAX do begin for j:=1 to rozbivAY do Begin a1[x,y]:=MatrA[i,j]; inc(y); End; inc(x); end; {Блок получения подматрицы А0} x:=1;y:=1; for i:=1 to rozbivAX do begin for j:=rozbivAY+1 to cola do Begin A0[x,y]:=MatrA[i,j]; inc(y); End; inc(x); end; {Блок получения подматрицы А2} x:=1; y:=1; for i:=rozbivAX+1 to rowa do begin for j:=1 to rozbivAY do Begin A2[x,y]:=MatrA[i,j]; inc(y); End; inc(x); end; {Блок получения подматрицы А3} x:=1; y:=1; for i:=rozbivAX+1 to rowa do begin for j:=rozbivAY+1 to cola do Begin A3[x,y]:=MatrA[i,j]; inc(y); End; inc(x); end; {Блок вывода подматрицы матрицы А} ClrScr; Writeln('podmatrici A'); Writeln('Al'); x:=1; y:=1; for i:=1 to rozbivAX do begin for j:=1 to rozbivAY do Begin write (' ',A1[x,y]); inc(y); End; inc(x); writeln; end; writeln; Writeln('A0'); x:=1; y:=1; for i:=1 to rozbivAX do begin for j:=rozbivAY+1 to cola do Begin write ('',A0[x,y]); inc(y); End; inc(x); writeln; end; writeln; Writeln('A2'); x:=1; y:=1; for i:=rozbivAX+1 to rowa do begin for j:=1 to rozbivAY do Begin write (' ',A2[x,y]); inc(y); End; inc(x); writeln; end; writeln; Writeln('A3'); x:=1; y:=1; for i:=rozbivAX+1 to rowa do begin for j:=rozbivAY+1 to cola do Begin write (' ',A3[x,y]); inc(y); End; inc(x); writeln; end; end; {Процедура разбиения матрицы В} procedure RozbivMatrixB; begin {Блок получения подматрицы В1} x:=1; y:=1; for i:=1 to rozbivBX do begin for j:=1 to rozbivBY do Begin b1[x,y]:=MatrB[i,j]; inc(y); End; inc(x); end; {Блок получения подматрицы В0} x:=1; y:=1; for i:=1 to rozbivBX do begin for j:=rozbivBY+1 to colb do Begin A0[x,y]:=MatrB[i,j]; inc(y); End; inc(x); end; {Блок получения подматрицы В2} x:=1; y:=1; for i:=rozbivBX+1 to rowb do begin for j:=1 to rozbivBY do Begin B2[x,y]:=MatrB[i,j]; inc(y); End; inc(x); end; {Блок получения подматрицы В3} x:=1; y:=1; for i:=rozbivBX+1 to rowb do begin for j:=rozbivBY+1 to colb do Begin B3[x,y]:=MatrB[i,j]; inc(y); End; inc(x); end; {Блок вывода подматриц матрицы В} ClrScr; Writeln(' podmatrici B'); Writeln('B1'); x:=1; y:=1; for i:=1 to rozbivBX do begin for j:=1 to rozbivBY do Begin write (' ',B1[x,y]); inc(y); End; inc(x); writeln; end; writeln; Writeln('B0'); x:=1; y:=1; for i:=1 to rozbivBX do begin for j:=rozbivBY+1 to colb do Begin write (' ',B3[x,y]); inc(y); End; inc(x); writeln; end; writeln; Writeln('B2'); x:=1; y:=1; for i:=rozbivBX+1 to rowb do begin for j:=1 to rozbivBY do Begin write (' ',B2[x,y]); inc(y); End; inc(x); writeln; end; writeln; Writeln('B3'); x:=1; y:=1; for i:=rozbivBX+1 to rowb do begin for j:=rozbivBY+1 to colb do Begin write (' ',B3[x,y]); inc(y); End; inc(x); writeln; end; end; {Блок перемножения подматриц и вывод на экран подматриц матрицы С} procedure peremnogenie; begin sumcl:=0; {C1} for i:=1 to rozbivAX do for j:=1 to rozbivBY do begin for k:=1 to rozbivBX do begin sumcl:=sumcl+ (A1 [i, k] *B1 [k,j]); end; C1[i,j]:=sumcl; sumcl:=0; end; {C2} sumcl:=0; for i:=1 to rowa-rozbivAX do for j:=1 to rozbivBY do begin for k:=1 to rozbivBY do begin sumcl :=sumcl+ (A2[i,k] *B1 [k, j] ); end; C21[i,j]:=sumcl; sumcl:=0; end; sumc2:=0; for i:=1 to rowa-rozbivAX do for j:=1 to colb-rozbivBX do begin for k:=1 to colb-rozbivBX do begin sumc2:=sumc2+(A3[i,k]*B2 [k, j] ); end; C22 [i,j] :=sumc2; sumc2:=0; end; for i:=1 to rowa-rozbivAX do for j:=1 to rozbivBY do C2[i, j]:=C21[i,j]+C22[i,j]; {CO} for i:=1 to 3 do for j:=1 to 3 do C3[i,j]:=0; {C3} sumcl:=0; for i:=1 to rowa-rozbivAX do for j:=1 to rowb-rozbivBY do begin for k:=1 to rowb-rozbivBY do begin sumcl :=sumcl+ (A3 [i, k] *B3 [k, j] ); end; C21 [i,j]:=sumcl; sumcl:=0; end; {Вывод матриц C} Clrscr; Writeln ('C1'); for i:=1 to rozbivAX do begin for j:=1 to rozbivBY do write (' ',C1[i,j]); writeln; end; writeln; writeln ('C2'); for i:=1 to rowa-rozbivAX do begin for j:=1 to rozbivBY do write (' ',C2[i,j]); writeln; end; writeln; Writeln('CO'); for i:=1 to 1 do begin for j:=1 to 1 do write (' ',C3[i,j]); writeln; end; writeln; Writeln('C3'); for i:=1 to rowa-rozbivAX do begin for j:=1 to rowb-rozbivBY+1 do write (' ',C4[i,j]); writeln; end; writeln; end; BEGIN clrscr; ReadAB; writeMatrA; writeMatrB; Readln; RozbivMatrixA; readln; RozbivMatrixB; readln; peremnogenie; writeln; writeln; readkey; END.
До тех пор, пока ты будешь пытаться читать из A (неинициализированный файл, описанный глобально), вместо того чтобы читать из F - будешь получать ошибки
Автор: metamfetamin 14.11.2007 3:43
Цитата(volvo @ 13.11.2007 23:31)
До тех пор, пока ты будешь пытаться читать из A (неинициализированный файл, описанный глобально), вместо того чтобы читать из F - будешь получать ошибки
Но дело в том что если я дальше вместо А ставлю f например вместо:
То оно мне выдает(там где синим отмечено): invalid numeric format
Автор: volvo 14.11.2007 4:14
И опять прав компилятор... Какое первое значение в файле? А куда ты его читаешь? В переменную rowa типа Integer. Ты на самом деле думаешь, что вещественное значение можно прочесть в целочисленную переменную?
А полностью смотреть программу я не смотрю только потому, что читать вот такие исходники просто надоело. Ты выкладываешь программу на форум? Помощь нужна тебе? Будь добр привести исходник в нормальный вид (хотя бы сделать отступы "лесенкой").
Автор: metamfetamin 15.11.2007 14:14
Короче прога вроде работает но не так как надо. С матрицами разобрался там нужно было поставить целые числа (в текстовых файлах)....что касается того как работает прога то тут возникли проблемы. Выводить(____.jpg) то что написано в строке writeln выделено красным, хотя должно показать как будут поделеные матрицы!!!!! Отредактированую программу прицепил и файлы к ней тоже!!!!! Посмотрите пожалуйста что может быть!!!