# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال >  مثلث خیام-پاسکال در زبان برنامه نویسی پاسکال

## sajjadrad

سلام به همگی
نمیدونم تاحالا اسم مثلث خیام-پاسکال به گوشتون خورده؟یه مثلث با آرایش منظم اعداد که بین اعداد رایطه ریاضی وجود داره.
نمونش در هفت سطر:



رابطه ریاضی بین اعداد:(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/oth...cal/PasTra.zip

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

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

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

----------


## دلفــي

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

> 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]);
> ...


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

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

ممنون دوستان
کاملش کردم و گذاشتم (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

> ممنون دوستان
> کاملش کردم و گذاشتم (13 خط به راحتی اجرا میشه)برنامه من تعداد خط رو نمیگیره بلکه عدد اخرین سطر رو میگیره که همون  سطر - 1 
> 
> کد:
> program khayam2;
> uses crt;
> var
> a:array[1..100,1..100]of integer;
> i,j,n,s:integer;
> ...


با turbo pascal اجراش کردم این ارور رو میده
*Error 200:Division by zero*
چه کار کنم؟؟؟!!!

----------


## Hamid.Kad

> با turbo pascal اجراش کردم این ارور رو میده
> Error 200:Division by zero
> چه کار کنم؟؟؟!!!


این خطا از خود کامپایلره. یه پچ براش وجود داره. توی فولدری که پاسکال نصب هست کپی و بعد اجراش کنید درست میشه...(فولدر BIN)

----------


## amin750

کد:
[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

*کسی نیست؟؟
*

----------


## sajjadrad

> دوستان منظور از قسمت برزگ نوشته شده چیه چه کاری انجام میدن؟
> میشه توضیخ بدین
> نوشتنشون در برنامه لازم هست یا نه؟


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

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

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

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

----------


## nilofarzm

> آره دوست عزیز اون قسمتا الزامین برای اینکه شکل کلی خروجی بشکل مثلث باشه!
> 
> از خطاهای کامپایلری که میگی معلومه نسخه پاسکالت ناقصه اونو از لینک زیر دانلود کن
> 
> 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

----------


## یوسف زالی

حالا که بعد از دو سال تاپیک بالا اومده منم برنامه رو بازنویسی کردم.

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.



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

----------

