1 Востаннє редагувалося Меліса (16.12.2013 00:02:32)

Тема: Читання матриці з файлу/Заміна елементів діагоналей

Програма абсолютно коректно працює.
Підкажіть будь-ласка чи є якісь прогалини..
Чи варто щось змінювати в самій структурі для кращої роботи?
(Файл в коді F2, а не F, тому що для інших програм в мене вже є створені
на цьому диску файли F і F1)

Завдання:
З файла F прочитати матрицю MF (10, 10). Поміняти місцями елементи
головної та побічної діагоналей. Результуючу матрицю вивести на друк.

Код програми:

Прихований текст
program changeD;
uses crt;
const
  nmax=10;
var
  F2:text;
  MF: array[1..nmax,1..nmax] of integer;
  i,j,n,m,k,tmp: integer;
begin clrscr;
  assign(F2,'C:\F2.txt');
  rewrite(F2);
  randomize;
  repeat
    write('Write size matrix n: ');
    readln(n);
  until n in [1..10];
  writeln('Kilter matrix - looking in File F2.');
  for i:=1 to n do
  begin
    for j:=1 to n do
    begin
      MF[i,j]:=random(199)-99;
      write(F2,MF[i,j]:5);
    end;
    writeln(F2,'');
  end;
    close(F2);
  writeln('File F2 created!');
  writeln('For continuation press <Enter>');
  readln;
  for i:=1 to n do
    for j:=1 to n do
    if i=j then
    begin
      tmp:=MF[i,j];
      MF[i,j]:=MF[i,n-i+1];
      MF[i,n-i+1]:=tmp;
    end;
  writeln('Resulting matrix:');
  for i:=1 to n do
  begin
    for j:=1 to n do
      write(MF[i,j]:5);
    writeln;
  end;
  writeln('For ending press <Enter>');
  readln;
end.

2

Re: Читання матриці з файлу/Заміна елементів діагоналей

Змінну, яку ви використовуєте, щоб позначити ваш файл не обов'язково називати ім'ям файлу)

І так, як ви вже навчилися структуризувати код, прошу, щоб ви не забували про такі прийоми як пусті рядки (не знаю, як по іншому назвати) та пропуски між знаками операцій (+, - , =, /, *), не знаю як інші, але мені особисто подобається читати код фрагментами та поступово аналізувати інформацію.

Взагалі код читається непогано, але так, було б ще краще:

Прихований текст
program changeD;
uses crt;
const
  nmax = 10;
var
  F2:text;
  MF:array[1..nmax, 1..nmax] of integer;
  i, j, n, m, k, tmp: integer;
begin 
  clrscr;
  assign(F2, 'C:\F2.txt');
  rewrite(F2);  
  
  repeat
    write('Write size matrix n: ');
    readln(n);
  until n in [1..10];
  writeln('Kilter matrix - looking in File F2.');
  
  Randomize;
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      MF[i,j] := random(199) - 99;
      write(F2, MF[i,j]:5);
    end;
    writeln(F2, '');
  end;
  
  close(F2);
  
  writeln('File F2 created!');
  writeln('For continuation press <Enter>');
  readln;
  
  for i := 1 to n do
    for j := 1 to n do
      if i = j then
      begin
        tmp := MF[i, j];
        MF[i, j] := MF[i, n - i + 1];
        MF[i, n - i + 1] := tmp;
      end;
      writeln('Resulting matrix:');
  
  for i := 1 to n do
  begin
    for j := 1 to n do write(MF[i,j]:5);
    writeln;
  end;
  
  writeln('For ending press <Enter>');
  readln;
end.
Подякували: Меліса1

3 Востаннє редагувалося koala (16.12.2013 00:41:10)

Re: Читання матриці з файлу/Заміна елементів діагоналей

Тут не потрібен подвійний цикл по матриці - на діагоналі все одно n елементів, тому досить буде циклу до n:

  for i := 1 to n do
    begin
      tmp              := MF[i, i        ];
      MF[i, i        ] := MF[i, n - i + 1];
      MF[i, n - i + 1] := tmp
    end;

Зверніть увагу на відступи - мені здається, так код виглядає трохи охайнішим.

Про назву файлу вже сказали.

Так, і n in [1..10] - довга операція порівняно із (n >= 1) and (n <=10), але то справа смаку.
До речі, все ж n in [1..nmax] - нащо тоді константу проголошувати?

Ну і готову матрицю ви до файлу не записуєте, я не знаю - може, так і треба.

Подякували: Меліса1

4

Re: Читання матриці з файлу/Заміна елементів діагоналей

Меліса
Не буду прискіпуватися до оформлення коду, по-моєму воно й так чудове, як для новачка. У мене є зауваження лише до цього:

З файла F прочитати матрицю MF (10, 10).

А ви її туди записуєте.

Подякували: Меліса, koala2

5 Востаннє редагувалося Меліса (16.12.2013 16:24:55)

Re: Читання матриці з файлу/Заміна елементів діагоналей

Logans,

аа, зрозуміло, Спасибі, назву собі тоді Mymatrix  :)
матиму на увазі і старатимусь читабельніше структуризувати код.

Кoala,

хм, кажете і так можна, окей, варто запам'ятати, Дякую  :)

Просто нас змушують через константу робити, кажуть що так треба, тому що потім з
нею зручніше працювати в циклах.

Так. Тому що так треба. Із завдання я зрозуміла, що потрібно записати в файл саме вихідну (оригінальну) матрицю, а от інша (остання) частина завдання полягає в тому щоб вивести результуючу матрицю на друк (наскільки я зрозуміла, про запис у файл результуючої матриці мова не йде, лише потрібно вивести її на екран).
от:
Завдання:
З файла F прочитати матрицю MF (10, 10). Поміняти місцями елементи
головної та побічної діагоналей. Результуючу матрицю вивести на друк.

Torbins,

Спасибі :)

Прихований текст

Меліса

..У мене є зауваження лише до цього:

З файла F прочитати матрицю MF (10, 10).

А ви її туди записуєте.

Це дуже суттєво? Як можна змінити?? Можливо через команду reset?

6

Re: Читання матриці з файлу/Заміна елементів діагоналей

Одного ресету буде недостатньо. Треба переробити два перших цикли for, щоб вони зчитували елементи матриці з файлу.

Подякували: Меліса1