Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ матрица в файле

Автор: Mapина 28.06.2007 17:15

В итоговом файле получаю не m-ный столбец. Пожалуйста, исправте!
(Есть файл с матрицей, но загрузить его, к сожелению, не могу.)

Пусть матрица А целых чисел размером10х10(а не 100х100 как в решении задачи) записана по строкам в файле. Перенесите в новый файл m ный столбец матрицы(m задаётся вводом).

Код
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, windows;

type
  Tmatr = array[1..10, 1..10] of integer;
var
  A : Tmatr;

  procedure Input(var A : Tmatr);
  var
    i, j : integer;
    filename : string;
    f : text;
  begin
    Write('Введи имя исходного файла : ');
    readln(filename);
    AssignFile(f, filename);
    reset(f);
    for i := 1 to 10 do
    begin
      for j := 1 to 10 do
        read(f, a[i,j]);
      readln(f);
    end;
    closefile(f);
  end;

  procedure Output(A : Tmatr);
  var
    i, m : integer;
    filename : string;
    f : text;
  begin
    write('Столбец для копирования : ');
    readln(m);
    Write('Введи имя результирующего файла : ');
    readln(filename);
    AssignFile(f, filename);
    rewrite(f);
    for i := 1 to 10 do
      writeln(f, a[i,m]);
    closefile(f);
  end;

begin
  SetConsoleCp(1251);
  SetConsoleOutputCP(1251);
  Input(a);
  Output(a);
  readln;
end.

Автор: volvo 28.06.2007 17:23

Цитата
В итоговом файле получаю не m-ный столбец.
Странно, все нормально отрабатывает (при 10*10). Архивируй файл данных и присоединяй его, возможно проблема именно там...

Автор: Mapина 28.06.2007 17:31

не получается присоединить.

Вообщем, есть "неопределённый" файл, который я открываю через блокнот, а в нём вот:

1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0

Автор: volvo 28.06.2007 17:38

Ну, и что ты получаешь в выходном файле, скажем, если задашь 5-ый столбец?

Автор: Mapина 28.06.2007 17:48

lol.gif вот веселье. эт я из разных способов сейчас собрала , кое что исправила и всё заработалО!
chore.gif в честь вразумителя!



Автор: Mapина 28.06.2007 18:13

а как будет выглядить процедура Вывода, если необходимо чтоб выписывался m-ый столбец так, допустим доходило до A[i,m] и переходило на i:=i+1


for i := 1 to 10 do
begin
for j := 1 to m do

Автор: Mapина 28.06.2007 18:40

я имелла в виду:
как будет выглядить процедура Вывода, если необходимо чтоб выписывался m-ый столбец так, допустим доходило до A[i,m] и переходило на i:=i+1 с задействованием вот этого, и наверное ещё одной новой переменной, допустим t


for i := 1 to 10 do
begin
for j := 1 to m do
read(f, t);
writeln(f, t);
readln(f);
end;

приблизительно что-то такое должно быть!

Добавлено через 17 мин.
то есть мне было сказано так, что мол чтобы проходило не всю матрицу, а так допустим m=2, шло A[1,1], А[1,2] и так как m=2, то не смотрело A[1,3], а переходило на A[2,1]....

Автор: volvo 28.06.2007 19:42

Чтоб выписывался ТОЛЬКО столбец №m, у тебя уже есть... Объясни нормально, что тебе надо изменить? Ты не хочешь ЧИТАТЬ из файла все значения ПОСЛЕ требуемого столбца? Тогда менять надо не процедуру вывода, а процедуру ввода...

Автор: Mapина 28.06.2007 21:19

каким образом?
с исходным файлом и итоговым?

в любом случее

type
Tmatr = array[1..10, 1..10] of integer;
var
A : Tmatr;

должно остаться

Автор: Mapина 29.06.2007 6:51

в итоге додумала вот до этого, прошу проверить, а то может что лишнее есть или не дописала!

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils, windows;

type
Tmatr = array[1..10, 1..10] of integer;
var
A : Tmatr;

procedure Obrab(var A : Tmatr);
var
i, j, m, t : integer;
filename_in, filename_out : string;
f_in, f_out : text;
begin
Write('Введи имя исходного файла : ');
readln(filename_in);
Write('Введи имя результирующего файла : ');
readln(filename_out);
write('Столбец для копирования : ');
readln(m);
AssignFile(f_in, filename_in);
reset(f_in);
AssignFile(f_out, filename_out);
rewrite(f_out);
for i := 1 to 10 do
begin
for j := 1 to m do
read(f_in, t);
writeln(f_out, t);
readln(f_in);
end;
closefile(f_in);
closefile(f_out);
end;

begin
SetConsoleCp(1251);
SetConsoleOutputCP(1251);
Obrab(a);
readln;
end.

Автор: Mapина 1.07.2007 23:26

напишите пожалуйста

задача работает... а если файл должен быть типизированным(integer), то как будет выглядить решение!