آموزش برنامه نویسی متلب
موضوع:ساختارها(structures) در متلب
جلسه: چهاردهم
مدرس : مدرسین جاواپرو
متلب را ساده،آسان و شیرین بنوشید!!!
تدریس خصوصی آنلاین و از راه دور متلب(MATLAB) با مدرس های حرفه ای و با تجربه [اینجا کـــــلیک کــــنید]
ساختارها یا structها آرایه هایی هستند که برای ذخیره یک گروه داده های مرتبط به کارمی وند. ساختارها همانند آرایه سلول ها میتوانند انواع مختلفی را در خود ذخیره کنند، اما برای دسترسی به محتویات یک ساختار مانند زیر عمل میکنیم:
structname.fieldname |
سمت چپ "." نام داده و سمت راست آن فیلد مربوط قرار میگیرد. فیلدها نام محل ذخیره داده های یک ساختار هستند. همانند بالا از نقطه برای ایجاد، تخصیص و دسترسی به محتویات فیلد استفاده میشود.
- مثال:
فرض کنیم قصد داریم اطلاعات یک دانشجو که شامل نام و معدل و ماتریس نمرات است را در یک متغیر student ذخیره کنیم،یک داده از نوع struct تعریف میکنیم که شامل فیلدهای name، average و grades است:
>>student.name = 'Ali'; >>student.average = 19; >>student.grades = [18 19;20 20;19.5 18]; |
برای دسترسی به مقادیر ذخیره شده در فیلدها، پس از ذکرنام متغیر و نقطه، نام فیلد مورد نظر را مینویسیم:
>>student.name ans = Ali |
حال فرض کنیم اطلاعات دانشجویان دیگر را نیز به همین ترتیب وارد کنیم، یک راه تعریف یک به یک متغیرهای جدید و راه بهتر بسط و گسترش ساختار فوق به یک آرایه ساختار است. به این شکل عمل می-کنیم:
>>student(2).name = 'hasan'; >>student(2).average = 18; >>student(2).grades = [16 18;19 19]; |
اندیس 2 بیانگر این است که یک آرایه داریم، اما آرایه ای از نوع struct:
>>student student = 1x2 struct array with fields: name average grades |
به همین ترتیب میتوان دانشجویان بیشتری تعریف کرد.
برای دسترسی به دانشجوی دوم باید از اندیس 2 استفاده کرد اما دانشجوی اول:
>>student.name ans = Ali ans = hasan |
می بینیم که دستور فوق کل اطلاعات ذخیره شده در فیلد name را برمی گرداند.پس از تعریف آرایه ساختار، برای دسترسی به اطلاعات فیلد دانشجوی اول از اندیس 1 استفاده باید کرد:
>>student(1).name ans = Ali |
اگر برای دانشجوی سومی فقط یک فیلد مثلا average را وارد کنیم:
>>student(3).average = 20 student = 1x3 struct array with fields: name average grades |
مشاهده شد که فیلدهای دیگر نیز برای این دانشجو تعریف شده ولی مقدار پیش فرض آن ماتریس تهی “[]” است:
>>student(3).name ans = [] |
- بنابراین در یک آرایه ساختار همه ساختارها از تعداد برابری فیلد برخوردارند.
- اسامی این فیلدها نیز یکسان است.
- اما فیلدهای یکسانِ ساختارهای مختلف، میتوانند نوع داده متفاوتی بگیرند:
>>student(3).name = 100; >>student.name ans = Ali ans = hasan ans = 100 |
- struct:
راه دیگر تعریف یک ساختار، استفاده از دستور فوق است:
>>s = struct S = struct with no fields |
فیلدها و مقادیر در ساختار فوق خالی بوده و مشابه قبل میتوان آنها را تعریف نمود. راه دیگر استفاده از شکل کاملتر این دستور:
>>struct(field,value) |
- مثال:
>>s = struct('name','Ali'); |
یک آرایه ساختاری به شکل زیر تعریف میشود:
>>struct(field,cell_array) |
به جای cell array یک آرایه سلولی تعریف میکنیم، مثال:
>>s = struct('name',{'Ali','Hasan'}) s = struct array with fields: name >>s.name ans = Ali ans = Hasan |
- نکته: اگر به جای cell array، از {} استفاده کنیم، یک ساختار خالی 0در0 خواهیم داشت.
ایجاد فیلدها و مقادیر مختلف با دستور struct:
>>struct(field1,value1,field2,value2,…) |
-مثال:
>>s = struct('name',{'Ali','Hasan'},'age',{23 25}) s = struct array with fields: name age |
- نکته: فیلدها از نوع رشته و مقادیر آنها از نوع سلول بوده، و درنتیجه میتوان این گونه نیز آنها را تعریف نمود:
>>field1 = 'name'; value1 = {'Ali' 'Reza'}; >>field2 = 'age'; value2 = {20 22}; >>field3 = 'height'; value3 = {180 178}; >>field4 = 'weight'; value4 = {80 65}; >>struct(field1,value1,field2,value2,field3,value3,field4,value4); ans = 1x2 struct array with fields: name age height weight |
فیلدها میتوانند حاوی مقادیر آرایه سلولی باشند:
>>field = 'colors'; >>value = {{'Red' 'Yello' 'green'}}; >>struct(field,value) ans = colors: {'Red' 'Yello' 'green' |
- دستور fieldnames(s):
ورودی آن یک structure است که در خروجی نام فیلدها را برمی گرداند:
>>fieldnames(s) ans = 'name' 'age' |
- دستور isstruct(s) :
اگر ورودی آن یک structure باشد، مقدار 1 و در غیر این صورت صفر برمی گرداند:
>>A = cell(3,2); >>s = struct; isstruct(A) ans = 0 |
- دستور isfield(s,’fieldname’):
بررسی میکند که فیلد fieldname جزو فیلدهای ساختار s است یا خیر:
>>s.temperature = [15 12 25]; >>s.humidity = [.2 .35 .11 .14 .17]; >>isfield(s,'temperature') ans = 1 >>isfield(s,'height') ans = 0 |
می توان یک آرایه سلولی از فیلدهای مختلف تشکیل داد و این آرایه را به عنوان ورودی دستور داد:
>>field = {'temperature' 'humidity' 'age' 'height'}; >>isfield(s,field) ans = 1 1 0 0 |
در خروجی یک آرایه برمی گرداند که حاوی صفر و یک هایی است که مربوط به فیلدهای موجود در s است.
- دستور rmfield(s,field):
فیلد field را از s حذف میکند. مثلا:
>>s.name = 'Ali'; >>s.age = 20; >>s.grades = [19 14 17]; >>rmfield(s,'age') ans = name: 'Ali' grades: [19 14 17] |
می توان مشابه دستور isfield یک آرایه سلولی از فیلدها را یک جا حذف نمود:
>>fields = {'name' 'age'}; >>rmfield(s,fields) ans = grades: [19 14 17] |
- دستور orderfields(s):
فیلدهای ساختار s را به ترتیب حروف الفبا مرتب میکند:
s.c = []; s.b = []; s.e = []; s.a = []; s.d = []; fieldnames(s) ans = 'c' 'b' 'e' 'a' 'd' orderfields(s) ans = a: [] b: [] c: [] d: [] e: [] |
پیروز و موفق باشید
جلسه چهاردهم | ساختارها(structures) در متلب
فرمت:PDF (لطفا در صورت خرابی لینک دانلود گزارش بدید که لینک اصلاح کنیم)
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 7 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی است
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690
بستن دیگر باز نشو! |