![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выделить подстроку: вещественное число с фиксированной точкой [D7]
rozarock © (2010-04-13 21:13:00)Задача в следующем: дана строка символов, состоящая из букв, цифр, запятых, точек, знаков “+” и “-“. Выделить подстроку, которая соответствует записи вещественного числа с фиксированной точкой.
Строка вводится в ComboBox и при нажатии на кнопку необходимо вывести подстроку к примеру в Label.
Кусок моего нерабочего кода.
const
Digits = ['0'..'9'];
var st : string;
n,p,i,nst,mur,ind: integer;
begin
n:=0;
ind:=0;
nst:=ComboBox1.ItemIndex;
st:=ComboBox1.Items[nst];
for i:=1 to Length(st) do begin
case ind of
0 : if (st[i] in Digits) then begin
ind:=1;
n:=n+1;
// p:=pos(i,st);
end;
1 : if not (st[i] in Digits) then begin
ind:=0;
otv:=copy(st,i,n);
end;
Label3.Caption:=IntToStr(otv);
end;
end.
Ребята, помогите, пожалуйста.
Leonid Troyanovsky (2010-04-15 12:39:00) [1]
> rozarock © (15.04.10 01:22) [12]
> - знать проектирвоание ИС
procedure TForm1.Button1Click(Sender: TObject);
var
ss: TStringStream;
p: TParser;
begin
ss := TStringStream.Create(Memo1.Text);
p := TParser.Create(ss);
while (p.Token <> toEOF) do
begin
if (p.Token = '+') then
p.NextToken;
if (p.Token = toFloat) then
ShowMessage(p.TokenString);
p.NextToken;
end;
p.Free;
ss.Free;
end;
--
Regards, LVT.
Anatoly Podgoretsky (2010-04-15 08:49:00) [2]> rozarock (15.04.2010 01:02:10) [10]
Вот если бы повар, то обратился бы.
И. Павел (2010-04-15 08:07:00) [3]> И переводчики вынуждены сдавать высшую математику. И менеджеры
> - знать проектирвоание ИС
Это называется "общее развитие" и важно для тех студентов, которые воспринимают получение высшего образования не как "ритуал". Это также важно, если вы не хотите краснеть перед своими детьми, будучи не в состоянии помочь им в учебе.
Германн (2010-04-15 01:24:00) [4]
> rozarock © (15.04.10 01:22) [12]
>
> Не будьте столь педантичны.
Я не педантичен. Вот только стиль "впопыхах" мне не известен.
rozarock (2010-04-15 01:22:00) [5]Не будьте столь педантичны. Такие аккаунты создаются впопыхах.
Зачем? Ритуал получения высшего образования никто не отменял.
И переводчики вынуждены сдавать высшую математику. И менеджеры - знать проектирвоание ИС
Германн (2010-04-15 01:11:00) [6]
> Зато я неплохой фотограф и экономист
Хм. Зачем неплохому фотографу и особенно экономисту сдалось программирование?
А уж анкета просто убивает. :)
Реальное имя: Разина Екатерина
Пол: Мужской
rozarock (2010-04-15 01:02:00) [7]Игорь, благодарю за решение. Сама бы я этого сделать не смогла. По крайней мере изящно и не в течение двух недель.
PS Зато я неплохой фотограф и экономист ;) Обращайтесь
Anatoly Podgoretsky (2010-04-14 08:41:00) [8]> Игорь Шевченко (13.04.2010 23:47:06) [6]
Это не их задача и это их не колышет.
Anatoly Podgoretsky (2010-04-14 08:41:00) [9]> Германн (14.04.2010 00:55:07) [7]
И ходят по форумам, ищут
Германн (2010-04-14 00:55:00) [10]
> Игорь Шевченко © (13.04.10 23:47) [6]
>
> Вот что странно - описание задачи встречается во многих
> ссылках, в том числе и в методичках. Ну почему они, авторы
> методичек, там же не публикуют и решения ?
Может они их сами не знают? Решений т.е.
Игорь Шевченко (2010-04-13 23:47:00) [11]Вот что странно - описание задачи встречается во многих ссылках, в том числе и в методичках. Ну почему они, авторы методичек, там же не публикуют и решения ? Все равно из студентов программистов не выйдет по таким задачкам - а там хоть по форумам меньше народу ходить будет...
Игорь Шевченко (2010-04-13 23:44:00) [12]
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
function GetFloatSubstring (const S: string): string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
FloatStr: string;
begin
FloatStr := GetFloatSubstring(Edit1.Text);
if FloatStr = '' then
begin
Label1.Caption := 'nothing';
Label2.Caption := 'nothing';
end
else
begin
Label1.Caption := FloatStr;
Label2.Caption := FloatToStr(StrToFloat(FloatStr));
end;
end;
function TForm1.GetFloatSubstring(const S: string): string;
function IsDigit(C: Char): Boolean;
begin
Result := AnsiChar(C) in ['0'..'9'];
end;
type
TAutomataState = (asNone, asDigit, asSeparator, asDigitAfterSeparator);
var
I, NumberStart, NumberEnd: Integer;
AutomataState: TAutomataState;
begin
Result := '';
NumberEnd := 0;
NumberStart := 0;
AutomataState := asNone;
for I := 1 to Length(S) do
case AutomataState of
asNone: //Waiting for +,-,digit;
if (S[I] = '+') or (S[I] = '-') or IsDigit(S[I]) then
begin
NumberStart := I;
AutomataState := asDigit;
end;
asDigit: //Waiting for digit or decimal separator
if S[I] = DecimalSeparator then
AutomataState := asSeparator
else if not IsDigit(S[I]) then
AutomataState := asNone; //not a number
asSeparator: //Got separator, waiting for digit
if IsDigit(S[I]) then
AutomataState := asDigitAfterSeparator
else
AutomataState := asNone; //not a number
asDigitAfterSeparator:
if not IsDigit(S[I]) then
begin
NumberEnd := Pred(I);
Break;
end;
end;
if AutomataState = asDigitAfterSeparator then
begin
if NumberEnd = 0 then
NumberEnd := Length(S);
Result := Copy(S, NumberStart, NumberEnd-NumberStart+1);
end;
end;
end.
А вообще, бросай ты, девушка Катя, это программирование нафиг :)
И. Павел (2010-04-13 22:48:00) [13]
> Там приведено решение на С.
> i:= 1;
Так вот ты какой - це плюс плюс...
rozarock (2010-04-13 22:29:00) [14]Я не могу адаптировать код с первой ссылки в Delphi самостоятельно. Там приведено решение на С.
Единственная надежда - уважаемые мастера, т.к. я не программист (
И. Павел (2010-04-13 22:17:00) [15]Найти-то легко. А вот с разбором алгоритма судя по всему будет сложно.
http://forum.sources.ru/index.php?showtopic=276120
Если не подойдет - можно поискать в google.
http://www.google.com/#hl=en&source=hp&q=%D0%B4%D0%B0%D0%BD%D0%B0+%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0+%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2%2C+%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D1%89%D0%B0%D1%8F+%D0%B8%D0%B7+%D0%B1%D1%83%D0%BA%D0%B2%2C+%D1%86%D0%B8%D1%84%D1%80%2C+%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D1%8B%D1%85%2C+%D1%82%D0%BE%D1%87%D0%B5%D0%BA%2C+%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2&btnG=Google+Search&aq=f&aqi=&aql=&oq=%D0%B4%D0%B0%D0%BD%D0%B0+%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0+%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2%2C+%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D1%89%D0%B0%D1%8F+%D0%B8%D0%B7+%D0%B1%D1%83%D0%BA%D0%B2%2C+%D1%86%D0%B8%D1%84%D1%80%2C+%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D1%8B%D1%85%2C+%D1%82%D0%BE%D1%87%D0%B5%D0%BA%2C+%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2&gs_rfai=&fp=bcdf8cbbf06dc4f
MBo (2010-04-13 21:19:00) [16]нерабочий код похож на кусок сумбурной попытки реализации конечного автомата. Стоит немного разобраться с этими самыми автоматами, и аккуратно выписать состояния и переходы для данной задачи.