Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизВыделить подстроку: вещественное число с фиксированной точкой Найти похожие ветки
← →
rozarock © (2010-04-13 21:13) [0]Задача в следующем: дана строка символов, состоящая из букв, цифр, запятых, точек, знаков “+” и “-“. Выделить подстроку, которая соответствует записи вещественного числа с фиксированной точкой.
Строка вводится в 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.
Ребята, помогите, пожалуйста.
← →
MBo © (2010-04-13 21:19) [1]нерабочий код похож на кусок сумбурной попытки реализации конечного автомата. Стоит немного разобраться с этими самыми автоматами, и аккуратно выписать состояния и переходы для данной задачи.
← →
И. Павел © (2010-04-13 22:17) [2]Найти-то легко. А вот с разбором алгоритма судя по всему будет сложно.
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
← →
rozarock © (2010-04-13 22:29) [3]Я не могу адаптировать код с первой ссылки в Delphi самостоятельно. Там приведено решение на С.
Единственная надежда - уважаемые мастера, т.к. я не программист (
← →
И. Павел © (2010-04-13 22:48) [4]
> Там приведено решение на С.
> i:= 1;
Так вот ты какой - це плюс плюс...
← →
Игорь Шевченко © (2010-04-13 23:44) [5]
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 23:47) [6]Вот что странно - описание задачи встречается во многих ссылках, в том числе и в методичках. Ну почему они, авторы методичек, там же не публикуют и решения ? Все равно из студентов программистов не выйдет по таким задачкам - а там хоть по форумам меньше народу ходить будет...
← →
Германн © (2010-04-14 00:55) [7]
> Игорь Шевченко © (13.04.10 23:47) [6]
>
> Вот что странно - описание задачи встречается во многих
> ссылках, в том числе и в методичках. Ну почему они, авторы
> методичек, там же не публикуют и решения ?
Может они их сами не знают? Решений т.е.
← →
Anatoly Podgoretsky © (2010-04-14 08:41) [8]> Игорь Шевченко (13.04.2010 23:47:06) [6]
Это не их задача и это их не колышет.
← →
Anatoly Podgoretsky © (2010-04-14 08:41) [9]> Германн (14.04.2010 00:55:07) [7]
И ходят по форумам, ищут
← →
rozarock © (2010-04-15 01:02) [10]Игорь, благодарю за решение. Сама бы я этого сделать не смогла. По крайней мере изящно и не в течение двух недель.
PS Зато я неплохой фотограф и экономист ;) Обращайтесь
← →
Германн © (2010-04-15 01:11) [11]
> Зато я неплохой фотограф и экономист
Хм. Зачем неплохому фотографу и особенно экономисту сдалось программирование?
А уж анкета просто убивает. :)
Реальное имя: Разина Екатерина
Пол: Мужской
← →
rozarock © (2010-04-15 01:22) [12]Не будьте столь педантичны. Такие аккаунты создаются впопыхах.
Зачем? Ритуал получения высшего образования никто не отменял.
И переводчики вынуждены сдавать высшую математику. И менеджеры - знать проектирвоание ИС
← →
Германн © (2010-04-15 01:24) [13]
> rozarock © (15.04.10 01:22) [12]
>
> Не будьте столь педантичны.
Я не педантичен. Вот только стиль "впопыхах" мне не известен.
← →
И. Павел © (2010-04-15 08:07) [14]> И переводчики вынуждены сдавать высшую математику. И менеджеры
> - знать проектирвоание ИС
Это называется "общее развитие" и важно для тех студентов, которые воспринимают получение высшего образования не как "ритуал". Это также важно, если вы не хотите краснеть перед своими детьми, будучи не в состоянии помочь им в учебе.
← →
Anatoly Podgoretsky © (2010-04-15 08:49) [15]> rozarock (15.04.2010 01:02:10) [10]
Вот если бы повар, то обратился бы.
← →
Leonid Troyanovsky © (2010-04-15 12:39) [16]
> 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.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.066 c