LINUX.ORG.RU

История изменений

Исправление bormant, (текущая версия) :

Можно было пойти таким путём:

{$H+}
program RevWords;

type
  PWordNode = ^TWordNode;                  {list of words}
  TWordNode = record
    Chars: String;
    Next: PWordNode;
  end;

  procedure AddWord(var First: PWordNode);
  var
    tmp: PWordNode;
  begin
    New(tmp);
    tmp^.Chars := '';
    tmp^.Next := First;
    First := tmp;
  end;

  procedure AddToWord(Words: PWordNode; c: char);
  begin
    with Words^ do Chars := Chars + c;
  end;

  procedure WriteWord(Words: PWordNode);
  begin
    Write(Words^.Chars);
  end;

  procedure WriteWords(First: PWordNode);
  begin
    if First <> nil then begin
      WriteWord(First);
      First := First^.Next;
    end;
    while First <> nil do begin
      Write(' ');
      WriteWord(First);
      First := First^.Next;
    end;
  end;

  procedure CleanUpWords(var First: PWordNode);
  var
    tmp: PWordNode;
  begin
    while First <> nil do begin
      tmp := First;
      First := First^.Next;
      Dispose(tmp);
    end;
  end;

var
  c: Char;
  SpcPressed: boolean;
  Words: PWordNode;
begin
  while not SeekEof do begin
    //Words := nil;
    SpcPressed := True;
    while not EoLn do begin
      Read(c);
      if c > ' ' then
        if SpcPressed then begin
          AddWord(Words);
          AddToWord(Words, c);
          SpcPressed := False;
        end
        else
          AddToWord(Words, c);
      else if c in [#9, ' '] then
        SpcPressed := True;
    end;
    WriteWords(Words);
    WriteLn;
    CleanUpWords(Words);
  end;
end.

Исправление bormant, :

Можно было пойти таким путём:

{$H+}
program RevWords;

type
  PWordNode = ^TWordNode;                  {list of words}
  TWordNode = record
    Chars: String;
    Next: PWordNode;
  end;

  procedure AddWord(var First: PWordNode);
  var
    tmp: PWordNode;
  begin
    New(tmp);
    tmp^.Chars := '';
    tmp^.Next := First;
    First := tmp;
  end;

  procedure AddToWord(Words: PWordNode; c: char);
  begin
    with Words^ do Chars := Chars + c;
  end;

  procedure WriteWord(Words: PWordNode);
  begin
    Write(Words^.Chars);
  end;

  procedure WriteWords(First: PWordNode);
  begin
    if First <> nil then
    begin
      WriteWord(First);
      First := First^.Next;
    end;
    while First <> nil do
    begin
      Write(' ');
      WriteWord(First);
      First := First^.Next;
    end;
  end;

  procedure CleanUpWords(var First: PWordNode);
  var
    tmp: PWordNode;
  begin
    while First <> nil do
    begin
      tmp := First;
      First := First^.Next;
      Dispose(tmp);
    end;
  end;

var
  c: Char;
  SpcPressed: boolean;
  Words: PWordNode;
begin
  while not SeekEof do
  begin
    //Words := nil;
    SpcPressed := True;
    while not EoLn do
    begin
      Read(c);
      if c > ' ' then
        if SpcPressed then
        begin
          AddWord(Words);
          AddToWord(Words, c);
          SpcPressed := False;
        end
        else
          AddToWord(Words, c);
      else if c in [#9, ' '] then
        SpcPressed := True;
    end;
    WriteWords(Words);
    WriteLn;
    CleanUpWords(Words);
  end;
end.

Исходная версия bormant, :

Можно было пойти таким путём:

{$H+}
program RevWords;

type
  PWordNode = ^TWordNode;                  {list of words}
  TWordNode = record
    Chars: String;
    Next: PWordNode;
  end;

  procedure AddWord(var First: PWordNode);
  var
    tmp: PWordNode;
  begin
    New(tmp);
    tmp^.Chars := '';
    tmp^.Next := First;
    First := tmp;
  end;

  procedure AddToWord(Words: PWordNode; c: char);
  begin
    with Words^ do Chars := Chars + c;
  end;

  procedure WriteWord(Words: PWordNode);
  begin
    Write(Words^.Chars);
  end;

  procedure WriteWords(First: PWordNode);
  begin
    if First <> nil then
    begin
      WriteWord(First);
      First := First^.Next;
    end;
    while First <> nil do
    begin
      Write(' ');
      WriteWord(First);
      First := First^.Next;
    end;
  end;

  procedure CleanUpWords(var First: PWordNode);
  var
    tmp: PWordNode;
  begin
    while First <> nil do
    begin
      tmp := First;
      First := First^.Next;
      Dispose(tmp);
    end;
  end;

var
  c: Char;
  SpcPressed: boolean;
  Words: PWordNode;
begin
  while not SeekEof do
  begin
    //Words := nil;
    SpcPressed := True;
    while not EoLn do
    begin
      Read(c);
      if c > ' ' then
        if SpcPressed then
        begin
          AddWord(Words);
          AddToWord(Words, c);
          SpcPressed := False;
        end
        else
          AddToWord(Words, c);
      else if c in [#9, ' '] then
        SpcPressed := True;
    end;
    WriteWords(Words);
    WriteLn;
    CleanUpWords(Words);
  end;
end.
[/pascal]