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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2010, 08:25   #1
Lavallet
Новичок
Джуниор
 
Регистрация: 25.11.2010
Сообщений: 2
По умолчанию Pascal. Работа с внешними файлами, перестановка стобцов.

Здравствуйте, уважаемые программисты.

Имеется задача:

Дана матрица размерности M X N. Упорядочить столбцы матрицы в соответствии с возрастанием элементов и i-ой строке. Вывести исходную и полученную матрицы. Перестановку двух столбцов оформить подпрограммой (процедурой).

В принципе, программа готова, требуется оформить правильную перестановку столбцов через процедуру (которая у меня, по словам моего преподавателя, какая-то не такая, требуется для "общего случая" сделать, как я понял) и выполнить ряд дополнительных условий:

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

Вот текст программы:
Код:
Program Sorting;
Uses
  CRT;

Const
  MaxSize=15; // Maximal size of matrix

Var
  M,N: Integer; // Current sizes of matrix
  A: Array[1..MaxSize,1..MaxSize] of Real;
  K: Integer;   // Row, which must be sorted
  I,J: Integer;
  Jmin: Integer;

Procedure SwapColumns(J1,J2: Integer);
var
  I:Integer;
  P:Real;
begin
  for I := 1 to N do
  begin
    P := A[I,J1];
    A[I,J1] := A[I,J2];
    A[I,J2] := P;
  end;
end;

Begin
  ClrScr;

  WriteLn('Input MxN - width and height matrix');
  ReadLn(M,N);
  WriteLn('Input ', M*N, ' elements of matrix');
  for I := 1 to N do
    for J := 1 to M do
      Read(A[I,J]);
  Writeln;
  Writeln('Input number of row, which must be sorted');
  ReadLn(K);
  Writeln;
  Writeln('Old matrix');
  for I := 1 to N do
  begin
    for J := 1 to M do
      Write(A[I,J]:4:2,' ');
    WriteLn;
  end;

  for I := 1 to M do
  begin
    Jmin := I;
    for J := I+1 to M do
      if A[K,J]<A[K,Jmin] then 
        Jmin := J;
    if Jmin <> I then
      SwapColumns(I,Jmin);
  end;

  Writeln('New matrix');
  for I := 1 to N do
  begin
    for J := 1 to M do
      Write(A[I,J]:4:2,' ');
    WriteLn;
  end;
  ReadKey;
End.
Буду рад любой помощи.

Последний раз редактировалось Lavallet; 25.11.2010 в 08:29.
Lavallet вне форума Ответить с цитированием
Старый 25.11.2010, 09:40   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Цитата:
которая у меня, по словам моего преподавателя, какая-то не такая, требуется для "общего случая" сделать, как я понял
Не могу понять чего ему не понравилось, может нужно дополнительно передавать в качестве аргументов массив и размеры массива. Будет более обще.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 25.11.2010, 18:41   #3
Lavallet
Новичок
Джуниор
 
Регистрация: 25.11.2010
Сообщений: 2
Хорошо

Z1000000,
Да, точно. Именно про это и было сказано.
А как тогда в таком случае должна выглядеть процедура?
Lavallet вне форума Ответить с цитированием
Старый 26.11.2010, 08:24   #4
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Код:
Procedure SwapColumns1(var M:array[1..MaxSize,1..MaxSize] of Real;Size,J1,J2: Integer);
var
  I:Integer;
  P:Real;
begin
  for I := 1 to Size do
  begin
    P := M[I,J1];
    M[I,J1] := M[I,J2];
    M[I,J2] := P;
  end;
end;
Если используешь TurboPascal, то он будет ругаться на агрумент процедуры типа массив. Тогда нужно объявить в программе новый тип - массив и использовать переменную этого типа в качестве аргумента.

Код:
type myArray = array[1..MaxSize,1..MaxSize] of Real;
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с внешними файлами бургер Паскаль, Turbo Pascal, PascalABC.NET 4 06.05.2010 08:52
Pascal работа с файлами A.S.W Помощь студентам 1 07.01.2010 19:01
Работа с файлами в Pascal Fellics{новичок} Помощь студентам 1 16.12.2009 10:20
Работа с временными и внешними файлами в TP Евгений1313 Помощь студентам 0 11.04.2009 18:49