مثلث خیام ( کمک به حل مسئله)
با عرض سلام و ادب خدمت همه ی بچه های گل جامعه برنامه نویس:قلب:
من تو مسئله ی مثلث خیام مشکل پیدا کردم اگه میشه کمکم کنید
* - برنامه ای را بنویسید که n جمله را از ورودی خوانده و مثلث خیام را تا n جمله چاپ کندو
مثال: تا 6 جمله
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
نقل قول: مثلث خیام ( کمک به حل مسئله)
برنامتون رو بنویسید ، تا اگه اشکال داشت ، مشکل رو دوستان بگن یا من اگه تونستم بگم ...
راهنمایی 1 : می تونید از ترکیب استفاده کنید ... جمله اول ترکیب 1 چاپ میشه ... جمله دوم ترکیب 0 از 1 و ترکیب 1 از 1 ... جمله سوم ترکیب 0 از 2 ، ترکیب 1 از 2 ، ترکیب 2 از 2 ... بقیه هم همین طوری ...
راهنمایی 2 : بهتره که با تابع بازگشتی ترکیب رو بنویسید ...
نقل قول: مثلث خیام ( کمک به حل مسئله)
شما اگر در نحوه تحلیل شکل از روش خود خیام استفاده می کردید راحت تر به نتیجه می رسیدید.
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
*/
int main()
{
int Nums [200]={0}, tmp, n, c;
clrscr();
cout<<"enter khayam number : ";
cin>>n;
c=n-1;
Nums[c] = 1;
for( int i=0; i<n; i++)
{
cout<<"\n ";
for( int j=0; j<c; j++ )
cout<<" ";
for( int j=0; j<=i; j++){
tmp = Nums[c+j] + Nums[c+j+1] ;
cout<<tmp<<" ";
Nums[c+j] = tmp;
}
c--;
}
return 0;
}
نقل قول: مثلث خیام ( کمک به حل مسئله)
مثلث خیام بدون استفاده از آرایه و با استفاده از مفهوم جایگشتی:
#include <iostream>
#include <iomanip>
using namespace std;
int Fact(int);
void main(void)
{
int num, n;
cout << "Enter the number of rows: " << endl;
cin >> n;
for(int i = 0 ; i<=n-1 ; i++)
{
for(int j = 0 ; j<=i ; j++)
{
if(j == 0 || j==i)
num = 1;
else
num = Fact(i) / (Fact(j) * Fact(i-j));
cout << setw(6) << num;
}
cout << endl;
}
}
// Factorial /function
int Fact(int num)
{
int fact = 1;
for(int i = 1 ; i<=num ; i++)
fact *= i;
return fact;
}
نقل قول: مثلث خیام ( کمک به حل مسئله)
نقل قول: مثلث خیام ( کمک به حل مسئله)
مونش در هفت سطر:
(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 اعداد قاطی نمیشن!
به احتمال قوی کمکت نمیکنه اما رویه کارم اینجوی بود:
اول یه آرایه دو بعدی تعریف کردم
بعد از تولید هر عدد اون رو در آرایه خودش ذخیره کردم و در لاین بعدی از این دستور استفاده کردم:
a[i,j]:=a[i-1,j-1]+a[i-1,j];
اینطور که دو تا آرایه کنار هم رو جمع کنه و در آرایه لاین پایینی قرار بده.
درصورت نیاز بهم بگو تا سورس ها رو بهت بدم.
اینم لینک دانلود مثلث
خیام در زبان پاسکال
http://myprograms.persiangig.com/oth...cal/PasTra.zip
پسورد:
www.myprograms.blogsky.com
من این برنامه رو با استفاده از آرایه ها و حلقه for نوشتم.
نقل قول: مثلث خیام ( کمک به حل مسئله)
سلام دوستان
من مثلث خيام رو با ماتريس پايين مثلثي نوشتم ولي
اگر بخوايم با اريه هاي يه بعدي بنويسيم بايد چي كار كنيم
من به ذهنم رسيده كه مثلا وقتي كاربر وارد ميكنه 4(4 خط داشته باشه)
ارايه مون 4 بار چاپ بشه يعني خط اول a0خط دومa0,a1خط سوم a0,a1,a2تا اخر
يعني به اين شكل
A0=1
A0=1 , a1=1
A0=1 , a1=a0+a1=2 , a2=1
A0=1, a1=a0+a1=3, a2=a1+a2=3, a3=1
كه البته اول a2محاسبه ميشه بعد a1
اين جوري بايد بنويسم؟
اگه اره چيكارش كنم
در واقع مشكلم اينه كه حلقه foرو چجوري بزارم كه همش رو هي چاپ كنه
نقل قول: مثلث خیام ( کمک به حل مسئله)
اینم من نوشتم با یه راه حل دیگه (بدون تابع)
مال خیلی وقت پیشه و خیلی مبتدیانه نوشته شده
نه از آرایه نه از تابع و نه از راه حل توابع بازگشتی در نوشتن این برنامه استفاده شده!!!!
#include <stdio.h>
int main(){
int i,j,a,b,sum,poa,pob,factn,factm,factnm,n,m;
a=1;b=1;n=1;
printf("tedade satrhaye mosollas khayam=");scanf("%d",&m);
printf("1\n");
while(n<=m){
i=0;
while(i<=n){
j=1;
factn=1;
while(j<=n){
factn=factn*j;
j=j+1;
}
j=1;
factm=1;
while(j<=n-i){
factm=factm*j;
j=j+1;
}
j=1;
factnm=1;
while (j<=i){
factnm=factnm*j;
j=j+1;
}
poa=1;
j=0;
while ( j<n-i){
poa=poa*a;
j=j+1;
}
pob=1;
j=0;
while (j<i){
pob=pob*b;
j=j+1;
}
sum=factn/(factm*factnm)*poa*pob;
printf("%d ",sum);
i=i+1;
}
n=n+1;
printf("\n");
}
return 0;
}
راه حل این برنامه بر اساسه واقعیته خو مثلث خیامه یعنی (a+b) به توان n که در مثلث خیام
a=1,b=1 میباشد و توان هم از صفر شروع میشود که عدد به توان صفر، یکه که من اول پرینتش کردم یعنی شما باید راه حل نوشتن (a+b) به توان n رو باید بلد باشید وبقیش هم که آسونه
نقل قول: مثلث خیام ( کمک به حل مسئله)
اينم به صورت ارايه دوبعديه
#include <stdio.h>
#include <conio.h>
void khayyam(int array[][100],int row)
{
int i,j;
for(i=0;i<row;i++)
{
for (j=0;j<row;j++)
{
if (j==0)
{
array[i][0]=1;
}
else if(i==j)
{
array[i][j]=1;
}
else if(j>i)
{
array[i][j]=0;
}
else
{
array[i][j]=array[i-1][j]+array[i-1][j-1];
}
}
}
}
void print(int array[][100], int row)
{
int i,j;
for (i=0;i<row;i++)
{
for(j=0;j<row;j++)
{
printf ("%4d", array[i][j]);
}
printf ("\n");
}
}
int main()
{
int n, i, j, A[100][100];
printf("enter number of row\n");
scanf ("%d", &n);
khayyam(A,n);
print(A,n);
getch();
return 0;
}
ولي كسي راهي كه من گفتم رو بلد نيست؟
نقل قول: مثلث خیام ( کمک به حل مسئله)
سلام،
با استفاده از دو تا آرایه ی یه بعدی میشه اینکارو انجام داد. واسه ی به دست آوردن عناصر خیام توی سطر n ام فقط به عناصر آرایه توی سطر n-1 ام نیاز هست... هر دفعه عناصر سطر n-1 رو بریز تو یه آرایه ی کمکی و از اون آرایه ی کمکی عناصر سطر n ام رو به دست بیار.
البته راهی بود که فقط با استفاده از یه دونه آرایه ی یه بعدی میشد اینکارو انجام داد که من یادم نمیاد متاسفانه.
نقل قول: مثلث خیام ( کمک به حل مسئله)
بانوی ایران عزیز
فکر کنم اگه در قسمت بالای مثلث به جای صفرها کاراکتر فاصله تعریف میکردید بهتر میشد .
نقل قول: مثلث خیام ( کمک به حل مسئله)
سلام الهه خانم
من ارايه رو به صورت intتعريف كردم و بايد توي شرطي كه چك ميكنه" i " از" j "بزرگتره يه مقداري رو انتصاب بدم به ارايه
نميشه كه spaceبزارم