المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تحدى نفسك بهذه المصفوفة !



Carlito
24-01-2009, 10:46 PM
مرحبا ! :)

رغم بعدي التام عن تخصص الحاسب .. الا ان الدكتور يريد ان يشاهد الطلاب وهم يتساقطون امامه كأوراق الشجر في فصل الخريف .. وهو مستمتع بهذا المنظر الجميل - بالنسبة له - القبيح لنا ..

نحن لم ندرس سوا البسودو كوود .. ولم ندرس اي لغة اخرى ..

السؤال هو التالي ..

اكتب الخوارزميه التي تحل وتطبع المصفوفه التالية: من اليمين الى اليسار :

1 . . . .
1 1 . . .
1 2 1 . .
1 3 3 1 .
1 4 6 4 1

----------------------

هل من منقذ ؟

تحياتي ..

AZPC
24-01-2009, 11:28 PM
لي عوده قريبا ان شاء الله...

AZPC
26-01-2009, 06:38 PM
مافيه مدخلات ؟ ..

السؤال فهمته على انه برنامج يطبع الي انت كاتبه بس .. يعني المستخدم ما يدخل اي شي !!

احس سؤالك ناقص .. بس بحله على قدر المستطاع ان شاء الله

AZPC
26-01-2009, 06:40 PM
هذا هو الكود .. بس مب صح 100% لأني ما كملته بس قربت من الحل ان شاء الله ... الباقي عليك



#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
/*
Output=====
1 . . . .
1 1 . . .
1 2 1 . .
1 3 3 1 .
1 4 6 4 1
===========
*/

int n =1;

for(int i = 1 ; i <= 5 ; i++)
{
cout<<n;
for(int k = 0; k < i/2; k++)
{
cout<<(i-1)+k;
}

for(int z = 1; z < i/2; z++)
{
cout<<i-1-z;
}

for(int j = i+1 ; j <= 5 ; j++)
{
cout<<".";
}
cout<<endl;
}


//End of the code =========
system("PAUSE");
return EXIT_SUCCESS;
}

سلطان زمانهـ
27-01-2009, 01:18 AM
سـلام عليكم ..


إلى الأخ : AZPC


خلال بحثي عن حل واجب لـ خوارزمية ..


أطلعت على موضوع .. في هذا المنتدى


سبحان الله .. الواجب المطلوب علينا


هو نفسهـ الي طلبه كاتب الموضوع ..


وانت جاوبت عليه جواب جزئي ..


فـ لو سمحت وهذي خدمة أخوية ..


أنك تحل المسألة كاملة


الواجب ضروري نسلمه الساعه 3.30 عصرا


من يوم الثلاثاء 30/1/1430

AZPC
27-01-2009, 03:09 PM
يا شباب كيف احل مشكلة ما اعرف سؤالها بالظبط ؟؟؟؟

اعطوني السؤال كامل وانا بحاول احله ان شاء الله ..

AL ADMIRAL
27-01-2009, 11:23 PM
السلام عليكم
عرفت سر المصفوفه ~_^

وهذا البرنامج توي عملتلك أياه
حط طول المصفوفه الي تبيه ( يفضل أقل من الـ 10 ) , ولا تحطه أبدا فوق الـ 100×_× لأن طول الأريه 100
الكود




#include<stdio.h>
void main(void)
{
int a[100][100],i,j,long1,q;
printf("Long Array (Give my number between 1-10) = ");
scanf("%d",&long1);

for(i=0;i<long1;i++)
{
for(j=0;j<=i;j++)
{
if (j==0) (a[i][j]=1);
else if (i==j) (a[i][j]=1);
else
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
}

for(i=0;i<long1;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}

printf("\n\nBy AL_ADMIRAL ^_^ \n\n\n");scanf("%d",&q);

}




أذا تبي تشغل البرنامج <<< في المرفق ^_^

AL ADMIRAL
28-01-2009, 11:46 AM
النقاط مهمه ؟!
الي سويته فوق بدون نقاط
أذا تبي نقاط حط قبل آخر طباعه




while(j<long1) {printf(". ");j++;}
ليصبح البرنامج هاكذا



#include<stdio.h>
void main(void)
{
int a[100][100],i,j,long1,q;
printf("Long Array (Give my number between 1-10) = ");
scanf("%d",&long1);

for(i=0;i<long1;i++)
{
for(j=0;j<=i;j++)
{
if (j==0) (a[i][j]=1);
else if (i==j) (a[i][j]=1);
else
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
}

for(i=0;i<long1;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",a[i][j]);
}
while(j<long1) {printf(". ");j++;}
printf("\n");
}

printf("\n\nBy AL_ADMIRAL ^_^ \n\n\n");scanf("%d",&q);

}

<<< البرنامج بالـغة C

AZPC
28-01-2009, 04:40 PM
يعطيك العافيه Al Admiral .. ما عليك زود يالغالي

AL ADMIRAL
28-01-2009, 09:59 PM
الله يعافيك عاشق الريم ^_^

طبعا زي منتو عارفين الدوس ماتظهر النتايج فيلو بشكل جميل (لأنو ياخذ سطر ثاني أذا كان طويل)
فعملت المخرجات أيضاًعلى ملف تكست ( شكل المصفوفه يطلع حلو ^_^ )
جرب حتى حجم 26 للمصفوفه , وشوف كيف :wink2:

لازم تفتح الضغط اول شي من الملف (الي بالمرفق)
وبعد ما تطلع النتايج في الدوس أضغط أي رقم وأنتر , وشوف ملف التكست ( out.txt ) ^_^
<<< عندي أختبار C يوم السبت وقاعد أتسلى :biggrin2:

أبو هاجر الحلوة
29-01-2009, 02:41 PM
على ما يظهر هذه المصفوفة ماهي إلا مثلث باسكال .
فتحليل ثنائي الحد من الرتبة n هو


(x+y)^n=C(0,n)*x^n+C(1,n)*x^(n-1)*y+...+C(p,n)*x^(n-p)*y^p+...+C(n,n)*y^n

و لحساب المعامل

C(p,n)

لأي حد يمكن أن نستعمل الخوارزمية التالية




If i=j or j=1 Then
a(i,j)=1
Else
a(i,j)=a(i-1,j)+a(i-1,j-1)
End If

أبو هاجر الحلوة
29-01-2009, 03:24 PM
لمعلومات أعمق و أكثر راجع الـ Wikipédia

الصفحة الإنجليزية

الرابط : Pascal's triangle (http://en.wikipedia.org/wiki/Pascal%27s_triangle)

الصفحة الفرنسية بالإضافة إلى شرح تجد هناك مصدر للخوارزمية بالـ C++ و آخر بالباسكال

الرابط : Triangle de Pascal (http://fr.wikipedia.org/wiki/Triangle_de_Pascal)

الصفحة العربية بها معلومات مختصرة جدا

الرابط : مثلث باسكال (http://ar.wikipedia.org/wiki/%D9%85%D8%AB%D9%84%D8%AB_%D8%A8%D8%A7%D8%B3%D9%83%D8%A7%D9%84)
http://en.wikipedia.org/wiki/File:PascalTriangleAnimated2.gif

AL ADMIRAL
29-01-2009, 05:03 PM
يعطيك العافية أبو هاجر على هالمعلومات ^_^

أنا تقريبا قعت 10 دقايق أتأمل في المصفوفه لمن عرفت هذا الشي
( أي حد داخل المثلث (داخل حدود 1 ) = الحد الذي فوقه + الحد اللذي بجوار اللذي فوقه من اليسار )

أبو هاجر الحلوة
30-01-2009, 04:17 PM
يعطيك العافية أبو هاجر على هالمعلومات ^_^




الله يعافيك (-:



أنا تقريبا قعت 10 دقايق أتأمل في المصفوفه لمن عرفت هذا الشي
( أي حد داخل المثلث (داخل حدود 1 ) = الحد الذي فوقه + الحد اللذي بجوار اللذي فوقه من اليسار )




صحيح و هذا من محاسن مثل هذا النوع من المسائل الأكاديمية إن صح التعبير على عكس ما نصادفه في كثير من الكتب التي لا هم لها إلا شرح كيفية رص المكونات الرسومية في حين تهمل جانب الخوارزمات.....................................بارك الله فيك و في الإخوة على هذا الموضوع .

CQC
31-01-2009, 02:59 AM
السلاك عليكم
الكود كالتالي
program loops;
Var
major, minor, x : integer;

begin
major := 0;
minor := 4;
while major >= 5 do
write '1';
for x:= 1 to major -1 do
write major
end;
if major >= 1 then
write '1'
end;
while minor >= major Do
write '.';
minor := minor - 1;
end;
writeln;
major := major + 1;
minor := 4;
end
end.
المخرجات
1....
11...
121..
1331.
14441

الكود بالكومبايلر تيربو باسكال .. أو بورلند ديلفي بكلاهما يمشى الحال
وإذا تبي الكود بالكومبايلر بيرسونال كوبول انا حاضر

أبو هاجر الحلوة
01-02-2009, 12:34 AM
السلاك عليكم
الكود بالكومبايلر تيربو باسكال .. أو بورلند ديلفي بكلاهما يمشى الحال
وإذا تبي الكود بالكومبايلر بيرسونال كوبول انا حاضر

لا أعتقد أن ما هو مكتوب أعلاه يمكن تشغيله لا بالـ Turbo Pascal و لا بالـ Pascal Object الخاص بالدلفي ....
1 - الـ end الموجودة في الأسطر 11 و 14 و 18 لا يقابلها أي begin
2 - الـ while الموجودة في السطر 7 تحتاج لـ begin
هذا من جهة الـ Syntax و غير ذلك كثير .
وحتى لو تم إصلاح هذه الأخطاء فإن نتيجة تنفيذ البرنامج هي شاشة فارغة لأن الشرط

while major >= 5 do
لا يتحقق أبدا لذا لا يمكن تنفيذ الـ Block الموجود بداخله.
إذا أردت مصدر جيد لمثلث باسكال بالـ Turbo Pascal راجع رابط الصفحة الفرنسية للـ Wikipédia (http://fr.wikipedia.org/wiki/Triangle_de_Pascal) المذكور أعلاه

CQC
01-02-2009, 01:58 AM
program loops;
Var
major, minor, x : integer;
begin
major := 0;
minor := 4;
while major <= 5 do
begin
write ('1');
for x:= 1 to major -1 do
write ( major );
if major >= 1 then
write ('1');
while minor >= major Do
begin
write ('.');
minor := minor - 1;
end;
writeln;
major := major + 1;
minor := 4;
end;
end.


ابو هاجر الله يجزاك خير .. على التصحيح والله افدتني صراحتاً وهذا تعديل البرنامج
والله ياخي نسيت شلون اكود بالباسكال او الدلفي .. عزالله البرمجه يبيلها استمراريه ومواظبة
بس ماشاءالله عليك احس انك استاذ ياخي ؟ ... على العموم اشكرك على ردك الجميل

أبو هاجر الحلوة
02-02-2009, 08:23 PM
ابو هاجر الله يجزاك خير .. على التصحيح والله افدتني صراحتاً وهذا تعديل البرنامج
والله ياخي نسيت شلون اكود بالباسكال او الدلفي .. عزالله البرمجه يبيلها استمراريه ومواظبة
بس ماشاءالله عليك احس انك استاذ ياخي ؟ ... على العموم اشكرك على ردك الجميل

العفو أخي الكريم هذا من كرمك.............و الفضل لك أنك ذكرتنا بالباسكال (-: و الذي يكاد القسم يخلو من أي مواضيع متعلقة به أو ربما لا توجد أصلا.

أبو هاجر الحلوة
02-02-2009, 08:45 PM
حدث خطأ عند محاولة مناقشة الكود لكن تم تداركه. سأقوم بإعادة تجربة البرنامج و أعود

أبو هاجر الحلوة
02-02-2009, 11:31 PM
تم تنفيذ البرنامج على Turbo Pascal For Windows 1.5 (ftp://ftp-developpez.com/pascal/turbo-pascal/tpw15-fr.zip) بعد إضافة السطر

uses wincrt;
من أجل عرض المخرجات فقط ليصبح المصدر كما يلي



program loops;
uses wincrt;
Var
major, minor, x : integer;
begin
major := 0;
minor := 4;
while major <= 5 do
begin
write ('1');
for x:= 1 to major -1 do
write ( major );
if major >= 1 then
write ('1');
while minor >= major Do
begin
write ('.');
minor := minor - 1;
end;
writeln;
major := major + 1;
minor := 4;
end;
end.



و كانت المخرجات كما يلي
1.....
11....
121...
1331..
14441.
155551
لكن المخرجات المطلوبة هي
1....
11...
121..
1331.
14641

و هما مختلفان كما هو ملاحظ .
فيما يلي بعض أكواد حساب مثلث باسكال
1 - بالبيسك(المصدر معدل عن مثال بالـ GW-BASIC من كتاب الدكتور لخضر لعلام جامعة الجزائر)



Option Explicit
Option Base 1
Private Sub Calculate()
Dim n As Integer, i As Integer, j As Integer
n = InputBox("enter the number of coefficients")
ReDim A(n, n) As Integer
For i = 1 To n
For j = 1 To i
If i = j Or j = 1 Then GoTo A
A(i, j) = A(i - 1, j) + A(i - 1, j - 1)
GoTo B
A:
A(i, j) = 1
B:
Print A(i, j);
Next j
Print
Next i
End Sub

Private Sub Form_Load()
Me.AutoRedraw = True
Calculate
End Sub



بالتربو باسكال(المصدر سبق ذكره)




program triangle_pascal;
uses wincrt;
type Matrice=array[1..20,1..20]of integer;
var
n:integer;
m:Matrice;
procedure remplir(n:integer;var M:Matrice);
var
i,j:integer;
begin
M[1,1]:=1;
for i:=2 to n do
begin
M[i,1]:=1;
M[i,i]:=1;
for j:=2 to i-1 do
M[i,j]:=M[i-1,j-1]+M[i-1,j];
end;
end;

procedure affi(n:integer;M:Matrice);
var
i,j:integer;
begin
For i:=1 to n do
Begin
For j:=1 to i do
write(M[i,j]:5);
writeln;
End ;

end;

begin
n:=8;
writeln('*********** Triangle de Pascal ***********');
writeln;
writeln;
remplir(n,m);
affi(n,m);
end.




بالـ C++ (المصدر سبق ذكره)



#include <iostream>
#include <vector>

using namespace std;
typedef vector< vector<int> > Matrice;

Matrice creerTableauPascal(int n)
{
// Création du tableau
Matrice tableau;
tableau.resize(n);
for (int i=0; i<n; ++i)
tableau[i].resize(i+1);

// Remplissage du tableau
tableau[0][0]=1;
for (int i=1; i<n; i++)
{
tableau[i][0]=1;
tableau[i][i]=1;
for (int j=1; j<i; ++j)
tableau[i][j]=tableau[i-1][j-1]+tableau[i-1][j];
}
return tableau;
}

void afficherTriangle(Matrice tableau)
{
int n = tableau.size();
for (int i=0; i<n; ++i)
{
for (int j=0; j<=i; ++j)
cout << tableau[i][j] << " ";
cout << endl;
}
}

int main()
{
int n=10;
Matrice tableau;
tableau = creerTableauPascal(n);
afficherTriangle(tableau);
return 0;
}

AL ADMIRAL
03-02-2009, 12:16 AM
كنت حاسس يـ أبو هاجر أن مخرجات برنامج أخونا مهي المطلوبه
بس خلفيتي C و VB6 فقلت ما أبي أتكلم

أخوي CQC
لا تشوف الحلول الي في الصفحة الثانيه
حاول تسوي البرنامج مرة ثانيه زي كذا
http://upload.wikimedia.org/wikipedia/commons/0/0d/PascalTriangleAnimated2.gif
<<< هذي جبتها من الرابط الي وضعه أبو هاجر يعطيه العافيه ^_^

أبو هاجر الحلوة
03-02-2009, 07:01 PM
الصورة تختصر كل شيء.................
أنا مررت عليها أكثر من مرة....................و لكن عندما رأيتها هنا خطر لي أن أجعلها صورة ملفي الشخصي و هذا ما كنت محتاجا له ... (-:

إذا كان هناك خوارزميات جميلة و بسيطة مثل هذا المثلث فالرجاء إضافتها ........... فربما تفتح باب النقاش و تنشط القسم.....................و أحسن من ذلك تذكرنا بأيام الدراسة........................................................