Страница 1 из 1

Глава 26. Задание " Б ", " В "

СообщениеДобавлено: 02.11.2016 18:16:03
Герман
Правильно ли так?:

Код: Выделить всё
var FileIn, FileOut : text;
    S               : string;
    k               : integer;

procedure Snomerami(var arg : string);

begin
  Assign(FileOut, 'Konechniy.txt');
  Rewrite(FileOut);
  Readln(Filein, arg);
  Writeln(k);
  Writeln(Fileout, arg);
  Close(FileOut);
end;


  {---- Glavnaya programma ----}
begin
  Assign(FileIn, 'Ishodnik.txt');
  Reset(FileIn);
  k := 1;
  while not Eof(FileIn) do
                          begin
                            Readln(FileIn, S);
                            k := k + 1;
                            Snomerami(S);
                          end;
  Close(FileIn);
end.


Ответ из книги:
Код: Выделить всё
var F1, F2: text;
N: integer;
s: string;
begin
Assign(F1, 'Test.in'); Reset(F1);
Assign(F2, 'Test.out'); Rewrite(F2);
N:=1;
while not Eof(F1) do begin
Readln(F1, S);
Writeln(F2,N);
Writeln(F2,S);
N:= N+1;
end;
Close(F1); Close(F2);
end.


Добавлено спустя 1 час 10 минут 8 секунд:
Дошло, что можно сделать тупо в блокноте исходный файл и проверить. Не вышел каменный цветок.

Re: Глава 26. Задание " Б ".

СообщениеДобавлено: 02.11.2016 21:56:31
Oleg_D
Всё нормально, делаем ошибки и учимся. Успехов!

Re: Глава 26. Задание " Б ", " В "

СообщениеДобавлено: 03.11.2016 00:37:47
Герман
Продолжаю не вкуривать. Ответ на задание " B ":

Код: Выделить всё
В) Скопировать один файл в другой с перестановкой местами четных и нечетных
строк.
var F1, F2: text;
S1, S2: string;
begin
Assign(F1, 'Test.in'); Reset(F1);
Assign(F2, 'Test.out'); Rewrite(F2);
while not Eof(F1) do begin
Readln(F1, S1);
if not Eof(F1) then begin
Readln(F1, S2);
Writeln(F2,S2);
end;
Writeln(F2,S1);
end;
Close(F1); Close(F2);
Writeln('OK');
Readln;
end.


Вообще непонятно как это работает.

Добавлено спустя 9 часов 20 минут 22 секунды:
Пошел длинным путем, но он мне более понятен:

Код: Выделить всё
var F0, F1, F2, F3 : text;      { F3- konechniy fail }
    S              : string;
    k              : integer;
    A              : boolean;

begin
  Assign(F0, 'P_26_slabo_V_F0.txt');
  Reset(F0);
  Assign(F1, 'P_26_slabo_V_F1.txt');
  Rewrite(F1);
  Assign(F2, 'P_26_slabo_V_F2.txt');
  Rewrite(F2);
  Assign(F3, 'P_26_slabo_V_F3.txt');


  k := 1;
  while not Eof(F0) do
                      begin
                        Readln(F0,S);
                        if ((k mod 2) = 0)
                          then Writeln(F1, S)  { nechetnie stroki iz F0 pomeschaet v F2, chetnie v F1 }
                          else Writeln(F2, S);
                        k := k +1;
                      end;
  Close(F0);
  Close(F1);    { poluchili iz F0 dva faila s izmenennimi nomerami strok s nechetnih na chetnie i naoborot }
  Close(F2);

  Reset(F1);
  Reset(F2);
  Rewrite(F3);
  While not Eof(F1) or not Eof(F2) do
                                      begin
                                        Readln(F1, S);
                                        Writeln(F3,S);
                                        Readln(F2, S);
                                        Writeln(F3,S);
                                      end;
  Close(F1);
  Close(F2);
  Close(F3);
  Readln;
end.


Re: Глава 26. Задание " Б ", " В "

СообщениеДобавлено: 03.11.2016 20:57:43
Oleg_D
Идея ваша понятна, но есть ошибка на этапе формирования конечного файла, найдите сами.
Что до моего решения, то там из исходного файла читаются по две строки (S1, S2), а пишутся тоже по две, но в другой последовательности (S2, S1).

Re: Глава 26. Задание " Б ", " В "

СообщениеДобавлено: 03.11.2016 22:05:56
Герман
Спб. Надо сделать так, чтобы, когда в исходном файле было нечетное количество строк, конечный файл формировался правильно.
Код: Выделить всё
                         do
                                      begin
                                        if not Eof(F1)
                                          then
                                            begin
                                              Readln(F1, S);
                                              Writeln(F3,S);
                                            end;
                                        if not Eof(F2)
                                          then
                                            begin
                                              Readln(F2, S);
                                              Writeln(F3,S);
                                            end;
                                  end;

Re: Глава 26. Задание " Б ", " В "

СообщениеДобавлено: 03.11.2016 22:26:48
Oleg_D
Да, не забывайте проверять на конец файла перед каждой операцией чтения.

Re: Глава 26. Задание " Б ", " В "

СообщениеДобавлено: 03.11.2016 22:30:44
Герман
Я привык к html, поэтому как переписал ответ для удобоваримой мне форме, стало сразу ясно. Вообще, программирование похоже на танцы с бубном, надо так исхитриться, чтобы додуматься как из циклов, формул и условий " сшить костюмчик ".

Код: Выделить всё
var F1, F2 : text;
    S1, S2 : string;

begin
  Assign(F1, 'P_26_slabo_V_Oleg_F1.txt');
  Reset(F1);
  Assign(F2, 'P_26_slavo_V_Oleg_F2.txt');
  Rewrite(F2);
  while not Eof(F1) do
                      begin
                        Readln(F1, S1);
                        if not Eof(F1)
                          then
                            begin
                              Readln(F1, S2);
                              Writeln(F2, S2);
                            end;
                        Writeln(F2, S1);
                      end;
  Close(F1);
  Close(F2);
  Writeln('OK');
  Readln;
end.

Re: Глава 26. Задание " Б ", " В "

СообщениеДобавлено: 03.11.2016 22:56:16
Oleg_D
Герман писал(а):надо так исхитриться, чтобы додуматься как из циклов, формул и условий " сшить костюмчик ".

Опыт приходит со временем, если работать. А занятие это интересное, увлекательное -- на мой взгляд.