Помощь - Поиск - Пользователи - Календарь
Полная версия: Паскаль. Деление матриц. Немогу запустить программу!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
metamfetamin
Люди не могу запустить прогу. Пишет "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.
volvo
Цитата
Пишет "file not open for input".
Правильно пишет... Ты здесь:
procedure ReadAB;
Begin
Assign(f, 'A.txt');
Reset(f);
Assign(f,'B.txt');
Reset(f); {init file}
Readln(A); { <--- !!! }
...

что делаешь, по-твоему? Читаешь? Можно поинтересоваться, ОТКУДА?
metamfetamin
Цитата(volvo @ 13.11.2007 23:01) *

Правильно пишет... Ты здесь:
procedure ReadAB;
Begin
Assign(f, 'A.txt');
Reset(f);
Assign(f,'B.txt');
Reset(f); {init file}
Readln(A); { <--- !!! }
...

что делаешь, по-твоему? Читаешь? Можно поинтересоваться, ОТКУДА?



Я исправил на:
procedure ReadAB;
Begin
Assign(f, 'A.txt');
Reset(f);
Assign(f,'B.txt');
Reset(f); {init file}
Readln(f);
...

Но в следующей строке оно мне пишет тоже самое!!!
volvo
До тех пор, пока ты будешь пытаться читать из A (неинициализированный файл, описанный глобально), вместо того чтобы читать из F - будешь получать ошибки
metamfetamin
Цитата(volvo @ 13.11.2007 23:31) *

До тех пор, пока ты будешь пытаться читать из A (неинициализированный файл, описанный глобально), вместо того чтобы читать из F - будешь получать ошибки


Но дело в том что если я дальше вместо А ставлю f например вместо:
Код
Begin
Assign(f, 'A.txt');
Reset(f);
Assign(f,'B.txt');
Reset(f); {init file}
[color=#3366FF]Readln(A);
Read(A,rowa);
Readln(A);
Read(A,cola);
Readln(A);
Read(A,rozbivAX);
Readln(A);[/color]
Ставлю:
Код
Begin
Assign(f, 'A.txt');
Reset(f);
Assign(f,'B.txt');
Reset(f); {init file}
Readln(а);
[color=#3333FF]Read(f,rowa);[/color]
Readln(f);
Read(f,cola);
Readln(f);
Read(f,rozbivAX);
Readln(f);

То оно мне выдает(там где синим отмечено): invalid numeric format
volvo
И опять прав компилятор... Какое первое значение в файле? А куда ты его читаешь? В переменную rowa типа Integer. Ты на самом деле думаешь, что вещественное значение можно прочесть в целочисленную переменную?

А полностью смотреть программу я не смотрю только потому, что читать вот такие исходники просто надоело. Ты выкладываешь программу на форум? Помощь нужна тебе? Будь добр привести исходник в нормальный вид (хотя бы сделать отступы "лесенкой").
metamfetamin
Короче прога вроде работает но не так как надо. С матрицами разобрался там нужно было поставить целые числа (в текстовых файлах)....что касается того как работает прога то тут возникли проблемы.
Выводить(____.jpg) то что написано в строке writeln выделено красным, хотя должно показать как будут поделеные матрицы!!!!! Отредактированую программу прицепил и файлы к ней тоже!!!!! Посмотрите пожалуйста что может быть!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.