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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2012, 18:00   #1
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
Вопрос Не присваивает значение третьей переменной

Доброго времени суток. Не могу понять почему переменной "с" не присваивается значение. Алгоритм работы программы должен быть таков: в некое поле вводится строка цифр/чисел разделенная неким символом программа должна разделить эту строку "по словам" и записать три значения из строки в переменные а,b,c (вводится всего три значения). Вот разделение "по словам"
Код:
procedure SplitTextIntoWords(const str: string;
output: Tstringlist; minLength: integer=1{минимальная длина слова});
var
  positionStart, positionEnd: integer;
  wordToAdd: string;
begin
  Assert(Assigned(output));
  output.Clear;
  positionStart := 1;
  while positionStart <= Length(str) do
  begin
    while (positionStart <= Length(str)) and not IsCharAlphaNumeric(str[positionStart]) do
      Inc(positionStart);
    if positionStart <= Length(str) then
    begin
      positionEnd := positionStart + 1;
      while (positionEnd <= Length(str)) and (IsCharAlphaNumeric(str[positionEnd]) or (str[positionEnd]=',')) do
        Inc(positionEnd);
      wordToAdd := Copy(str, positionStart, positionEnd - positionStart);
      if (Length(wordToAdd) >= minLength) then
      begin
        // добавление слова в список
        output.Add(AnsiLowerCase(wordToAdd));
      end;
      positionStart := positionEnd + 1;
    end;
  end;
end;
вот присвоение значений
Код:
begin
    words:= TStringList.Create;
  SplitTextIntoWords(edt1.Text,words);
  a:= StrToFloat(words.Strings [0]);
  b:= StrToFloat(words.Strings [1]);
  c:= StrToFloat(words.Strings [2]);

  words.Free;
end;
а вот я решил проверить что присваивается переменным
Код:
procedure TForm1.btn1Click(Sender: TObject);
 var words: TStringList; a, b, c: Double;
begin
    words:= TStringList.Create;
  SplitTextIntoWords(edt1.Text,words);
  a:= StrToFloat(words.Strings [0]);
  b:= StrToFloat(words.Strings [1]);
  c:= StrToFloat(words.Strings [2]);

  words.Free;
  tolshina(a);
  mmo3.Lines[0]:= FloatToStr(a) ;
  mmo3.Lines[1]:= FloatToStr(b) ;
  mmo3.Lines[2]:= FloatToStr(c) ;
    end;
в поле появляются значения переменных только а,b
но когда я проверяю всю переменную words появляются все введенные данные.
Код:
procedure TForm1.btn1Click(Sender: TObject);
 var words: TStringList; a, b, c: Double;
begin
    words:= TStringList.Create;
  SplitTextIntoWords(edt1.Text,words);
  a:= StrToFloat(words.Strings [0]);
  b:= StrToFloat(words.Strings [1]);
  c:= StrToFloat(words.Strings [2]);
  mmo3.Text:= words.Text;
  words.Free;
  tolshina(a);

    end;
Что у меня не так с кодом?
Corpuscul вне форума Ответить с цитированием
Старый 22.09.2012, 18:39   #2
Новичок!
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 35
По умолчанию

используй
mmo3.Lines.add(FloatToStr(a) );
mmo3.Lines.add(FloatToStr(b) );
mmo3.Lines.add(FloatToStr(c) );
мемо - динамический массив;

Последний раз редактировалось Новичок!; 22.09.2012 в 18:44.
Новичок! вне форума Ответить с цитированием
Старый 22.09.2012, 19:33   #3
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Новичок! Посмотреть сообщение
используй
mmo3.Lines.add(FloatToStr(a) );
mmo3.Lines.add(FloatToStr(b) );
mmo3.Lines.add(FloatToStr(c) );
мемо - динамический массив;
Я от этого хотел уйти
Код:
procedure TForm1.btn1Click(Sender: TObject);
 var words: TStringList; d, e, f: string; a, b, c: Double;
begin
    words:= TStringList.Create;
  SplitTextIntoWords(edt1.Text,words);
   mmo3.Text:=words.Text;
  words.Free;
  d:= mmo3.Lines[0];
  e:= mmo3.Lines[1];
  f:= mmo3.Lines[2];
  a:= StrToFloat(d);
  b:= StrToFloat(e);
  c:= StrToFloat(f);
  tolshina(a);

  end;
То что вы предлагаете равносильно этому

Последний раз редактировалось Corpuscul; 22.09.2012 в 19:35. Причина: Я не хочу прятать на форме поле мемо3
Corpuscul вне форума Ответить с цитированием
Старый 22.09.2012, 19:46   #4
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Новичок! Посмотреть сообщение
мемо - динамический массив;
Если можете расскажите подробнее пожалуйста, я не понимаю. Я разбил строку на 3 числа, они записались в переменную по строкам, которые имеют индексы, вызывая их я столкнулся с выше описанной проблемой, не понимаю откуда здесь взяться динамике?
Corpuscul вне форума Ответить с цитированием
Старый 22.09.2012, 21:05   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Corpuscul, проще было бы уже, если б Вы прикрепили файлы проекта в архиве к сообщению, чтобы можно было на живом примере посмотреть и оттрассировать. Быстрее бы нашлась проблема.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 22.09.2012, 21:27   #6
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Пожалуйста, смотрите, критикуйте
ggg.rar

Пожалуста, смотритеВот оно.rar

Последний раз редактировалось Stilet; 23.09.2012 в 11:30.
Corpuscul вне форума Ответить с цитированием
Старый 23.09.2012, 08:32   #7
Новичок!
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 35
По умолчанию

в мемо нужно создать сначала эти три строки и потом присваивать им значения, а как только ты создал мемо, там всего 2 строки - ммо3 и энтер и чем тебе не нравится
Код:
 mmo3.Lines.add(FloatToStr(a) );
mmo3.Lines.add(FloatToStr(b) );
mmo3.Lines.add(FloatToStr(c) );
??
только в начале очисти мемо

P.S.
у самого была та же фигня: http://programmersforum.ru/showthread.php?t=169534

Последний раз редактировалось Stilet; 23.09.2012 в 11:31.
Новичок! вне форума Ответить с цитированием
Старый 24.09.2012, 09:59   #8
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Спасибо за совет, но меня интересовало можно ли обойтись без поля мемо3. Ведь по большому счету оно выполняет функцию буфера куда переносятся строки из переменной words, а я хотел сразу присвоить этим строкам переменные...
Corpuscul вне форума Ответить с цитированием
Старый 24.09.2012, 10:05   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Что мешает объявить в качестве глобальной переменной какой-нибудь TempStringLisT: TStringList и создавать его по TForm.Create или TForm.OnShow?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.09.2012, 10:18   #10
Новичок!
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 35
По умолчанию

тогда можно так:
Код:
 a:= StrToFloat(words[0]) ;
b:= StrToFloat( words[1] ) ;
c:= StrToFloat( words[2] ) ;
Новичок! вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Значение Sleep() из переменной. NewBoy Общие вопросы C/C++ 4 03.08.2012 13:41
Найти значение переменной y в зависимости от значения переменной х Rishi Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 11.05.2011 20:25
значение переменной ололошенько Общие вопросы C/C++ 2 05.09.2010 18:05
Значение переменной 4BlooD Общие вопросы Delphi 2 20.01.2010 16:09
Значение логической переменной Shevali Помощь студентам 2 17.03.2009 22:41