IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Паскаль. Деление матриц. Немогу запустить программу!
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Мужской

Репутация: -  -1  +


Люди не могу запустить прогу. Пишет "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.txt ( 258 байт ) Кол-во скачиваний: 336
Прикрепленный файл  B.txt ( 215 байт ) Кол-во скачиваний: 317
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

что делаешь, по-твоему? Читаешь? Можно поинтересоваться, ОТКУДА?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Мужской

Репутация: -  -1  +


Цитата(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);
...

Но в следующей строке оно мне пишет тоже самое!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Мужской

Репутация: -  -1  +


Цитата(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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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

А полностью смотреть программу я не смотрю только потому, что читать вот такие исходники просто надоело. Ты выкладываешь программу на форум? Помощь нужна тебе? Будь добр привести исходник в нормальный вид (хотя бы сделать отступы "лесенкой").
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Мужской

Репутация: -  -1  +


Короче прога вроде работает но не так как надо. С матрицами разобрался там нужно было поставить целые числа (в текстовых файлах)....что касается того как работает прога то тут возникли проблемы.
Выводить(____.jpg) то что написано в строке writeln выделено красным, хотя должно показать как будут поделеные матрицы!!!!! Отредактированую программу прицепил и файлы к ней тоже!!!!! Посмотрите пожалуйста что может быть!!!


Эскизы прикрепленных изображений
Прикрепленное изображение

Прикрепленные файлы
Прикрепленный файл  A.txt ( 257 байт ) Кол-во скачиваний: 313
Прикрепленный файл  B.txt ( 190 байт ) Кол-во скачиваний: 319
Прикрепленный файл  matrix.txt ( 6.42 килобайт ) Кол-во скачиваний: 331
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 8:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name