St1,st2 : string;
Y1:=352.768
Y2:=476.395
Str(y1:7:2,st1);
Str(y2:3:1,st2);
با اجرای دستور str اول مقدار ۳۵۲٫۷۶۸ به رشته ’۳۵۲٫۷۶۸′ تبدیل میشود و در st1 قرار میگیرد و با اجرای دستورstr دوم مقدار ۴۷۶٫۳۹۵ به رشته ’۴۷۶٫۳۹۵′تبدیل میشود و در st2 قرار میگیرد.
جدا کردن زیررشته ای از رشته:
زیررشته بخشی از رشته است و برای جدا کردن زیررشته از رشته از تابع copy استفاده میشودتابع copy به صورت زیر به کار میرود.
S:=’I am learning pascal ‘;
S1:=copy(s,15,6);
دستور copy باعث میگردد تا با شروع از محل ۱۵ تعداد ۶ کاراکتر از رشته s استخراج شود و در s1 قرار گیرد. بنابراین محتویات رشته s1 برابر است با ‘pascal’.
الحاق رشته ها :
منظور از الحاق رشته ها اتصال رشته ها به یکدیگر است به عنوان مثال اگرs1:=’ab’ و s2:=’cde’ الحاق دو رشته (s1,s2) به صورت ‘abcde’ خواهد بود برای الحاق رشته ها از تابع concat استفاده میشود:
(اسامی رشته ها)concat
دستورات زیر را در نظر بگیرید:
S2:=’is a ;
S3:=’language’;
S4:=concat(s1,s2,s3);
با اجرای این دستور s3 به انتهای s2 متصل میشود و رشته نتیجه به انتهای s1 متصل میگردد و در نتیجه رشته s4 عبارت است از’pascal is a language’: . اگر طول رشته حاصل بیش از ۲۵۵ باشد بقیه کاراکترها حذف میشوند.
جستجوی رشته ای در رشته دیگر:
برای این کار از تابع pos استفاده میشود کاربرذ این تابع به صورت زیر است:
S1 رشته ای است که باید در s2 وجود داشته باشد محل اولین وقوع آن برگردانده میشود و گر نه مقدار صفر برگردانده میشود دستورات زیر را در نظر بگیرید:
S2:=’I am learning pascal’;
S3:=’english’
X:=pos(s1,s2)
y:=pos(s3,s2)
چون رشته s1 در s2 وجود دارد دستور pos اول مقدار ۶ را در x قرار میدهد و معنایش این است که رشته ‘learning’ در محل ۶ رشته s2 وجود ندارد مقدار صفر در y قرار میگیرد.
محاسبه طول رشته :
برای محاسبه طول رشته از تابع length به صورت زیر استفاده میشود:
(رشته)length
دستورات زیر را در نظر بگیرید:
X:=length(s1)
چون طول رشته s1 برابر ۴ است مقدار x برابر ۴ خواهد بود.
حذف و درج زیررشته:
زیر رشته ای را میتوان از رشته ای حذف کرد و یا زیررشته ای را میتوان در رشته ای درج کرد برای حذف زیر رشته از زیربرنامه ها به صورت زیر به کار میروند:
Insert(pattern,destination,index)
در زیربرنامه delete زیررشته ای به طول size با شروع از محل index از رشته source حذف میشود و در زیربرنامه insert زیررشته pattern با شروع از محل index در رشته destination درج میشوددستورات زیر را در نظر بگیرید:
Delete(s1,4,3)
S2:=’paal’;
S3:=’sc’;
Insert(s3,s2,);
دستور delete باعث میشود تا با شروع از محل ۴ رشته s1 حذف شده و رشته s1 به pascalتبدیل شود دستور insert موجب میشود تا رشته s3 در s2 درج شود و در نتیجه رشته s2 به ‘pascal’ تبدیل شود.
مثال : برنامه ای بنویسید که یک اسم را از ورودی دریافت و آنرا بر عکس چاپ کند
For i:=length(name) downto 1 do
Write (name[i])
مثال : برنامه ای بنویسید که که یک نام را از ورودی دریافت و به ما بگوید که آیا این نام با حرف a شروع میشود یا خیر؟
If name[1]=’a’ then
Writeln(‘ok’)
Else
Writeln(‘not ok’);
مثال : برنامه ای بنویسید که یک نام را از ورودی دریافت و حروف آنرا یک در میان چاپ کند.
For i:=1 to length(name) do
If I mod 2 = 0 then
Writeln(name[i]);
روش دیگر:”
Writeln(name[i*2]);
مثال : برنامه ای بنویسید که یک رشته را از ورودی دریافت و متقارن بودن آنرا چک کند.
۱ ۲ ۳ ۴ ۵ ۵ ۴ ۳ ۲ ۱
N:string;
Begin
Readln(n);
For i:=1 to int(length(n)/2) do
Begin
If n[i] <> n[length(n)-i+1] then
K:=0;
End;
If k=1 then
Writeln (‘ok’)
Else
Writeln(‘no’);
End.
مثال : برنامه ای بنویسید که تعداد حروف a موجود در یک رشته ورودی را بشمارد.
Begin
Readln(st);
C:=0;
For i:=1 to length(st) do
If st[i]=’a’ then ?if st[i] in ['a','A'] then
C:=c+1;
Writeln(c)
مثال : برنامه ای بنویسید که تعداد اسامی alireza موجود در رشته را بشمارد.
Readln(st);
C:=0;
While pos(‘alireza’,st) <> 0 do
Begin
C:=c+1;
J:=pos(‘alireza’,st);
Delete(st,pos(‘ali’,st),3);
End;
Write ( c );
End.
مثال : برنامه ای بنویسید که دو رشته را از ورودی دریافت و بعد از کاراکترمساوی که در رشته اول وجود دارد رشته دوم را چاپ کند.
J:=pos(‘=’,st);
Writeln(copy ((st,1 j) , st1, copy (st,j+1,100));
تکلیف : برنامه ای بنویسید که با دریافت سه حرف و قرار دادن آنها در یک آرایه سه تایی کلیه ترکیبات ممکن را که سه حرف ترکیباتشان به هم نخورد چاپ کند.
W a x
A x w
W a x
مثال : برنامه ای بنویسید که یک رشته را از ورودی دریافت و کلیه کلمات موجود در آن را بشمارد.
S:=0;
St:=st+’ ‘
While pos(‘ ‘,st) <> 0 do
Begin
S;=s+1;
Delete(st,1,pos(‘ ‘,st));
While st[1]=’ ‘do
Delet (st,1,1);
End;
End.
تکلیف : برنامه ای بنویسید که ۱۰۰ رسته را از ورودی دریافت و در یک آرایه به طول ۱۰۰ از نوع string بریزید و به سؤالات زیر جواب دهد.
۱- تعداد کل کلمات
۱- تعداد کل حروف
۲- تعداد حروف صدا دار
ذخیره اطلاعات :
Log file : فایلی است که تمام تغییرات مربوط به یک محیط را ثبت میکند
فایلها :
۱- متنی text
2- رکوردی typed
3-بدون نوع
۴-untyped
معرفی فایلهای متنی :
Var
Text : نام فایل
نسبت دادن فایل :
مثال :
باز کردن جهت خواندن
باز کردن جهت نوشتن
) ___,نام فایل)readln
) ___,نام فایل)writeln
) نام فایل)close
تا close انجام نشود data ذخیره نمیشود .
نکته بسیار مهم : در هر یک از مسائلی که در مورد فایلها مطرح میشود می بایستی به نحوی از یکی از تکنیکهای نگهداری اطلاعات در حافظه اصلی استفاده نمود این تکنیکها ممکن است استفاده از متغیرها و آرایه ها و ماتریسها و ودرختهاو…استفاده نمود ولی تنها با دو عمل خواندن و نوشتن به روی فایل کار انجام میشود
Update : میخوانیم ولی دوباره میریزیم سر جاش
Append : بهش یک چیزی اضافه میکنیم
نکته : عمل rewrite باعث میگردد چنانچه فایل وجود نداشته باشد ایجاد و چنانچه وجود دارد اطلاعاتش به طور کامل پاک شود.
مثال : برنامه ای بنویسید که۱۰۰ اسم را از ورودی دریافت و آنها را در یک فایل به نام a1.dat))بنویسد.
F:text;a:string;
Begin
Assign(f,’a1.dat’);
Rewrite(f);
For i:=1 to 100 do
Readln(a);
Writeln(f,a);
End;
Close(f);
End.
مثال : برنامه ای بنویسید که فایل a1.dat را خوانده و به ما بگوید چند بار اسم ali تکرار شده است؟
A:text;
B:string;
Begin
Assign(a,’a1.dat’);
Reset(a);
Sum:=0;
For i:=1 to 00 do
Begin
Readln(a,b);
If b=’ali’ then
Sum:=sum+1;
End;
Close(a,b);
End;
مثال : برنامه ای بنویسید که تعدادی اسم را که آخرین آنها end است از ورودی دریافت و در یک فایل به نام aa.dat بریزد آنگاه فایل را بسته و قسمتهای زیر را به طور جداگانه انجام دهد.
۱- تعداد حسنها بیستر است یا علی ها
۲- چند اسم وجود دارد که با حرف z شروع میشود.
f:text;
Name:string;
Begin
Assign(f,’aa.dat’);
Rewrite(f);
Readln(name);
While name<> ‘end’ do
Begin
Writeln(f,name);
Readln(name);
End;
Close(f);
H:=1;
A:=1;
Z:=1;
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name=’ali’ then
A:=a+1;
If name =’hassan’ then
H:=h+1;
End;
Close(a);
If h>a then writeln(‘h>a’);
If h If h=a then writeln(‘h=a’);
End;
Close(f);
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name[i]=’z’ then
Z;=z+1;
End;
Close(f);
Writeln(‘sum of z is :’z);
End.
تکلیف : برنامه ای بنویسید که تعدادی نام را از ورودی دریافت و در یک فایل بریزد سپس فایل تشکیل شده را باز کرده و از روی این فایل دو فایل دیگر تشکیل دهید که در یکی از آنها اسامی که بین a تا z قرار گرفته اند ریخته و در فایل دوم کلیه اسامی که از v تا z هستند را بریزد.
Var
Name : string;
F,f1,f2:text;
Begin
Assign(f,’a.dat’);
Rewrite(f);
Writeln(‘enter a name ‘);
Readln(name);
While length(name)>0 do
Begin
Writeln(f,name);
Writeln(‘enter a name’);
Readln(name);
End;
Close(f);
Reset(f);
Assign(f1,’a1.dat’);
Assign(f2,’a2.dat’);
Rewrite(f1);
Rewrite(f2);
While not eof (f) do
begin
Readln(f,name);
Case name[1] of
‘a’..’u':writeln(f1,name);
‘v’..’z':writeln(f2,name);
end;
end;
close(f2);
close(f1);
close(f);
end.
تکلیف : برنامه ای بنویسید که نام دو فایل را از ورودی دریافت و از اطلاعات داخل این دو فایل فایل سومی تشکیل دهد که حاصل ترکیب دو فایل قبل باشد.
h,f,g:text;
a:string;
begin
writeln(‘enter first filename’) ;
readln(a);
assign(h,a);
writeln(‘enter second filename’) ;
readln(a);
assign(f,a);
reset(h);
reset(f);
assign(g,’out.dat’);
rewrite(g);
while not eof(h) do
begin
readln(h,a);
writeln(g,a);
end;
while not eof(f) do
begin
readln(f,a);
writeln(g,a);
end;
close(f);
close(h);
close(g);
End.
تکلیف :برنامه ای بنویسید که در ضمن عمل merge دو فایل مرتب شده را با یکدیگر ترکیب و یک فایل مرتب شده به دست آوریم.