PDA

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



جوان ایرانی
18th May 2012, 01:18 PM
سلام به دوستان
میخواستم یکمی در مورد مثلث خیام بدونم میخوام برنامشو بنویسم اما چون از ریاضی زیاد سر در نمیارم نمیدونم چه جوری باید فرمولشو دربیارم تقریبا یه چیزایی فهمیدم ولی بازم نیاز به کمک دارم
ممنون [golrooz]

NameEly
19th May 2012, 12:53 PM
سلام به دوست گلم جوان ایرانی عزیز :

من خیلی خوشحال میشم که روی این طرح با هم کار کنیم چون به نظرم جالب امد
کم کم هم بقیه بچه ها جمع میشن

Steve Jobs
19th May 2012, 02:08 PM
سلام

تنها مشخصه ای که این مثلث داره، اینه که هر عنصر از جمع دو عنصر بالایی بدست میاد.
از طرف دیگه عناصر کناری هم 1 هستند.

برای شبیه سازی از ماتریس (آرایه) استفاده کنید. این ماتریس (آرایه) را کامل نیاز نداریم. فقط نصفه ی پایینی یا بالایی (بالامثلثی یا پایین مثلثی) اش را میخواهیم.(چون شکلمون مثلثی هست و نصفش کافیه :) )

فرض کنید من با نصفه پایینی کار می کنم. قطر اصلی و ستون اول ماتریس را با 1 پر میکنیم .چون شکل مثلث این طوریه. عناصر بین این دو قسمت را به این شکل که "هر خانه آرایه از جمع خانه بالایی و خانه سمت چپ خانه بالایی " بدست می آوریم.
این کار را برای همه خانه های وسط 1 ها انجام بدید.
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

javad4481
19th May 2012, 03:24 PM
اين يك بسط هست كه در حسابان سوم رياضي وجود داره و فرمولش (a+b)^ 2 هستش
اينم سورس كد برنامه
Private Sub Khayam(x As Integer)
x = x - 1
Dim ar() As Integer
Dim prev As Integer
Dim nex As Integer
Dim cur As Integer
ReDim ar(x, x * 2)
ar(0, x) = 1
For i = 1 To x
For j = 0 To x * 2
If j = 0 Then prev = 0 Else prev = ar(i - 1, j - 1)
If j = x * 2 Then nex = 0 Else nex = ar(i - 1, j + 1)
cur = prev + nex
ar(i, j) = cur
Next j
Next i

For i = 0 To x
For j = 0 To x * 2
If ar(i, j) = 0 Then Print Space(5); Else Print ar(i, j);
Next j
Print
Next i
End Sub

Private Sub Command1_Click()
Call Khayam(9)
End Sub

Steve Jobs
19th May 2012, 07:38 PM
کد زبان c، به روشی که توضیح دادم را هم گفتم بذارم. فقط دقت کنید که این کد برای چاپِ مثلثِ خیامِ برعکس هستش!



#include <stdio.h>#include <stdlib.h>
#include<conio.h>


int main()
{
void khaiam();


khaiam();
getch();
return 0;
}
void khaiam(){
int n;
printf("Enter number of rows:");
scanf("%d",&n);
int i,j,a[100][100];
for(i=0;i<n;i++){
a[i][i]=1;
a[i][0]=1;
} for(i=2;i<n;i++){
for(j=1;j<n;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
}int k,o=0;
for(i=n-1;i>=0;i--){
for(k=0;k<o;k++)
printf(" ");
for(j=i;j>=0;j--)
printf("%4d",a[i][j]);
printf("\n\r");o++;}}

جوان ایرانی
19th May 2012, 09:07 PM
ممنون از کمک و جواب دوستان فقط یه سوال چرا همگی داخل یه تابع نوشتید برنامه رو؟؟؟ مثلث خیامی که من روش کار میکردم این شکلی بود یه ماتریس یازده در شش مثل شکل زیر
جاهایی که صفر هستش باید اسپیس قرار بگیره و دقیقا خروجی به همین صورت چاپ میشه

http://axgig.com/images/34607968267495215710.jpg

بازم از جواب هایی که دادی ممنون

Steve Jobs
19th May 2012, 11:12 PM
ممنون از کمک و جواب دوستان فقط یه سوال چرا همگی داخل یه تابع نوشتید برنامه رو؟؟؟ مثلث خیامی که من روش کار میکردم این شکلی بود یه ماتریس یازده در شش مثل شکل زیر
جاهایی که صفر هستش باید اسپیس قرار بگیره و دقیقا خروجی به همین صورت چاپ میشه

http://axgig.com/images/34607968267495215710.jpg

بازم از جواب هایی که دادی ممنون

خواهش می کنم.

خب برنامه ای من نوشتم را اگه اجرا میکردید، همین خروجی را داشت اما برعکس! انگار سر مثلثه به سمت پایین باشه.
مثالی هم که زدید اون جدوله یه حالت خاص از برنامه ایه که نوشتم.
اون اعدادی که من بالا زیر هم نوشتم نه مثلثی به خاطر این بود که نحوه ذخیره سازی اش در آرایه را گفتم ، نه نحوه چاپش در صفحه نمایش!

درمورد اینکه یه تابع نوشتم، خب پس چندتا بنویسم؟ هرتابع یه وظیفه را میتونه برعهده بگیره .تابعی که من نوشتم، کار پیاده سازی مثلث را داره.

این یکی کد، دقیقا خودِ خیام-پاسکال هستش، نه عکسش.
ازش خروجی بگیرید. اگه به سوالی که می پرسه جواب بدید 6، دقیقا جدول شما را ترسیم میکنه.


#include <stdio.h>#include <stdlib.h>
#include<conio.h>


int main()
{
void khaiam();


khaiam();
getch();
return 0;
}
void khaiam(){
int n;
printf("Enter number of rows:");
scanf("%d",&n);
int i,j,a[100][100];
for(i=0;i<n;i++){
a[i][i]=1;
a[i][0]=1;
} for(i=2;i<n;i++){
for(j=1;j<n;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
}int k,o=n;
for(i=0;i<=n-1;++i){
for(k=0;k<o;k++)
printf(" ");
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n\r");o--;}}

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد