مجموعه و رشته تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86 1 مروری بر مطالب در این جلسه با دو نوع مجموعه و رشته آشنا می شویم. 2 مجموعه Type set type = set of base type Type ’letterset = set of ‘A’..’z شناسه set typeاز روی مقادیر مشخص شده در base typeتعیین می شود. متغیری که از نوع set typeتعریف می شود مجموعه ای است که اعضای آن از مقادیر base typeانتخاب می شوند. نوع base typeباید یک نوع ترتیبی باشد 3 مجموعه (ادامه) تعداد مقادیر base typeاز یک مجموعه را محدود می کنند. توربو پاسکال این تعداد را به اندازه تعداد مقادیر char ( )256محدود می کند. می توان set of charرا تعریف کرد نمی توان set of integerرا تعریف کرد. می توان یک زیربازه از نوع integerتا 256مقدار استفاده کنید 4 عملیات بر روی مجموعه انتساب Type digits = set of 0..9; Var odds,even:digits; Odds := [1,3,5,7]; Evens:=[0,2,4,6,8]; None :=[]; General :=[0..9]; 5 )عملیات بر روی مجموعه (ادامه . دارای الویت یکسان با عملگرهای رابطه ای است: عضویت در مجموعه Type cars = (dodge, ford, lincoln, cadilac, fiesta, pontiac, buick,chevrolet); carSet = set of cars; Var X, Y, Z : carSet; ch : char; Begin X:=[ford,chevrolet, fiesta]; if cadilac in X then write (‘it owes cadilac’); read(ch); if ch in [‘e’,’E’,’w’] then … End. 6 عملیات بر روی مجموعه (ادامه) اجتماع ،اشتراک و تفاضل دو مجموعه (با اعضای سازگار) عملگرهای +و * موقعی که عملوندهایشان از نوع realیا integerباشند ،عملیات محاسباتی را مشخص می کنند و اگر مجموعه باشند ،عملیات روی مجموعه را مشخص می کنند. ][1,3,5]+[2,3] = [1,2,3,5 ][1,3,5]*[2,3]=[3 ][1,3,5]-[2,3] = [1,5 7 عملیات بر روی مجموعه (ادامه) عملگرهای رابطه ای ؛ تساوی و زیر مجموعه ][1,3] = [3,1 ][1,3] <= [1,2,3,4 ][] <= [1,3 8 عملیات بر روی مجموعه (ادامه) خواندن و نوشتن مجموعه ها با استفاده از رویه های readو writeنمی توان مجموعه ای را از ورودی دریافت کرد و یا در خروجی نوشت. راه حل :باید خودمان رویه مناسب برای یک تابع را بنویسیم. کنجکاوی :رویه ای برای دریافت مجموعه ای از charاز ورودی بنویسید. 9 رشته . با طول متغیر استchar رشته یک نوع آرایه از Var sentence : string; fix_sentence : array[1..5] of char; Begin sentence := ‘I am fine’; fix_sentence := ‘hello’; sentence := ‘I am not fine now’; end; 10 عملیات بر روی رشته )Upcase(s حروف کوچک در رشته ورودی را به حروف بزرگ تبدیل می کند. )Str (Integer or real:format, String یک نوع داده صحیح را به نوع داده رشته معادلش تبدیل می کند. ;) Str(108765,sبعد از اجرا مقدار sبرابر ’ ‘108765است. ) Str(345.126:7:2,sبعد از اجزا sبرابر ’ ‘345.126است. ) Str(345.126:3:1,sبعد از اجزا sبرابر ’ ‘345.1است. 11 عملیات بر روی رشته (ادامه) )Val(String, Integer or real,integer یک نوع داده رشته را به نوع داده صحیح با حقیقی معادلش تبدیل می کند .در صورتی که رشته معتبر باشد ،مقدار پارامتر سوم صفر خواهد بود و در غیر اینصورت مکان اولین charنامعتبر را مشخص می کند. نکته :عدد بدست آمده باید در دامنه پارامتر دوم صدق کند Val(‘1234’,IntNum, error) IntNum =1234 error = 0 ?=Val(’12#34’,IntNum,error) IntNum error=3 12 عملیات بر روی رشته (ادامه) زیررشته ها و تابع copy )Copy (source, index, size از رشته sourceاز مکان عنصر indexبه اندازه sizeجدا می کند و بر می گرداند .اگر indexبیشتر از اندازه رشته ورودی باشد تهی برمی گرداند و اگر اندازه sizeاز بقیه رشته بیشتر باشد ،فقط بقیه رشته را برمی گرداند. 13 برنامه ای بنویسید که کلمات موجود در: مثال .رشته ورودی هر کدام را در یک خط چاپ کند Const blank=‘ ‘; Var s,word : string; next,first : integer; Begin first := 1; for next:=1 to length(s) do if s[next]=blank then begin word := copy(s,first,next-first); if word<>’’ then writeln(word); first := next+1; end; end; writeln(copy(s,first,length(s)-first+1); {print the last word!} End; 14 عملیات بر روی رشته (ادامه) متصل کردن رشته ها به یکدیگر ) Concat(string listآرگمان های رشته ای به ترتیب به یکدیگر وصل می شوند. اگر رشته نتیجه بلندتر از 255کاراکتر باشد ،بقیه کاراکترها حذف می شوند. مثال :وارونه کردن رشته با استفاده از concat ;Function reverse(s : string) :string ;var temp: string; i: integer begin ;’‘=temp : For i:=length(s) downto 1 do ;)]temp:= concat(temp,s[i ;Reverse := temp 15 ;End عملیات بر روی رشته (ادامه) ) Pos(pattern,sourceرشته sourceاز چپ به راست با تعیین اولین رخداد زیر رشته patternآزمایش می شود .اگر patternپیدا شود ،مقدار بازگردانده موقعیت اولین کاراکتر Patternدر Source است ،وگرنه صفر برمی گرداند. ) Delete(source,index,sizeکاراکترهایی به تعداد sizeاز رشته sourceاز موقعیت indexحذف می شود .اگر Indexبزرگتر از طول sourceباشد ،هیچ کاراکتری حذف نمی شود .اگر sizeاز باقیمانده رشته بیشتر باشد ،فقط باقیمانده رشته را حذف می کند. ) Insert(pattern,destination,indexرشته patternقبل از کاراکترهای فعلی در موقعیت indexدرج می شود .اگر طول رشته بیشتر ازط 255شود ،بقیه رشته از موقعیت Indexحذف می شود. 16 تابع های مرور شده . به پارامترهای ارزشی و متغیری توجه کنید Procedure str(x[:width[:decimals]]; var s:string); Procedure val(s:string; var v:interger or real; var error: integer); Function concat(s1 [,s2,…,sn]:string):string Function copy(source:string; index:integer; count:integer):string; Function pos(pattern:string; source:string):byte; Procedure Insert(pattern : string; var destination : string; Index : integer); Procedure delete(var source:string; index:integer; size:integer); 17 خطاهای متداول در استفاده از مجموعه قبل از استفاده الزم است مقدار دهی اولیه شود. به پارامترهای ارزشی و متغیری و همچنین ترتیب پارامترها در استفاده از توابع و رویه های رشته ها توجه کنید! 18
© Copyright 2025 Paperzz