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

ماهو ال struct ... وال #define ... وفائدتهما .؟

مغلق
بدأه MsH3AL في 8 سبتمبر 2005 · 17 رد · 14,534 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

مرحبا يااخوان ..

بالصراحه الـ ستراكت struct .. ماني عارف شنو فايدته بالاساس وهذا خلاني مااعرف شلون طريقة عمله .. :(

ونفس الشي للثابت الـ #define :rolleyes:

بارك الله فيكم.. واتمنى الافاده لاهنتم اخواني..

اخوكم.

#2

هلا مشعل,,,, ال struct او السجلات , هي عباره عن عده تغيرات ممكن تكون اكثر من نوع تندرج تحت اسم واحد مثلا

struct info

{

char name;

int age;

int phone;

}

فائدتها هي تنظيم البرامج الكبيره , يعني تخيل عندك برنامج كبير لمعلومات عن المؤظفين , طبعا بأستعمال ال structures رح يتنظم برنامج مثل هذا بشكل كبير ورح يسهل عليك تنقيحه وتطويره. طبعا انا اعرف ان الكلام اللي قلته يمكن يكون مو مفهوم بالنسبه لك , لكن انتظرني هاليومين وانا بجهز شرح عنها.

بالنسبه لل #define , فهي احدى اوامر ال preprocessor او المعالجه الاوليه , هو وبكل بساطه لتعريف ثابت او قيمه ثابته . وممكن تستخدم قيمه الثابت في اي مكان بالبرنامج مثلا

#define Num 16

عالعموم بما أنك جديد لا تشغل نفسك بال preprocessor حاليا , تعلم بقيه الاشياء وال preprocessor خليها لما تتعلم بقيه الاساسيات

#3

هلا اخوي SoNaTa بارك الله فيـك ... بصراحه اتضحت المعلومات :)

بس لاهنت اخوي ممكن مثال بسيط.. يعني كود ولو بسيط جداً .. لمعرفة اين مكانها بالكود .. وطريقتها في الكتابه.. :rolleyes:

#4

مشعل قد تفيدك هذه المشاركة:

انظر الى الاستفسار الثاني وأظن المبدأ نفسه في C++وفي الC#

/index.php?showtopic=73620

أسال الله لنا ولك التوفيق

تم تعديل هذه المشاركة بواسطة ibn_als3odiah في 9 سبتمبر 2005 في 01:01

3424.gif
#5

بارك الله فيك اخي ibn_als3odiah ..,, والمثال غير واضح :)

وبنتظر احد يعطينا ولو مثال بسيط..

#6

بالنسبة لل struct فهي كما قال لك الأخ تساعد في تنظيم البرنامج لنأخذ نفس مثال الأخ لدينا برنامج لشؤون الموظفين عن طريق ال struct سننشأ struct تضم جميع ما يهم الموظف 'Employee'

و هذا مثال لذلك

struct Employee {

	int age;
	int salary;
	int Childrens;
};

و من أجل العمل بهذا ال struct اليك هذا الكود

void main()
{
	Employee ahmed;
	ahmed.age=20;
	ahmed.Childrens=3;
	ahmed.salary= 3000;

	cout << ahmed.age << endl;
	cout << ahmed.Childrens  << endl;
	cout << ahmed.salary << endl;
}

اما ال #define فقد شرح لك الأخ الفاضل معناها و لزيادة التوضيح فان كل ما يأتي خلف ال # يتم تنفيذ اولا أينما وجد

و الله أعلم

#7

بالنسبة الpreprocessors فان تنفيذها يتم قبل عملية الCompile و يتم فيها تنفيذ جميع الأوامر مثل Include و ازالة كل هذه الأوامر و استبدالها بما تشير اليه بمعنى اذا كنت تبدأ الكود ب #Include <stdio.h> فسوف تُحذف هذه الجملة و يحل محلها النص المكتوب داخل الملف stdio.h

و أيضاً بالنسبة للdefine بفرض أنك قمت بكتابة#define MAX_LOOP 100 فانه سيتم استبدال كل كلمات MAX_LOOP في الكود بالقيمة 100 و ليس حتى بالقيمة بل بالنص 100 فلم يصل الكومبايلر بعد ليفرق بين النصوص و القيم و لهذا فاستخدام الPreprocessing يكون أسرع فأنت توفر الذاكرة في الثوابت لأنك لا تحجز أي مكان لهذا الثابت مثل

#define PI 3.14 فانه لم يتم حجز مكان في الذاكرة للثابت PI بل أن ماسيحدث أثناء عملية الPreprocessing هو مجرد Find & Replace لكل كلمة PI بالنص 3.1422- و هذا هو الفرق بينها و بينconst double PI = 3.14 ففي هذه الحالة تم حجز مكان في الذاكرة باسم PI و تم تخزين القيمة 3.14 فيه و كل مرة سيتم استخدام الثابت PI سيتم استدعاء قيمته من الذاكرة

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

ماشاء الله إجابة الإخوان كافية ووافية بإذن الله

لكن عندي زيادة بسيطة في الشرح وهي عنstruct

مثلا في المصفوفات :

إذا أعلنت عن مصفوفة من النوع int

فجميع البيانات التي فيها من النوع int

ولانستطيع تقسيمها إلى int float وغيرها

أما struct نستطيع إضافة أي نوع من البيانات معا

أتمنى التوفيق للجميع

#9

ياهلا اخوي crazy-man .. شرح رائع بارك الله فيك ومثالك دش المخ :rolleyes: تسلم والله

بس استفسار بالـ struct بسيط :) ..

الحين ماكو طريقه اقدر اضمن فيها ملف خاص بالاعضاء .. يعني معلومات الموظفين تكون بروحها بملف واضمنها معاه؟

لانه هالطريقه باعتقادي راح تكون طويله وممله اذا كـان عدد الموظفين كثيرر جداً باعتقادي :rolleyes:

تسلم يا كريزي مان

بارك الله فيك استاذ bashmohandes ,,, اللي فهمته ان الـ #define تقوم باعطاء قيمه للمتغير ثابته واذا كان متغيرين بنفس الاسم ومع اختلاف القيمتين ... تكون الافضليه للمتغير الثاب define ( يعني قيمه المتغير ثابته ولاتتغير ) :rolleyes:

تسلم يابش مهندس B)

#10

تسلم اخوي **programme** على الاضافه :)

تم تعديل هذه المشاركة بواسطة MsH3AL في 9 سبتمبر 2005 في 11:01

#11

بالنسبة لل struct تشابه ال class الموجودة في السي++ في بعض الاشياء

يمكنك ان تضع دوال في ال struct حسب ما قاله مؤلف كتاب thinking in c++

تكون ال struct في الحالة العادية public

يمكنك استخدام union لتخزين بياناتك وسيكون حجم ال union هو حجم اكبر متغير فيه

بالنسبة لل #define بالاضافة لما قيل فتستخدم عند عملية التأكد من ان الملف قد تم تعريفه مرة واحدة اي للتأكد من ان عملية التضمين لهذا الملف #include"ff.h" لم تتم اكثر من مرة لان هذا سيعطي خطأ في البرنامج

#ifndef ThisFile
#define ThisFile

اسف لان سؤالك انك تريدها بالسي وليس السي++ فالموضوع بالنسبة لل struct ربما مختلف ولا اتذكر ذلك الان

تم تعديل هذه المشاركة بواسطة ahmed_3d في 9 سبتمبر 2005 في 11:31

"خيركم من تعلم العلم وعلمه". ..........استغفر الله. ........ اللهم صلي وسلم على سيدنا محمد

احمد عبد الحميد ابوغرارة

CodeGuru CodeProject CGTalk

#12
اقتباس
الحين ماكو طريقه اقدر اضمن فيها ملف خاص بالاعضاء .. يعني معلومات الموظفين تكون بروحها بملف واضمنها معاه؟

على حسب فهمي لسؤالك يمكنك ان تقسم ال struct نفسها الى مجموعة من ال nested struct وكل واحدة لها قيم خاصة بها

كما يمكنك ان تكتب تعريف سجل مثلا خاص باسماء الزبائن ثم تضمن هذا الملف في ملف اخر فيه سجل خاص بعناويين الزبائن مثلا ثم تجعل اسم ذلك ال struct الخاص بعناويين الزبائن عضوا في ال struct الخاص بأسماء الزبائن

"خيركم من تعلم العلم وعلمه". ..........استغفر الله. ........ اللهم صلي وسلم على سيدنا محمد

احمد عبد الحميد ابوغرارة

CodeGuru CodeProject CGTalk

#13

بارك الله فيك اخي احمد شرح كافي ووافي والاخوان ماقصروا الله يعطيهم العافيه

واشكر الجميع على المرور ..اخوكم

#14

في البرامج الواقعية لن تقوم بانشاء الستركتات كلها بالكود بهذا الشكل:

Employee ahmed;
ahmed.age = ........
//etc
Employee mohannad;
mohannad.age = ....
//etc

هذا امر غير عملي في البرامج الكبيرة .. فهو لم يكن سوى مثال بسيط لتوضيح الفكرة.

في البرامج الكبيرة يتم عادة وضع معلومات الموظفين في شي مثل linked list يعني التعامل يكون بطريقة ديناميكية ..

طبعا ممكن تخزن هذه المعلومات في ملف و من ثم تحملها من الملف ..

اقتباس
بالنسبة لل struct تشابه ال class الموجودة في السي++ في بعض الاشياء

يمكنك ان تضع دوال في ال struct حسب ما قاله مؤلف كتاب thinking in c++

هذا الكلام في السي بلص بلص فقط, يعني الـ struct في السي بلص بلص هو مثل الـ class مع اختلاف بسيط.

و لكن في السي فإن الـ struct لا يحتوي تلك الخصائص .. و الله أعلم.

#15

شاكرلك اخي الكريم حسان على التوضيح والمشاركه الكريمه .. :)

اقتباس
في البرامج الكبيرة يتم عادة وضع معلومات الموظفين في شي مثل linked list يعني التعامل يكون بطريقة ديناميكية ..

هذي لم افهمها :rolleyes:

تم تعديل هذه المشاركة بواسطة MsH3AL في 10 سبتمبر 2005 في 11:01

#16

ودى لينكة لشرح الstruct

/index.ph...pic=69973&st=30

أما عن ال#define

تماثل فى السى بلس بلس

const int x=12;

إقراء تلك المشاركة وأنت هتفهم الlinkedlist

/index.ph...opic=62881&st=0

أسف جدا ردى جاء متأخر :(

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#17

الـسـلام عـلـيـكـم و رحـمـة الله

بعد شرح الأخوه الكرام

تفضل هذا المثال أخي MsH3AL و إن شاء الله تلقى الإفاده منه ..

// Return a copy of a structure

#include<stdio.h>
#include<string.h>

struct Employee {
int id;
char name[20];
};
typedef struct Employee EMP;

EMP pass_struct_addr(EMP *emp,char s[20]){

for(int i=0;i<3;i++,emp++)
if (strcmp(emp->name,s)==0)
return *emp;
}

void main(){
EMP emp[3]={123,"NORAN",456,"JAFFER",789,"AZHAR"};
EMP temp;

char s[20];

printf("Enter one of these employees ");
for(int i=0;i<3;i++)
printf("\n %s",emp.name);
printf("\n\n");
gets(s);


temp=pass_struct_addr(emp,strupr(s));

printf("%s id is %d",temp.name,temp.id);
}

وهذا مثال آخر :rolleyes: ..

/* program to update the time by one second */

//This program converts the month that the user enter to days.

#include<stdio.h>
/* program to update the time by one second */

#include<stdio.h>
struct time
{
int hour;
int minutes;
int seconds;
};
typedef struct time TIME;

main ()
{
TIME time_update (TIME now);
TIME current_time, next_time;

printf ("enter the time (hh:mm:ss): ");
scanf ("%i:%i:%i", &current_time.hour,
&current_time.minutes, &current_time.seconds);

next_time = time_update (current_time);

printf ("update time is %.2i:%.2i:%.2i\n", next_time.hour,
next_time.minutes, next_time.seconds );
}

/* function to update the time by one second */

TIME time_update (TIME now)
{
++now.seconds;

if (now.seconds == 60)
{ /*next minutes*/
now.seconds = 0;
++now.minutes;

if (now.minutes == 60)
{ /*next hour*/
now.minutes = 0;
++now.hour;

if ( now.hour == 24 )
now.hour = 0; /* midnight*/
}
}
return (now);
}

مع تمنياتي للجميع بالنجاح والتوفيق

بسم الله الرحمن الرحيم

" أولئك لهم جنات عدن تجري من تحتهم الأنهار

يحلون فيها من أساور من ذهب ويلبسون ثيابا خضرا

من سندس و إسـتـبـرق متكئين فيها على الأرائك

نعم الثواب وحسنت مرتفقاً "

صدق ذو الجلال والإكرام

#18

السلام ورحمه الله وبركاته

بارك الله فيك اخي الكريم المهندس علاء .. مشاركه طيبه وجميله منك يامهندس علاء فبارك الله فيك :rolleyes:

ماشاءالله عليك اخوي استبرق .. كفيت ووفيت بارك الله فيك وزادك من علمه

امثله رائعه اخي استبرق

والشكر واصل للجميع وجزاكم الله كل خير :rolleyes:

تم تعديل هذه المشاركة بواسطة MsH3AL في 11 سبتمبر 2005 في 04:07

هذا الموضوع مغلق.

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