• 0
MsH3AL

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

سؤال

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

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

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

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

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

اخوكم.

0

شارك هذا الرد


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

17 إجابة على هذا السؤال .

  • 0

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

struct info

{

char name;

int age;

int phone;

}

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

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

#define Num 16

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

0

شارك هذا الرد


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

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

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

0

شارك هذا الرد


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

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

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

http://www.arabteam2000-forum.com/index.php?showtopic=73620

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

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

شارك هذا الرد


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

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

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

0

شارك هذا الرد


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

بالنسبة لل 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 فقد شرح لك الأخ الفاضل معناها و لزيادة التوضيح فان كل ما يأتي خلف ال # يتم تنفيذ اولا أينما وجد

و الله أعلم

0

شارك هذا الرد


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

بالنسبة ال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 سيتم استدعاء قيمته من الذاكرة

0

شارك هذا الرد


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

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

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

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

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

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

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

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

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

0

شارك هذا الرد


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

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

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

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

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

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

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

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

0

شارك هذا الرد


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

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

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

شارك هذا الرد


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

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

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

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

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

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

#ifndef ThisFile
#define ThisFile

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

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

شارك هذا الرد


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

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

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

0

شارك هذا الرد


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

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

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

0

شارك هذا الرد


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

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

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

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

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

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

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

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

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

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

0

شارك هذا الرد


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

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

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

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

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

شارك هذا الرد


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

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

http://www.arabteam2000-forum.com/index.ph...pic=69973&st=30

أما عن ال#define

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

const int x=12;

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

http://www.arabteam2000-forum.com/index.ph...opic=62881&st=0

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

0

شارك هذا الرد


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

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

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

تفضل هذا المثال أخي 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[i].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);
}

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

0

شارك هذا الرد


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

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

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

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

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

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

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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

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

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