Помощь - Поиск - Пользователи - Календарь
Полная версия: Файлы и запись матриц в них
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
QDe5n1K
Сабж...
1) В общем первая процедура - ввод двумерного целочисленного массива ( количество чисел кратно 10, 10 столбцов) и запись его в файл.
2) Вторая процедура - Вызов этого двумерного массива из файла и обработка его таким образом, что в каждой строке сначала идут отрицательные числа, затем положительные, запись в другой файл...
Помогите пожалуйста...
QDe5n1K
Вот наработка по первой процедуре:
Код

type TElem = shortint;
    Matrix = array[1..100,1..100] of TElem;
    Filex = file of TElem;

procedure file_name(var result:string);
    begin
    writeln(' Enter name of new file');
    readln(result);
    end;

procedure create_new_file(var filename:string; var m,n:integer);
var
a:matrix;
i,j:word;
numb_data:integer;
ff:filex;
begin
file_name(filename);
assign(ff,filename);
rewrite(ff);
write('Enter number of data: ');
readln(numb_data);
if numb_data mod 10 = 0 then
    m:=numb_data div 10
     else
m:=1+(numb_data div 10);
n:=10;
writeln('<R>-random. input of data, other keys-manual. input of data: ');
if keypressed='R' then
     begin
     end;
   else  
begin
For i:=1 to n do
begin
For j:=1 to m do
begin
 write('A[',i,' ',j,']= ');
 readln(A[i,j]);
end;
end;
end;
writeln('Sohraneno');
for i:=1 to n do
for j:=1 to m do
write(ff,a[i,j]);
close(ff);
end;

Но... хоть убейте, не пойму, почему не работает! (для проверки я в последний цикл вставлял write(a[i,j]); , мне выводились цифры в строчку...
Randomный ввод чисел пока не написал, это не столь важно...
Jahnerus
Напиши обязательно в каком виде нужно записывать матрицу в файл...
Я написал реализацию в которой матрица записывается в файл в столбец ...
если в принцыпе это важно, то можно и переделать так проще читать данные !
Код
uses crt;
const n=3;{число строк}
type m=array[1..n,1..10] of integer;
var i,j,g:integer;
 a,b:m;
procedure fwrite(a:m; s:string);
var f:text;
begin
assign(f,s);
rewrite(f);
for i:=1 to n do begin
 for j:=1 to 10 do writeln(f,a[i,j]);
end;
close(f);
end;
function fread(s:string; var a:m):boolean;
var f:text;
 st:string;
 er:integer;
begin
fread:=true;
assign(f,s);
reset(f);
for i:=1 to n do begin
 for j:=1 to 10 do begin
   readln(f,st);
   val(st,a[i,j],er);
   if er<>0 then fread:=false;
 end;
end;
close(f);
end;
begin
clrscr;
for i:=1 to n do begin
 for j:=1 to 10 do begin
   write('Введите M[',i,',',j,'] ');
   readln(a[i,j]);
 end;
end;
fwrite(a,'c:\out.dat');
if not(fread('c:\out.dat',a)) then writeln('Ошибка чтения данных');
writeln('Массив до преобразования:');
for i:=1 to n do begin
 for j:=1 to 10 do write(a[i,j]:4);
 writeln;
end;
for i:=1 to n do begin
 g:=0;
 for j:=1 to 10 do begin
   if a[i,j]<0 then begin
     g:=g+1;
     b[i,g]:=a[i,j];
   end;
 end;
 for j:=1 to 10 do begin
   if a[i,j]>=0 then begin
     g:=g+1;
     b[i,g]:=a[i,j];
   end;
 end;
end;
writeln('Массив после преобразования:');
for i:=1 to n do begin
 for j:=1 to 10 do write(b[i,j]:4);
 writeln;
end;
fwrite(b,'c:\out_2.dat');
readln;
end.
QDe5n1K
В файл матрицу нужно записывать в столбец.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.