Session 25- String.ppt

‫مجموعه و رشته‬
‫تهیه و تنظیم‪:‬‬
‫فاطمه قاسمی‬
‫دانشگاه صنعتی شریف – پاییز ‪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‬‬