Приветствую Вас Гость | RSS

Delphi заготовки

Среда, 01.05.2024, 14:11
Главная » 2012 » Апрель » 11 » Транспонирование матрицы Pascal
14:35
Транспонирование матрицы Pascal

{Дан файл вещественных чисел, содержащий элементы прямоугольной
 матрицы (по строкам), причем первый элемент файла содержит количество столбцов
матрицы.Создать новый файл той же структуры,
содержащий матрицу,
транспонированную к исходной. }

uses crt;
const
maxcount = 100; // максимальное число элементов матрицы

type
Tmarix=record // структура файла
col:integer;
massiv:array [1..maxcount,1..maxcount] of real;
end;

var
m:Tmarix;

// создание матрицы
Procedure CreateMas(var a:Tmarix; col:integer);
var x,y:integer;
begin
a.col:=col;
for x:=1 to col do
for y:=1 to col do a.massiv[x,y]:=1+random(150);
end;
// сохранить матрицу в массив
Procedure SaveMasivToFile(a:Tmarix;Filename:string);
var x,y:integer;
f:file of real;
buf:real;
begin
assign(f,filename);
rewrite(f);
buf:=a.col;
write(f,buf);
for X:=1 to a.col do
for y:=1 to a.col do
write(f,a.massiv[x,y]);
close(f);
end;
// загрузить матрицу из массива
Procedure LoadMasivFromFile(var a:Tmarix;Filename:string;var errorlog:integer);
var x,y:integer;
f:file of real;
buf:real;
begin
errorlog:=0;
try
assign(f,filename);
reset(f);
read(f,buf);
a.col:=round(buf);
if a.col>maxcount then begin Writeln('Массив не может быть больше ',maxcount);
errorlog:=2; // размер массива не должен привышать заданый размер
exit;
end;
for x:=1 to a.col do
for y:=1 to a.col do begin
read(f,buf);
a.massiv[x,y]:=buf;
end;
close(f);
except
errorlog:=1; // возникли проблы ввода вывода
writeln('Ошибка ввода массива');
end;
end;
// вывести матрицу на экран

// Транспонирование матрицы
procedure Transpose(var a:Tmarix);
var x,y:integer;
t:real;
begin
for y:=1 to a.col do
for x:=y+1 to a.col do begin
t:=a.massiv[x,y];
a.massiv[x,y]:=a.massiv[y,x];
a.massiv[y,x]:=t;
end;
end;

Procedure ViewMarix(a:Tmarix);
var x,y:integer;
begin
for y:=1 to a.col do begin writeln; writeln; // два пробела
for x:=1 to a.col do
write(a.massiv[x,y]:8:2,' ');
end;
end;

var e:integer;
begin
clrscr; // очистка экрана
// для создания файла
//CreateMas(m,5); // создаем матрицу
//SaveMasivToFile(m,'input.dat');
LoadMasivFromFile(m,'input.dat',e); // считываем матрицу
if e=0 then begin
Writeln('Исходная матрица ');
ViewMarix(m); // выводим исходную матрицу на экран
Writeln;
Writeln('Транспонирование матрицы');
Transpose(m); // Транспонирование матрицы
//Transpose(m); //
ViewMarix(m); // выводим на экран
SaveMasivToFile(m,'output.dat'); // сохроняем полученную матрицу
end;
end.





решение от пользователя
http://www.programmersforum.ru/member.php?u=116364




uses crt; const n = 100; var a: array[1..n, 1..n] of real; i, j, p: integer; p1: real; f1, f2: file of real; begin assign(f1, 'in.txt'); reset(f1); assign(f2, 'out.txt'); rewrite(f2); read(f1, p1); p := round(p1); for i := 1 to p do for j := 1 to p do read(f1, a[i, j]); for i := 1 to p do for j := 1 to p do write(f2, a[j, i]); close(f1); close(f2); end.
Просмотров: 6942 | Добавил: NetSoftWare | Рейтинг: 5.0/1
Всего комментариев: 1
1 Oksijoift  
0
http://www.russian-garmon.ru/cinema/57-garmnews-archive/10255-rubtsovsk-altajskij-kraj-gorodskoj-konkurs-garmonistov-i-chastushechnikov-garmoshechka-govorushechka-6-sentyabrya-2014g

Имя *:
Email *:
Код *: