السلام عليكم اخوني ... مساكم الله بالخير
عندي سؤال هل لكم ان تجيوني عليه
هل من الممكن ان نخلق مصفوفة حجمها يحدده المستخدم مثلا[ A[ n][n بدون استخدام المؤشرات
السلام عليكم اخوني ... مساكم الله بالخير
عندي سؤال هل لكم ان تجيوني عليه
هل من الممكن ان نخلق مصفوفة حجمها يحدده المستخدم مثلا[ A[ n][n بدون استخدام المؤشرات
هذا الـdynamic stack allocation، وهذه ممكنه فقط في c99 (لايدعمها msvc)، وتدعمها بعض المصرفات مثل gcc كإضافة للغة، مثلاً:
#include <stdio.h>intmain(int argc, char **argv){ int n, m, i, j; printf("n? "); scanf("%d", &n); printf("m? "); scanf("%d", &m); int array[n][m]; for( i = 0 ; i < n ; i++) for( j = 0 ; j < m ; j++ ) array[j] = m * i + j; for( i = 0 ; i < n ; i++) for( j = 0 ; j < m ; j++ ) printf("%d\n", array[j]); return 0;}
إذا كانت تزعجك طريقة تخصيص المصفوفة ذات البعدين، فهذه المصفوفة تخزن بطريقة الـrow major order في الذاكرة، يمكنك تخصيصها أي مصفوفة كمصفوفة ذات بعد واحد كالتالي (n عدد الصفوف و m الأعمدة):
int *array = (int *) malloc(sizeof(int) * n * m);
الآن يمكنك الوصول للعنصر:
array[j]
هكذا:
array[m * i + j]
مثلاً:
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
int n, m, i, j;
int *array;
printf("n? ");
scanf("%d", &n);
printf("m? ");
scanf("%d", &m);
array = (int *) malloc(sizeof(int) * n * m);
for( i = 0 ; i < n ; i++)
for( j = 0 ; j < m ; j++ )
array[m * i + j] = m * i + j;
for( i = 0 ; i < n ; i++)
for( j = 0 ; j < m ; j++ )
printf("%d\n", array[m * i + j]);
free(array);
return 0;
}عمليا لا أظن ذلك ولكن يمكن حجز مصفوفة أكبر من حد المستخدم ويحكم المستخدم بواسطة حلقة الإدخال هكذا :
#include <stdio.h>#define MAX 1000void main(){ int arr[MAX]; printf("enter n : "); scanf("%d",&n); for (int i=0 ; i < n ; i++) scanf("%d",&arr);لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر
Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone) Project = findNewProjectelse learn_codeآسف أستاذ B لم أكن أعلم أنك رددت قبلي فإجابتك كافية تماما
لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر
Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone) Project = findNewProjectelse learn_codeالمتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…