İsmayıl Sadıqov Ramin Mahmudzadə


Aşağıdakı proqram fraqmentinin icrasından sonra



Yüklə 0,52 Mb.
səhifə5/9
tarix09.12.2016
ölçüsü0,52 Mb.
1   2   3   4   5   6   7   8   9

Aşağıdakı proqram fraqmentinin icrasından sonra L dəyişəninin qiyməti nə ola-caq? Düzgün cavabı seçin.

var a: array [1..4, 1..4] of integer; L, f, g, v: integer;

L := 0;

for g := 1 to 4 do begin

v := 0;

for f := 1 to 4 do

if a[f,g] < 0 then v:= v + 1;

L := L + v; end;

    1. amassivində müsbət elementlərin sayı

    2. amassivində müsbət olmayan elementlərin sayı

    3. amassivində mənfi elementlərin sayı

    4. amassivinin birinci sətrindəki mənfi elementlərin sayı


    5. image35
      amassivinin sütunundakı mənfi elementlərin maksimal sayı


SƏTİRLƏRLƏ İŞ

Proqramlaşdırma dillərinin hamısında simvollar ardıcıllığı, başqa sözlə, sətir-lərlə iş nəzərdə tutulub.

Sətir konstantla, yaxud dəyişənin qiymətilə verilə bilər. Pascal dilində sətirkonstantı apostrofa alınmış simvollar ardıcıllığı kimi verilir:

'Pascal' '1234'

'Araz çayı'

''ardıcıllığı uzunluğu sıfır olan xüsusi sətir konstantıdır. Belə sətrə boş sətirdeyilir.

Sətrin maksimal uzunluğu konkret proqramlaşdırma dilindən, yaxud verilmişdilin konkret translyatorundan asılıdır. Müasir proqramlaşdırma sistemlərindəsətirlərin uzunluğuna praktik olaraq hədd qoyulmur.

Turbo Pascal dilində sətir dəyişənləristringtipinə malikdir. Məsələn, proq-ramda

var a: string;

təsviria-nın sətir dəyişəni olduğunu bildirir.

Sətirlərlə əməliyyatlar ədədlərlə yerinə yetirilən əməliyyatlardan fərqlənir.Sətirlərin toplanması və ya çıxılmasının, vurulması və ya bölünməsinin elə birmənası yoxdur. Sətirlər üzərində aparılan əsas əməliyyat sətirlərin birləşdiril-məsi, yaxud konkatenasiyasıdır. Bu əməliyyat nəticəsində ikinci sətir birinci sət-rin sonuna birləşdirilir. Konkatenasiya əməli + (plyus) simvolu ilə işarə olunur.

var a, man: string;

man := 'On'; a := man + ' manat';

Əməl işarələri eyni olsa da, (+) birləşdirmə əməli toplama əməlindən fərqlə-

nir.

Sətirləri birləşdirmək üçünConcatfunksiyasından da istifadə olunur.Məsələn,




1.11.
a := Concat(man, ' manat');

Əslində sətirlər üzərində əməllər ədədlər üzərindəki əməllərdən daha çoxdur.Ancaq burada hər hansı əməl işarəsindən istifadə o qədər də əlverişli deyil vəqeyri-adidir. Ona görə də qalan sətir əməlləri, adətən, standart funksiyalar vasi-təsilə yerinə yetirilir. Proqramlaşdırma dillərinin əksəriyyətində aşağıdakı əmə-liyyatlar mümkündür:



  • sətrin uzunluğunun müəyyənləşdirilməsi;

  • alt sətrin seçilməsi;

  • simvolların artırılması, yaxud uzaqlaşdırılması;

  • sətirdə simvolun axtarılması;

  • sətirdəki simvolların (hərfbrin) registrinin dəyişdirilməsi.

Bu göstərilən və bəzi başqa əməliyyatları yerinə yetirmək üçün Turbo Pascaldilində nəzərdə tutulmuş funksiyalarla tanış olaq.

  • Length (St).Bu funksiyaStsətrinin uzunluğunu hesablayır. Sətrin uzun-luğu dedikdə həmin sətirdə olan simvolların sayı nəzərdə tutulur. Boş sətrinuzunluğu 0-a bərabərdir. Hər hansıSsətrinin uzunluğunu hesablayıbLenS dəyişəninə mənimsətmək əməlini

LenS := Length(S);

operatoru kimi yazmaq lazımdır.



S := 'Hello'; L := Length(S);

WriteLn(L); { Çıxışa 5 qiyməti veriləcək }

S := 'Hello Students';

WriteLn(Length(S)); { Çıxışa 14 qiyməti veriləcək }

S := ' '; { Boş sətir }

WriteLn(Length(S)); { Çıxışa 0 qiyməti veriləcək }

  • Copy (St,Index,Count).Bəzən sətrin müəyyən hissəsini ayırıb götürmək la-zım gəlir. Məsələn, əgərDatedəyişəninə mənimsədilmiş'17 may 2008'sət-rindəki üç komponenti (gün, ay, il) ayrı-ayrı emal etmək tələb olunursa, bunuCopyfunksiyası vasitəsilə etmək mümkündr.

Tutaq ki, proqramda tarix sətri GG AAA İİİİ formatındadır. (Burada GG -ayın gününü (1-2-ci simvollar), AAA - ayın adının qısaldılması (4-6-cı sim-vollar) və İİİİ - ili (8-11-ci simvollar) göstərir). ƏgərDate, Month, DayYearsətir dəyişənləridirsə, aşağıdakı operatorDaydəyişəninəDatesətrininbirinci simvolundan başlayaraq iki ardıcıl simvol ('17') mənimsədəcək.

Day := Copy (Date, 1, 2);

Eyni qayda ilə ayı göstərən alt sətir ('may')Monthdəyişəninə, ili bildirənalt sətir ('2008') isəYeardəyişəninə mənimsədilir.



Month := Copy (Date, 4, 3);

Year := Copy (Date, 8, 4);

Insert (Subst,St,Index).Bu prosedurStsətrinəIndexmövqeyindən başla-yaraqSubstsətrini artırır. Məsələn,

Insert ('p', 'Alay', 3) prosedurunun icrasından sonra

'Alay' sətri'Alpay' sətrinə çevriləcək

  • Delete (St,Index,Count).

  • Bu prosedurStsətrininIndexmövqeyindən baş-layaraqCountsayda simvolu silir. Məsələn,Delete ('Alqoritm',1,4)prosedu-runun tətbiqi nəticəsində'Alqoritm'sətri'ritm'sətrinə çevriləcək.

  • Pos (Subst,St).Bu funksiyaStsətrindəSubstalt sətrini axtarır. Əgər axta-rış uğurlu olarsa, funksiya nəticədə alt sətrin aşkarlandığı mövqenin nömrəsi-ni verir. Əks halda, yəni axtarış uğursuz olarsa, funksiyanın nəticəsi 0 (sıfır)olacaq. Nəzərə almaq lazımdır ki, bu funksiya alt sətri birinci aşkarladığımövqenin nömrəsini çıxışa verir. Başqa sözlə, əgər sətirdə axtarılan alt sətirdəbir neçə dəfə rast gəlinirsə, funksiyanın nəticəsi olaraq alt sətrin ilk aşkarlan-dığı yerin nömrəsi götürüləcək.


S := '1 nömrəli orta S1 := 'orta'; J := Pos(S1, S); WriteLn(J); { Ekrana


məktəb';



11 ədədi çıxarılacaq }

0 ədədi çıxarılacaq }
S1 := 'əsas'; J := Pos(S1, S); WriteLn(J); { Ekrana






Val (St,X,Code).Turbo Pascalda sətri ədədə çevirən standart funksiya -Val funksiyası vardır. Bu zaman, təbii ki, çevrilən sətir ədədi sətir olmalıdır (yəni,ədəddən ibarət olmalıdır, məsələn, '17.5' , yaxud '1234' ). Funksiyanın para-metrlərindənStilkin sətrin özü,Xalınan ədədin mənimsədildiyi dəyişən,Code isə çevrilmənin uğurla keçib-keçmədiyini bildirən parametrdir. Belə ki,çevrilmə uğurlu olarsa,Codeparametrinin qiyməti 0 olacaq, əks halda həminparametrə sətirdə səhvin baş verdiyi yerin nömrəsi yazılacaq. Aşağıdakı pro-qram fraqmentiNumStrdəyişəninə tam ədədi qiymət verir.

repeat



Write ('Tam ədədi daxil edin: '); ReadLn (NumStr); Val (NumStr, IntNum, Error) until Error = 0;

Əgər daxil edilən ədəd sətirdirsə,Valproseduru bu sətriIntNumtam ədədinəmənimsədir. Əgər oxunan sətirdə rəqəmdən başqa ayrı simvollar da olarsa,Errordəyişəninin qiyməti sıfırdan fərqli olacaq və beləliklə də dövr təkrarla-nacaq.



Str (X,St). Bu prosedurValprosedurunun əksini edir, yəni ədədi sətrə çevirir.Str (123 :5, NumSt)operatoruNumStdəyişəninə ' 123' sətrini yazacaq.Burada 5 sətirdəki simvolların sayını göstərir.

İndi göstərilən prosedurların bəzilərinin tətbiq olunduğu aşağıdakı misalabaxaq. Burada istifadəçinin göstərdiyi sözə sətirdə neçə dəfə rast gəlindiyi he-sablanır.


program P;

var s, s1: string; k, i: Integer;

begin



Write ('İlkin sətri daxil edin: '); ReadLn (s);

Write ('Axtarılan sözü daxil edin: '); ReadLn (s1);

k := 0;

while Pos(s1, s) begin

k := k + 1; Delete(s, Pos end;

WriteLn (k); end.



    1. Sətir nədir və onun üzərində hansı əməliyyatlar aparılır?

    2. Tutaq ki,Templ := 'Abra' və Temp2 := 'kadabra'.Aşağıdakı funksiya və prosedurların nəticəsini müəyyənləşdirin.

      1. Magic := Concat(Temp1, Temp2)

      2. Length(Magic)

      3. HisMagic := Copy(Magic, 1, 8)

      4. Delete(HisMagic, 4, 3)

      5. Insert(Temp1, HisMagic, 3)

      6. Pos(Temp2, Magic)

      7. Pos(Temp1, Magic)

      8. Val('1.234', RealNum, Error)

      9. Str(1.234 :3:1, RealStr)

    3. Sətrin polindromu onun özündən və tərs yazılışından ibarətdir. İstənilən sətrinpolindromunu yaradan funksiya yazın. Yəni bu funksiyanın girişinə 'abc' ver-dikdə, çıxışda 'abccba' alınmalıdır.

    4. Sətirdə olan saitlərin sayını hesablayan proqram yazın.

ALTPROQRAMLAR.

FUNKSİYALAR VƏ PROSEDURLAR

İnsan həcmi bir neçə yüz sətir olan alqoritmdən "baş çıxara" bilər. Proqramsətirlərinin sayı artdıqca işin ümumi məntiqi itir. Konkret operatorların yerinəyetirdiyi əməliyyatlar elementar olsa da, onların ümumi məqsədini başa düşməkçətinləşir. Proqramın strukturu və onun yerinə yetirilmə ardıcıllığı aydın olmur.Belə alqoritmi dəyişdirmək, yaxud düzəltmək çox çətin olur.

Bu problemi həll etmək üçün alqoritm sadə əməliyyatları yerinə yetirən ayrı-ayrı alqoritmlərə bölünür. Belə ayrıca alqoritmlərə yardımçı alqoritmlər deyilir.Proqramlaşdırma dillərində yardımçı alqoritm termininin yerinə altproqram ter-minindən istifadə olunur. Yardımçı alqoritmə (altproqrama) müraciət etmək üçünonu çağırmaq lazımdır.

Adətən orta ölçülü proqramları hər biri çox da çətin olmayan əməliyyatı ye-rinə yetirən kiçik altproqramlara bölürlər. Yekun alqoritm ayrı-ayrı operatorlar-dan deyil, hər birinin öz adı olan bitkin kod bloklarından ibarət olur. Bu halda alt-proqramlara proqramçıların təyin etdiyi yeni operatorlar kimi baxmaq olar.

Standart altproqramlar. Bir çox yardımçı alqoritmlərdən tez-tez və müx-təlif məsələlərdə istifadə edilir. Məsələn, tez-tez tipik riyazi funksiyaları hesabla-maq, yaxud sətirlər üzərində standart əməliyyatlar aparmaq tələb olunur. Beləalqoritmləri hər proqramçı özü yazsa idi, bu çox böyük vaxt itkisinə səbəb olardı.Bu problem standart altproqramlar tətbiq etməklə aradan qaldırılır.

Standart altproqramlar adətən proqramlaşdırma dilində deyil, proqramlaşdır-ma sistemində (mühitində) təyin edilir. Onlar translyatora əlavə edilən altproq-ramlar kitabxanasına daxil olur. Standart altproqramların geniş kitabxanaları işiəhəmiyyətli dərəcədə yüngülləşdirir.



Yardımçı alqoritmlərin tipləri. Altproqramlar adətən, iki kateqoriyayabölürlər: prosedurlar funksiyalar.

Prosedur, sadəcə hər hansı operatorlar ardıcıllığını yerinə yetirir.

Funksiya isə müəyyən qiyməti hesablayır və həmin qiyməti çağıran proqrama (yaxud

altproqrama) ötürür (qaytarır).

Bəzi proqramlaşdırma dillərində (məsələn, C-də) altproqramları prosedur vəfunksiyalara bölmürlər. Onların hamısına funksiya kimi baxılır. Belə dillərdəprosedur heç bir qiymət qaytarmayan funksiyadır.

Altproqramın parametrləri. Altproqramın işinin bir mənası olması üçüno, onu çağıran proqramdan verilənlər almalıdır. Verilənlər altproqrama parametr-lər şəklində ötürülür. Hər bir altproqram parametr kimi konkret tipli müəyyənverilənlər yığınını almağı gözləyir. Parametrlərə ehtiyacı olmayan altproqramlarda mümkündür.

Parametrlər Formal parametrlər

Altproqram yaradılarkən onun parametrlərinə ötürülən qiymətlər hələ məlumolmur. Təsvir zamanı altproqramın başlığında formalparametrlər göstərilir. For-mal parametrlər ötürülən verilənlərin tipini müəyyən edən ixtiyari identifi-katorlardır. Onlar yalnız altproqramın yerinə yetirdiyi əməliyyatları təsvir etməküçün lazımdır.

Altproqram çağırılarkən ona ötürülən faktik parametrlər göstərilir. Altproq-ramın operatorlarının yerinə yetirilməsi zamanı formal parametrləri faktikqiymətlər təmsil edir.



Altproqramın çağırılması. Altproqramı çağıran operatorun növü altpro-qramın tipindən və konkret proqramlaşdırma dilinin sintaksisindən asılıdır.Altproqramı çağırmaq üçün onun adını göstərmək lazımdır. Ondan sonra mötə-rizədə faktik parametrlərin siyahısı gəlir. Faktik parametrlərin tipi və onların sayıaltproqramda formal parametrlərin təsvirinə uyğun gəlməlidir. Faktik parametrlərtəkcə dəyişənlər deyil, həm də konstantlar, yaxud ifadələr ola bilər.

Funksiyanı proqramın istənilən yerindən çağırmaq olar. Aşağıdakı misaldaz dəyişəninə katetlərixyolan düzbucaqlı üçbucağın hipotenuzunun uzunluğumənimsədilir. Hesablama üçün standart funksiyaya müraciət olunub.



z := sqrt(x*x + y*y);

Prosedurun çağırılması adətən ayrıca operator kimi göstərilir. Pascal dilindəbunun üçün heç bir açar söz tələb olunmur. Məsələn, parametr kimi iki tam ədədiqəbul edənPproseduru belə çağırıla bilər:



P(1, 2);


Faktik parametrlər


Yardımçı alqoritmlərin proqramlaşdırılması. Yardımçı alqoritmlərintəsviri proqramın ilkin mətninə daxil edilir. Proqramlaşdırma dillərinin əksəriy-yətində altproqramın ilk çağırılmadan öncə təsvir olunması tələb olunur.

Altproqramın təsviri başlıqdan, gövdədən sonluqdan ibarətdir. Başlıq alt-proqramın adından və formal parametrlərin təsvirindən ibarətdir. Funksiya üçünhəm də qaytarılan qiymətin tipi göstərilir:



function Square(x: Integer) : Integer; begin

Square := x*x;

end;

Pascal dilində xüsusi sonluq operatoru olmur. Funksiyanın gövdəsibeginendoperatorlarının arasında yerləşdirilir.

Funksiyanın qaytardığı qiymət onun adıyla üst-üstə düşən dəyişənə mənimsədilməlidir.

Funksiyanın gövdəsinin daxilində bu dəyişəndən mənimsətmə operatorununyalnız sol tərəfində istifadə edilə bilər.

N ədədinin faktorialı dedikdə 1-dən n-dək ədədlərin hasili başa düşülür(n! = 1.2.3. ... .n). Aşağıdakı funksiya ədədin faktorialını hesablayır:

function Fact(n : Integer) : Integer; var

i : Integer; res : Integer; begin

res := 1;

for i := 1 to n do res := res * i; Fact := res; end;

Prosedurun təsvirində isə qaytarılan qiyməti hesablamağa lüzum yoxdur. Aşa-ğıda iki tam ədədin cəmini çıxışa verən prosedur təsvir olunub:



procedure PrintSum(x, y: Integer); begin

WriteLn(x+y);

end;

Adətən hesab olunur ki, altproqramın təsviri onun ilk istifadəsindən öndə yer-ləşdirilməlidir (çünki translyatora belə əlverişlidir). Ancaq bu müəyyən səbəblərdənproqramçı üçün rahat olmaya bilər. Bəzi proqramlaşdırma dilləri altproqramıntəsvirini onun birinci istifadəsindən sonra yerləşdirməyə imkan verir, ancaq bu haldaaltproqramın istifadədən öncə sadələşdirilmiş halda elan edilməsi tələb olunur.

Pascal dilində bunun üçün prosedurun başlığı təkrarlanır. Ondan sonrabegin açar sözünün olmaması bunun təsvir deyil, yalnız elan olduğunu bildirir.

procedure PrintSum(x, y: integer);

Elanın qabaqcadan olması altproqramın parametrləri haqqında translyatoraməlumat verir. Bu isə altproqramın çağırılmasını düzgün emal etməyə imkan verir.




Yüklə 0,52 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2020
rəhbərliyinə müraciət

    Ana səhifə