Здравствуйте уважаемые форумчане!
Задача: Ввод матрицы из файла и вывод этой же матрицы под
другим именем в другой файл (файлы задаются пользователем).
В итоге на экран вывод нормальный, а в файл только в строку или в столбец.
Где ошибка не пойму. Помогите пожалуйста.
Вот код:
const
n=2;
m=3;
type
a=array [1..n,1..m] of real;
var
i,j: integer;
f:text;
name,name1: string;
NRM:a; new_matr:a;
begin
writeln('WRITE NAME of DATA FILE');
readln(name); assign(f, name); reset(f);
for i:=1 to N do
for j:=1 to M do
read(f,NRM[i,j]);
readln(f);
close(f);
writeln('WRITE NAME of RESULT FILE');
readln(name1);
assign(f, name1);
rewrite(f);
for i:=1 to n do
for j:=1 to m do
new_matr[i,j]:=NRM[i,j];
writeln (f,'matrisa A' );
for i:=1 to n do
begin
for j:=1 to m do
write(f,new_matr[i,j]:8:3);
writeln;
end;
writeln(f);
close(f);
end.
Ты забыл кое-что:
for j:=1 to m do
write(f,new_matr[i,j]:8:3);
writeln(f);
end;
Ограничения по памяти связаны с тем, что Турбопас под дос и реальный режим, у которого с памятью хреново. Короче, FPC линуксовый возьми, там нет ограничений на память.
Что такое сеточные вычисления - не знаю.
На FPC линуксовом и работаю, спасибо.
Не знал, что там нет ограничений на память.
Ты только в настройках компилятора поройся хорошенько, там это есть.
Выставь 32-битный режим например.
Тарас, благодарю за помощь. Прошу еще немного терпения.
Тема еще не закрыта.
Я хочу сделать модификацию этой самой программы,
но так, чтобы она считывала данные с исходного файла по частям.
Скажем, в файле несколько матриц размером 3х4, но они без
разрывов находятся в файле (т.е. одна матрица под другой).
Программа считывает 1-ю и умножает на 2-ю и выводит в 3-ю.
Так как матрицы одной размерности, то все должно быть хорошо.
Одно удручает - мой код совсем плох.
Если у тебя будет время, подскажи, где ошибка.
Может я неправильно мыслю.
Вот код:
const
n=3;
m=4;
type
a=array [1..n,1..m] of real;
var
i,j: integer;
f:text;
name,name1: string;
NRM,new_matr,old_matr:a;
begin
writeln('WRITE NAME of DATA FILE');
readln(name); assign(f, name); reset(f);
for i:=1 to 2 do {s4itivaem 1-y matrisy iz isxodnogo faila}
for j:=1 to M do
read(f,NRM[i,j]);
for i:=3 to N do {s4itivaem 2-y matrisy iz isxodnogo faila}
for j:=1 to M do
read(f,old_matr[i,j]);
readln(f);
close(f);
writeln('WRITE NAME of RESULT FILE');
readln(name1);
assign(f, name1);
rewrite(f);
for i:=1 to n do
for j:=1 to m do
new_matr[i,j]:=NRM[i,j]*old_matr[i,j];
writeln (f,'matrisa A' );
for i:=1 to 2 do
begin
for j:=1 to 3 do
write(f,new_matr[i,j]:8:2);
writeln(f);
end;
writeln(f);
close(f);
end.
В чём проблема? Матрицы последовательно считываются из файла, да.
> Но тогда как открыть 3-4 файла на чтение сразу?
В данном случае это не нужно, но вообще - заводишь 3-4 файловые переменные и каждую связываешь со своим файлом.
>>> В чём проблема? Матрицы последовательно считываются из файла, да.
Проблема в том, что этот код не работает. Выводятся 0.
хз.
Почему первая матрица читается в строки
for i:=1 to 2 do
а вторая в
for i:=3 to N do
Файл данных совсем нельзя привести, на котором у тебя происходит некорректная работа программы? Чтоб не выдумывать что-то свое, а взять то, что у тебя УЖЕ не работает и проверить...
Но ты совместил эти пути, считывая в разные строки разных матриц.
Хотя обрабатываешь (делаешь покомпонентное умножение) ты их так, будто ты считывал в один строки.
Ты работаешь с данными так, словно они находятся в разных матрицах:
for i:=1 to n do
for j:=1 to m do
new_matr[i,j]:=NRM[i,j]*old_matr[i,j];
for i:=1 to n do
for j:=1 to m do
new_matr[i,j]:=NRM[i,j]*old_matr[i,j];
const
n=3; m=4;
type
a=array [1..n,1..m] of real;
var
i,j: integer;
f1,f2,f3:text;
name1,name2,name3: string;
A,B,C:a;
begin
writeln('WRITE 1 NAME of DATA FILE');
readln(name1); assign(f1, name1); reset(f1);
for i:=1 to N do {s4itivaem 1-y matrisy iz isxodnogo faila 1}
for j:=1 to M do
read(f1,A[i,j]);
readln(f1);
close(f1);
writeln('WRITE 2 NAME of DATA FILE');
readln(name2); assign(f2, name2); reset(f2);
for i:=1 to N do {s4itivaem 2-y matrisy iz isxodnogo faila 2}
for j:=1 to M do
read(f2,B[i,j]);
readln(f2);
close(f2);
writeln('WRITE 3 NAME of RESULT FILE');
readln(name3); assign(f3, name3); rewrite(f3);
for i:=1 to N do
for j:=1 to M do
C[i,j]:=A[i,j]*B[i,j];
writeln(f3,'matrisa C' );
for i:=1 to N do
begin
for j:=1 to M do
write(f3,C[i,j]:8:2);
writeln(f3);
end;
writeln(f3);
close(f3);
end.
for i:=3 to N do {s4itivaem 2-y matrisy iz isxodnogo faila}
Читай выше, я написал в чем проблема...
Хорошо, но в моей последней редакции кода все нормально.
Т.е. матрицы считываются каждая со своего файла, но воз и ныне там.
Код не работает. Где ошибка ???
3 файла, 2 матрицы, 3-я матрица результирующая.
И все, этого достаточно.
Помогите пожалуйста.
Твоя последняя редакция даже не компилируется, потому что нельзя одновременно называть A и тип и переменную этого типа.
А если заменить название типа на TA, то все прекрасно работает. Содержимое третьего файла выходит таким:
Может надо в настройках IDE (http://forum.pascal.net.ru/index.php?showtopic=26854 я показывал, как это можно сделать, под Linux-ом то же самое) выставить показ ошибок (или делать это в ком. строке, если ты IDE не используешь)? Нормально компилятор показывает ошибки, даже больше того, не только ошибки, а и хинты и предупреждения.
А что, ФПЦ по умолчанию ошибки не показывает? Смысл этой опции "не говорить, где"?