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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2010, 09:20   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Вроде бы аналогичная вложенной процедура не работает при переносе в дополнительный модуль!

Здравствуйте ! 0)))Снова возникла загвоздка с подключением модуля , вернее модуль , вроде подключен, но процедура, расположенная в нём не работает.
Программа призвана переносить все знаки препинания, встретившиеся в строке в конец этой самой строки.
Вот такой вариант работает:
Основной (и единственный ) модуль:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls , ochered ;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public


  end;
  type
  pelement= ^telement;
  Telement= record
             infa: char;
             ukazatel:pelement;
            end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var    f1,f2: textfile;
     simvol: char;
     a,b: string;
     uk,uk1,p: pelement;

begin
  a:='f1.txt';
  b:='f2.txt';
  AssignFile(f1,a);
  AssignFile(f2,b);
  reset(f1);
  rewrite(f2);
  uk:=nil;
  uk1:=nil;
  while eof(f1)=false do
  begin
    read(f1,simvol);
    if simvol in ['.',',',';','-','!','?',':'] then
    begin
    // fgh(uk1,uk,simvol); // - процедура, призванная заменить всё в этих операторных скобках, но временно заблокированная))
      new(p);
      if uk<>nil  then
      uk^.ukazatel:=p
      else uk1:=p;
      p^.infa:=simvol;  // сохранем знаки
      uk:=p;
    end
    else
      write(f2,simvol);
    if eoln(f1)=true then
    begin
      uk:=nil; // обрываем список
      while uk1<>nil do  // выводим знаки
      begin
        write(f2,uk1^.infa);
        uk1:=uk1^.ukazatel;
      end;
    end;
  end;
  CloseFile(f1);
  CloseFile(f2);

end;

end.
----------------------------------------
Потом я переношу процедуру, которая создаёт очередь из знаков препинания ( добавляю в начало очереди, запоминаю указатель на первый элемент)
Теперь основной модуль выглядит так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls , ochered ;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public


  end;



var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var    f1,f2: textfile;
     simvol: char;
     a,b: string;
     uk,uk1,p: pelement;

begin
  a:='f1.txt';
  b:='f2.txt';
  AssignFile(f1,a);
  AssignFile(f2,b);
  reset(f1);
  rewrite(f2);
  uk:=nil;
  uk1:=nil;
  while eof(f1)=false do
  begin
    read(f1,simvol);
    if simvol in ['.',',',';','-','!','?',':'] then
    begin
     fgh(uk1,uk,simvol);
      {new(p);
      if uk<>nil  then
      uk^.ukazatel:=p
      else uk1:=p;
      p^.infa:=simvol;  // сохранем знаки
      uk:=p; }
    end
    else
      write(f2,simvol);
    if eoln(f1)=true then
    begin
      uk:=nil; // обрываем список
      while uk1<>nil do  // выводим знаки
      begin
        write(f2,uk1^.infa);
        uk1:=uk1^.ukazatel;
      end;
    end;
  end;
  CloseFile(f1);
  CloseFile(f2);

end;

end.
Дополнительный ( процедурный) так :
Код:
unit ochered;

interface
type
  pelement= ^telement;
  Telement= record
             infa: char;
             ukazatel:pelement;
            end;
procedure fgh(uk1,uk: pelement; simvol: char  );

implementation


procedure fgh(uk1,uk: pelement; simvol: char  );
var p:pelement;
begin
      new(p);
      if uk<>nil  then
      uk^.ukazatel:=p
      else uk1:=p;
      p^.infa:=simvol;  // сохранем знаки
      uk:=p;
end;

end.
Не пойму в чём разница. Подскажите.
(программа читает данные из f1.txt и записыет результат в f2.txt )
--------------------
(прикладываю работающий и не работающий архивы)
Вложения
Тип файла: zip работает.zip (31.9 Кб, 7 просмотров)
Тип файла: zip не работает.zip (31.7 Кб, 8 просмотров)
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 04.05.2010 в 13:58. Причина: Выделил проблему жирным образом 0)))
vedro-compota вне форума Ответить с цитированием
Старый 04.05.2010, 17:12   #2
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию аааа

я кажись по ссылке значения в процедуру-то передал......ээээээ. сейчас посмотрим....
-----------------------------------
всё. работает ! спасибо за моральную поддержку ( что , знаете, не маловажно 0)))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 04.05.2010 в 17:40.
vedro-compota вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
модуль, процедура, переменные Anserone Паскаль, Turbo Pascal, PascalABC.NET 3 20.04.2010 22:36
Проблема при переносе кода. MasterK Общие вопросы Delphi 1 08.04.2010 18:05
Ошибка при переносе из 2006 в delphi 2009/2010 Яр|/||< (^_^) Общие вопросы Delphi 2 18.02.2010 12:01
Не работает процедура Golovastik SQL, базы данных 2 22.11.2009 14:22
Суммирование определенных ячеек при переносе Pilot Microsoft Office Excel 5 17.07.2008 12:46