1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش پاسکال - کار با رشته ها و فایل ها

شروع موضوع توسط minaaa ‏24/11/11 در انجمن Pascal

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    [h=2][/h]
    دستورات زير را در نظر بگيريد:

    کد:

    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)


    مثال : برنامه اي بنويسيد كه كه يك نام را از ورودي دريافت و به ما بگويد كه آيا اين نام با حرف 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); روش ديگر:” 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 <> 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=’a’ then ?if st 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=’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 دو فايل مرتب شده را با يكديگر تركيب و يك فايل مرتب شده به دست آوريم.