تبليغاتX
C++ آموزش

سلام

می دونستم منتظرم نیستین برگشتم

 

اگر مبحث آرایه هارو به یاد داشته باشید برای ذخیره لیست اسامی از یک آرایه ی دو بعدی کاراکتری استفاده می کردیم حالا فرض کنید هر اسمی یک نمره هم داره و می خوایم این نمره هار وهم کنار اسامی ذخیره کنیم اولین ایده اینه که یک ارایه از نوع floatداشته باشیم که عناصر یکم تا انم آن با لیست اسامی مرتبط می شه خب تااینجای قضیه هیچ مشکلی نیست ام حالا فرض کنید بخوایم این لیست رو بر اساس نام مرتب کنیم این مطلب واضح است که باید برای مرتب سازی, عناصر آرایه رو جابجاکنیم اما مشکل اینه که باید برای هر نفر هم اسم و هم نمره فرد رو جابجاکنیم تا نمره کسی با نمره دیگری عوض نشه خب می گیم باشه قبول چند تا دستور باید بیشتر بنویسیم دیگه!! غیر از اینه... اما اگه فیلد هامون بیشتر از دوتا بود چی ؟؟ هممون می دونیم که بانک های اطلاعاتی معمولا بیشتر از دو فیلد داده ای دارن . برای نوشتن دستور های جابجایی رکودها برای مثلا  یک رکورد ده فیلدی باید 30 خط کد بنویسیم خب حالا یه مشکل دیگه برای فرستادن یه رکورد به یه تابع برای مثلا ده فیلد باید تابعمون 10 آرگمان داشته باشه (بعد فردا پس فردا تو روزنامه ها مینویسن فردی بر اثر کد نویسی بش از اندازه جان باخت!!!!) و اینطوری شد که چیزی به نام استراکچر (structure )ساخته شد.

 

تعریف:

استراکچر امکاناتی است که به ما اجازه ساخت انواع داده ای جدید را از ترکیب انواع داده ای مو جود می دهد.

 

با استفاده از این امکانت ما می توانیم چندین متغیر از انواع دیگر را در یک بسته بندی بعنوان نوع جدیدی معرفی کنیم به هر یک از این متغیر های درون این بسته بندی فیلد و به هر بسته یک اسراکچر یا به علت شباهت زیاد به یک رکورد, رکورد می گویند. بعد از تعریف یک استراکچربعنوان یک نوع داده ای جدید می توانیم بااین بسته ی متغیر ها مثل یک متغیر معمولی رفتار کنیم و هر زمان که نیاز بود محتویات هر یک از متغییر های درونش یا همان فیلد ها را تغییر دهیم

 

نحوه تعریف یک استراکچر:

 

}نام نوع داده ای جدیدstruct 

تعاریف فیلدها

};

مثال:

struct person{

 char name[40];

 float grade;

};

در این مثال استراکچری بانام personتعریف شده پس از این به بعد نوع داده ای جدیدی به این نام داریم که می توانیم متغیر هایی از آن تعریف کنیم برای مثال

person p1;

یا آرایه ای از آن تعریف کنیم

Person list[20];

مقدار دهی اولیه به استراکچر ها شبیه مقدار دهی اولیه به آرایه هاست

person p1={"Ali Ahmadi",9.75};

person list[20]={{"Ali Ahmadi",9.75},{"Reza Amini",10.0}};

خب حالا ما متغیر هایی داریم که نام و نمره افراد رو تحت یک عنوان و یک متغیر در یک بسته بندی ذخیره می کنند اگر بخواهیم محتویات این متغیر هارا جابجا کنیم در عوض جابجایی تک تک فیلد ها فقط استراکچر هارا جابجا می کنیم برای مثال می خواهیم آرایه ی لیستی را که چند خط قبل تعریف کردیم عناصر صفرم و یکمش را جابجا کنیم

person tmp;

tmp=list[0];

list[0]=list[1];

list[1]=tmp;

به همین را حتی اول یک متغیر کمکی گرفتیم و بعد عناصر نام برده را جابجا کردیم!!!

برای آرگمان توابع هم دیگه نیازی نیست به تعداد فیلدها آرگمان تعریف کنیم فقط یک آرگمان از نوع استراکچر مورد نظر تعریف میکنیم

تا اینجا توانستیم چند متغیر را از انواع مختلف را در یک بسته بندی قراردهیم و بدون اینکه نامی از محتویات بسته ها ببریم , بسته هارا جابجا کنیم و در یکدیگر کپی کنیم ام بالاخره همه این ها برای این است که بتوانیم محتویات بسته هارا بهتر استفاده کنیم پس مسلمه که نیاز به دسترسی به محتویات این بسته ها یا همان فیلده داریم برای این موضوع از عملگر نقطه استفاده میکنیم

مثال:

p1.name

P1.grade

list[0].name;

list[index].grade;

عبارات فوق برای دسترسی به نام و نمره فرد در استراکچریست که قبلاً تعریف کردیم عبارات فوق دقیقاٌ از نوع داده ای فیلدهای نام برده هستند یعنی آرایه ی کاراکتر و ممیز شناور و دقیقاً مثل انواع نام برده با آنها رفتا می شود برای مثال دستور های زیر کاملا ٌ مجاز هستند مثل انوع داده ای معمولی!!!

خواندن آرایه ی کاراکتر cin>>p1.name;

خواندن ممیز شناور cin>>p1.grade;

چاپ رشته (آرایه ی کاراکتر)cout<

چاپ ممیز شناورcout<

خواندن آرایه ی کاراکتر برای نام نفر اول لیست cin>>list[0].name;

خواندن ممیز شناور برای نمره ی نفر اندیسم لیستcin>>list[index].grade;

 

 

دریافت این پست همینه>>در یافت این پست به صورت پی.دی.اف

 

جلسه ی آینده به بررسی استراکچر ها بعنوان آرگمان توابع و اشاره گر های آنها می پردازیم بعد سعی میکنم را جع search ,sort صحبت کنم تا چیز های که تاحالا خواندیم  بخصوص استرا کچر ها یا همان ساختمان ها رو کار بردی یاد بگیریم

+ نوشته شده توسط سجاد مهدی بیرقدار در دوشنبه بیست و سوم مهر 1386 و ساعت 23:19 |

سلام

خوبین خوشین من برگشتم 

مدیریت ورودی و خروجی ها در زبان C++به عهده ی جریان های ورودی خروجی میباشد اشیا cinوcoutدر ارتباط با جریان ها هستند شیء cinدارای یک حافظه میانی است که تمام داده های ورودی از صفحه کلید را در این حافظه میانی ذخیره می نماید هنگامی که برنامه به اجرای یکی از توابع عضو یا عملگر های این شیئ می رسد ابتدا بررسی می شود که چیزی در حافظه ی میانی برای خواندن وجود دارد اگر وجود داشته باشد داده های مورد نظر توابع یا عملگرها از این حافظه میانی استخراج می شود اما اگر این حافظه خالی بود برنامه منتظر تایپ داده ها توسط کابر می ماند تا داده های جدید را در حافظه میانی قرارداده  و سپس داده های مورد نظر را استخراج نمایید.

اگرهر زمان که در حال وارد نمودن ورودی ها هستید کلید enterرا فشار دهید  یک کاراکتر اتهای خط به انتهای حافظه موقت اضاف می شود و cin به بررسی حافظه میانی می پردازد و عمل مناسبی انجام می دهد مثلا عددی را خوانده در متغییر مورد نظر کپی میکند یا مثلاً اگر چیز مناسبی برای خواندن پیدا نکرد دوباره به  شما در خواست ورودی می دهد. مثل زمانی که بدون وارد نمودن داده ای enterرا فشار دهید

برای روشن شدن مو ضوع به مثال توجه کنید.

 

char x[100];

cin.getline(x,100);

cin.getline(x,100,'.');

cin.getline(x,100,'.');

cin.getline(x,100,'.');

اولین دستور cin.getline(x,100); نسخه ی اول این تابع است که کاراکتر مرز بندی آن همان کاراکتر پایان خط یا enter است با اجرای این دستور هر چه تایپ کنید و بعد کلید enterرا فشار دهید به حافظه منتقل می شود و چون این دستور از پایان خط برای کاراکتر مرز بندی استفاده می کند هر آنچه که وارد شده در رشته ی xکپی می شود.بعد از آن دومین دستور cinاجرا می شود این دستور حافظه میانی را بررسی میکند و چیزی برای خوندن پیدا نمی کند پس منظر وارد شدن داد ها توسط کار بر میماند بیایید این دفعه با توجه این که کاراکتر مرز بندی نقطه تعریف شده یک عبارت حاوی دو نقطه وارد نماییم حالا کلید enterرا فشار می دهیم دستور cinدوم حافظه میانی را بررسی میکند این بار تا پایان اولین کاراکتر نقطه خوانده میشود و تمام آنچه که ماقبل اولین نقطه است خوانده می شود ودر رشته ی  کپی میشود حال آنچه در حافظه است دومین عبارت و نقطه دوم است. با اجرا سومین دستور cin حافظه میانی بررسی می شود چون در آن چیزهای مناسبی برای خواندن یک رشته وجود دارد دیگر از کاربر درخواست تایپ ورودی نمی شود و این دستور مانند دستور دوم تمام رشته موجود را بجر کاراکتر نقطه را در xکپی می نماید ودوباره دستور چهارم به بررسی حافظه می پردازد و چون این بار در حافظه چیزی باقی نمانده بز با در خواست تایپ ورودی رو برو می شویم.

نکته:

1.بدلیل استفاده از کازاکتر نقطه برای کاراکتر مرزبندی فشردن کلید enterدیگر اتمام عملیات تایپ ورودی شناخته نمی شود و بافشردن این کلید cinبه بررسی و جود کاراکتر مرزبندی می پردازد چون پیدایش نمی کند به در خواست تایپ ورودی ادامه می دهد. نتیجه این که رشته ای که خوانده می شود می تواند شامل کاراکتر انتهای خط باشد در واقع وقتی کلید enterرا فشار می دهید فقط به خط بعد می روید و کاراکتر پایان خط را مانند تمام کاراکتر های دیگر به رشته ی ورودی اظاف می کنید. برای پایان عمیات تایپ باید کاراکتر نقطه را تایپ کنید و بعد enterرا فشاردهید در این مرحله با فشرده شدن کلید enternدوباره cin به بررسی وجود کاراکتر مرزبندی پرداخته و آنرا پیدا نموده لذا به عملیات تایپ پایان میدهد.

 

ادامه مطلب یادتون نره

 

دانلود pdf

در یافت این جلسه به صورت پی.دی.اف


ادامه مطلب
+ نوشته شده توسط سجاد مهدی بیرقدار در جمعه سیزدهم مهر 1386 و ساعت 23:56 |
سلام

از اونجا که آپلود کامژایلر تا اطلاع ثانوی برام مقدور نیست می تونید از این وبلاگ با آدرس

http://cpp.blogfa.com/

یه کامپایلر خوب دانلود کنید نویسنده این وبلاگ توضیحات کاملی هم داده 

خیر پیش شبهای قدر ماروهم دعا کنیدا!!!!!

+ نوشته شده توسط سجاد مهدی بیرقدار در سه شنبه دهم مهر 1386 و ساعت 0:39 |

اصولا رشته ها در زبان های برنامه نویسی به دو دسته تقسیم می شوند.

1.رشته های ایستا:

   این رشته ها مقدار مشخصی از حافظه را اشغال می نمایند و از نظر طول دارای یک مقدار حد اکثری میباشند.عملیات روی این رشته ها با سرعت بیشتری انجام می شود.

2.رشته های پویا:

  این رشته ها بسته به نیاز, طولشان تغییر میکند و مقدار حافظه ای که اشغال میکنند بسته به نیاز تغییر میکند و تمام این عملیات تخصیص حافظه بدون دخالت برنامه نویس انجام میشود.عملیات روی این نوع از رشته ها سرعت کمتری نسبت به نوع قبل دارد.اما کار با آنها بسیار ساده تر است.

 

رشته های استاندارد زبان Cاز نوع اول هستند در این مبحث به بررسی این نوع رشته می پردازیم نوع دوم رشته های پویا در زبان C++تحت عنوان کلاسstring در هدر فایل string.hارائه شده که برای درک بیشتر در مباحث شی گرایی مطرح می شود.

 

رشته های استاندارد زبان C:

این رشته ها دقیقا به صورت آرایه ای از نوع کاراکتر(char) هستند اصولا برای انجام بیشتر عملیات برروی رشته ها باید روشی برای تعیین طول رشته ها داشته باشیم برای این کار دو روش وجود دارد

1.قرار دادن کاراکترNULLبا کد اسکی صفر در اولین خانه بعد از آخرین کاراکتر رشته که این دقیقاً روش مورد استفاده Cاست

2.استفاده از خانه شماره صفر آریه مورد استفاده رشته برای ذخیره طول رشته به صورت عدد که در زبان های BasicوPascalاستفاده میشود.

 

که به نظر من روش اول انعطاف بیشتری دارد هر چند کار کردن با رشته ها را مشکل تر میکند.

 

روش تعریف رشته ها :

];حداکثر طول رشته+1char str1[

این همان تعریف آرایه از نوع کاراکتر است

 

نکته:

بدلیل استفاده از آخرین خانه برای کاراکتر NULL طول آرایه همیشه باید یک واحد بیشتر از طول رشته باشد.

 

این مطلب هشت صفحه شده ادامش رو می تونید در ادمه مطلب البته بدون عکس هاش بخونید لینک دانلود پی.دی.اف هم همین جاست کامله ها


ادامه مطلب
+ نوشته شده توسط سجاد مهدی بیرقدار در چهارشنبه چهارم مهر 1386 و ساعت 0:10 |