مشاهدة النسخة كاملة : تكفووون ساعدوني (طلب بسيط)..
الكتكوته
15-11-2004, 11:30 PM
السلام عليكم ورحمة الله وبركاته
أنا عضوه جديدة في المنتدى بصراحه عجبني كثيييرررر وسجلت ..
انا ادرس برمجة حاسب وتوني مبتدئه مالي كم شهر من بديت اتعلم لغة السي بلس بلس
حاولت اسوي برنامج ضرب مصفوفات لكن كل مرره افشل
ودي احد يسويه لي اذا ما عليه كلافه
على فكره انا اشتغل على Borland ..
(( برنامج يقوم بضرب مصفوفتين ماتكون احاديه ( يعني لها اعمده وصفوف) واظهار المصفوفتين على الشاشه والمصفوفه الناتجة))
طلب بلييززززززز لاتردوني ..
وجزاه الله خير إلي بيسويه والله يجعله في ميزان حسناته..
Wolf Sniper
17-11-2004, 02:20 PM
الحل يعتمد على الحلقات المتداخلة و سنستخدم 3 حلقات for .. بافتراض أن المصفوفة الثنائية رباعية أو ثلاثية .. إلخ و هذا البعد مخزن في الثابت m .. و حيث أن :
i هي السطر .. j هي العمود .. k من أجل عملية الضرب التجميعي .. لأن c[1,1] تساوي مجموع ضرب السطر الأول من المصفوفة الأولى في العمود الأول من المصفوفة الثانية و هكذا ..
الحل كالتالي :
for (int i=1; i<=m; i++)
for (int j=1; j<=m; j++)
for (int k=1; k<=m; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
حيث أن المصفوفة الأولى هي a و الثانية هي b و الناتجة هي c .. و هذا هو الحل كامل مع إدخال المصفوفتين a و b :
#include <iostream.h>
const int m = 2;
int a[m][m];
int b[m][m];
int c[m][m] = {{0,0},{0,0}};
void sum();
void main()
{
// Enter
cout << "Enter Array a[] : " << endl;
for (int i=1; i<=m; i++)
for (int j=1; j<=m; j++)
{
cout << "a[" << i << "," << j << "] = ";
cin >> a[i][j];
}
cout << "Enter Array b[] : " << endl;
for (i=1; i<=m; i++)
for (int j=1; j<=m; j++)
{
cout << "b[" << i << "," << j << "] = ";
cin >> b[i][j];
}
// Process
sum();
// Printing
for (i=1; i<=m; i++)
{
for (int j=1; j<=m; j++)
cout << c[i][j] << "\t";
cout << endl;
}
}
void sum()
{
for (int i=1; i<=m; i++)
for (int j=1; j<=m; j++)
for (int k=1; k<=m; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
أنا أستخدم نسخة Microsoft Visual C++ 6 و ليس نسخة الـ Borland و لكنها متشابهة يعني لا يوجد إختلاف .
ملاحظة / في كود الطباعة لقد قمت بطباعة المصفوفة الناتجة فقط و عليك بالباقي كتمرين :)
الكتكوته
17-11-2004, 11:09 PM
مشكووووووووووووووووووور أخ wolf sniper
ماقصرت .. الله يجعله في ميزان حسناتك ..
أنا نسخت الكود بجربه وأحااول افهمه ..
الكتكوته
18-11-2004, 02:05 AM
اهلا
جربته بس ..
عندي بعض الاسئله ...
* البرنامج مارضى يشتغل إلا لما اعرف في بدايه البرنامج i , k , j
**بعدها يشتغل البرنامج ادخل المصفوفتين بس مايطلع الناتج ؟
*** ايش تقصد في السطر الأخير؟؟ (( c[i][j] = c[i][j] + a[i][k] * b[k][j]; ))
اتمنى اني مااكون تعبتك .. بس ترى مبتدئة:08: :08: :08:
Wolf Sniper
18-11-2004, 07:19 PM
اهلا
جربته بس ..
عندي بعض الاسئله ...
* البرنامج مارضى يشتغل إلا لما اعرف في بدايه البرنامج i , k , j
**بعدها يشتغل البرنامج ادخل المصفوفتين بس مايطلع الناتج ؟
*** ايش تقصد في السطر الأخير؟؟ (( c[i][j] = c[i][j] + a[i][k] * b[k][j]; ))
اتمنى اني مااكون تعبتك .. بس ترى مبتدئة:08: :08: :08:
1- كنت أعتقد أنه لا توجد إختلافات بين نسخ ++C و لكني كنت على خطأ .. ففي بعض المترجمات Compilor يجب أن تعرف المتحولات الخاصة بالحلقات التكرارية ( for ) قبل بداية الحلقة و ذلك في بعض المترجمات .. (قرأتها من أحد الكتب ) .. سوف أحل هذه المشكلة عندك .
2- الخطأ بسبب (1) .. جربي هذا الكود :
#include <iostream.h>
const int m = 2;
int a[m][m];
int b[m][m];
int c[m][m] = {{0,0},{0,0}};
int i = 0;
int j = 0;
int k = 0;
void sum();
void main()
{
// Enter
cout << "Enter Array a[] : " << endl;
for (i=0; i<m; i++)
for (j=0; j<m; j++)
{
cout << "a[" << i << "," << j << "] = ";
cin >> a[i][j];
}
cout << endl;
cout << "Enter Array b[] : " << endl;
for (i=0; i<m; i++)
for (j=0; j<m; j++)
{
cout << "b[" << i << "," << j << "] = ";
cin >> b[i][j];
}
// Process
sum();
// Printing
cout << endl;
for (i=0; i<m; i++)
{
for (j=0; j<m; j++)
cout << c[i][j] << "\t";
cout << endl;
}
}
void sum()
{
for (i=0; i<m; i++)
for (j=0; j<m; j++)
for (k=0; k<m; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
3- البرنامج كله في هذا الكود .. فكرته هي نفسها عندما تقومين بضرب مصفوفتين .. فضرب السطر الأول في العمود الثاني يعطينا C[1,2] .. و العملية تتم عن طريق ضرب العنصر الأول في السطر الأول (مصفوفة1) مع العنصر الأول في العمود الثاني (مصفوفة 2) و جمع الناتج ( لهذا كررت C[i,j] ) مع حاصل ضرب العنصر الثاني من السطر الأول (مصفوفة 1) مع العنصر الثاني من العمود الثاني (مصفوفة 2) .. و هكذا بقية عناصر المصفوفة الناتجة .
و هذا ما يوضحه هذا الكود .. فـ i تشير إلى السطر .. و j تشير إلى العمود .. و k من أجل عملية الضرب السابقة التي شرحتها لك .. ولو تتبعتي الحلقات من البداية و قمت بتسجيل قيم i و j و k و وضعتها في الكود الأخير فستفهمين العملية .. أنا أعرف أن هناك بعض الصعوبة في فهم الحلقات المتداخلة لأول وهلة و لكن مع التمرين تصبح أسهل ..
يجب أن يكون البرنامج عندك مثل هذه الصورة المرفقة .. تحياتي
الكتكوته
19-11-2004, 12:05 AM
اهلا
جربته واشتغل بس شكله فيه مشكله عندي
ادخل قيم المصفوفات عادي واذا دخلت القيمه الاخيره للمصفوفه الثانيه وضغطت انتر,,
كأنها تطلع الاجابه بس تختفي شاشه الدوس ,, يعني مايمديني اشوفها \
ما أدري ايش المشكله ,,
Wolf Sniper
19-11-2004, 03:28 PM
اهلا
جربته واشتغل بس شكله فيه مشكله عندي
ادخل قيم المصفوفات عادي واذا دخلت القيمه الاخيره للمصفوفه الثانيه وضغطت انتر,,
كأنها تطلع الاجابه بس تختفي شاشه الدوس ,, يعني مايمديني اشوفها \
ما أدري ايش المشكله ,,
إذا كنتي تريدين مشاهدة نتائج البرنامج إضغطي Ctrl + F5 و عندها تستطيعين مشاهدة كامل العمليات .. أما إذا ضغطي على F5 فقط فسوف يعمل البرنامج و لكن سوف يخرج فور الانتهاء من جميع الأوامر لذلك دائما استخدمي Ctrl + F5 .. و هو اختصار لأمر Execute .
الكتكوته
19-11-2004, 04:52 PM
اهلا
اذا ضغطت ctrl+F5
يجيني هذا ..
http://shoooshooo.jeeran.com/11.jpg
انا دايم اشغل البرنامج من العلامه الصفراء إلي زي البرق (Run):17: :17: :17:
أو أضغط على ctrl+F9:17: :17: :17:
ودايم البرنامج تشتغل وتبقى شاشة الدوس لما اقفلها ,,:17: :17: :17:
Wolf Sniper
19-11-2004, 10:59 PM
أووووووه نسيت أنك تستخدمين نسخة Borland فهي تختلف في الإختصارات عن نسخة Microsoft .. طيب .. ابحثي في القوائم File و غيرها أكيد سوف تجدين الأمر المطلوب لإيقاف الشاشة عند الإنتهاء من عمل البرنامج .
لأني لا أعرف ما هي الإختصارات أو القوائم في نسخة Borland .. هل توجد قائمة تسمى Build ؟ أو ربما تجدين في أحد القوائم الأمر Compile .
الكتكوته
20-11-2004, 01:08 AM
ما لقيييت
طيب ليه البرامج تبقى على الشاشه إلا هذا ؟
مالقيت هذي الاوامر
لقيت compiler
بس يبحث عن الاخطاء في البرنامج وبس ..
ماتجي شاشه الدوس..
خلاص مو مشكله بوريه احد ثاني احس اني احرجتك بأسإلتي وانت ما تستخدم بورلاند..
soultaker
20-11-2004, 04:57 AM
اضيفي السطرين هذولي باخر البرنامج قبل return 0; =)
char temp;
cin >> temp;
Wolf Sniper
20-11-2004, 01:41 PM
اضيفي السطرين هذولي باخر البرنامج قبل return 0; =)
char temp;
cin >> temp;
الله يجزيك الخير .. أضيفي الأمرين اللي كتبهم الأخ soultaker قبل نهاية التابع main .. و بعد ذلك حاولي إيجاد حل للمشكلة تلك .
//اسف لتطفلي
//واحب اقول ان البرنامج فيه خطأ بسيط وصححته
#include <iostream.h>
const int m = 2;
int a[m][m];
int b[m][m];
int c[m][m] = {{0,0},{0,0}};
void sum();
int main()
{
// Enter
cout << "Enter Array a[] : " << endl;
for (int i=1; i<=m; i++)
for (int j=1; j<=m; j++)
{
cout << "a[" << i << "," << j << "] = ";
cin >> a[i][j];
}
cout << "Enter Array b[] : " << endl;
for (i=1; i<=m; i++)
for (int j=1; j<=m; j++)
{
cout << "b[" << i << "," << j << "] = ";
cin >> b[i][j];
}
// Process
sum();
// Printing
for (i=1; i<=m; i++)
{
for (int j=1; j<=m; j++)
cout << c[i][j] << "\t";
cout << endl;
}
return 0;
}
void sum()
{
for (int i=1; i<=m; i++)
for (int j=1; j<=m; j++)
for (int k=1; k<=m; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
#include <iostream.h>
const int m = 2;
int a[m][m];
int b[m][m];
int c[m][m] = {{0,0},{0,0}};
void sum();
int main()
{
// Enter
cout << "Enter Array a[] : " << endl;
for (int i=1; i<=m; i++)
for (int j=1; j<=m; j++)
{
cout << "a[" << i << "," << j << "] = ";
cin >> a[i][j];
}
cout << "Enter Array b[] : " << endl;
for (i=1; i<=m; i++)
for (int j=1; j<=m; j++)
{
cout << "b[" << i << "," << j << "] = ";
cin >> b[i][j];
}
// Process
sum();
// Printing
for (i=1; i<=m; i++)
{
for (int j=1; j<=m; j++)
cout << c[i][j] << "\t";
cout << endl;
}
return 0;
}
void sum()
{
for (int i=1; i<=m; i++)
for (int j=1; j<=m; j++)
for (int k=1; k<=m; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
Wolf Sniper
05-12-2004, 12:01 AM
أين الخطأ في البرنامج ؟ :أفكر:
بصراحة انا عمري مادرست الدالة الرئيسة تكون بالفويد لازم تكون بالانت
بعدين مافهيه ريتيرن 0 في نهاية البرنامج
Wolf Sniper
06-12-2004, 10:37 PM
بصراحة انا عمري مادرست الدالة الرئيسة تكون بالفويد لازم تكون بالانت
بعدين مافهيه ريتيرن 0 في نهاية البرنامج
أهلاً أخي ..
أولاً / البرنامج صحيح بالتأكيد لأنه يعمل عندي و قد قبله Compilor عندي هذا أولاً .
ثانياً / سأقول لك لماذا void صحيحة .. أنت أكيد تعرف بأن هناك توابع (دوال) تعيد قيمة و توابع لا تعيد قيمة .. التوابع التي تعيد قيمة نضع قبل اسم التابع أي نوع من الأنواع المعرفة من قبل البرنامج أو المبرمج (int..float) .. إلخ أما التوابع التي لا تعيد قيمة فنضع لها void ..
و الـ main ما هو إلا تابع مثل باقي التوابع و لكن ما يميزه بأن المترجم (Compilor) يبدأ قراءة برنامجك من عنده .. فإذا وضعت void و لم تعيد قيمة في النهاية فالطريقة صحيحة .. و إذا وضعت int و أعدت قيمة الصفر في النهاية فأيضاً صحيح ..
فالطريقتين صحيحتين 100% .. و قلت لك الدليل أن Compilor قبل void .
و أهلاً بك في المنتدى :)
جميع حقوق برمجة vBulletin محفوظة ©2025 ,لدى مؤسسة Jelsoft المحدودة.
جميع المواضيع و المشاركات المطروحة من الاعضاء لا تعبر بالضرورة عن رأي أصحاب شبكة المنتدى .