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

هل يمكن انشاء مصفوفة يحدد المستخدم أبعادها بدون المؤشرات

بدأه Luna Volver A salir في 11 أبريل 2014 · 3 رد · 579 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم  اخوني ... مساكم الله بالخير

عندي سؤال هل لكم ان تجيوني عليه

هل من الممكن ان نخلق مصفوفة حجمها يحدده المستخدم مثلا[ A[ n][n بدون استخدام المؤشرات

#2

هذا الـ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;
}
3
#3

عمليا لا أظن ذلك ولكن يمكن حجز مصفوفة أكبر من حد المستخدم ويحكم المستخدم بواسطة حلقة الإدخال هكذا :

#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);
1

‎لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر‎

 

Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone)  Project = findNewProjectelse learn_code
#4

آسف أستاذ ‏B‏ لم أكن أعلم أنك رددت قبلي فإجابتك كافية تماما

‎لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر‎

 

Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone)  Project = findNewProjectelse learn_code

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

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

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

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

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