Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ вычисления и запись в файл

Автор: Szug 22.11.2006 2:46

Помогите, пожалуйста, разобраться! В задаче требует: вычислить С=2*(А-0,5*В)+А*В, где А,В,С - матрицы мах 8х8. Выполнить с помощью подпрограмм. ОБОЙТИСЬ БЕЗ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ!!!??? (не могу понять как это возможно). Организовать возможность ввода размерности и элементов с клавиатуры и из файла и выдачу результата на дисплей и в файл. Программу какую-никакую я написал, но вот при вводе данных из файла - запись в файл не происходит. а с клавы все ОК! Подскажите что у меня не так, плиз-з-з....

Код

program Lab11;
type
Matr=array[1..8,1..8] of real;
var
a,b,c: matr;
n,m:byte;
r,z:char;
Procedure vvod(var x:matr;y:char);{Процедура ввода матрицы с клавиатуры}
var
i,j:byte;
begin
for i:=1 to n do
for j:=1 to m do
begin
writeln('Введите элемент матрицы ',y,i,j);
readln(x[i,j]);
end;
end;
{Процедура ввода матрицы из файла}
Procedure vvodF(var a,b:matr);
var
inp:text;
i,j:byte;
begin
assign(inp,'data.txt');
reset(inp);
read(inp,n,m);
for i:=1 to n do
for j:=1 to m do
read(inp,a[i,j]);
for i:=1 to n do
for j:=1 to m do
read(inp,b[i,j]);
close(inp);
end;
Procedure outF(var x:matr);{Процедура вывода матрицы в файл}
var out : text;
i,j:byte;
begin
assign(out,'rezultat.dat');
rewrite(out);
for i:=1 to n do begin
{writeln(out);}
for j:=1 to m do
write(out,x[i,j]);
end;
close(out);
end;
Procedure OutMatr(x:matr); { процедура вывода матрицы на экран }
var i,j:byte;
  begin
  write('    ');
  for j:=1 to m do write (i:8);
  writeln;
  write('     |');
  for j:=1 to m do write ('--------');
  writeln;
  for i:=1 to n do
    begin
    write (i:5,'|');
    for j:=1 to m do write(x[i,j]:5);
    writeln;
    end;
  end;
procedure axb(var ab:matr);{процедура умножения матриц AB }
var s:real; i,j,k:byte;
begin
for i:=1 to n do
for j:=1 to m do
  begin
  s:=0;
  for k:=1 to n do
    s:=s+a[k,i]*b[j,k];
  c[i,j]:=s;
  end;
  end;
procedure rez(var c:matr); {функция вычисления С}
var
i,j:byte;
begin
for i:=1 to n do
for j:=1 to m do
c[i,j]:=2*(a[i,j]+0.5*b[i,j])+c[i,j];
end;
begin
writeln('Для ввода данных с клавиатуры нажмите <K>, из файла - <F>');
read(r);
case r of 'f':vvodF(a,b);
'k':begin
writeln('ВВедите размерность матриц NxM ');
readln(n,m);{Вводим размерность матриц NxM};
vvod(a,'a');
vvod(b,'b');
end;
end;
{ вывод исходных матриц }
writeln;
writeln('a:');
OutMatr(a);
writeln;
writeln('b:');
OutMatr(b);
writeln;
{вычисляем произведение матриц А и В}
axb(c);
{вычисляем С по формуле}
rez(c);
{ вывод результата }
writeln('с:');
OutMatr(c);
writeln;
writeln('Расчет окончен. Сохранить результат в файл? Y/N');
readln(z);
if z = 'y' then
begin
outF(c);
writeln ('Pезультат сохранен в файл "RESULTAT.TXT"');
readln;
end;
end.