PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش پاسکال - کار با رشته ها و فایل ها



TAHA
10-01-2009, 05:18 PM
دستورات زير را در نظر بگيريد:



Var y۱,y۲:real;
St۱,st۲ : string;
Y۱:=۳۵۲.۷۶۸
Y۲:=۴۷۶.۳۹۵
Str(y۱:۷:۲,st۱);
Str(y۲:۳:۱,st۲);


با اجراي دستور str اول مقدار ۳۵۲.۷۶۸ به رشته ‘۳۵۲.۷۶۸′ تبديل ميشود و در st۱ قرار ميگيرد و با اجراي دستورstr دوم مقدار ۴۷۶.۳۹۵ به رشته ‘۴۷۶.۳۹۵′تبديل ميشود و در st۲ قرار ميگيرد.
جدا كردن زيررشته اي از رشته:
زيررشته بخشي از رشته است و براي جدا كردن زيررشته از رشته از تابع copy استفاده ميشودتابع copy به صورت زير به كار ميرود.



Copy (source,index,size)
S:=’I am learning pascal ‘;
S۱:=copy(s,۱۵,۶);



دستور copy باعث ميگردد تا با شروع از محل ۱۵ تعداد ۶ كاراكتر از رشته s استخراج شود و در s۱ قرار گيرد. بنابراين محتويات رشته s۱ برابر است با ‘pascal’.
الحاق رشته ها :
منظور از الحاق رشته ها اتصال رشته ها به يكديگر است به عنوان مثال اگرs۱:=’ab’ و s۲:=’cde’ الحاق دو رشته (s۱,s۲) به صورت ‘abcde’ خواهد بود براي الحاق رشته ها از تابع concat استفاده ميشود:
(اسامي رشته ها)concat
دستورات زير را در نظر بگيريد:



S۱:=’pascal’;
S۲:=’is a ;
S۳:=’language’;
S۴:=concat(s۱,s۲,s۳);


با اجراي اين دستور s۳ به انتهاي s۲ متصل ميشود و رشته نتيجه به انتهاي s۱ متصل ميگردد و در نتيجه رشته s۴ عبارت است از’pascal is a language’: . اگر طول رشته حاصل بيش از ۲۵۵ باشد بقيه كاراكترها حذف ميشوند.
جستجوي رشته اي در رشته ديگر:
براي اين كار از تابع pos استفاده ميشود كاربرذ اين تابع به صورت زير است:



Pos(s۱,s۲)


S۱ رشته اي است كه بايد در s۲ وجود داشته باشد محل اولين وقوع آن برگردانده ميشود و گر نه مقدار صفر برگردانده ميشود دستورات زير را در نظر بگيريد:



S۱:=’learning’
S۲:=’I am learning pascal’;
S۳:=’english’
X:=pos(s۱,s۲)
y:=pos(s۳,s۲)


چون رشته s۱ در s۲ وجود دارد دستور pos اول مقدار ۶ را در x قرار ميدهد و معنايش اين است كه رشته ‘learning’ در محل ۶ رشته s۲ وجود ندارد مقدار صفر در y قرار ميگيرد.
محاسبه طول رشته :
براي محاسبه طول رشته از تابع length به صورت زير استفاده ميشود:
(رشته)length
دستورات زير را در نظر بگيريد:



S۱:=’xymn’
X:=length(s۱)


چون طول رشته s۱ برابر ۴ است مقدار x برابر ۴ خواهد بود.
حذف و درج زيررشته:
زير رشته اي را ميتوان از رشته اي حذف كرد و يا زيررشته اي را ميتوان در رشته اي درج كرد براي حذف زير رشته از زيربرنامه ها به صورت زير به كار ميروند:



Delete(source,index,size)
Insert(pattern,destination,index)


در زيربرنامه delete زيررشته اي به طول size با شروع از محل index از رشته source حذف ميشود و در زيربرنامه insert زيررشته pattern با شروع از محل index در رشته destination درج ميشوددستورات زير را در نظر بگيريد:



S۱:=pas***cal
Delete(s۱,۴,۳)
S۲:=’paal’;
S۳:=’sc’;
Insert(s۳,s۲,);


دستور delete باعث ميشود تا با شروع از محل ۴ رشته s۱ حذف شده و رشته s۱ به pascalتبديل شود دستور insert موجب ميشود تا رشته s۳ در s۲ درج شود و در نتيجه رشته s۲ به ‘pascal’ تبديل شود.
مثال : برنامه اي بنويسيد كه يك اسم را از ورودي دريافت و آنرا بر عكس چاپ كند



Readln(name);
For i:=length(name) downto ۱ do
Write (name[i])


مثال : برنامه اي بنويسيد كه كه يك نام را از ورودي دريافت و به ما بگويد كه آيا اين نام با حرف a شروع ميشود يا خير؟



Readln(name);
If name[۱]=’a’ then
Writeln(’ok’)
Else
Writeln(’not ok’);


مثال : برنامه اي بنويسيد كه يك نام را از ورودي دريافت و حروف آنرا يك در ميان چاپ كند.



Readln(name);
For i:=۱ to length(name) do
If I mod ۲ = ۰ then
Writeln(name[i]);


روش ديگر:”
For i:=۱ to int(length(name)/۲) do
Writeln(name[i*۲]);


مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و متقارن بودن آنرا چك كند.
۱ ۲ ۳ ۴ ۵ ۵ ۴ ۳ ۲ ۱



var
N:string;
Begin
Readln(n);
For i:=۱ to int(length(n)/۲) do
Begin
If n[i] <> n[length(n)-i+۱] then
K:=۰;
End;
If k=۱ then
Writeln (’ok’)
Else
Writeln(’no’);
End.


مثال : برنامه اي بنويسيد كه تعداد حروف a موجود در يك رشته ورودي را بشمارد.



Var st:string;
Begin
Readln(st);
C:=۰;
For i:=۱ to length(st) do
If st[i]=’a’ then ?if st[i] in [’a',’A'] then
C:=c+۱;
Writeln(c)


مثال : برنامه اي بنويسيد كه تعداد اسامي alireza موجود در رشته را بشمارد.



Begin
Readln(st);
C:=۰;
While pos(’alireza’,st) <> ۰ do
Begin
C:=c+۱;
J:=pos(’alireza’,st);
Delete(st,pos(’ali’,st),۳);
End;
Write ( c );
End.


مثال : برنامه اي بنويسيد كه دو رشته را از ورودي دريافت و بعد از كاراكترمساوي كه در رشته اول وجود دارد رشته دوم را چاپ كند.



Readln(st,st۱);
J:=pos(’=',st);
Writeln(copy ((st,۱ j) , st۱, copy (st,j+۱,۱۰۰));


تكليف : برنامه اي بنويسيد كه با دريافت سه حرف و قرار دادن آنها در يك آرايه سه تايي كليه تركيبات ممكن را كه سه حرف تركيباتشان به هم نخورد چاپ كند.
W a x
A x w
W a x
مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و كليه كلمات موجود در آن را بشمارد.



Readln(st);
S:=۰;
St:=st+’ ‘
While pos(’ ‘,st) <> ۰ do
Begin
S;=s+۱;
Delete(st,۱,pos(’ ‘,st));
While st[۱]=’ ‘do
Delet (st,۱,۱);
End;
End.


تكليف : برنامه اي بنويسيد كه ۱۰۰ رسته را از ورودي دريافت و در يك آرايه به طول ۱۰۰ از نوع string بريزيد و به سؤالات زير جواب دهد.
۱- تعداد كل كلمات
۱- تعداد كل حروف
۲- تعداد حروف صدا دار
ذخيره اطلاعات :
Log file : فايلي است كه تمام تغييرات مربوط به يك محيط را ثبت ميكند
فايلها :
۱- متني text
۲- ركوردي typed
۳-بدون نوع
۴-untyped
معرفي فايلهاي متني :
Var
Text : نام فايل
نسبت دادن فايل :

; (’نام خارجي ,’نام فايل ) assign


مثال :



Assign(f,’c:\a۱.dat.ddd’);


باز كردن جهت خواندن

;( نام فايل)reset


باز كردن جهت نوشتن



; ( نام فايل)rewrite
) ___,نام فايل)readln
) ___,نام فايل)writeln
) نام فايل)close


تا close انجام نشود data ذخيره نميشود .
نكته بسيار مهم : در هر يك از مسائلي كه در مورد فايلها مطرح ميشود مي بايستي به نحوي از يكي از تكنيكهاي نگهداري اطلاعات در حافظه اصلي استفاده نمود اين تكنيكها ممكن است استفاده از متغيرها و آرايه ها و ماتريسها و ودرختهاو…استفاده نمود ولي تنها با دو عمل خواندن و نوشتن به روي فايل كار انجام ميشود
Update : ميخوانيم ولي دوباره ميريزيم سر جاش
Append : بهش يك چيزي اضافه ميكنيم
نكته : عمل rewrite باعث ميگردد چنانچه فايل وجود نداشته باشد ايجاد و چنانچه وجود دارد اطلاعاتش به طور كامل پاك شود.
مثال : برنامه اي بنويسيد كه۱۰۰ اسم را از ورودي دريافت و آنها را در يك فايل به نام a۱.dat))بنويسد.



Var
F:text;a:string;
Begin
Assign(f,’a۱.dat’);
Rewrite(f);
For i:=۱ to ۱۰۰ do
Readln(a);
Writeln(f,a);
End;
Close(f);
End.



مثال : برنامه اي بنويسيد كه فايل a۱.dat را خوانده و به ما بگويد چند بار اسم ali تكرار شده است؟



Var
A:text;
B:string;
Begin
Assign(a,’a۱.dat’);
Reset(a);
Sum:=۰;
For i:=۱ to ۰۰ do
Begin
Readln(a,b);
If b=’ali’ then
Sum:=sum+۱;
End;
Close(a,b);
End;



مثال : برنامه اي بنويسيد كه تعدادي اسم را كه آخرين آنها end است از ورودي دريافت و در يك فايل به نام aa.dat بريزد آنگاه فايل را بسته و قسمتهاي زير را به طور جداگانه انجام دهد.
۱- تعداد حسنها بيستر است يا علي ها
۲- چند اسم وجود دارد كه با حرف z شروع ميشود.



Var
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:=۱;
A:=۱;
Z:=۱;
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name=’ali’ then
A:=a+۱;
If name =’hassan’ then
H:=h+۱;
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+۱;
End;
Close(f);
Writeln(’sum of z is :’z);
End.


تكليف : برنامه اي بنويسيد كه تعدادي نام را از ورودي دريافت و در يك فايل بريزد سپس فايل تشكيل شده را باز كرده و از روي اين فايل دو فايل ديگر تشكيل دهيد كه در يكي از آنها اسامي كه بين a تا z قرار گرفته اند ريخته و در فايل دوم كليه اسامي كه از v تا z هستند را بريزد.



Program test;
Var
Name : string;
F,f۱,f۲:text;
Begin
Assign(f,’a.dat’);
Rewrite(f);
Writeln(’enter a name ‘);
Readln(name);
While length(name)>۰ do
Begin
Writeln(f,name);
Writeln(’enter a name’);
Readln(name);
End;
Close(f);
Reset(f);
Assign(f۱,’a۱.dat’);
Assign(f۲,’a۲.dat’);
Rewrite(f۱);
Rewrite(f۲);
While not eof (f) do
begin
Readln(f,name);
Case name[۱] of
‘a’..’u':writeln(f۱,name);
‘v’..’z':writeln(f۲,name);
end;
end;
close(f۲);
close(f۱);
close(f);
end.


تكليف : برنامه اي بنويسيد كه نام دو فايل را از ورودي دريافت و از اطلاعات داخل اين دو فايل فايل سومي تشكيل دهد كه حاصل تركيب دو فايل قبل باشد.



var
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 دو فايل مرتب شده را با يكديگر تركيب و يك فايل مرتب شده به دست آوريم.