الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يتم إدخال ابعاد المصفوفة نفسها من المستخدم؟

بدأه goon في 14 مايو 2010 · 7 رد · 901 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أردت أن أكتب مصفوفة بحيث يقوم المستخدم بتحديد أبعادها مثلاً 3*2 ثم يبدأ يدخل قيمها ..

ولكنني اصتمدت بالتالي ... بعد تعريف المصفوفة كما يلي : int x[a][b[

حيث a , b متغيران .. يقوم المستخدم بإدخالهما ... لاحظت أن البرنامج لا يقبل هذه الطريقة ... ويخبرني بأن علي إدخال قيم ثابتة

وأنا أستخدم مكتبة stdio.h

ما هي الطريقة الصحيحة لفلع ذلك .. أرجو الإجابة ؟

#2

هذا مثال بسيط:

#include <stdio.h>
#include <conio.h>
main ()
{
int i,j; 	
int rows=4;
int columns=3; 
int **arr = malloc(rows * sizeof(int *));
for(i = 0; i <rows; i++)
arr = malloc(columns * sizeof(int));

for(i=0;i<rows;i++){
for(j=0;j<columns;j++){
arr[j]=(i+1)*(j+1);	
}

}

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

getch();
}

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 14 مايو 2010 في 20:30 — السبب: تعديل في الكود

1
tvquran_6.gif

#3

أخي لم أفهم الكود ... والكود لا يجعل المستخدم يدخل أي قيمة

أيمكن شرح بالتحديد .. لعملية إدخال عدد الصفوف وعدد الأعمدة من قبل المستخدم (أثناء تشغيل البرنامج) ... أي أن أحول متغيرين إلى عدد الأعمدة وعدد الصفوف

تم تعديل هذه المشاركة بواسطة goon في 14 مايو 2010 في 20:24

#4
#include <stdio.h>
#include <conio.h>
main ()
{
int i,j; 	
int rows, columns;
printf("Enter Rows:");
scanf("%d",&rows);
printf("Enter Columns:");
scanf("%d",&columns);	

int **arr = malloc(rows * sizeof(int *));
for(i = 0; i <rows; i++)
arr = malloc(columns * sizeof(int));

for(i=0;i<rows;i++){
for(j=0;j<columns;j++){
printf("arra[%d,%d]=",i,j); 	
scanf("%d",&arr[j]); 	
}

}

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

getch();
}

هذا الكود هو المسؤول عن بناء المصفوفة

int **arr = malloc(rows * sizeof(int *));
for(i = 0; i <rows; i++)
arr = malloc(columns * sizeof(int));
1
tvquran_6.gif

#5

أخي جرب هالكود :

int m ;
int n ;
int ** array;
cin>>m;
cin>>n;
array = new int*[m];
for( int i = 0; i < m; ++i )
         array = new int[n];

المعذرة , أخوي فهد ..

تم تعديل هذه المشاركة بواسطة إشراقــه فجــر في 14 مايو 2010 في 20:31

1

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#6

آه فهمت إذاً هذا الكود هو اللذي يقوم بعملية وضع أبعاد المصفوفة

int **arr = malloc(rows * sizeof(int *));

for(i = 0; i <rows; i++)

arr = malloc(columns * sizeof(int));

ولكن أخي لم أفهمه جيداً ... هل هذه الأوامر من المكتبة الجديدة علي ... conio.h

وأيضاً لماذا تصدر عدة أخطاء ولا ينفذ البرنامج بعد استخدام scanf ,,, فلم ينفذ الكود اللذي عدلته

أي بإضافة الكود التالي .. لا يعمل البرنامج

printf("Enter Rows:");

scanf("%d",&rows);

printf("Enter Columns:");

scanf("%d",&columns);

#7

هذه الطريقة هي الطريقة التي تعمل بها مصفوفة ديناميكية ذات بعدين في لغة c وليس لها علاقة بـ ملف الراس conio.h

لكن الباقي تتعامل مع المصفوفة مثل الاخرى

tvquran_6.gif

#8

هذا الكود سوف يعمل ان شاء الله

#include <stdio.h>
#include<stdlib.h>
main ()
{
int i,j; 	
int rows, columns;
int **arr=NULL;
printf("Enter Rows:");
scanf("%d",&rows);
printf("Enter Columns:");
scanf("%d",&columns); 


arr = malloc(rows * sizeof(int *));
for(i = 0; i <rows; i++)
arr = malloc(columns * sizeof(int));

for(i=0;i<rows;i++){
for(j=0;j<columns;j++){
printf("arra[%d,%d]=",i,j); 	
scanf("%d",&arr[j]); 	
}

}

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


}

فقط احتجت الي رفع تعرف المصفوفة للاعلى في لغه السي التعارف في اعلى الدالة يجب ان تكون

tvquran_6.gif

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…