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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2008, 12:05   #1
terminadoor
Пользователь
 
Регистрация: 26.06.2008
Сообщений: 86
По умолчанию TMemo

Как сравнить содержимое двух мемо? Тоесть если одна мемо отличается от другой, вивести "Wrong Answer" а иначе "OK"? Пробовал вот так:
Код:
i:=1;
while i<k do begin
if memo4.Lines[i]>memo3.Lines[i] then s2:=1;
end;
Прога работает, но всегда виводит ОК. Может кто нить знает как сравнить две мемо?
TerMinAdoOR
terminadoor вне форума Ответить с цитированием
Старый 22.07.2008, 12:30   #2
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию

Код:
function tform1.empty(a1, a2: byte; memo: TMemo): boolean;
var
  z: byte;
begin
  result := true;
  for z := a1 to a2 do
    if memo.Lines[z] <> '' then
    begin
      result := false;
      exit;
    end;
end;

function tform1.check(mem1, mem2: TMemo): boolean;
var
  z: byte;
begin
  result := true;
  for z := 0 to mem2.lines.count do
    if memo1.Lines[z] <> memo2.Lines[z] then
    begin
      result := false;
      exit;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, k: byte;
  b: boolean;
begin
  b := true;
  i := memo1.Lines.Count;
  k := memo2.Lines.count;
  if i <> k then
  begin
    if i > k then
    begin
      if not empty(k, i, memo1) then
        b := false
    end
    else if not empty(i, k, memo2) then
      b := false
  end;
  if not check(memo1, memo2) then
    b := false;
  if b then
    showmessage('ok')
  else
    showmessage('wrong');
end;
Функция empty--проверяем, может, тексты не сходятся только из-за пустых строчек, это же не влияет на правильность ответа?

Последний раз редактировалось NikLik; 22.07.2008 в 12:45.
NikLik вне форума Ответить с цитированием
Старый 22.07.2008, 12:31   #3
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Код:
if Memo1.Text = Memo2.Text then
Hollander вне форума Ответить с цитированием
Старый 22.07.2008, 12:38   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,k:integer;
begin
k:=0;
if Memo1.Lines.Count<>Memo2.Lines.Count
then
  begin
    ShowMessage('Wrong Answer');
    exit;
  end
else
  for i:=0 to Memo1.Lines.Count-1 do
     begin
       if Memo1.Lines[i]<>Memo2.Lines[i] then
         begin
           ShowMessage('Wrong Answer');
           exit;
         end
       else  k:=k+1;
     end;
  if k=Memo1.Lines.Count then  ShowMessage('OK!');
end;

Последний раз редактировалось puporev; 22.07.2008 в 12:57. Причина: Поправил код
puporev вне форума Ответить с цитированием
Старый 22.07.2008, 12:38   #5
terminadoor
Пользователь
 
Регистрация: 26.06.2008
Сообщений: 86
По умолчанию

Hollander, вот код то как будто хорош, НО:
текст мемо1: / текст мемо2: Результат:
1 / 1ОК
0 / 0
0 / 0
1 / 0
Может есть другой алгоритм?
TerMinAdoOR
terminadoor вне форума Ответить с цитированием
Старый 22.07.2008, 22:44   #6
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

А реально просто проверить if Memo1.Text = Memo2.Text then не дано? Так ведь гараздо лечге!
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума Ответить с цитированием
Старый 23.07.2008, 13:00   #7
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

terminadoor, не много не допонял - это что?
1 / 1ОК
0 / 0
0 / 0
1 / 0
Hollander вне форума Ответить с цитированием
Старый 23.07.2008, 18:31   #8
terminadoor
Пользователь
 
Регистрация: 26.06.2008
Сообщений: 86
По умолчанию

Hollander, до 1-ой / во всех 4 рядках - содержимое мемо1, далее(тоже во всех 4 рядках) содержимое мемо2 и результат, которий программа видаёт. ХОТЯ ЕТО НЕ ПРАВИЛЬНИЙ РЕЗУЛЬТАТ!
TerMinAdoOR
terminadoor вне форума Ответить с цитированием
Старый 23.07.2008, 19:20   #9
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

что за чушь?
только что проверил.
Код:
if memo1.Text=memo2.Text then showmessage('It is OK!')
                         else showmessage('It is bad!');
всё работает правильно.
Может быть вы про последнюю строчку забываете? Просто она у вас пустая, и хоть и написано и там и там одинакого, но из=за последней пустой строки содержимое будет не равно.
zetrix вне форума Ответить с цитированием
Старый 23.07.2008, 19:33   #10
terminadoor
Пользователь
 
Регистрация: 26.06.2008
Сообщений: 86
По умолчанию

Zetrix, огромное спосибо. Проблема решена. Тему можна закрить.
TerMinAdoOR
terminadoor вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TMemo Valera Помощь студентам 14 04.08.2008 10:56
Фон в TMemo BlackOmen Общие вопросы Delphi 3 18.06.2008 22:34
Печать TMemo Патрон Общие вопросы Delphi 10 01.05.2008 23:37
Tmemo BlackOmen Общие вопросы Delphi 2 16.03.2008 21:03
ПОМОГИТЕ С TMEMO sergej-shpil Помощь студентам 2 08.12.2006 22:10