Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Всем здравствуйте! Мне нужна помощь в решении задачи! Задача:
Найти в списке сов то слово, которое идет следом за заданным. Создать список слов и решить задачу.
Я сделала только это:
Код:
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, 15:18   #2
puporev
Профессионал
 
Регистрация: 13.10.2007
Сообщений: 2,739
Репутация: 965
По умолчанию

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

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

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

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

Плохо пробовали. Если изменили тип, то нужно поменять и все операторы ввода-вывода. Вот пять минут переделывал ваш код. По ходу ошибка - нужно выводить следующее слово за образцом, а не сам образец. Слова в таблице вводите в первую(то бишь нулевую) строку и все заработает.
У вас один 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление динамических объектов / полная очистка формы 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 13:22


07:13.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.