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

آموزش پاسکال بخش چهارم

شروع موضوع توسط hector2141 ‏15/10/12 در انجمن Pascal

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]
    آموزش پاسکال بخش چهارم
    آرايه هاي دو بعدي در پاسکال :
    وقتي از آرايه دوبعدي استفاده ميكنيم بايد از دو حقه for به کار برد . مثال : برنامه اي بنويسيد كه نمرات 4 كلاس كه هر يك 20 دانش آموز دارد را از ورودي دريافت وتنبل ترين فرد را در اين 4 كلاس مشخص كند .


    Var A:array[1..20,1..4] of real;
    Begin
    For i:=1 to 4 do
    Begin
    For j:=1 to 20 do
    Readln(a[j, i]);
    End;
    Min:=a[1,1];
    For i:=1 to 4 do
    For j:=1 to 20 do
    If a[j,i]< min then
    Min:=a[j,i];
    Writeln(min);
    End.
    مثال : در يك آرايه 100*20دوهزار كاراكتر نگهداري ميشود برنامه اي بنويسيد كه تعداد تكرار حرف A را با a مقايسه كند و همچنين به ما بگويد آيا كاراكتر z در اين ماتريس وجود دارد ؟
    Var
    A:array[1..20,1..100] of character;
    Bool:Boolean;
    B,b1:integer;
    Begin
    For i:=1 to 100 do
    For j:=1 to 20 do
    If a[I,j]='A' then
    B:=b+1;
    If a[I,j]='a' then
    B1:=b1+1;
    If a[I,j]='z' then
    Bool:=true;
    End;
    If b>b1 then writeln('A>a');
    If b
    If b=b1 then writeln('A=a');
    If true then writeln('''z''exist');
    End.
    تكليف : ميخواهيم نام و نمره تعدادي دانش آموز يك كلاس را از ورودي دريافت كنيم و مشخص كنيم كه تنبل ترين و زرنگ ترين فرد كلاس كيست.چند نفر نمره زير 10 گرفتند؟نام كساني كه نمره آنها در بازه 17 تا 15 مي باشد ب همراه نمره آنها چاپ شود آخرين نفر نامش end است حداكثر تعداد دانش آموزان 100 نفر است .
    Var
    a:array [1..100] of string ;
    b:array[1..100] of real;
    begin
    i:=1;
    read(a[ i]);
    while a[ i]<>'end' do begin
    readln(b[ i]);
    i:=i+1;
    readln(a[ i]);
    end;
    j:=i-1;
    min:=a[1];
    max:=a[1];
    for i:= 2 to j do
    begin
    if b[ i] >max then
    begin
    max:=b[ i];
    name:a[ i];
    end;
    end
    writeln(name);
    count:=0;
    for i:=1 to j do
    if b[i ]<=10 then
    count:=count+1;
    writeln(count);
    for i:=1 to j do
    if (b[ i]<17) and (b[ i]>15) then
    write(b[ i],a[ i]);
    end.

    تكليف : برنامه اي بنويسيد كه حاصل اين عبارت را حساب كند .
    i/i!=1/1!+2/2!+3/3!+4/4!+5/5!
    N!= 1*2*3*4*…*n
    Begin
    Sum:=0;
    For n:=1 to 5 do
    Begin
    For m:=1 to n do
    F:=f*m;
    Sum:=sum+n/f;
    End;
    Writeln(sum);
    End .
    تكليف : برنامه اي بنويسيد كه نمرات 80 دانش آموز را كه در چهار كلاس دسته بنده شده اند را از ورودي دريافت كند سپس به سوالات زير جواب دهد .
    معدل هر يك از كلاسها
    نمره تنبل ترين و زرنگترين شخص در هر كلاس به طور جداگانه
    Var
    A:array [1..4,1..20] of real;
    Begin
    For i:=1 to 4 do
    For j:=1 to 20 do
    Begin
    Writeln('please enter nomreh');
    Readln(a[I,j]);
    End;
    For i:=1 to 4 do
    Begin
    Sum:=0 ;
    For j:=1 to 20 do
    Begin
    Sum:=a[I,j]+sum;
    End;
    Writeln(sum/20,'average of this class');
    End;
    For i:=1 to 4 do
    Begin
    Max :=a[1,1];
    Min:=a[1,1];
    For j:=2 to 20 do
    Begin
    If a[I,j]>max then
    Max :=a[I,j];
    End;
    Writeln(I,min,max);
    End;
    End.
    String :
    String آرايه اي از كاراكترهاست .اغلب لازم است كاراكترهايي در رشته موجود درج شوندو يا كاراكترهايي به جاي بخشي از رشته نوشته شوند , زيررشته اي در رشته جستجو گردد و يا دو رشته با هم الحاق شوند .
    رشته تهي : طول رشته ثابت نيست و با داداه هايي كه در آن ذخيره شده است مشخص مي گردد.كاراكترهايي كه در رشته قرار مي گيرد از حداكثر طولي كه براي آن تعيين ميشود بيشتر نخواهد بود. اگر name رشته كاراكتري باشد دستور زير name را به رشته تهي تبديل ميكند :
    Name:='';
    تبديل رشته به اعداد :
    در پاسكال زير برنامه هايي وجود دارند كه به آساني ميتوانند رشته ها را پردازش كنند. زيربرنامه val رشته عددي را گرفته به مقدار عددي تبديل ميكند .
    رشته عددي رشته اي است كه حاوي كاراترهاي '0' تا '9' و نقطه مميز باشد مثل '12.5' و'13.5' زيربرنامه val به صورت زير به كار ميرود .
    Val (st,number,error)
    St رشته اي است كه بايد به عدد تبديل شود و number متغيري است كه رشته تبديل شده به عدد در آن قرار ميگيرد. چنانچه در رشته st كاراكتر نا معتبري (كاراكترهاي غير از( '0' تا '9' و'.' ) , محل وجود آن كاراكتر در پارامتر error قرار ميگيرد. اگر error برابر با صفر باشد معنايش اينست كه كاراكتر نا معتبري وجود ندارد. اگر number از نوع صحيح باشد st به مقدار صحيح و اگر number از نوع اعشاري باشد st به مقدار اعشاري تبديل ميشود .
    مثال زير را در نظر بگيريد :
    Var st :string;
    Num,e:integer;
    St:='352';
    Val (st,num,e);
    مقدار 352 در متغير num ومقدار صفر در متغير e قرار ميگيرد اكنون دستورات زير را در نظر بگيريد :
    St:='35#'2;
    Val (st,num,e);
    با اجراي دستور val به دليل وجود كاراكتر ' # ' كه كاراكتر نامعتبري در اعداد است عدد 2 در متغير e قرار ميگيرد و معنايش اينست كه كاراكتر شماره 2 ( شماره گذاري از صفر شروع ميشود) نامعتبر است و عمل تبديل صورت نميگيرد و مقدار num تعريف نشده است .
    تبديل عدد به رشته :
    براي تبديل مقدار عددي به رشته عددي از زيربرنامهstr استفادهميشود و به صورت زير به كار ميرود :
    Str (number : format,numstring)
    با اين دستور مقداري كه در number قرار دارد به رشته اي به طول format تبديل ميشود و در رشته numstring قرار ميگيرد . دستورات زير را در نظر بگيريد :
    Var x:integer;
    St:string;
    X=352;
    Str(x:5,st);
    با اجراي اين دستور مقدار 352 به رشته '352' تبديل شده در st قرار ميگيرد
    دستورات زير را در نظر بگيريد :
    Var y1,y2:real;
    St1,st2 : string;
    Y1:=352.768
    Y2:=476.395
    Str(y1:7:2,st1);
    Str(y2:3:1,st2);
    با اجراي دستور str اول مقدار 352.768 به رشته '352.768' تبديل ميشود و در st1 قرار ميگيرد و با اجراي دستورstr دوم مقدار 476.395 به رشته '476.395'تبديل ميشود و در st2 قرار ميگيرد .
    جدا كردن زيررشته اي از رشته :
    زيررشته بخشي از رشته است و براي جدا كردن زيررشته از رشته از تابع copy استفاده ميشودتابع copy به صورت زير به كار ميرود .
    Copy (source,index,size)
    S:='I am learning pascal ';
    S1:=copy(s,15,6);
    دستور copy باعث ميگردد تا با شروع از محل 15 تعداد 6 كاراكتر از رشته s استخراج شود و در s1 قرار گيرد. بنابراين محتويات رشته s1 برابر است با 'pascal'.
    الحاق رشته ها :
    منظور از الحاق رشته ها اتصال رشته ها به يكديگر است به عنوان مثال اگرs1:='ab' و s2:='cde' الحاق دو رشته (s1,s2) به صورت 'abcde' خواهد بود براي الحاق رشته ها از تابع concat استفاده ميشود :
    (اسامي رشته ها )concat
    دستورات زير را در نظر بگيريد :
    S1:='pascal';
    S2:='is a ;
    S3:='language';
    S4:=concat(s1,s2,s3);
    با اجراي اين دستور s3 به انتهاي s2 متصل ميشود و رشته نتيجه به انتهاي s1 متصل ميگردد و در نتيجه رشته s4 عبارت است از 'pascal is a language': . اگر طول رشته حاصل بيش از 255 باشد بقيه كاراكترها حذف ميشوند .
    جستجوي رشته اي در رشته ديگر :
    براي اين كار از تابع pos استفاده ميشود كاربرذ اين تابع به صورت زير است :
    Pos(s1,s2)
    S1 رشته اي است كه بايد در s2 وجود داشته باشد محل اولين وقوع آن برگردانده ميشود و گر نه مقدار صفر برگردانده ميشود دستورات زير را در نظر بگيريد :
    S1:='learning'
    S2:='I am learning pascal';
    S3:='english'
    X:=pos(s1,s2)
    y:=pos(s3,s2)
    چون رشته s1 در s2 وجود دارد دستور pos اول مقدار 6 را در x قرار ميدهد و معنايش اين است كه رشته 'learning' در محل 6 رشته s2 وجود ندارد مقدار صفر در y قرار ميگيرد .
    محاسبه طول رشته :
    براي محاسبه طول رشته از تابع length به صورت زير استفاده ميشود :
    (رشته )length
    دستورات زير را در نظر بگيريد :
    S1:='xymn'
    X:=length(s1)
    چون طول رشته s1 برابر 4 است مقدار x برابر 4 خواهد بود .
    حذف و درج زيررشته :
    زير رشته اي را ميتوان از رشته اي حذف كرد و يا زيررشته اي را ميتوان در رشته اي درج كرد براي حذف زير رشته از زيربرنامه ها به صورت زير به كار ميروند :
    Delete(source,index,size)
    Insert(pattern,destination,index)
    در زيربرنامه delete زيررشته اي به طول size با شروع از محل index از رشته source حذف ميشود و در زيربرنامه insert زيررشته pattern با شروع از محل index در رشته destination درج ميشود دستورات زير را در نظر بگيريد :
    S1:=pas***cal
    Delete(s1,4,3)
    S2:='paal';
    S3:='sc';
    Insert(s3,s2,);
    دستور delete باعث ميشود تا با شروع از محل 4 رشته s1 حذف شده و رشته s1 به pascalتبديل شود دستور insert موجب ميشود تا رشته s3 در s2 درج شود و در نتيجه رشته s2 به 'pascal' تبديل شود .
    مثال : برنامه اي بنويسيد كه يك اسم را از ورودي دريافت و آنرا بر عكس چاپ كند
    Readln(name);
    For i:=length(name) downto 1 do
    Write (name[ i])
    مثال : برنامه اي بنويسيد كه كه يك نام را از ورودي دريافت و به ما بگويد كه آيا اين نام با حرف a شروع ميشود يا خير؟
    Readln(name);
    If name[1]='a' then
    Writeln('ok')
    Else
    Writeln('not ok');
    مثال : برنامه اي بنويسيد كه يك نام را از ورودي دريافت و حروف آنرا يك در ميان چاپ كند .
    Readln(name);
    For i:=1 to length(name) do
    If I mod 2 = 0 then
    Writeln(name[ i]);
    روش ديگر :"
    For i:=1 to int(length(name)/2) do
    Writeln(name[ i*2]);
    مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و متقارن بودن آنرا چك كند .
    1 2 3 4 5 5 4 3 2 1
    var
    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 موجود در يك رشته ورودي را بشمارد .
    Var st:string;
    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 موجود در رشته را بشمارد .
    Begin
    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.
    مثال : برنامه اي بنويسيد كه دو رشته را از ورودي دريافت و بعد از كاراكترمساوي كه در رشته اول وجود دارد رشته دوم را چاپ كند .
    Readln(st,st1);
    J:=pos('=',st);
    Writeln(copy ((st,1 j) , st1, copy (st,j+1,100));
    تكليف : برنامه اي بنويسيد كه با دريافت سه حرف و قرار دادن آنها در يك آرايه سه تايي كليه تركيبات ممكن را كه سه حرف تركيباتشان به هم نخورد چاپ كند .
    W a x
    A x w
    W a x
    مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و كليه كلمات موجود در آن را بشمارد .
    Readln(st);
    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.
    تكليف : برنامه اي بنويسيد كه 100 رسته را از ورودي دريافت و در يك آرايه به طول 100 از نوع string بريزيد و به سؤالات زير جواب دهد .