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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 14:42   #1
nooonname
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 15
По умолчанию Проблема с ошибками в делфи

В программе все работает в общем.
Но, выдает ошибку на каждый введеный символ в memo2.
В программе есть два поля memo1 и memo2.
memo1 - сюда загружается задание.
memo2 - сюда я ввожу то, что дано в задании.
Например, по заданию, мне нужно просто напечатать букву А. Но я пишу букву А и мне выходит ошибка. Ошибка и должна выходить, я ее сам сделал. Но не могу сделать так, чтобы если в memo1 дана буква А, то в memo2 можно печатать только букву А, иначе, ошибка.
Задания загружаются в виде текстовых файлов. (opendialog).

Разъясните пожалуйста поподробнее как это сделать. Приведите пример кода. Код программы есть. И я вроде понял в чем ошибка. Ошибка в коде который ошибки обрабатывает. Но что там не так? Где ошибка?
Вложения
Тип файла: txt код.txt (1.9 Кб, 124 просмотров)
nooonname вне форума Ответить с цитированием
Старый 22.12.2010, 16:06   #2
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
По умолчанию

Цитата:
Но не могу сделать так, чтобы если в memo1 дана буква А, то в memo2 можно печатать только букву А, иначе, ошибка.
Задания загружаются в виде текстовых файлов. (opendialog).
В мемо1 на событие onKeyPress/либо на change, считывается последний введенный символ.
Этот символ добавляется в какой либо массив.
Далее.
На мемо2 ставишь событие OnKeyPress/Change (кому как удобнее). В этом событии последний символ Line'а у мемо2 проверяется на совпадение с массивом. Если нет - удаляется, затем показываешь ошибку.

Последний раз редактировалось stck; 22.12.2010 в 16:10.
stck вне форума Ответить с цитированием
Старый 23.12.2010, 06:21   #3
nooonname
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от stck Посмотреть сообщение
В мемо1 на событие onKeyPress/либо на change, считывается последний введенный символ.
Этот символ добавляется в какой либо массив.
Далее.
На мемо2 ставишь событие OnKeyPress/Change (кому как удобнее). В этом событии последний символ Line'а у мемо2 проверяется на совпадение с массивом. Если нет - удаляется, затем показываешь ошибку.
А можно пожалуйста пример кода привести? А то до меня вообще не доходит как это все сделать.

Последний раз редактировалось nooonname; 23.12.2010 в 06:41.
nooonname вне форума Ответить с цитированием
Старый 23.12.2010, 09:05   #4
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
По умолчанию

Код:
unit Unit4;

interface

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

type
  TForm4 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
    procedure Memo2Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;
  a:array[1..9999] of string; {массив с символами}
  s,v:string;
  i:integer=1;
  x,z,j,c,count:integer=0;
implementation

{$R *.dfm}

procedure TForm4.FormCreate(Sender: TObject);
begin
for i := 0 to 9999 do    //очистка
a[j]:='';                     //массива
end;

procedure TForm4.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  for c:=0 to 99 do             //для строк с индексом от 0 до 99 сделать
  begin         
    s:=memo1.Lines.ValueFromIndex[c]; //s равно строке с текущим индексом.
    for x := 1 to length(s)-1 do    //для каждого символа в последовательности
    begin
      s:=copy(s,x,1);              // s равен символу
    for j:=0 to 9999 do           // проверяем массив
      begin
        if s=a[j] then               //если значение s есть в массиве,то
          inc(count);                // увеличиваем счетчик
      end;
    if count=0 then a[i]:=s;      //если счетчик равен нуля то добавляем элемент
    end;
  end;
end;


procedure TForm4.Memo2Change(Sender: TObject);
begin
  for c:=0 to 99 do
  begin
    s:=memo2.Lines.ValueFromIndex[c];
    for x := 1 to length(s)-1 do
    begin
      s:=copy(s,x,1);
      for j:=0 to 9999 do
      begin
        if s=a[j] then
          begin
            v:=memo2.Lines.valuefromindex[c];
            for z := 1 to length(v) do
              if s=v[z] then
                delete(v,z,1);
                memo2.Lines.ValueFromIndex[c]:=v;
          end;
      end;
    end;
  end;
end;

Последний раз редактировалось stck; 23.12.2010 в 09:11.
stck вне форума Ответить с цитированием
Старый 23.12.2010, 09:06   #5
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
По умолчанию

Вот то, что получилось у меня. Здесь реализованы как change, так и keypress.
stck вне форума Ответить с цитированием
Старый 23.12.2010, 14:10   #6
nooonname
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 15
По умолчанию

stck,
спасибо большое, но не все работает.
Только, трудно мне дается делфи и не пойму теперь после какой строчки давать ошибку, когда введен, не тот символ который дан в memo1. Блин.

И делфи мне выводит ошибку на x,z,j,c,count:integer=0;
И, когда убираешь ноль, на if s=a[j] then
nooonname вне форума Ответить с цитированием
Старый 23.12.2010, 14:20   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно выдает. Нужно так:
Код:
 x,z,j,c:integer;count:integer=0;
Нельзя в Делфи много переменок сразу инициализировать.
Цитата:
И, когда убираешь ноль, на if s=a[j] then
Какими словами?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.12.2010, 14:38   #8
nooonname
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 15
По умолчанию

Вот, когда здесь x,z,j,c,count:integer=0 убираешь ноль
выдает ошибку на if s=a[j] then
nooonname вне форума Ответить с цитированием
Старый 23.12.2010, 14:39   #9
nooonname
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 15
По умолчанию

И сейчас даже, сделал как сказал Stillet, там же ошибка, в условии.
А ошибка типа, If s=a[j] then переменная должна быть простого локального типа. Что то как то так, не очень дружу с английским.

И здесь, for i:=0 to 9999 do точно такая же ошибка

Последний раз редактировалось nooonname; 23.12.2010 в 15:16.
nooonname вне форума Ответить с цитированием
Старый 23.12.2010, 19:42   #10
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
По умолчанию

Извиняюсь, за нерабочий код. Не правильно по суди обрабатывал. Отправил решение в скайп
stck вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать окна с ошибками? Вадим Буренков Общие вопросы Delphi 1 14.07.2009 17:00
Архив извлекает с ошибками SADAM Компьютерное железо 14 26.04.2009 11:52
помогите разобратса с ошибками ALEKS_STRELOK Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.03.2009 18:38
Помогите разобраться с ошибками в исходнике С++ Go6a Помощь студентам 1 03.05.2008 17:43
сообщения с ошибками в delphi Alar Общие вопросы Delphi 0 30.10.2006 00:43