English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
مجموعة من أمثلة البرمجة في لغة C
في هذا المثال، ستتعلم ضرب مصفوفتين واستخدام وظائف معينة مكتوبة من قبل المستخدم لعرض النتيجة.
لفهم هذا المثال، يجب أن تكون على علم بما يليبرمجة Cالموضوع:
يتطلب البرنامج من المستخدم إدخال حجم المصفوفة (السطر والعمود).
ثم، يطلب البرنامج من المستخدم إدخال عناصر هذه المصفوفات، وأخيرًا إضافة عرض النتيجة.
لتنفيذ هذه المهمة، يجب تنفيذ ثلاث وظائف:
للحصول على عناصر المصفوفة من المستخدم - enterData()
ضرب مصفوفتين - multiplyMatrices()
عرض مصفوفة النتيجة بعد الضرب - display()
#include <stdio.h> void enterData(int firstMatrix[][10], int secondMatrix[][10], int rowFirst, int columnFirst, int rowSecond, int columnSecond); void multiplyMatrices(int firstMatrix[][10], int secondMatrix[][10], int multResult[][10], int rowFirst, int columnFirst, int rowSecond, int columnSecond); void display(int mult[][10], int rowFirst, int columnSecond); int main() { int firstMatrix[10][10], secondMatrix[10][10], mult[10][10], rowFirst, columnFirst, rowSecond, columnSecond, i, j, k; printf("إدخال صفوف وعمودي المصفوفة الأولى: "); scanf("%d %d", &rowFirst, &columnFirst); printf("إدخال صفوف وعمودي المصفوفة الثانية: "); scanf("%d %d", &rowSecond, &columnSecond); //إذا كان عمود المصفوفة الأولى لا يساوي صف المصفوفة الثانية، فيجب أن يدخل المستخدم حجم المصفوفة مرة أخرى. while (columnFirst != rowSecond) { printf("خطأ! عمود المصفوفة الأولى لا يساوي صف المصفوفة الثانية.\n"); printf("إدخال صفوف وعمودي المصفوفة الأولى: "); scanf("%d%d", &rowFirst, &columnFirst); printf("إدخال صفوف وعمودي المصفوفة الثانية: "); scanf("%d%d", &rowSecond, &columnSecond); } //�数ون للحصول على بيانات المصفوفة enterData(firstMatrix, secondMatrix, rowFirst, columnFirst, rowSecond, columnSecond); //للمعادلة بين مصفوفتين multiplyMatrices(firstMatrix, secondMatrix, mult, rowFirst, columnFirst, rowSecond, columnSecond); //�数ون عرض مصفوفة الناتج بعد الضرب display(mult, rowFirst, columnSecond); return 0; } void enterData(int firstMatrix[][10], int secondMatrix[][10], int rowFirst, int columnFirst, int rowSecond, int columnSecond) { int i, j; printf("\nإدخال عناصر المصفوفة 1:\n"); for(i = 0; i < rowFirst; ++i) { for(j = 0; j < columnFirst; ++j) { printf("الإدخال العنصر a%d%d: ", i + 1, j + 1); scanf("%d", &firstMatrix[i][j]); } } printf("\nالإدخال عنصر مصفوفة 2:\n"); for(i = 0; i < rowSecond; ++i) { for(j = 0; j < columnSecond; ++j) { printf("الإدخال العنصر b%d%d: ", i + 1, j + 1); scanf("%d", &secondMatrix[i][j]); } } } void multiplyMatrices(int firstMatrix[][10], int secondMatrix[][10], int mult[][10], int rowFirst, int columnFirst, int rowSecond, int columnSecond) { int i, j, k; //تعيين عناصر مصفوفة mult إلى 0. for(i = 0; i < rowFirst; ++i) { for(j = 0; j < columnSecond; ++j) { mult[i][j] = 0; } } //تخزين نتيجة ضرب مصفوفة firstMatrix وsecondMatrix في مصفوفة mult. for(i = 0; i < rowFirst; ++i) { for(j = 0; j < columnSecond; ++j) { for(k = 0; k < columnFirst; ++k) { mult[i][j] += firstMatrix[i][k] * secondMatrix[k][j]; } } } } void display(int mult[][10], int rowFirst, int columnSecond) { int i, j; printf("\nالخروج من مصفوفة:\n"); for(i = 0; i < rowFirst; ++i) { for(j = 0; j < columnSecond; ++j) { printf("%d ", mult[i][j]); if(j == columnSecond - 1) printf("\n\n"); } } }
النتيجة الصادرة
الإدخال صفوف وعمود مصفوفة الأولى: 3 2 الإدخال صفوف وعمود مصفوفة الثانية: 3 2 خطأ! عمود المصفوفة الأولى غير متساوي مع صفوف المصفوفة الثانية. الإدخال صفوف وعمود مصفوفة الأولى: 2 3 الإدخال صفوف وعمود مصفوفة الثانية: 3 2 الإدخال عنصر مصفوفة 1: الإدخال العنصر a11: 3 الإدخال العنصر a12: -2 الإدخال العنصر a13: 5 الإدخال العنصر a21: 3 الإدخال العنصر a22: 0 إدخال العنصر a23: 4 إدخال عناصر المصفوفة 2: إدخال العنصر b11: 2 إدخال العنصر b12: 3 إدخال العنصر b21: -9 إدخال العنصر b22: 0 إدخال العنصر b31: 0 إدخال العنصر b32: 4 الناتج عن إدخال المصفوفة: 24 29 6 25