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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2011, 23:23   #1
Tir0n
Новичок
Джуниор
 
Регистрация: 21.10.2011
Сообщений: 2
По умолчанию Программа на строки\множества в Delphi

Здравствуйте. Моё задание звучит так:" Дана строка, состоящая из групп нулей и единиц, разделенных пробелами. Найти и вывести на экран самую короткую группу." тоесть, например, вводим в Edit1 "1100 101 01101", и в Edit2 должно отобразиться "101". Если таких групп несколько - неважно, главное вывести хоть одну. Также программа должна состоять из двух юнитов. Я пытался делать её так:

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2, Buttons;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
Var
  Form1: TForm1;
  Smin:string;
Implementation
{$R *.dfm}
Procedure TForm1.FormCreate(Sender: TObject);
Begin
  Edit1.Clear;
  Edit2.Clear;
End;
Procedure TForm1.Button1Click(Sender: TObject);
Begin
  Edit2.Clear;
  Raschet(Smin,Edit1);
  Edit2.Text:=Smin;
End;
End.


unit Unit2;
interface
uses StdCtrls, SysUtils;
Procedure Raschet(smin:string; Edit1:Tedit);
implementation
Procedure Raschet(smin:string; Edit1:TEdit);
Type
  Mas=array[1..10] of string;
Var
  a:mas;
  s:string;
  i,n,k:integer;
 Begin
   s:=Edit1.Text;
   s:=s+' ';
   n:=0;
   for i:=1 to Length(s) do
   Begin
     k:=pos(' ',s);
     if k=1 then break;
     a[i]:=copy(s,1,k-1);
     Delete(s,1,k);
     n:=n+1;
   End;
   For i:=1 to n-1 do
   Begin
     If Length(a[i])<=Length(a[i+1]) then
     a[i+1]:=a[i];
   End;
   Smin:=a[n];
 End;
End.
Здесь я хотел определять положение первого пробела в строке, и всю группу символов перед ним заносить в строку массива, затем стирать и смотреть следующую.
Компилится, но при запуски либо не происходит ничего, либо выдаёт Access Violation, указывая на строку "Edit2.Text:=Smin;" в конце первого модуля.
Может быть и алгоритм совсем неверен, т.к. опты в программировании у меня практически нет. Поэтому хотелось бы услышать ваши поправки или идею о составлении другого алгоритма. Можно использовать множества. Заранее спасибо.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.10.2011 в 17:54.
Tir0n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа на множества igarek222 Общие вопросы C/C++ 2 29.05.2010 14:41
Множества и строки Takada_sony Помощь студентам 8 27.04.2010 17:22
Множества и строки Olalya da Silva Помощь студентам 1 20.05.2009 20:48