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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2012, 13:37   #1
neytron007
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 15
По умолчанию Почему не работает программа на формах?

вот сам код программы...
Код:
{Напишите процедуру сортировки строк в обратном алфавитном порядке.}

unit Main;

interface

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

type
  TForm1 = class(TForm)
    buttonSort: TButton;
    mmo: TMemo;
    lbl: TLabel;
    procedure buttonSortClick(Sender: TObject);
    procedure mmoKeyPress(Sender: TObject; var Key: Char);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ArrayStr : array of String;
  i, j : Integer;
  s : string;

implementation

{$R *.dfm}

uses
  Lib;

procedure TForm1.buttonSortClick(Sender: TObject);
begin
  SetLength(ArrayStr, Mmo.Lines.Count);  //запись строк в массив
  for i := 0 to High(ArrayStr) do
    begin
      ArrayStr[i] := mmo.Lines[i];
    end;
  SortArrayStr;      //сортировка строк
  mmo.Clear;         //очистка поля Memo
  for i := 0 to High(ArrayStr) do Mmo.Lines.Add(ArrayStr[i]);   //вывод отсортированных строк
end;

procedure TForm1.mmoKeyPress(Sender: TObject; var Key: Char);
begin
  if not CheckKey(Key) then key:=#0;    //запрет ввода недопустимых символов
end;

end.
...и доп.юнита:
Код:
unit Lib;

interface

uses
  SysUtils;

var
  ArrayStr : array of String;
  i, j : Integer;
  s : string;

function CheckKey(ch: char): boolean;
procedure SortArrayStr;

implementation

procedure SortArrayStr;
begin
  for i := 0 to High(ArrayStr) do      //сортировка строк
    begin
      j := i;
      S := ArrayStr[i];
      while (j>0) and (ArrayStr[j-1]<S) do
        begin
          ArrayStr[j] := ArrayStr[j - 1];
          j := j-1;
          ArrayStr[j] := S;
        end;
    end;
end;

function CheckKey(ch: char): boolean;
begin
  result := (((ord(ch)>=65) and (Ord(ch)<=90)) or ((Ord(ch)>=97) and (Ord(ch)<=122)) or ((Ord(ch)>=192) and (Ord(ch)<=255)) or (ord(ch)=ord(' ')) or (ord(ch)=8) or (Ord(ch)=13));
end;

end.
Программа запускается, ошибок не вылетает, но вот сортировка строк не происходит! если перенести процедуру сортировки строк непосредственно в основной юнит, то работает, но мне надо, чтобы все такие вычислительные действия были в отдельном юните! поправьте, что здесь неверно!?
neytron007 вне форума Ответить с цитированием
Старый 07.11.2012, 13:44   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Код:
var
  Form1: TForm1;
  ArrayStr : array of String;  // один массив
.....................
unit Lib;

interface

uses
  SysUtils;

var
  ArrayStr : array of String; // совершенно другой, никакого отношения к первому не имеющий массив
А вас не смущает, что заполняете вы тот ArrayStr, который в Main объявлен, а сортировать пытаетесь совершенно другой ArrayStr, который объявлен в Lib?

UPD: Удалите ArrayStr из Lib, а в процедуру SortArrayStr добавьте параметр, в который вы будете передавать массив для сортировки
Благодарить в репутацию. Проклинать — туда же

Последний раз редактировалось Luuzuk; 07.11.2012 в 13:47.
Luuzuk вне форума Ответить с цитированием
Старый 07.11.2012, 14:20   #3
neytron007
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 15
По умолчанию

Цитата:
в процедуру SortArrayStr добавьте параметр, в который вы будете передавать массив для сортировки
не понял...как? напишите код пжлст

UPD: Ааа, всё! понял, спасибо, наконец-то заработала)))

Последний раз редактировалось neytron007; 07.11.2012 в 14:28.
neytron007 вне форума Ответить с цитированием
Старый 07.11.2012, 14:34   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

В вашем же коде написано:
Код:
function CheckKey(ch: char): boolean;
begin
  result := (((ord(ch)>=65) and (Ord(ch)<=90)) or ((Ord(ch)>=97) and (Ord(ch)<=122)) 
or ((Ord(ch)>=192) and (Ord(ch)<=255)) or (ord(ch)=ord(' ')) or (ord(ch)=8) or (Ord(ch)=13));
end;
здесь ch - это параметр функции.

Решение такое:
1) выкинуть ArrayStr из модуля Lib
2) В Lib "procedure SortArrayStr;" заменить на "procedure SortArrayStr (var ArrayStr:array of String);"
3) На Form1 вызывать процедуру сортировки с параметром: SortArrayStr(ArrayStr);

UPD: кажется я запоздал с ответом)
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему не работает программа? Miles Помощь студентам 1 20.12.2011 20:19
Почему не работает программа на си СергейАС Помощь студентам 0 08.12.2011 14:32
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
Почему не работает программа? St1mkA Помощь студентам 3 07.04.2010 19:51
подскажите почему программа не работает ZarakiKenpachi Общие вопросы C/C++ 5 05.11.2009 23:34