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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2012, 23:54   #1
katushaa
Новичок
Джуниор
 
Регистрация: 10.04.2012
Сообщений: 2
Сообщение Создать новый файл той же структуры, содержащий матрицу, транспонированную к исходной.

Дан файл вещественных чисел, содержащий элементы прямоугольной матрицы (по строкам), причем первый элемент файла содержит количество столбцов матрицы. Создать новый файл той же структуры, содержащий матрицу, транспонированную к исходной.
katushaa вне форума Ответить с цитированием
Старый 11.04.2012, 13:55   #2
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
Радость

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

все остальное вот...

Код:
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 Tmarix;
begin
  assign(f,filename);
  rewrite(f);
  write(f,a);
  close(f);
end;
// загрузить матрицу из массива
Procedure LoadMasivFromFile(var a:Tmarix;Filename:string);
var x,y:integer;
   f:file of Tmarix;
begin
  assign(f,filename);
  reset(f);
  read(f,a);
  close(f);
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;


begin
clrscr;
CreateMas(m,5); // создаем матрицу
//LoadMasivFromFile(m,'c:\1.myfile');
Writeln('Исходная матрица ');
ViewMarix(m);
// сохроняем матрицу
SaveMasivToFile(m,'c:\1.myfile');

end.
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype

Последний раз редактировалось denisbrain; 11.04.2012 в 14:10.
denisbrain вне форума Ответить с цитированием
Старый 11.04.2012, 14:10   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от denisbrain
правила транспонирования матрицы приведите
Жжёте!
Какие могут быть "правила" транспонирования, когда транспонирование - это само по себе фиксированное (известное преобразование матрицы!) - википедия-Транспонированная матрица
Цитата:
Транспонированная матрица — матрица A^T, полученная из исходной матрицы A заменой строк на столбцы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.04.2012, 14:28   #4
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Жжёте!
Какие могут быть "правила" транспонирования, когда транспонирование - это само по себе фиксированное (известное преобразование матрицы!) - википедия-Транспонированная матрица
спасибо.
Код:
{Дан файл вещественных чисел, содержащий элементы прямоугольной матрицы (по строкам),
причем первый элемент файла содержит количество столбцов матрицы.
Создать новый файл той же структуры, содержащий матрицу, транспонированную к исходной.
 }
 
 
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 Tmarix;
begin
  assign(f,filename);
  rewrite(f);
  write(f,a);
  close(f);
end;
// загрузить матрицу из массива
Procedure LoadMasivFromFile(var a:Tmarix;Filename:string);
var x,y:integer;
   f:file of Tmarix;
begin
  assign(f,filename);
  reset(f);
  read(f,a);
  close(f);
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;


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

end.
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 11.04.2012, 14:29   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Свои 5 копеек
Код:
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.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.04.2012, 14:42   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

denisbrain, у Вас неверное решение. у Вас файл имеет тип МАТРИЦА, а нужен тип файла - вещественное число.

BDA, ну да, всё банально. и ПОЧТИ правильно...
1-е. вы забываете в новый файл записать размер (количество столбцов)
2-е. а где написано, что матрица КВАДРАТНАЯ ? Она прямоугольная, но не факт, что число строк и столбцов одинаково.
3-е. нет проверки на то, что размер матрицы в файле больше заданной Вами константы (100)

а в остальном - всё хорошо!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.04.2012, 15:13   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Serge_Bliznykov, согласен со всей критикой
Эх, хоть прямо ставь Windows XP с Turbo Pascal на виртуальную машину
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.04.2012, 15:36   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Эх, хоть прямо ставь Windows XP с Turbo Pascal на виртуальную машину
зачем?! Вы и так неимоверно большую помощь всем обучающимся оказываете!
Имхо, достаточно.


p.s. я же делаю замечания в большей мере для FYI и для тех, кто поймёт, о чём я. я уверен, что в 99% случаев самый простой, первоначальный вариант вполне устраивает TC (и его преподавателея, что тоже важно! )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.04.2012, 15:46   #9
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
denisbrain, у Вас неверное решение. у Вас файл имеет тип МАТРИЦА, а нужен тип файла - вещественное число.

BDA, ну да, всё банально. и ПОЧТИ правильно...
1-е. вы забываете в новый файл записать размер (количество столбцов)
2-е. а где написано, что матрица КВАДРАТНАЯ ? Она прямоугольная, но не факт, что число строк и столбцов одинаково.
3-е. нет проверки на то, что размер матрицы в файле больше заданной Вами константы (100)

а в остальном - всё хорошо!
причем первый элемент файла содержит количество столбцов матрицы.
кол-во столбцов матрицы тоже вещественное число 1,5 столбца?


Цитата:

Tmarix=record // структура файла
col:real;
massiv:array [1..maxcount,1..maxcount] of real;
end;
и где юзается везде round(col)

)))
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 11.04.2012, 16:03   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
причем первый элемент файла содержит количество столбцов матрицы.
кол-во столбцов матрицы тоже вещественное число 1,5 столбца?
ну, разумеется, там должно быть вещественное число с НУЛЕВОЙ дробной частью.
т.е. или 1.0 или 2.0 и т.д. (это сделано для упрощения - чтобы структура файла была простой!)

в решении от BDA это число приводится к целому p так:
Цитата:
Код:
  read(f1, p1);
  p := round(p1);
  for i := 1 to p do
Цитата:
Tmarix=record // структура файла
в том то и дело, что у Вас структура файла предполагает наличе в файле 10 000 вещественных чисел. А их там - НЕТ!
сравните, у вас:
f:file of Tmarix;
а нужно:
f1, f2: file of real;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать файл содержащий те же элементы в обратном порядке Aimet Паскаль, Turbo Pascal, PascalABC.NET 3 11.04.2012 13:47
Создать файл, содержащий сведения о сотрудниках института. Olgaandsasha Помощь студентам 4 10.04.2012 03:11
Создать файл содержащий сведения о телефонах абонентов region23 Помощь студентам 2 30.11.2010 15:18
Создать файл содержащий сведения о том kot i @ Паскаль, Turbo Pascal, PascalABC.NET 0 25.05.2010 17:27
Необходимо создать файл, содержащий информацию о багаже пасажиров Андрю)(@ Помощь студентам 3 27.11.2008 10:08