PDA

View Full Version : آموزش: کسر هزار



sj1501
جمعه 26 خرداد 1391, 10:09 صبح
سلام به استادان بزرگوار میخواستم بدونم در دلفی چطور می تونم کسر هزار هزار است رو محاسبه کنم؟

مثال : از 1001 کیلوگرم تا 1999 کیلوگرم بشود 2 تن

لطفا کمکم کنید :ناراحت: فوریییییی میخوام:ناراحت:

sj1501
جمعه 26 خرداد 1391, 10:11 صبح
لطفا کمکمممممممممممممم کنیددددددد

Ananas
جمعه 26 خرداد 1391, 11:11 صبح
سلام. همچین تابعی میشه:

function RoundByThreshold(const X : Integer; const Step : Integer = 1000; const Threshold : Integer = 1):Integer;
begin
if Abs((X + Threshold) mod Step) <= (Threshold * 2) then
Result := Step * ((X + Threshold) div Step)
else
Result := X;
end;

sj1501
جمعه 26 خرداد 1391, 12:02 عصر
نهایت تشکر بابت جواب، می تونم از شما خواهش بکنم که بصورت پروژه دلفی برایم بزارید اگر این لطف رو در حقم بکنید دعاااااتون میکنم:قلب:

Ananas
جمعه 26 خرداد 1391, 12:20 عصر
نهایت تشکر بابت جواب، می تونم از شما خواهش بکنم که بصورت پروژه دلفی برایم بزارید اگر این لطف رو در حقم بکنید دعاااااتون میکنم:قلب:
لطف دارید. کار سختی نیست خودت میتونی سعی کن. اگه همه چیزو من بنویسم شما فقط کپی کنی درحقت لطف نکردم بهت خیانت کردم.
باید یک عدد از کاربر بگیری بعد بگذاری تو این تابع. از تابع IntToStr هم برای تبدیل عدد به string و از تابع StrToInt هم برای تبدیل string به عدد استفاده کن.

sj1501
جمعه 26 خرداد 1391, 12:30 عصر
چشم استاد ، بازم بابت پاسخگویی تشکرررررررررررررررررررررر ررررررررر

sj1501
جمعه 26 خرداد 1391, 13:10 عصر
از تابع استفاده کردم ولی خود عدد رو بر می گردونه اگر ممکنه یه نگاهی به پروژه بندازید

Ananas
جمعه 26 خرداد 1391, 14:32 عصر
چشم استاداستاد خودتی.

از تابع استفاده کردم ولی خود عدد رو بر می گردونه اگر ممکنه یه نگاهی به پروژه بندازید
ببخشید من اشتباه متوجه شدم دوست عزیز. تابعی که من نوشتم میاد اعداد بین 999 تا 1001 رو 1000 بر میگردونه و بقیه رو بدون تغییر . یه جوری رند کردن یا شایدم گرد کردن بحساب میاد. مثل اینکه بگیم 1000 +-1 (دیدی روی بسته های خوراکی وزنشون رو اینجوری مینویسن).
سوال اولتون رو دوباره خوندم. اشالا این بار درست متوجه شده باشم. باید از div استفاده کنید :
procedure TForm1.Button1Click(Sender: TObject);
var n:integer ;
begin
n:=strtoint(edit1.Text);
label1.Caption := IntToStr(n div 1000);
end;
اون تابعی هم که اول نوشته بودم لازم نیست، کلا بزارش کنار.
البته شاید لازم بشه یکی زیاد کنی حالا یا به n و یا به کلش یا به هر دو مثلا :
IntToStr((n + 1) div 1000 + 1);
دیگه ببین کدومشو می خوای امتحانشون کن.

sj1501
شنبه 27 خرداد 1391, 08:52 صبح
بابت کمکتون خیلیییییییی ممنونم

استاد شماید و ما هم شاگرد

ببخشید یه اشتباه از من در سوال : (بین 1001 تا 2000 بشود 2) یا (بین 10001 تا 11000 بشود 11) اگر (9999 بود بشود 10)

من استفاده کردم خیلی عالی بود فقط یه نقص کوچولو داشت اونم اینه که وقتی 1000 یا 999 بهش میدم در جواب میدهد 2 که درستش 1 هست

به اینصورت اصلاحش کردم

var n1,n2,n3:integer ; k1,a1:real;
begin
n1:=strtoint(edit1.Text);
k1:= n1 / 1000 ;
a1:=(Frac(k1));
n2:=n1 div 1000;
n3:=n1 div 1000 + 1;
begin
if a1>0 then label1.Caption := inttostr(n3) else
label1.Caption := inttostr(n2)
end;

Ananas
شنبه 27 خرداد 1391, 16:57 عصر
احسنت، دستت درد نکنه. ممنون.
لطفا کدها رو داخل تگ مخصوصش کپی کن که بهتر بشه دید. کد شما رو تو دلفی کپی کردم با اجازتون یک خط هم به آخرش اضافه کردم که فکر میکنم همون نتیجه رو میده یه امتحانی بکن. من به جای -1 نوشته بودم +1.

procedure TForm1.Button1Click(Sender: TObject);
var
n1, n2, n3 : Integer;
k1, a1 : Extended;
begin
n1 := StrToInt(Edit1.Text);
k1 := n1 / 1000.0;
a1 := (Frac(k1));
n2 := n1 div 1000;
n3 := n1 div 1000 + 1;
begin
if a1>0 then
label1.Caption := IntToStr(n3)
else
label1.Caption := IntToStr(n2);
end;
//--------------------
Label1.Caption := Label1.Caption + ' = ' + IntToStr((n1 - 1) div 1000 + 1);
end;

sj1501
شنبه 27 خرداد 1391, 19:23 عصر
تشکر وووو بازم تشکر از شما دوست عزیززززززززز:تشویق:

مشکلم کلا حل شد ، ایشالا که هیچ وقت مشکل نداشته باشییییییی:لبخندساده: