PDA

View Full Version : چه جور یه برنامه گرافیکی با دلفی برای فاکتوریل می سازن؟



ferfery
دوشنبه 20 خرداد 1387, 10:19 صبح
با سلام.
ببخشید من یه مشکلی دارم میشه کمکم کنید.
من یه برنامه لازم دارم که یه باکس داشته باشه تا عددی را بگیره ویه دکمه داشته باشه تا عمل فاکتوریل را روی عدد انجام بده و یه دکمه دیگه داشته باشه جوابا چاپ کنه. من خیلی دلفی بلد نیسم.لطفا کمکم کنید.
خیلی ممنون.
راسی نهایت وقت من تا پنج شنبه23 خرداد.

babak_delphi
دوشنبه 20 خرداد 1387, 16:02 عصر
سلام
نمیدونم این موضوع با پایگاه داده چه ربطی داره
ولی خب
محاسبه فاکتوریل را از همون روشی که در پاسکال استفاده میکنید ، انجام بدید
حالا یا با for یا روش بازگشتی
برای چاپ هم میتونید جواب رو در یک Memo قرار بدید و چاپ کنید یا مثلا از QReport یا امثال اون استفاده کنید

ferfery
دوشنبه 20 خرداد 1387, 21:02 عصر
ببخشید.
حق با شماست. ولی میخواستم 4نفر ببینن و جواب بدن.
شرمنده من پاسکالم نخوندم.
یه cخوندم اونم دستا پا شکسته.
اگه میشه بگید با دلفی چی بنویسم تا بگم یه عدد دلخواه بگیره؟
اینا بگید کلی راه میفتم.
البته بگید در قسمت edit یاbotoom؟

babak_delphi
دوشنبه 20 خرداد 1387, 21:55 عصر
برای محاسبه فاکتوریل چند راه وجود داره
یکیش اینه :



program factorial (input,output);
var
zero,i,j,carry,n,x : integer;
A: array [0..99] of integer;
begin (* main *)

readln(n);
while (n > 0) do begin
if (n <= 1) then writeln('1')
else
begin
A[0]:=1;
for j:=1 to 99 do A[j]:=0;

for i:= 2 to n do
begin
carry:=0;
for j:=0 to 99 do
begin
x:= A[j]*i+carry;
A[j]:= (x mod 10);
carry:= x div 10;
end
end;
zero:=99;
while (A[zero]=0) do zero:=zero-1;
for j:=zero downto 0 do
write(A[j]:1);
writeln;
end;
readln(n);
end;

end.


حالا با این روش یا هر روشی که خواستی تابع محاسبه فاکتوریل رو بنویس
بعد عدد رو در Edit از کاربر بگیر و خروجی این تابع رو مثلا در Memo نمایش بده

ferfery
سه شنبه 21 خرداد 1387, 15:56 عصر
سلام.
خیلی خیلی ممنونم.
فقط یه مشکل داره .نمیدونم چرا رو قسمت readln(n); همش ارور میده.و نمیزاره برنامه کار بکنه.میشه بگید چیکارکنم؟
بازم ممنون.:لبخند::لبخند:

اصغر (پآچ)
سه شنبه 21 خرداد 1387, 19:06 عصر
سلام دوست من

ببین روی فرمت یه Edit و یک Memo و یک Button قرار بده بعد در روی دکمه دابل کلیک کن و کد زیر رو توی رویداد OnClick دکمه قرار بده:



procedure TForm1.Button1Click(Sender: TObject);
var
zero,i,j,carry,n,x : integer;
A: array [0..99] of integer;
begin
Memo1.Clear;
zero := 0; i := 0; j := 0; carry := 0; x := 0; n := 0;
n := StrToInt(Edit1.Text);
if (n <= 1) then
Memo1.Text := '1'
else begin
A[0]:=1;
for j:=1 to 99 do A[j]:=0;
for i:= 2 to n do begin
carry:=0;
for j:= 0 to 99 do begin
x:= A[j]*i+carry;
A[j]:= (x mod 10);
carry:= x div 10;
end;
end;
zero:=99;
while (A[zero]=0) do zero:=zero-1;
for j:=zero downto 0 do
Memo1.Text := Memo1.Text + IntToStr(A[j]);
end;
end;


موفق و موید باشی

babak_delphi
سه شنبه 21 خرداد 1387, 19:55 عصر
ببین
اصول کلیش اینه



if n < 3 then
result := 1;
result := (fib(n-1)+fib(n-2));

babak_delphi
سه شنبه 21 خرداد 1387, 19:59 عصر
من یک برنامه برات نوشتم
البته به 2 دلیل یکم من درآوردگی داره
1 - راهشرو یکم فراموش کردم
2 - برای اینکه نتیجه رو در Memo نمایش بدم
به هر حال این برنامه کار میکنه
هرجاش رو هم که خواستی میتونی خودت تغییر بدی

ferfery
سه شنبه 21 خرداد 1387, 20:20 عصر
ممنون.
واقعا کارم راه افتاد فقط تو قسمت read onارور میده چیکار کنم؟

Malakootee
یک شنبه 26 خرداد 1387, 18:56 عصر
سلام FerFery جون:لبخند:
ممنون بچه ها. من تو سایت یه چیزی پیدا کردم. زیر براتون میزارم.
هنوز امتحان نکردم. حالا همه برنامه هاتون رو نگاه میکنم ببینم چی میشه. آخه خودمم توش موندم:گیج::قهقهه:

#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <stdio.h>
main(){int m[4000],i,num;long double fact;
for(i=1;i<4000;i++)m[i]=i;cout<<"please enter your number for Fact";cin>>num;fact=1;for(i=1;i<=num;i++)fact=fact*m[i];cout<<fact;getch();return 0; }

powerboy2988 نوشته بودن اینجا: http://barnamenevis.org/forum/showthread.php?t=4862&page=2

برنامه به زبان c هست که باید تبدیلش کنین

Malakootee
یک شنبه 26 خرداد 1387, 19:04 عصر
این یکی هم هست:
http://barnamenevis.org/forum/showthread.php?p=46186&highlight=%D9%81%D8%A7%DA%A9%D8%AA%D9%88%D8%B1%DB% 8C%D9%84#post46186




function FacIterative(n: Word): Longint;
var
f: LongInt;
i: Integer;
begin
f := 1;
for i := 2 to n do f := f * i;
Result := f;
end;



function FacRecursive(n: Word): LongInt;
begin
if n > 1 then
Result := n * FacRecursive(n-1)
else
Result := 1;
end;

Malakootee
یک شنبه 26 خرداد 1387, 21:04 عصر
من نوشتم دوستان
این تیکه برنامه رو واسه کلیک دکمه نوشتم.



var
i,s: Integer;
rslt2: Real;
begin
rslt2:=1;
s:=strtoint(textBOX1.text);
for i:=1 to s do
rslt2:=rslt2*i;
TextBox1.Text:=(FloattoStr(rslt2));
Listbox1.items.Add(IntToStr(s)+'! = '+FloatToStr(rslt2));
end;


جواب گرفتم.
از همه ی دوستانی که راهنمایی کردن متشکرم :قلب:

فقط مسئله ای که هست واسه عددهای بزرگ خطا میداد. فکر کنم باید نوعش رو عوض کنم یا از یک آرایه چندصد هزاری! مثلا استفاده کنم

ferfery
دوشنبه 27 خرداد 1387, 12:26 عصر
سلام .
ببخشید باز مزاحم میشم.شما یه برنامه برام نوشتید.
میخواستم ازتون بخوام یه کم بم توضیح بدید.
برنامتون:
Memo1.Clear;
zero := 0; i := 0; j := 0; carry := 0; x := 0; n := 0;
n := StrToInt(Edit2.Text);
if (n <= 1) then
Memo1.Text := '1'
else begin
A[0]:=1;
for j:=1 to 99 do A[j]:=0;
for i:= 2 to n do begin
carry:=0;
for j:= 0 to 99 do begin
x:= A[j]*i+carry;
A[j]:= (x mod 10);
carry:= x div 10;
end;
end;
zero:=99;
while (A[zero]=0) do zero:=zero-1;
for j:=zero downto 0 do
Memo1.Text := Memo1.Text + IntToStr(A[j]);
end;
میشه بگید که مثلا i, j, carry,zero,n := StrToInt چیه وچیکار میکنن؟
ببخشید. ولی استادمون قراره ازمون بپرسه.
تا امشب بیشت وقت ندارم.
خواهش میکنم کمکم کنید.

babak_delphi
دوشنبه 27 خرداد 1387, 16:06 عصر
malakootee عزیز
این که نوشتید فکر کنم سری فیبوناچی باشه نه تابع فاکتوریل

Malakootee
چهارشنبه 29 خرداد 1387, 13:40 عصر
من واسه فاکتوریل جواب گرفم. اشکالش اینه که عدد از 170 به بعد رو جواب نمیگیرم!

ferfery عزیز تو برنامه ای که نوشتی اصلا i, j, carry,zero,n := StrToInt ندیدم!

babak_delphi
چهارشنبه 29 خرداد 1387, 19:12 عصر
برای عدد های بزرگ هم میشه جواب گرفت
ولی با الگوریتم های دیگه
من قبلا جایی الگوریتمش رو دیدم ولی الان یادم نیست
در google جستجو کن ، پیدا می کنی
من هم میگردم
اگر پیدا کردم برات میگذارم

babak_delphi
چهارشنبه 29 خرداد 1387, 19:38 عصر
یک چیز پیدا کردم
در همین سایت
http://barnamenevis.org/forum/showthread.php?t=4862
آقای وکیلی در پست شماره 3 جواب سوال شما را نوشته اند

Malakootee
دوشنبه 03 تیر 1387, 16:26 عصر
من هنوز هم مشکل دارم!
راههایی که میرم همه از 170 به بعد ارور میدن