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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2008, 12:59   #1
Oksana11
Пользователь
 
Аватар для Oksana11
 
Регистрация: 21.12.2007
Сообщений: 21
По умолчанию Создание и использование динамических структур

Всем здравствуйте! Мне нужна помощь в решении задачи! Задача:
Найти в списке сов то слово, которое идет следом за заданным. Создать список слов и решить задачу.
Я сделала только это:
Код:
unit s_found_;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Edit2: TEdit;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ поиск в массиве перебором }
procedure TForm1.Button1Click(Sender: TObject);
const
   SIZE=5;
var
   a: array[1..SIZE] of integer; // массив
   obr: integer;                 // образец для поиска}
   found: boolean;               // TRUE - совпадение образца с элементом массива }
   i: integer;                   // индекс элемента массива }

begin
   // ввод массива
   for i:=1 to SIZE do
       a[i] := StrToInt(StringGrid1.Cells[i-1,0]);

   // ввод образца для поиска
   obr := StrToInt(edit2.text);

   // поиск
   found := FALSE; // пусть нужного эл-та в массиве нет
   i := 1;
   repeat
         if a[i] = obr
            then found := TRUE
            else i := i+1;
   until (i > SIZE) or (found = TRUE);

   if found
      then ShowMessage('Совпадение с элементом номер '
                       +IntToStr(i+1)+#13+'Поиск успешен.')
      else ShowMessage('Совпадений с образцом нет.');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin

end;

end.
Но эта прога работает с числами... Как сделать, чтобы она работала с текстом?
И все равно я буду программистом!!!
Oksana11 вне форума Ответить с цитированием
Старый 09.01.2008, 14:18   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вы видимо не до конца поняли задачу. Вам сначала нужно создать динамически список, потом для наглядности вывести его в ListBox или Memo и т.д. Затем найти слово, стоящее за заданным и вывести его в Label или в Edit. StringGrid вам вообще без надобности.
puporev вне форума Ответить с цитированием
Старый 09.01.2008, 15:26   #3
Oksana11
Пользователь
 
Аватар для Oksana11
 
Регистрация: 21.12.2007
Сообщений: 21
По умолчанию

Ну, а все-таки, как сделать, чтобы эта прога работала с текстом? или такое невозможно? По-другому у меня не получается!
И все равно я буду программистом!!!
Oksana11 вне форума Ответить с цитированием
Старый 09.01.2008, 16:55   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ну тогда переделайте массив с типа integer на тип String и вводите в таблицу слова.
puporev вне форума Ответить с цитированием
Старый 09.01.2008, 18:18   #5
Oksana11
Пользователь
 
Аватар для Oksana11
 
Регистрация: 21.12.2007
Сообщений: 21
По умолчанию

Пробовала! не работает!
И все равно я буду программистом!!!
Oksana11 вне форума Ответить с цитированием
Старый 09.01.2008, 19:39   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Плохо пробовали. Если изменили тип, то нужно поменять и все операторы ввода-вывода. Вот пять минут переделывал ваш код. По ходу ошибка - нужно выводить следующее слово за образцом, а не сам образец. Слова в таблице вводите в первую(то бишь нулевую) строку и все заработает.
У вас один Edit, зачем ему номер 2? Короче перепишите внимательно как у меня.
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
   SIZE=5;
var
   a: array[1..SIZE] of string; // массив
   obr: string;                 // образец для поиска}
   found: boolean;               // TRUE - совпадение образца с элементом массива }
   i: integer;                   // индекс элемента массива }

begin
 // ввод массива
   for i:=1 to SIZE do
       a[i]:=StringGrid1.Cells[i-1,0];
   // ввод образца для поиска
   obr := edit1.text;
   // поиск
   found := FALSE; // пусть нужного эл-та в массиве нет
   i := 1;
   repeat
         if a[i] = obr
            then found := TRUE
            else i := i+1;
   until (i > SIZE) or (found = TRUE);
   if found
      then ShowMessage('Следующее за образцом слово '+a[i+1]+#13+'Поиск успешен.')
      else ShowMessage('Совпадений с образцом нет.');
end;

end.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление динамических объектов / полная очистка формы 095 Общие вопросы Delphi 3 23.04.2012 16:09
Сортировка массива структур arturka Помощь студентам 1 21.06.2008 14:15
Динамический массив структур Kostyakovich Помощь студентам 4 20.04.2008 21:59
diff для структур ag-moscow Общие вопросы C/C++ 2 09.04.2008 02:57
Как работать с файлами с помощью динамических массивов Герыч Общие вопросы Delphi 4 10.01.2008 12:22