برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة: ماهـو الـ struct ... والـ #define ... وفائدتهما .؟ - برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة

اذهب للمحتوى

تنبيه

تم تحديث قوانين القسم يرجى قراءتها جيداً و ذلك حفاظاً على نظام القسم و حماية لمشاركاتك اضغط هنا لقراءة الجديد
صفحة 1 من 1
  • لا يمكنك بدء موضوع جديد
  • هذا الموضوع مغلق

ماهـو الـ struct ... والـ #define ... وفائدتهما .؟ بالـسي وليس الـC++ :) .. اتمنى الافاده اضف تقييما للموضوع -----

#1     غير متواجد   MsH3AL Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 42
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 08/09/2005 - 10:29 PM

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


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


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

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

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


اخوكم.
0

شارك هذا الموضوع

      

#2     غير متواجد   SoNaTa Icon

  • عضو
  • مجموعة اعضاء
  • مشاركات 155
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 08/09/2005 - 10:59 PM

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

struct info
{
char name;
int age;
int phone;
}

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

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

#define Num 16

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

#3     غير متواجد   MsH3AL Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 42
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 12:15 AM

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

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

#4     غير متواجد   ibn_als3odiah Icon

  • عضو فعال
  • مجموعة اعضاء
  • مشاركات 329
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 12:58 AM

مشعل قد تفيدك هذه المشاركة:
انظر الى الاستفسار الثاني وأظن المبدأ نفسه في C++وفي الC#

http://www.arabteam2...showtopic=73620



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

تم تعديل هذه المشاركة بواسطةibn_als3odiah: 09/09/2005 - 01:01 AM

0

#5     غير متواجد   MsH3AL Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 42
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 03:05 AM

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


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

#6     غير متواجد   Ayoub JAMAL EL IDRISSI Icon

  • Crazy-Man سابقا
  • مجموعة المشرفون
  • مشاركات 2132
  • التقييم 0
  • النقاط المتوفرة 9.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 05:40 AM

بالنسبة لل 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

#7     غير متواجد   bashmohandes Icon

  • مشرف قسم C#
  • مجموعة المشرفين القدامى
  • مشاركات 3189
  • التقييم 4
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 06:08 AM

بالنسبة ال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

#8     غير متواجد   **programme** Icon

  • عضو
  • مجموعة اعضاء
  • مشاركات 66
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 10:52 AM

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

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

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

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

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

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

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



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

0

#9     غير متواجد   MsH3AL Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 42
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 10:57 AM

ياهلا اخوي crazy-man .. شرح رائع بارك الله فيك ومثالك دش المخ :rolleyes: تسلم والله
بس استفسار بالـ struct بسيط :) ..
الحين ماكو طريقه اقدر اضمن فيها ملف خاص بالاعضاء .. يعني معلومات الموظفين تكون بروحها بملف واضمنها معاه؟
لانه هالطريقه باعتقادي راح تكون طويله وممله اذا كـان عدد الموظفين كثيرر جداً باعتقادي :rolleyes:
تسلم يا كريزي مان

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

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

#10     غير متواجد   MsH3AL Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 42
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 10:59 AM

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

تم تعديل هذه المشاركة بواسطةMsH3AL: 09/09/2005 - 11:01 AM

0

#11     غير متواجد   ahmed_3d Icon

  • خبير 3D
  • مجموعة الخبراء المعتمدون
  • مشاركات 317
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 11:11 AM

بالنسبة لل struct تشابه ال class الموجودة في السي++ في بعض الاشياء
يمكنك ان تضع دوال في ال struct حسب ما قاله مؤلف كتاب thinking in c++
تكون ال struct في الحالة العادية public

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

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


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

تم تعديل هذه المشاركة بواسطةahmed_3d: 09/09/2005 - 11:31 AM

0

#12     غير متواجد   ahmed_3d Icon

  • خبير 3D
  • مجموعة الخبراء المعتمدون
  • مشاركات 317
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/09/2005 - 11:18 AM

Quote

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

على حسب فهمي لسؤالك يمكنك ان تقسم ال struct نفسها الى مجموعة من ال nested struct وكل واحدة لها قيم خاصة بها
كما يمكنك ان تكتب تعريف سجل مثلا خاص باسماء الزبائن ثم تضمن هذا الملف في ملف اخر فيه سجل خاص بعناويين الزبائن مثلا ثم تجعل اسم ذلك ال struct الخاص بعناويين الزبائن عضوا في ال struct الخاص بأسماء الزبائن
0

#13     غير متواجد   MsH3AL Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 42
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 10/09/2005 - 04:45 AM

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


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

#14     غير متواجد   hasan_aljudy Icon

  • مشرف منتدى السى و السى بلس بلس سابقاً
  • مجموعة المشرفين القدامى
  • مشاركات 2741
  • التقييم 62
  • النقاط المتوفرة 20.00
  • 15.00
    النقاط المحصلة
++

تم الارسال 10/09/2005 - 04:58 AM

في البرامج الواقعية لن تقوم بانشاء الستركتات كلها بالكود بهذا الشكل:
Employee ahmed;
ahmed.age = ........
//etc
Employee mohannad;
mohannad.age = ....
//etc

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

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

Quote

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

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

#15     غير متواجد   MsH3AL Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 42
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 10/09/2005 - 10:59 AM

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

Quote

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

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

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

0

#16     غير متواجد   eng_3llam Icon

  • مشرف قسم C++/C
  • مجموعة المشرفين القدامى
  • مشاركات 815
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 10/09/2005 - 11:28 AM

ودى لينكة لشرح ال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

#17     غير متواجد   :: إسـتبرق C++ :: Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 40
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 10/09/2005 - 01:52 PM

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

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

تفضل هذا المثال أخي 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

#18     غير متواجد   MsH3AL Icon

  • عضو جديد
  • مجموعة اعضاء
  • مشاركات 42
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 11/09/2005 - 04:06 AM

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

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


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



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

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

0

شارك هذا الموضوع


صفحة 1 من 1
  • لا يمكنك بدء موضوع جديد
  • هذا الموضوع مغلق

( 1 ) عضو يشاهد هذا الموضوع
( 0 ) الأعضاء, ( 1 ) الزوار, ( 0 ) عضو بدخول مخفي




لإفضل مشاهدة للمنتدى إستخدم مستعرض فايرفوكس
Free PageRank Checker

 الآن ... إستايل خاص لمن يملك هاتف iPhone  ... لتنزيل البرنامج  اضغط هنا