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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2014, 23:39   #1
KaDima28
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 48
Счастье Работа со строками...

...или как я люблю тупить.

Я знаю что можно было через цикл заполнять массивы, но я попробовал уже вручную но никак не катит.
Вот код:
Код:
var sl,sl1:string;
    i,i2:integer;
    numKl:array of string;
    strKl:array of string;
begin
sl:=Edit65.Text;

if sl[2]='-' then begin

numKl[1]:='1';
numKl[2]:='2';
numKl[3]:='3';
numKl[4]:='4';
numKl[5]:='5';
numKl[6]:='6';
numKl[7]:='7';
numKl[8]:='8';
numKl[9]:='9';
numKl[10]:='10';
numKl[11]:='11';
numKl[12]:='12';




strKl[1]:='А';
strKl[2]:='Б';
strKl[3]:='В';
strKl[4]:='Д';

for i:=0 to 4 do
  begin

   if sl[3]=strKl[i] then
    begin

      for i2:=0 to 12 do
        begin

          if sl[1]=numKl[i] then
            begin
              showMessage('PRINATO!!');
            end;

        end;

    end;

  end;

end;
Вот она, та ленивая строчка : if sl[2]='-' then begin

Все норм, компилируется, а вот при нажатии вызывает ошибку.

Спасибо всем, кто Помог!

Последний раз редактировалось KaDima28; 17.04.2014 в 23:46.
KaDima28 вне форума Ответить с цитированием
Старый 17.04.2014, 23:53   #2
blackstrip
Форумчанин
 
Аватар для blackstrip
 
Регистрация: 21.01.2012
Сообщений: 240
По умолчанию

if sl[2]='-' значит, что если второй символ в строке sl (взятой из Edit65.Text) равен тире, то делаем обработку. Если при запуске процедуры в этой строке вылезает ошибка - то значит, возможно второго символа в строке нет. Можно перед этой строкой
Код:
if sl[2]='-'
поставить другую строку
Код:
if length(sl)<2 then exit;
чтоб проверка на соответствие второго символа символу "тире" даже не начиналась если введенная строка в edit65 короче 2 символов. А т.к. внизу еще и третий символ рассматривается - то можно проверку на длину, не меньшую 3, делать.

А в цикле массивы не заполняются потому что под динамические массивы надо сначала по хорошему выделить память.

Код:
SetLength(numKl,13);
for i:=1 to 12 do numKl[1] := IntToStr(i);
А еще проверка sl[1]=numKl[i] непонятно что делает для индексов i=10,11,12, т.к. сравнивает символ со строками "10", "11", "12". Видимо кривовато написан код.

Последний раз редактировалось blackstrip; 18.04.2014 в 00:14.
blackstrip вне форума Ответить с цитированием
Старый 17.04.2014, 23:58   #3
KaDima28
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 48
По умолчанию

Мдаа... А теперь, а ввожу к примеру 5-А и при этом выводиться ошибка которая как-бы в Контрлс из этого кода:
Код:
  else if Assigned(FOnClick) then
    FOnClick(Self);
end;
Чет, на end; сердиться.
KaDima28 вне форума Ответить с цитированием
Старый 18.04.2014, 00:29   #4
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

Цитата:
Чет, на end; сердиться.
Может он лишний? Количество End Равняется количеству begin в пределах процедуры/функции. Считай.
XE5 вне форума Ответить с цитированием
Старый 18.04.2014, 15:12   #5
KaDima28
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 48
По умолчанию

??? Я конечно понимаю, но это файл Дельфи. Ну уж не может такого что они ошиблись

P.S.: один end и один begin

Последний раз редактировалось KaDima28; 18.04.2014 в 15:15.
KaDima28 вне форума Ответить с цитированием
Старый 18.04.2014, 15:20   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от KaDima28 Посмотреть сообщение
Мдаа... А теперь, а ввожу к примеру 5-А и при этом выводиться ошибка которая как-бы в Контрлс из этого кода:
Код:
  else if Assigned(FOnClick) then
    FOnClick(Self);
end;
Чет, на end; сердиться.
Да не сердится она на end
Просто исключение у тебя возникло в обработчике Что-то.OnClick А в этих строчках и происходит вызов этого обработчика.
northener вне форума Ответить с цитированием
Старый 18.04.2014, 17:34   #7
KaDima28
Пользователь
 
Регистрация: 24.03.2014
Сообщений: 48
По умолчанию

Поменял код. Все-равно:

Код:
sl:=Edit65.Text;
if length(sl)<3 then exit;
if sl[2]='-' then begin

numKl[1]:='1';
numKl[2]:='2';
numKl[3]:='3';
numKl[4]:='4';
numKl[5]:='5';
numKl[6]:='6';
numKl[7]:='7';
numKl[8]:='8';
numKl[9]:='9';
//numKl[10]:='10';
//numKl[11]:='11';
//numKl[12]:='12';



strKl[1]:='А';
strKl[2]:='Б';
strKl[3]:='В';
strKl[4]:='Д';

for i:=0 to 4 do
  begin
   if length(sl)<2 then exit;
   if sl[3]=strKl[i] then
    begin

      for i2:=0 to 11 do
        begin
        if length(sl)<2 then exit;
          if sl[1]=numKl[i] then
            begin
              showMessage('PRINATO!!');
            end else exit;

        end

    end else exit;

  end


end;
Я вот тут думаю, может в циклах ФОР нельзя проверять и еще один цикл ФОР ставить.
KaDima28 вне форума Ответить с цитированием
Старый 18.04.2014, 21:15   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Я вот тут думаю, может в циклах ФОР нельзя проверять и еще один цикл ФОР ставить.
У Вас 2-й цикл не влияет на вычисления. Может там в условии i2 должно быть? А так Вы просто одно и то же условие проверяете много раз подряд, что естественно бессмысленно.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 18.04.2014, 23:20   #9
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

Данный код в любом случае будет вываливать ошибки, так как под массивы numKl, и strKl не выделена память. Читаем внимательно пост #2. Как более простой вариант, объявить массивы так.

Код:
const
  numKl: array [1..12] of string = ('1', '2', '3', и т.д.);
  strKl:  array  [1..4] of string = ('А', 'Б', 'В', 'Д');
var 
  sl,sl1:string;
  i,i2:integer;
begin
Помним, что если массив объявлен как константа, то менять его содержимое невозможно.

Цитата:
У Вас 2-й цикл не влияет на вычисления
Там и первый цикл ни на что не влияет. Человек вообще не умеет пользоваться циклами.

KaDima28 Озвучьте задачу.

Последний раз редактировалось XE5; 18.04.2014 в 23:24.
XE5 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Работа со строками Rikhard Общие вопросы C/C++ 1 08.12.2010 22:29
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа со строками (С) madmonk Помощь студентам 4 27.04.2010 22:08
работа со строками с++ LovingDaisy Общие вопросы C/C++ 0 11.01.2010 01:06
Работа со строками Дырдин Общие вопросы C/C++ 12 24.10.2009 19:47