Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2012, 12:01   #1
Rocky095
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 13
По умолчанию Ввод трёхмерной матрицы

Доброго времени суток, ув форумчане!
Возникла следующая проблема:
как прочитать из файла и вывести на экран трехмерную матрицу A(N,N,M) ?
сделал по аналогии с двумерными..но не работает..в чём ошибка?
...........
const
N=4;
M=3;
............
For i:=1 to N do
For j:=1 to N do
For l:=1 to M do
begin
Read(inputA,A[i,j,l]);
write(A[i,j,l]:5:2);
end;
writeln;
end;

Спасибо.
Rocky095 вне форума Ответить с цитированием
Старый 17.04.2012, 12:06   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Как вы определяете, что она не работает?
Все зависит от того, как задана матрица в текстовом файле.
Приведите пример входных данных.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 17.04.2012, 12:13   #3
Rocky095
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 13
По умолчанию

MasA.txt
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
11 12 13 14 15 16 17 18

Текст программы:
Program mas15;
uses crt;
const
N=3;
M=4;
K=1;
type
matrix=array[1..N, 1..N, 1..M] of real;
var
i,j,l:integer;
inputA,inputB:text;
z:integer;
A:matrix;
procedure vvod_masA;
begin
assign(inputA,'masA.txt');
reset(inputA);
For i:=1 to N do
For j:=1 to N do
For l:=1 to M do
begin
Read(inputA,A[i,j,l]);
write(A[i,j,l]:5:2);
end;
writeln;
end;
begin
vvod_masA;
close(inputA);
end.

Итог работы программы:
12345678910109876543211112131415161 71800000000

Что бы хотелось видеть))
1 2 3
10 9 8
11 12 13 14
Rocky095 вне форума Ответить с цитированием
Старый 17.04.2012, 12:15   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Так у вас не трехмерный массив, а двухмерный во входном файле.
Напишите и условие задачи, а то по коду программы совершенно не хочется разбираться, что нужно получить и из чего.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 17.04.2012, 12:22   #5
Rocky095
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 13
По умолчанию

Используя универсальную для различных наборов исходных данных подпрограмму нахождения транспонированной матрицы самой в себя, преобразовать исходные матрицы A(N,N,M) и B(N,N,K) в горизонтальных плоскостях.
Элементы матриц-вещественные числа.
В качестве одного из вариантов исходных данных принять: N=8 M=6 K=4.
Алгоритм должен быть параметризован; обмен данными с подпрограммой должен осуществляться только через параметры; исходные массивы должны храниться в отдельных файлах.
Rocky095 вне форума Ответить с цитированием
Старый 17.04.2012, 12:33   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Как происходит транспонирование трехмерных матриц?
Относительно диагонали, идущей от (1,1,1) вглубь матрицы?
Матрица задается по слоям в файле?
A(N,N,M) - матрица с N строками N столбцами и глубиной M?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 17.04.2012, 12:43   #7
Rocky095
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 13
По умолчанию

Вот нашёл программу, которая вывод 3-х мерную матрицу как бы по слоям(горизонтальным плоскостям)..но здесь она заполняется через процедуру рандом..
uses crt;
const
amax=3;
var
a:array[1..amax,1..amax,1..amax] of byte;
i,j,k:byte;
procedure rnd;
begin
randomize;
for i:=1 to amax do
begin
for j:=1 to amax do
begin
for k:=1 to amax do
begin
a[i,j,k]:=random(2);
gotoxy(i*5+k,j*4-k);
write(a[i,j,k]);
end;
end;
end;
end;

begin
clrscr;
rnd;
gotoxy(1,amax*4+1);
writeln;
readln;
end.

Результат работы программы
1111.png
Rocky095 вне форума Ответить с цитированием
Старый 17.04.2012, 12:51   #8
Rocky095
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Как происходит транспонирование трехмерных матриц?
Относительно диагонали, идущей от (1,1,1) вглубь матрицы?
Матрица задается по слоям в файле?
A(N,N,M) - матрица с N строками N столбцами и глубиной M?
Транпонировать по слоям
Про то как задаётся матрица в файле ничего не было сказано, те задаём как хотим)
N,N,M - это как блина ширина высота, те строки, столбцы и глубина, те M количество слоёв, а NХN матрица которую нужно транспонировать
Rocky095 вне форума Ответить с цитированием
Старый 17.04.2012, 15:13   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
uses
  CRT;

const
  amax = 100;
type
  mas = array[1..amax, 1..amax, 1..amax] of real;
var
  a, b: mas;
  n, h, k: integer;

procedure readmatrix(var a: mas; var n, h: integer; name: string);
var
  i, j, q: integer;
  f: text;
begin
  assign(f, name);
  reset(f);
  read(f, n, h);
  for q := 1 to h do
    for i := 1 to n do
      for j := 1 to n do
        read(f, a[i, j, q]);
  close(f);
end;

procedure printmatrix(var a: mas; n, h: integer);
var
  i, j, q: integer;
begin
  for q := 1 to h do
  begin
    for i := 1 to n do
    begin
      write(' ': 2 * (n - i + 1));
      for j := 1 to n do
        write(a[i, j, q]: 3: 2, ' ': 2);
      writeln;
    end;
    writeln;
  end;
end;

procedure transpmatrix(var a: mas; n, h: integer);
var
  i, j, q: integer;
  tmp: real;
begin
  for q := 1 to h do
    for i := 1 to n do
      for j := i + 1 to n do
      begin
        tmp := a[i, j, q];
        a[i, j, q] := a[j, i, q];
        a[j, i, q] := tmp;
      end;
end;

begin
  readmatrix(a, n, h, 'masa.txt');
  writeln('Source matrix A:');
  printmatrix(a, n, h);
  transpmatrix(a, n, h);
  writeln('Transp matrix A:');
  printmatrix(a, n, h);
  readmatrix(b, n, k, 'masb.txt');
  writeln('Source matrix B:');
  printmatrix(b, n, k);
  transpmatrix(b, n, k);
  writeln('Transp matrix B:');
  printmatrix(b, n, k);
  readln;
end.
Матрицы считываются из файлов.
Файл вида:
n h
первая строка первого слоя
...
последняя строка последнего слоя
(все числа могут идти в одну строчку).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 17.04.2012 в 15:23.
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод символьной матрицы Exoo Помощь студентам 2 29.10.2011 22:26
c++ допишите ввод матрицы в файл Repac123456 Помощь студентам 3 26.05.2011 01:04
Ввод матрицы La`Fleur C++ Builder 3 07.05.2011 20:41
гибкий ввод матрицы konstantin_ Паскаль, Turbo Pascal, PascalABC.NET 6 29.06.2010 18:06