PDA

View Full Version : مثلث خیام-پاسکال در زبان برنامه نویسی پاسکال



sajjadrad
شنبه 28 آذر 1388, 19:02 عصر
سلام به همگی
نمیدونم تاحالا اسم مثلث خیام-پاسکال به گوشتون خورده؟یه مثلث با آرایش منظم اعداد که بین اعداد رایطه ریاضی وجود داره.
نمونش در هفت سطر:



http://daugerresearch.com/vault/PascalsTriangle.gif
رابطه ریاضی بین اعداد:

(a+b)0 = 1 (1)
(a+b)1 = a+b (1,1)
(a+b)2 = a2+2ab+b2 (1,2,1)
(a+b)3 = a3+3a2b+3ab2+b3 (1,3,3,1)
(a+b)4 = a4+4a3b2+6a2b2+4a2b3+b4 (1,4,6,4,1)


این برنامه رو من در زبان پاسکال نوشتم و به درستی کار میکنه.البته طبق طول میدانی که بهش دادم تا عدد 12 اعداد قاطی نمیشن!

اینم لینک دانلود مثلث خیام در زبان پاسکال
http://myprograms.persiangig.com/other/Pascal/PasTra.zip

پسورد:www.myprograms.blogsky.com

من این برنامه رو با استفاده از آرایه ها و حلقه for نوشتم.

اما می خوام بدونم که کسی می تونه کمک کنه تا بتونم این برنامه رو با همین روابط ریاضی که در بالا اشاره کردم بنویسم.
ممنون

دلفــي
یک شنبه 29 آذر 1388, 11:08 صبح
Function Khayyam;
var
a:array[1..10,1..10] of Integer;
i,j,c,n: Integer;
Begin
writeln('Enter how many lines do you want : ');
Readln(n);
a[1,1] := 1;
writeln(a[1,1]);
a[2,1] := 1; a[2,2]=2; a[2,3]=1;
Writeln(a[2,1],' ',a[2,2],' ',a[2,3]);
for i:= 3 to n do
begin
a[i,1] := 1;
Writeln(a[i,1]);
j := 2; c := 3;
while j<=i do
begin
a[i,j]=a[i-1,c-1]+a[i-1,c-2];
Writeln(a[i,j]);
c=c+1;
j=j+1;
end;
a[i,j]=1;
Writeln(a[i,j]);
end;
end;


من اين كد رو تو NotPad نوشتم اگه اشتباه املايي داشت خودتون اصلاح كنيد .

MOJTABAATEFEH
دوشنبه 30 آذر 1388, 01:48 صبح
Function Khayyam;
var
a:array[1..10,1..10] of Integer;
i,j,c,n: Integer;
Begin
writeln('Enter how many lines do you want : ');
Readln(n);
a[1,1] := 1;
writeln(a[1,1]);
a[2,1] := 1; a[2,2]=2; a[2,3]=1;
Writeln(a[2,1],' ',a[2,2],' ',a[2,3]);
for i:= 3 to n do
begin
a[i,1] := 1;
Writeln(a[i,1]);
j := 2; c := 3;
while j<=i do
begin
a[i,j]=a[i-1,c-1]+a[i-1,c-2];
Writeln(a[i,j]);
c=c+1;
j=j+1;
end;
a[i,j]=1;
Writeln(a[i,j]);
end;
end;
من اين كد رو تو NotPad نوشتم اگه اشتباه املايي داشت خودتون اصلاح كنيد .

دوست عزيز عالي بود استفاده كردم البته موقع نمايش درست نشون نميده كه با تغييرات زير به درستي نمايش داده ميشه :



function khayam:integer;
var
a:array[1..10,1..10] of integer;
i,j,c,n:integer;
begin
writeln('Number :');
readln(n);
a[1,1]:=1;
writeln (a[1,1]:n+1);
a[2,1]:=1;
a[2,2]:=2;
a[2,3]:=1;
writeln(a[2,1]:n-1,' ',a[2,2],' ',a[2,3]);
for i:=3 to n do
begin
a[i,1]:=1;
write(a[i,1]:n-i+1,' ');
j:=2;
c:=3;
while j<=i do
begin
a[i,j]:=a[i-1,c-1]+a[i-1,c-2];
write(a[i,j]:1,' ');
c:=c+1;
j:=j+1;
end;
a[i,j]:=1;
writeln(a[i,j]);
end;
end;
begin
khayam;
readln;
end.




موفق باشي

كد دلفي

http://www.mojtabaie.persianblog.ir

sajjadrad
دوشنبه 30 آذر 1388, 02:38 صبح
ممنون دوستان
کاملش کردم و گذاشتم (13 خط به راحتی اجرا میشه)برنامه من تعداد خط رو نمیگیره بلکه عدد اخرین سطر رو میگیره که همون سطر - 1

کد:

program khayam2;
uses crt;
var
a:array[1..100,1..100]of integer;
i,j,n,s:integer;
begin
clrscr;
writeln(' Mosalas Khayam version 1.2 Beta');
writeln(' Written By SAJJAD RAD');
writeln('(c)2009 Radtech Lab.All rights reserved.');
writeln(' sajjad.273@gmail.com');
writeln;
writeln;
textcolor(red);
writeln('Notice:This is a test program and have many problem!');
textcolor(white);
writeln;
writeln;
writeln('Please insert a number: (Range 1~12)');
readln(n);
clrscr;
writeln('Your Number=',n);
s:=36;
write(' ':s);
writeln('1':4);
a[1,1]:=1;
dec(s,2);
for i:=2 to n+1 do
begin
a[i,1]:=1;
write(' ':s);
write('1':4);
for j:=2 to i do
begin
a[i,j]:=a[i-1,j-1]+a[i-1,j];
write(a[i,j]:4);
end;
writeln;
dec(s,2);
end;
writeln;
writeln;
writeln;
textcolor(13);
writeln(' Mosalas Khayam version 1.2 Beta');
writeln(' Written By SAJJAD RAD');
writeln(' (c)2009 Radtech Lab.All rights reserved.');
writeln(' sajjad.273@gmail.com');
textcolor(7);
readln;
end.



با تشکر از همه دوستان عزیز
منظور من از کمک این بود که بتونیم برنامه رو بدون ارایه و با توجه به رابطه های ریاضیش بنویسیم.بازم ممنون:قلب::بوس::بوس::بوس::بوس: :بوس::بوس::بوس::بوس:

amin750
جمعه 11 دی 1388, 13:59 عصر
ممنون دوستان
کاملش کردم و گذاشتم (13 خط به راحتی اجرا میشه)برنامه من تعداد خط رو نمیگیره بلکه عدد اخرین سطر رو میگیره که همون سطر - 1

کد:

program khayam2;
uses crt;
var
a:array[1..100,1..100]of integer;
i,j,n,s:integer;
begin
clrscr;
writeln(' Mosalas Khayam version 1.2 Beta');
writeln(' Written By SAJJAD RAD');
writeln('(c)2009 Radtech Lab.All rights reserved.');
writeln(' sajjad.273@gmail.com');
writeln;
writeln;
textcolor(red);
writeln('Notice:This is a test program and have many problem!');
textcolor(white);
writeln;
writeln;
writeln('Please insert a number: (Range 1~12)');
readln(n);
clrscr;
writeln('Your Number=',n);
s:=36;
write(' ':s);
writeln('1':4);
a[1,1]:=1;
dec(s,2);
for i:=2 to n+1 do
begin
a[i,1]:=1;
write(' ':s);
write('1':4);
for j:=2 to i do
begin
a[i,j]:=a[i-1,j-1]+a[i-1,j];
write(a[i,j]:4);
end;
writeln;
dec(s,2);
end;
writeln;
writeln;
writeln;
textcolor(13);
writeln(' Mosalas Khayam version 1.2 Beta');
writeln(' Written By SAJJAD RAD');
writeln(' (c)2009 Radtech Lab.All rights reserved.');
writeln(' sajjad.273@gmail.com');
textcolor(7);
readln;
end.
با تشکر از همه دوستان عزیز
منظور من از کمک این بود که بتونیم برنامه رو بدون ارایه و با توجه به رابطه های ریاضیش بنویسیم.بازم ممنون:قلب::بوس::بوس::بوس::بوس: :بوس::بوس::بوس::بوس:
با turbo pascal اجراش کردم این ارور رو میده

Error 200:Division by zero

چه کار کنم؟؟؟!!!

Hamid.Kad
جمعه 11 دی 1388, 17:18 عصر
با turbo pascal اجراش کردم این ارور رو میده
Error 200:Division by zero
چه کار کنم؟؟؟!!!
این خطا از خود کامپایلره. یه پچ براش وجود داره. توی فولدری که پاسکال نصب هست کپی و بعد اجراش کنید درست میشه...(فولدر BIN)

amin750
جمعه 11 دی 1388, 22:05 عصر
کد:
[code]program khayam2;
uses crt;
var
a:array[1..100,1..100]of integer;
i,j,n,s:integer;
begin
clrscr;
writeln(' Mosalas Khayam version 1.2 Beta');
writeln(' Written By SAJJAD RAD');
writeln('(c)2009 Radtech Lab.All rights reserved.');
writeln(' sajjad.273@gmail.com');
writeln;
writeln;
textcolor(red);
writeln('Notice:This is a test program and have many problem!');
textcolor(white);
writeln;
writeln;
writeln('Please insert a number: (Range 1~12)');
readln(n);
clrscr;
writeln('Your Number=',n);
s:=36;
write(' ':s);
writeln('1':4);
a[1,1]:=1;
dec(s,2);
for i:=2 to n+1 do
begin
a[i,1]:=1;
write(' ':s);
write('1':4);
for j:=2 to i do
begin
a[i,j]:=a[i-1,j-1]+a[i-1,j];
write(a[i,j]:4);
end;
writeln;
dec(s,2);
end;
writeln;
writeln;
writeln;
textcolor(13);
writeln(' Mosalas Khayam version 1.2 Beta');
writeln(' Written By SAJJAD RAD');
writeln(' (c)2009 Radtech Lab.All rights reserved.');
writeln(' sajjad.273@gmail.com');
textcolor(7);
readln;
end.
دوستان منظور از قسمت برزگ نوشته شده چیه چه کاری انجام میدن؟
میشه توضیخ بدین
نوشتنشون در برنامه لازم هست یا نه؟

amin750
یک شنبه 13 دی 1388, 21:41 عصر
کسی نیست؟؟

sajjadrad
چهارشنبه 16 دی 1388, 21:20 عصر
دوستان منظور از قسمت برزگ نوشته شده چیه چه کاری انجام میدن؟
میشه توضیخ بدین
نوشتنشون در برنامه لازم هست یا نه؟

آره دوست عزیز اون قسمتا الزامین برای اینکه شکل کلی خروجی بشکل مثلث باشه!

از خطاهای کامپایلری که میگی معلومه نسخه پاسکالت ناقصه اونو از لینک زیر دانلود کن

http://www.myprograms.blogsky.com/pages/download/

s اینجا کار یه طول میدان متغیرو میکنه بصورتی که در هر خط طول خطو افزایش میده که این باعث مثلث شکل شدن داده هاست...
dec(s,3( هم از s 3 واحد کم میکنه که می تونی بجاش از s:=s-3; استفاده کنی...

nilofarzm
شنبه 26 آذر 1390, 14:53 عصر
آره دوست عزیز اون قسمتا الزامین برای اینکه شکل کلی خروجی بشکل مثلث باشه!

از خطاهای کامپایلری که میگی معلومه نسخه پاسکالت ناقصه اونو از لینک زیر دانلود کن

http://www.myprograms.blogsky.com/pages/download/

s اینجا کار یه طول میدان متغیرو میکنه بصورتی که در هر خط طول خطو افزایش میده که این باعث مثلث شکل شدن داده هاست...
dec(s,3( هم از s 3 واحد کم میکنه که می تونی بجاش از s:=s-3; استفاده کنی...




hala chera s:=36 ??? chrra ye adade dge nazashti??? :(
mishe darmorede baghiyeye ghesmatayi ke agha amin bozorgeshon kardan ham tozih bedi???? mamnooon

یوسف زالی
شنبه 26 آذر 1390, 19:54 عصر
حالا که بعد از دو سال تاپیک بالا اومده منم برنامه رو بازنویسی کردم.

program Project2;
function factorial(x: integer): longint;
begin
if x = 0 then
factorial := 1
else
factorial := x * factorial(x -1);
end;
function expression(m, n: integer): longint;
begin
expression := factorial(n) div factorial(m) div factorial(n -m);
end;
const
MAX_LINE = 10;
var
n, m, i: integer;
begin
for n := 0 to MAX_LINE do
begin
for i := 15 downto n do
write(' ');
for m := 0 to n do
write(expression(m, n):4);
writeln;
end;
readln;
end.



نیازی به استفاده از آرایه نیست.