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

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

بدأه Snack3r في 29 نوفمبر 2013 · 6 رد · 1,538 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

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

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

 

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

 

 

 

تحياتي.

تم تعديل هذه المشاركة بواسطة Snack3r في 30 نوفمبر 2013 في 19:28

#2

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

#3

سأحاول  ;)

 

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

 

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

 

تحياتي  ^_^

تم تعديل هذه المشاركة بواسطة bahbah في 30 نوفمبر 2013 في 20:03

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#4

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,tab2);    return 0;}
1
#5
Snack3r كتب:

 

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,tab2);    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;
}

تحياتي  ^_^ 

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#6

أو بإختصار

#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 في 30 نوفمبر 2013 في 21:44

رجعت ومازال الفريق خاملاَ  :( 


 


abPuw.1.gif

#7
void inverser(int src[], int dest[], int length) {
	    while(length-- >= 0)       
		*dest++ = *(src+ length);
}

تم تعديل هذه المشاركة بواسطة hakouabs في 6 أغسطس 2016 في 19:12

1

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

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

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

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

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