ahmed.o.mohamed

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

7 ردود في هذا الموضوع

السلام عليكم

 

بالنسبة للإخوة الذين يُريدون التأقلم مع المؤشرات, أسرع طريقة لفهمها هي التمرن على كتابة الأكواد اعتماداً على المؤشرات فقط.

كمثال بسيط, حاول كتابة دالة تستقبل مصفوفة من الأعداد الصحيحة و تقوم بقلب عناصرها دون التأثير على المصفوفة الأصلية (لاحظ أنني لم أحدد وسائط الدالة, لذا عليك التفكير في الوسائط المناسبة ..)

 

المطلوب هو كتابة الدالة في ثلاثة أسطر أو أقل, إن أمكن. (كل سطر يحتوي على instruction أو أكثر)

 

 

 

تحياتي.

تم تعديل بواسطه Snack3r
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هل هناك محاولات للسؤال قبل أن أضع الحل ؟ :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

سأحاول  ;)

 

ولكن ما المقصود من  instruction

 

وهل نقوم بطباعة المصفوفة ، أم ماذا ؟؟

 

تحياتي  ^_^

تم تعديل بواسطه bahbah
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

instruction تعني تعليمة أو أمر من أوامر اللغة.

 

عموماً, هذا هو الحل, أرجو أن يُفيد القارئ :

#include <stdio.h> void inverser(int src[], int dest[], int length) {    int *left = &src[0], *right = &dest[length - 1];    while(length-- >= 0)        *right-- = *left++;} int main() {    int tab1[] = {1, 2, 3, 4, 5},tab2[5];    inverser(tab1,tab2, 5);    printf("Tab1\tTab2\n\n");    for (int i = 0; i < 5; i++)        printf("%d\t%d\n", tab1[i],tab2[i]);    return 0;}
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

 

instruction تعني تعليمة أو أمر من أوامر اللغة.

 

عموماً, هذا هو الحل, أرجو أن يُفيد القارئ :

#include <stdio.h> void inverser(int src[], int dest[], int length) {    int *left = &src[0], *right = &dest[length - 1];    while(length-- >= 0)        *right-- = *left++;} int main() {    int tab1[] = {1, 2, 3, 4, 5},tab2[5];    inverser(tab1,tab2, 5);    printf("Tab1\tTab2\n\n");    for (int i = 0; i < 5; i++)        printf("%d\t%d\n", tab1[i],tab2[i]);    return 0;}

 

 

لماذا ؟؟

 

حرقت السؤال  :lol:  ..

 

المهم هذا حلي ...

#include <stdio.h>void FlibArray(int arr[],int length){	int *ptr =&arr[length-1];	if(length==0){}	else{while(length-->=1){printf("%d\n",*ptr--);}}}int main(){	int arr[] = {3,4,5,6};	FlibArray(arr,4);	return 0;}

تحياتي  ^_^ 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أو بإختصار

#include <stdio.h>void FlibArray(int arr[],int length){	int *ptr =&arr[length-1];	if(length>0){while(length-->=1)printf("%d\n",*ptr--);}}int main(){	int arr[] = {1,2,3,4,5};	FlibArray(arr,sizeof(arr)/sizeof(arr[0]));	return 0;}
تم تعديل بواسطه bahbah
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
void inverser(int src[], int dest[], int length) {
	    while(length-- >= 0)       
		*dest++ = *(src+ length);
}

 

تم تعديل بواسطه hakouabs
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .