سلام دوستان یک سوال دارم ممنون میشم کمکم کنید
فرض کنید که یک کاربر یک مقداری به این شکل وارد میکنم42+1+0+20
بعد حالا ما به چه روشی و به چه کدی میتوانیم. این String را محاسبه کنیم.
که جواب به ما بده 63
ممنون میشم راهنمایی ام کنید
سلام دوستان یک سوال دارم ممنون میشم کمکم کنید
فرض کنید که یک کاربر یک مقداری به این شکل وارد میکنم42+1+0+20
بعد حالا ما به چه روشی و به چه کدی میتوانیم. این String را محاسبه کنیم.
که جواب به ما بده 63
ممنون میشم راهنمایی ام کنید
سلام دوست عزیز
شما یه زحمت میکشید یه Edit و یه Button و یه label به فرمتون اضافه میکنید و بعد کد زیر رو اضافه کنید :
Function Calc(Input: String): String;
var
Txt, S1, S2: String;
Ps1, Ps2, Loop1, Loop2: Integer;
Sum: Real;
begin
Txt:=Input;
Loop1:=0;
S1:=Copy(Txt,1,1);
while S1<>'' do
begin
Loop1:=Loop1+1;
S1:=Copy(Txt,Loop1,1);
if (S1='+') or (S1='-') or (S1='*') or (S1='/') then
begin
Ps1:=Loop1;
For Loop2:=Loop1+1 to Length(Txt) do
begin
S2:=Copy(Txt,Loop2,1);
if (S2='+') or (S2='-') or (S2='*') or (S2='/') then
begin
Ps2:=Loop2;
Break;
end
else
if Loop2=Length(Txt) then
begin
Ps2:=length(Txt)+1;
Break;
end;
end;
if S1='+' then Sum:=StrToFloat(Copy(Txt,1,Ps1-1))+StrToFloat(Copy(Txt,Ps1+1,(Ps2-Ps1)-1));
if S1='-' then Sum:=StrToFloat(Copy(Txt,1,Ps1-1))-StrToFloat(Copy(Txt,Ps1+1,(Ps2-Ps1)-1));
if S1='*' then Sum:=StrToFloat(Copy(Txt,1,Ps1-1))*StrToFloat(Copy(Txt,Ps1+1,(Ps2-Ps1)-1));
if S1='/' then Sum:=StrToFloat(Copy(Txt,1,Ps1-1))/StrToFloat(Copy(Txt,Ps1+1,(Ps2-Ps1)-1));
Txt:=FloatToStr(Sum)+Copy(Txt,Ps2,Length(Txt));
Loop1:=0;
end;
end;
Result:=FloatToStr(Sum);
end;
نحوه استفادشم اینجوریه :
توی OnClick مربوط به button بنویسید :
Label1.Caption:=Calc(Edit1.Text);
اگر جاییش ایراد داره خودتون رفعش کنید و در ضمن این فانکشن اولویت عملیات رشته ریاضی رو در نظر نمیگیره .
موفق باشید .
سلام فانکشن بالا یه مشکل کوچولو با اعداد منفی داشت که درستش کردم :
Function Calc(Input: String): String;
var
Txt, S1, S2: String;
Ps1, Ps2, Loop1, Loop2: Integer;
Sum: Real;
begin
Txt:=Input;
Loop1:=0;
S1:=Copy(Txt,1,1);
while S1<>'' do
begin
Loop1:=Loop1+1;
S1:=Copy(Txt,Loop1,1);
if (S1='+') or (S1='-') or (S1='*') or (S1='/') then
begin
Ps1:=Loop1;
For Loop2:=Loop1+1 to Length(Txt) do
begin
S2:=Copy(Txt,Loop2,1);
if (S2='+') or (S2='-') or (S2='*') or (S2='/') then
begin
Ps2:=Loop2;
Break;
end
else
if Loop2=Length(Txt) then
begin
Ps2:=length(Txt)+1;
Break;
end;
end;
if Ps1<>1 then
begin
if S1='+' then Sum:=StrToFloat(Copy(Txt,1,Ps1-1))+StrToFloat(Copy(Txt,Ps1+1,(Ps2-Ps1)-1));
if S1='-' then Sum:=StrToFloat(Copy(Txt,1,Ps1-1))-StrToFloat(Copy(Txt,Ps1+1,(Ps2-Ps1)-1));
if S1='*' then Sum:=StrToFloat(Copy(Txt,1,Ps1-1))*StrToFloat(Copy(Txt,Ps1+1,(Ps2-Ps1)-1));
if S1='/' then Sum:=StrToFloat(Copy(Txt,1,Ps1-1))/StrToFloat(Copy(Txt,Ps1+1,(Ps2-Ps1)-1));
Txt:=FloatToStr(Sum)+Copy(Txt,Ps2,Length(Txt));
Loop1:=0;
end;
end;
end;
Result:=FloatToStr(Sum);
end;
موفق باشید .
ممنون، ببخشید من تازه کد نویسی را شروع کردم و چیزی زیادی بلد نیستم
فقط یک سوال من فقط میخوام علامت + را حساب کنه
نیازی به * / و - ندارم.
اون چطوریه
procedure TForm1.Button1Click(Sender: TObject);
var
Str: string;
Sum, PlusIndex: Integer;
begin
Sum := 0;
PlusIndex := -1;
Str := Edit1.Text;
// تعیین ایندکس اولین جایی که علامت + در رشته وجود دارد
PlusIndex := Str.IndexOf('+');
while PlusIndex > 0 do
begin
// از ابتدای رشته تا محل علامت + رو کپی کرده و بعد از تبدیل به عدد، با مقدار قبلی متغیر مجموع جمع میکنیم
Sum := Sum + StrToInt(Copy(Str, 1, PlusIndex));
//برای حذف کاراکتر های قبل از اولین + و همچنین خود +، کارکترهای بعد از علامت + از رشته را کپی کرده و مجددا درون متغیر رشته میریزیم
Str := Copy(Str, PlusIndex + 2, Length(Str) - PlusIndex);
PlusIndex := Str.IndexOf('+');
end;
if Str.Length > 0 then
Sum := Sum + StrToInt(Str);
ShowMessage('نتیجه : ' + IntToStr(Sum));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, sum: integer;
s: string;
lst: TStringList;
begin
s := '42+1+0+20';
lst := TStringList.Create;
lst.Text := StringReplace(s, '+', #13#10, [rfReplaceAll]);
sum := 0;
for i := 0 to lst.Count -1 do
sum := sum + StrToInt(lst[i]);
lst.Destroy;
ShowMessage(IntToStr(sum));
end;
توابع تبدیل تاریخ با دقت 5000 سال
پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/
نرم افزار پخش مویرگی