Dövrlü hesablama məlumatlarının emalı proseslərinin proqramlaşdırılması. Siklik hesablama proseslərinin proqramlaşdırılması. for ifadəsindən istifadə nümunəsi

Proqramlaşdırmada tez-tez eyni qrup proqram ifadələrinin operandlarının müxtəlif qiymətləri ilə təkrar icrasını tələb edən tapşırıqlar var. Belə proseslər adlanır dövri və ya sadəcə dövrələr. Dövrlə təkrarlanan ifadələr qrupu sözdə olanı təşkil edir döngə gövdəsi sadə və ya mürəkkəb ifadə ilə təmsil oluna bilər. Döngə gövdəsinin birdəfəlik icrasını çağıracağıq iterasiya.

Proqramda dövrənin gövdəsi həmişə ondan əvvəl gəlir döngə başlığı, təyinatını ehtiva edir loop operatoru və təkrarların sayını (birbaşa və ya dolayısı ilə) müəyyən edən ifadə. Nəzərə alın ki, dövrənin gövdəsi döngü operatorunun operandıdır, ona görə də dövrənin başlığı və gövdəsi proqramın bölünməz struktur vahidini təşkil edir. Aşağıda " terminindən istifadə etməklə loop operatoru", biz döngənin həm başlığını, həm də gövdəsini nəzərdə tutacağıq.

Bütün proqramlaşdırma sistemlərində dövrləri təşkil etmək üçün ixtisaslaşmışlar var loop operatorları, istifadəsi proqramçını dövrləri "əl ilə" proqramlaşdırma ehtiyacından azad edir. MathCAD bu cür operatorların iki növünü dəstəkləyir - əvvəlcədən təyin edilmiş dövr üçün (həmçinin deyilir sayğac ilə döngə) Və ilkin şərtlə döngə ikən . Bu operatorların strukturunun təsviri Cədvəl 5-də verilmişdir.

5.4.1 Operator üçün

Bu operator təkrarlamaların sayının əvvəlcədən müəyyən edildiyi, yəni əvvəlcədən məlum olduğu hallarda istifadə edilməlidir.

Döngə başlığı bu operatorun (sağ operand) adlı dəyişəni var parametr(və ya sayğac) dövrü, Və dəyərlərin siyahısı bu parametr. Siyahının elementlərinin sayı təkrarların sayını da müəyyən edir - hər iterasiya zamanı döngə parametri başlıqda göstərilən siyahıdan növbəti dəyəri alır.

Döngə parametri daxili proqram dəyişəni statusuna malikdir və onun bütün xassələrinə malikdir (5.1.4-cü bölmədə təsvir edilmişdir). Bir qayda olaraq, loop parametri döngənin gövdəsinə daxil olan ifadələrin sağ tərəfində istifadə olunur, baxmayaraq ki, onu ifadələrin sol tərəfində (yəni yerli tərifin solunda) istifadə etmək rəsmi olaraq qadağan edilməmişdir. operator "f"). Yadda saxlamaq lazımdır ki, döngənin gövdəsində bir parametr dəyişdirilibsə, onun dəyişdirilmiş dəyəri yalnız cari iterasiyanın sonuna qədər etibarlı olacaq, çünki növbəti iterasiya başlamazdan əvvəl parametr yenə də növbəti dəyəri alacaq. loop başlığında göstərilən siyahı.

Formal olaraq, döngə gövdəsinin ifadələrində döngə parametrindən ümumiyyətlə istifadə edilməməsinə icazə verilir - bu halda parametr dəyərlərinin siyahısı heç bir rol oynamır - yalnız bu siyahının uzunluğu əhəmiyyətlidir, bu da (bəlkə də mənasız) təkrarların sayı.

Son təkrarlama başa çatdıqdan sonra, loop bəyanatından sonra proqram bəyanatı yerinə yetiriləcək. Bu halda tamamlanmış dövrənin parametri kimi istifadə edilən dəyişən malik olduğu dəyəri saxlayır sonuncuda həqiqətən tamamlandı iterasiya[*]. Nəzərə alın ki, bu dəyər həmişə dövrə başlığında göstərilən siyahının sonuncu dəyəri ilə üst-üstə düşmür, çünki operator işə salındıqda dövrədən “erkən” çıxmaq mümkündür. Fasilə döngənin gövdəsinə daxil edilir.

Dəyərlərin siyahısı Döngə parametri döngə başlığında " simvolundan sonra yazılır. Î ", dəstdə üzvlüyü göstərir (bu simvolu əl ilə daxil etmək lazım deyil - operatora daxil olduqda avtomatik olaraq göstəriləcək üçün ). MathCAD istifadə etməyə imkan verir üç forma bu siyahıdakı qeydlər: birbaşa transfer– siyahı elementləri açıq şəkildə vergüllə ayrılır, parametr siyahıdan dəyərləri göründükləri ardıcıllıqla alır; sıralanmış dəyişən üslubda - siyahının elementləri müvafiq hesab seriyasını təşkil edir; massiv– siyahı elementləri ardıcıl olaraq massiv elementlərinin qiymətlərini indekslərinin sırasına görə alır (əvvəlcə soldan sağa sütunlar, sonra yuxarıdan aşağıya doğru sıralar).

Şəkil 21-də göstərilən üç proqram operatorun müxtəlif istifadələrini təsvir edir üçün .

Proqram Fakt(n) ədədin faktorialını hesablayır n . Bu proqramdakı döngə operatoru mürəkkəb ifadənin bir hissəsidir və bu da öz növbəsində şərti operatorun operandıdır. Əks halda. Döngə parametri k tam arifmetik sıradan qiymətlər alır.

Proqram Ch(V,N,p) giriş vektorunu emal edir V , dəyəri ilə əvəz edir səh indeksləri ikinci giriş vektorunun elementləri ilə təyin olunan elementlər N . Bu nümunədə, loop parametri dəyərlərinin siyahısı i vektor elementləri toplusu ilə müəyyən edilir N . Qeyd edək ki, bu proqramların hər ikisi daxilolma məlumatlarına nəzarəti həyata keçirir və proqramın faktiki arqumentləri səhv göstərildiyi təqdirdə əsas alqoritmin icrasını bloklayır.

Proqram L(M,z) misalda verilmişdir V ), ətraflı şərhlərlə müşayiət olunur və izahat tələb etmir. Bu proqram çoxlu döngə ifadələrindən istifadə imkanını göstərir, onlardan biri ifadələr arasındadır bədən başqa. İstifadəsi yuvalanmış döngələr- çoxölçülü massivləri emal etmək üçün istifadə olunan tipik texnika.

Şəkil 21 – Döngü proqramlaşdırma nümunələri üçün


Şəkil 22 operatorların istifadəsini göstərir Fasilə Davam et döngənin gövdəsində. Tipik olaraq, bu operatorların özləri operandlardır şərti ifadələr Əgər və ya Əks halda .

Operator Fasilə ("abort") müdaxilə edir dövrənin icrası və kəsilmiş dövrə operatorundan sonra idarəetməni operatora ötürür. Qeyd edək ki, əgər operator Fasilə kəsildi yuvalanmış döngə, xarici döngənin icrası davam edəcək.

Operator Davam et ("davam et") fərqli hərəkət edir - o yalnız döngənin cari iterasiyasını kəsir və idarəetməni bu dövrənin başlığına köçürür, bundan sonra dövrə yerinə yetirilir davam edir növbəti iterasiyadan (əlbəttə ki, kəsilən iterasiya sonuncu deyilsə).

Operator Fasilə istifadə etməyə icazə verilir və kənarda dövrün bədəni. Bu halda, bütün alt proqramın icrası dayandırılır və onun sonuncu faktiki icra edilmiş ifadəsinin qiymətləndirilməsinin nəticəsi qaytarılır.

Şəkil 22 – Operatorlardan istifadə nümunələri Fasilə Davam et

Funksiya CəmN(V) yalnız skalyar rəqəmli verilənləri ehtiva edən vektor elementlərini cəmləşdirir və qalan elementləri atlayır. Funksiya Tərs(V) elementləri orijinal vektorun müvafiq elementlərinin tərs qiymətləri olan bir vektor əmələ gətirir. Bundan əlavə, əgər növbəti elementdə "0" rəqəmi varsa və ya rəqəmli tipli skaler deyilsə, dövrü kəsilir. Qeyd edək ki, operator Fasilə sonuncu misalda o, proqramı dayandırmır, lakin idarəetməni operatora ötürür Qayıt , dərhal operatorun ardınca üçün .

5.4.3 Operator ikən

Operatordan fərqli olaraq üçün , bəyanat başlığı ikən (tərcümədə - " sağol") iterasiya sayının açıq göstəricilərini ehtiva etmir - ehtiva edir məntiqi ifadə, dəyəri avtomatik olaraq hesablanır əvvəldən hər növbəti iterasiyanın icrası[†]. Nə qədər ki, bu ifadə doğrudur, döngə təkrarlanmağa davam edəcək; növbəti iterasiya başa çatdıqdan sonra ifadə yalan olan kimi, dövrənin növbəti iterasiyası yerinə yetirilməyəcək və bəyanatdan sonrakı proqram bəyanatı nəzarət alacaq. ikən .

Aydındır ki, əgər döngə başlığına eyni dərəcədə yanlış məntiqi ifadə yerləşdirilirsə, bu döngə öz təkrarlamalarının heç birini tamamlamayacaq və bu ifadə eyni dərəcədə doğrudursa, dövrə sonsuz olacaq (sonuncu vəziyyət adlanır). ilmə proqramlar). Belə halların qarşısını almaq üçün məntiqi ifadənin operandları öz dəyərlərini dəyişən bir və ya bir neçə dəyişən daxil etməlidir. döngənin gövdəsində beləliklə, dövrə sonlu olsun (dövrənin qarşısını almaq üçün başqa vasitələrdən istifadə edilə bilər - məsələn, operatoru dövrədən çıxmağa məcbur etmək Fasilə ).

Operatordan istifadə nümunələri ikən Şəkil 23-də göstərilmişdir. Eyni məsələnin həlli üçün üç variant verilmişdir: proqramların hər biri F0 , F1 F2 mənbə vektorunun birinci elementinin indeksini qaytarırV müəyyən edilmiş dəyəri aşmaqz .

Birinci proqram (məsələn A ) sayğaca birini əlavə edir k döngənin gövdəsində ikən növbəti birinə qədər k orijinal vektorun ci elementi göstərilən dəyəri keçməyəcək z . Bundan sonra dövrə başa çatır və proqram dəyişənin son dəyişdirilmiş dəyərini qaytarır k , bu problemin həllidir. Qeyd edək ki, tsikldən fərqli olaraq üçün , sayğac k burada onu ayrıca ifadələrlə emal etmək lazımdır: dövrə operatorundan əvvəl inisiallaşdırmaq (yəni ona ilkin qiymət vermək) və onun dəyərini dövrənin gövdəsində dəyişmək.

Seçim olduğunu görmək asandır A ) proqramın əhəmiyyətli bir çatışmazlığı var: problemin həlli olmadığı, yəni parametrin dəyişdirilməsi halında proqramın dönməsinə mane olmur. z vektorun ən böyük elementinin qiymətini aşır V . Bu misalda, belə bir vəziyyətdə döngə həqiqətən baş verməyəcək - lakin bu, proqramımızın deyil, vektor indeksinin çıxışını idarə edəcək MathCAD sisteminin üstünlüyüdür. V icazə verilən dəyərlərdən kənarda və səhv mesajı yaradacaq.

Bu çatışmazlıqdan azad seçimdir b ) döngənin gövdəsində növbəti indeks dəyərinin etibarlılığı üçün əlavə yoxlamanın olduğu və operatorla dövrəni məcburi şəkildə kəsdiyi proqramın Fasilə mətn mesajının verilməsi ilə müvafiq vəziyyətdə.

Bəlkə də bu problemin ən təsirli həlli seçimdir V ), operatordan ümumiyyətlə istifadə etmir ikən . Bu proqramda dəyişən k yalnız "üslubun təmizliyini" qorumaq üçün istifadə olunur - loop parametrinin işlənməsini istisna etmək üçün i operatordan kənarda üçün .

Şəkil 23 – Döngü proqramlaşdırma nümunələri ikən

İşin məqsədi:

Siklik operatorları öyrənin, while, do - while, siklik alqoritmləri necə tərtib etməyi və proqramlaşdırmağı öyrənin.

Qısa nəzəri məlumat

Döngü operatorları müəyyən hərəkətləri (operatorları və əməliyyatları) bir neçə dəfə təkrarlamaq lazım olduqda istifadə olunur və alqoritmlərin belə bölmələri dövrələr adlanır.

for loop operatoru

for loop ifadəsinin əsas forması:

üçün (ifadə_1; ​​ifadə_2; ifadə_3)

operator;

Harada ifadə_1– dövr parametrinin ilkin qiyməti;

ifadə_2– dövrün davam etdirilməsi şərtlərinin yoxlanılması;

ifadə_3– dövr parametrinin dəyişdirilməsi (düzəliş);

operator– C dilində sadə və ya mürəkkəb operator.

Operatorun iş sxemi belədir: yalnız bir dəfə əvvəlcə ifadə_1 hesablanır, sonra ifadə_2 yoxlanılır və əgər “doğrudursa” proqramın tsiklik bölməsi yerinə yetirilir, sonra parametr düzəldilir və s. ifadə_2 "yanlış" dəyərini alana qədər.

Misal üçün:üçün (k=1; k<5; k++)

printf(“\n %d”, k);

Bu operatorun icrası nəticəsində 1-dən 4-ə qədər olan rəqəmlər sütunda çap olunur.

Döngü parametri kimi istənilən əsas tipli dəyişəndən istifadə edə bilərsiniz.

Misal üçün:

üçün(ch=’a’; ch<=’z’; ch++) // Вывод на экран букв

printf(“ %c”,ch); // Latın əlifbası

Proqramdakı for döngələrinin strukturuna diqqətlə nəzarət etmək lazımdır ki, sonu olmayan bir döngə ilə (burdan çıxış yoxdur) qalmayasınız.

Misal üçün:

üçün(k=10; k>6;k++)

printf("sonsuz döngə\n");

Döngədən çıxın aşağıdakı yollarla vaxtından əvvəl:

Əlavə şərtlə;

Aşağıdakı operatorlardan istifadə etməklə:

fasilə;- fasilənin yerləşdiyi dövrədən çıxış, idarəetmə dövrədən sonra birinci icra olunan operatora keçirilir;

çıxış (int Kod);- proqramdan çıxmaq;

qayıtmaq;- funksiyadan çıxmaq;

Şərtsiz keçid operatorundan istifadə getmək<метка>;

Erkən cari tsiklik addımın tamamlanmasıəlavə şərt və ya operatordan istifadə etməklə mümkündür davam et, cari döngə addımının icrasını dayandıran, yəni. döngənin qalan hissəsinin ifadələrini atlayır və parametri tənzimləmək və vəziyyəti yoxlamaq üçün idarəetməni dövrənin baş ifadəsinə ötürür.

İdarəetmənin xaricdən dövrənin içərisinə ötürülməsi qadağandır.

Mötərizədə for loop ifadələrindən hər hansı biri olmaya bilər, lakin ";" simvolu aşağı salmaq olmaz.

Misal üçün:

üçün(; i<3; i++)

qoyur ("Salam!");

Siklik while və do-while ifadələri

Siklik operatorun əsas forması isə:

isə (vəziyyət)

operator;

Harada operator

Döngə şərtin doğru olduğu müddətcə işləyir, yəni. mötərizədəki ifadə sıfırdan fərqli bir nəticə qaytarır. Bu, ilkin şərti olan bir döngədir - əvvəlcə şərt yoxlanılır, sonra bəyanat yerinə yetirilir. Buna görə də şərtin hesablanmasının ilkin nəticəsi 0 olarsa, while dövrəsi bir dəfə də olsa yerinə yetirilməyəcək.

Operatorun əsas forması edərkən:

operator;

while(şərt);

Harada operator sadə, mürəkkəb və ya boş ifadədir.

Operator etisə– postşərtli dövr operatoru, yəni. əvvəlcə ifadə icra olunur, sonra isə şərtin doğruluğu yoxlanılır. Do-while döngəsində şərt dövrənin sonunda yoxlanıldığı üçün dövrə ən azı bir dəfə yerinə yetiriləcək.

while və do–while kimi döngələrdə for ifadəsində olduğu kimi dövrədən erkən çıxmaq və dövrənin cari addımını erkən tamamlamaq üçün eyni üsullara icazə verilir, lakin ikinci halda for döngəsindən fərqli olaraq idarəetmə ötürülür. vəziyyəti yoxlamaq üçün. while və do-while döngələrində sonsuz döngənin qarşısını almaq üçün şərtə daxil olan dəyişənlərin dəyişdirilməsini təmin etməlisiniz.

Misal üçün:

üçün (i=1;i<=300;i++) // Печать целых чисел, кратных 5

(i%5!=0) davam edərsə;

printf(“%5d”,i);

Sonsuz döngələrin nümunələri:

operator;

2) while(number_not_0) // Həmişə doğrudur!

operator;

operator;

while(nömrə_0 deyil); // Həmişə doğru!

Döngə operatorları arasında çıxış şərti olmalıdır.

İç-içə döngələr

İç-içə döngələr vəziyyətində, bir döngə digərinin içərisindədir, məsələn:

üçün(i=nn;i

üçün(j=mn;j

operator;

Harada operator sadə, mürəkkəb və ya boş ifadədir. Xarici döngənin şərtini ödəyən i parametrinin hər bir dəyəri üçün daxili dövrə yerinə yetiriləcək.

Misal:

üçün(i=1;i<10;i++) // Печать таблицы умножения

üçün(j=1;j<4;j++)

printf(“\n %d*%d=%2d”, i, j, i*j);

printf("\n");

for ifadəsindən istifadə nümunəsi

Hesablayın. Proqram aralıq və yekun nəticələri çap etməlidir.

Proqram mətni belə görünə bilər

#daxildir

#daxildir

qoyur (“N” daxil edin);

scanf(“%d”,&N);

üçün (s=0, k=1; k<=N; k++) // В заголовке цикла можно выпол-

( // alın və ikiqat tapşırığı verin

printf(" \n k=%d s=%f ", k, s);

printf("\n CAVAB: s=%f, İstənilən düyməni basın...",s);

Fərdi tapşırıqlar üçün seçimlər

Funksiya qiymətlərinin cədvəlini təyin etmək üçün proqram yazın saat ixtiyari diapazonda [ a,b] arqument dəyişir X ixtiyari addımlarla h. Dəyərlər a, b, h klaviaturadan daxil edilir. Cədvəldə aşağıdakı sütunlar olmalıdır: sıra nömrəsi, arqument dəyəri x, funksiya dəyəri, artan və ya azalan funksiya haqqında mesaj, iki bitişik funksiya dəyərinin fərqi.

Funksiyanın maksimum və minimum qiymətlərini təyin edin.

1. a=-p; b=p; h=0.4.

2. a=0,7; b=1,8; h=0.1.

3. a=-0,5; b=2,5; h=0.2.

4. a=-0,9; b=2,7; h=0.3.

5. a=-2; b=0,8; h=0.2.

6. a=-1,9; b=2,7; h=0.3.

7. a=-0,4p; b=0,4p; h=0,5.

8. a=-0,3p; b=1,3p; h= p/10.

9. a=-p/2; b= p/2; h=p/10.

10. a=-3; b=3; h=0,5.

“Tsiklik hesablama proseslərinin proqramlaşdırılması”

İşin məqsədi: tsiklik hesablama prosesləri üçün alqoritmlərin tərtibi və mürəkkəb strukturun tsiklik proqramlarının təşkili üsullarının mənimsənilməsi.

Nəzəri hissə

4.1.1. Siklik alqoritmlər.

Dövr bir dəfədən çox yerinə yetirilə bilən hərəkətlər ardıcıllığıdır.

Dəyirmi sistem alqoritmi bir və ya daha çox döngədən ibarət alqoritmdir.

3 növ dövrə var:

Ön şərtlə döngə;

Postşart ilə döngə;

Sayğac ilə döngə (hesablama döngəsi).

Döngənin icrası hansısa məntiqi şərtlə əlaqələndirilirsə, onda ilkin və ya sonrakı şərti olan döngələrdən istifadə olunur.

Sayğac döngələri, döngə gövdəsinin icrasının əvvəlcədən müəyyən edilmiş sayda təkrarlanmalı olduğu bir sinifdir.

Siklik alqoritmlərin blok diaqramları belə görünür:

1. Sayğac ilə döngə.

2. İlkin şərtlə döngə. 3. Postşart ilə döngə.

4.1.2 C++ proqramlaşdırma dilində loop operatorları.

C++ dilində hər bir dövrə növü üçün müvafiq operator var:

while kimi döngə (ilkin şərtlə);

Döngə kimi do...while (son şərtlə);

Döngə kimi for (hesablama).

1.Loop operatoru while kimi

Giriş forması:

while (şərt) ifadəsi;

burada: (şərt) – məntiqi ifadə;

operator – loopda icra edilən operator və ya dövrənin gövdəsi.

Döngənin gövdəsi mürəkkəb ifadədirsə, o, operator mötərizəsinə daxil edilməlidir (...):

isə (şərt)

operatorlar qrupu

Belə bir döngənin necə işləməsinin sxemi: şərt doğru olduğu halda, dövrənin gövdəsi yerinə yetirilir və şərt yenidən yoxlanılır və s. Şərt yanlış olduqda, döngə çıxır.

2. Döngü operatoru kimi do…while

Giriş forması:

operator;

while(şərt);

Belə dövrənin necə işləməsinin sxemi: əvvəlcə operator yerinə yetirilir, sonra şərt yoxlanılır, şərt doğrudursa, operator yerinə yetirilir və şərt yenidən yoxlanılır və s. Şərt yanlış olduqda, döngə çıxır.

Döngənin gövdəsi mürəkkəb ifadədirsə, ilkin şərti olan dövrəyə gəldikdə, o, operator mötərizəsinə daxil edilməlidir (...):



operatorlar qrupu

while(şərt);

3. Döngü operatoru for kimi

Giriş forması:

operator;

A döngə parametri üçün ilkin dəyərləri və lazım olduqda digər parametrlər üçün ilkin dəyərləri təyin edən ilkin ifadədir. Misal üçün:

i=0, x=0.5, p=1, s=0

B dövrəni davam etdirmək şərtini yoxlayan şərti ifadədir. Misal üçün:

C - dövr parametrinin artımını və lazım olduqda digər parametrləri təyin edən artım ifadəsidir, sonra onlar siyahıya yazılır. Məsələn: x+=0,1, i++

4.1.3 C++ dilində siklik hesablama prosesi üçün alqoritmin və proqramın tərtib edilməsinə nümunə.

Bir ifadənin dəyərini hesablayın:

b– ilkin qiymət, onun qiyməti klaviaturadan daxil edilir və dəyişmir;

a– 1 addımlarla diapazonda dəyişikliklər;

y– nəticə, onun dəyərləri ekranda göstərilir.

Spesifikasiyaya əsasən, a dəyişəni tam ədəddir, ona görə də onu sayma dövrəsində sayğac kimi istifadə etmək olar.

Sayma dövründən istifadə edərək bu problemi həll etmək üçün alqoritmin blok diaqramı aşağıdakı kimidir:

#daxildir

#daxildir

#daxildir

printf("b daxil edin:");

scanf(“%f”,&b);

printf("a y\n");

üçün (a=0;a<=10;a++)

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

Ön şərti olan bir döngədən istifadə edərək bu problemi həll etmək üçün alqoritmin blok diaqramı aşağıdakı kimidir:

Bu alqoritmə uyğun gələn C++ proqramının mətni aşağıdakı kimidir:

#daxildir

#daxildir

#daxildir

printf("b daxil edin:");

scanf(“%f”,&b);

printf("a y\n");

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

else printf(“ y mövcud deyil\n”);

Postşərti olan bir döngədən istifadə edərək bu problemi həll etmək üçün alqoritmin blok diaqramı aşağıdakı kimidir:

Bu alqoritmə uyğun gələn C++ proqramının mətni aşağıdakı kimidir:

#daxildir

#daxildir

#daxildir

printf("b daxil edin:");

scanf(“%f”,&b);

printf("a y\n");

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

else printf(“ y mövcud deyil\n”);

isə (ə<=10);

Praktik hissə

4.2.1 İşin yerinə yetirilməsi üçün tələblər:

Dəyişənlərdən birinin dəyər diapazonu üçün №3 laboratoriya işindən tapşırığı yerinə yetirin. Dəyişdirilən dəyişən, onun dəyişmə diapazonu və addımı Cədvəl 4-də göstərilmişdir. Fərdi tapşırıqda göstərilən iki növ dövr üçün alqoritmlərin və proqramların blok diaqramlarını yaradın (Cədvəl 4).

Nəticələrin çıxışını elə rəsmiləşdirin ki, dəyişən parametrin dəyərləri aydın şəkildə vurğulansın və hər bir xüsusi dəyər üçün nəticənin dəyərləri (Cədvəl 3-ün 2-ci sütunundan üç dəyişən) formada göstərilsin. bir masa.

İş qaydası.

1. Tapşırığın təhlilini aparın, problemin ifadəsini formalaşdırın.

2. Alqoritmlərin blok-sxemlərini yaradın.

3. C++ dilində proqram yaradın. Klaviaturadan ilkin məlumatların daxil edilməsini və nəticələrin ekrana çıxarılmasını təmin edin.

4. Müxtəlif ilkin məlumatlar üzrə proqramın funksionallığını yoxlayın.

5. Alınan nəticələri təhlil edin.

Fərdi tapşırıqlar üçün seçimlər.

Fərdi tapşırıqlar üçün seçimlər müəllim jurnalındakı qrup siyahısındakı tələbə nömrəsinə uyğun olaraq Cədvəl 4-dən seçilir.

Cədvəl 4. Fərdi tapşırıqlar üçün seçimlər

Yox. Dəyişən Dəyişən Dövrlərin növləri
10 ≤ a ≤ 10,Δ a=1
-4 ≤ d ≤ 4, Δ d = 0,5
-6 ≤ x ≤ 3, Δ x = 0,5
0 ≤ b ≤ 3 0, Δ b = 1.5 1. Ön şərtlə, 2. Hesablana bilən
-15 ≤ j ≤ 1 0, Δ j = 0,5 1. İlkin şərtlə, 2. Son şərtlə
5 ≤ e ≤ 35,Δ e = 2 1. Sayılan, 2. Postşərtlə
-5 ≤ m ≤ 15,Δ m = 1 1. Ön şərtlə, 2. Hesablana bilən
1 ≤ c ≤ 70,Δ c = 3 1. İlkin şərtlə, 2. Son şərtlə
1,5 ≤ c ≤ 15,Δ c = 0,5 1. Sayılan, 2. Postşərtlə
-8 ≤ b ≤ 28,Δ b = 2 1. Ön şərtlə, 2. Hesablana bilən
-4,5 ≤ x ≤ 11,5,Δ x = 0,5 1. İlkin şərtlə, 2. Son şərtlə
-7 ≤ k ≤ 2,Δ k = 0,3 1. Sayılan, 2. Postşərtlə
-1 ≤ m ≤ 21,Δ m = 1 1. Ön şərtlə, 2. Hesablana bilən
-2 ≤ e ≤ 34,Δ e = 2 1. İlkin şərtlə, 2. Son şərtlə
-11 ≤ c ≤ 23,Δ c = 2 1. Sayılan, 2. Postşərtlə
-13 ≤ p ≤ 50,Δ p = 3 1. Ön şərtlə, 2. Hesablana bilən
3.3 ≤ b ≤ 9.3,Δ b = 0,3 1. İlkin şərtlə, 2. Son şərtlə
3,5 ≤ y ≤ 12,3,Δ y = 0,4 1. Sayılan, 2. Postşərtlə
-7,5 ≤ a ≤ 5,7,Δ a = 0,6 1. Ön şərtlə, 2. Hesablana bilən
-1,5 ≤ h ≤ 1,2,Δ h = 0,1 1. İlkin şərtlə, 2. Son şərtlə
0 ≤ h ≤ 10,Δ h=0,5 1. Sayılan, 2. Postşərtlə
-15 ≤ b ≤ 15, Δ b =2 1. Ön şərtlə, 2. Hesablana bilən
-7 ≤ l ≤ 3, Δ l = 0,5 1. İlkin şərtlə, 2. Son şərtlə
-5,5 ≤ b ≤ 6,5, Δ b = 0,5 1. Sayılan, 2. Postşərtlə
1 ≤ k ≤ 9, Δ k = 0,4 1. Ön şərtlə, 2. Hesablana bilən
0 ≤ b ≤ 6.9,Δ b = 0,3 1. İlkin şərtlə, 2. Son şərtlə
-3 ≤ v ≤ 9,Δ v = 0,6 1. Sayılan, 2. Postşərtlə
-2 ≤ p ≤ 2.6,Δ p = 0,2 1. Ön şərtlə, 2. Hesablana bilən

4.3 Test sualları və praktiki tapşırıqlar:

1. while ifadəsi necə işləyir?

2. Do ... while ifadəsi necə işləyir?

3. For ifadəsi necə işləyir?

4. Proqramda sikl təşkil edən ifadələrin altını çəkin.

5. while və do ... while ifadələri arasında fərq nədir?

6. Proqramda bir dövrə operatorunu digəri ilə əvəz edin.

Proqramlaşdırmada biz tez-tez təkrarlanan prosesləri əhatə edən problemlərlə qarşılaşırıq. Ona görə də biz “ kimi anlayışı bilməli və istifadə etməyi bacarmalıyıq. siklik hesablama prosesləri».

Təcrübəsiz bir proqramçı üçün ümumiləşdirilmiş bir nümunədən istifadə edərək onları başa düşmək asan olacaq. Üstəlik, bütün proqramlaşdırma dillərində döngələrin həyata keçirilməsi yollarının olduğunu başa düşmək vacibdir.

Proqramlaşdırmada loop nədir?

Dövr - proqramlaşdırmada eyni hərəkətlərin və ya hesablamaların təkrarlanan təkrarlanmasıdır, lakin eyni asılılıqlara görə dəyişənlərin müxtəlif qiymətləri ilə.

Dövr anlayışı ilə təkcə proqramlaşdırmada deyil, qarşılaşırıq. Həyatımızın bir çox sahələrində dövrələr var.

Məsələn, təbiətdəki su dövranı həyatımızda təbii bir dövrədir.

İndi isə hesablama dövrlərində istifadə olunan ümumi qaydalara və anlayışlara nəzər salaq.

Tsiklik prosesin mərhələləri

Ümumiyyətlə, dövr 4 mərhələdə həyata keçirilməlidir:
  • Mərhələ 1 – dövrün hazırlanması (initializasiya).
    Parametr və döngə dəyişəni üçün ilkin dəyərin təyin edilməsi.
    Döngə parametri– dövrün addımlarının sayını hesablayan bu dəyər (dövrün təkrarlarının sayı).
    Döngə dəyişəni dövrün hər mərhələsində dəyərini dəyişən kəmiyyətdir.
    İnisiallaşdırma– bu, parametr və döngə dəyişəni üçün ilkin dəyərləri təyin edir.
  • Mərhələ 2 - dövrün bədəni.
    Bu, bir dövrədə bir hərəkətin təkrar təkrarlanması və ya dəyişənlərin fərqli dəyərləri ilə eyni riyazi asılılıqlara əsaslanan hesablamalardır.
  • Mərhələ 3 – dövrün modifikasiyası (dəyişikliyi).
  • Mərhələ 4 - dövrün idarə edilməsi.
    Bu, döngənin davamı və ya başlaması üçün şərt yoxlanışıdır.
Paskalda hər hansı birini həyata keçirə bilən 3 döngə operatoru var alqoritmik - siklik quruluş :
  1. Parametrlə loop bəyanatı
  2. İlkin şərtlə dövrə operatoru
  3. Postşərti olan loop operatoru
Növbəti məqalədə onlara ətraflı baxacağıq.

1. Proqramlarda tsiklik hesablama proseslərinin qurulması üsulları.

2. Kompüterə daxil edilmişdirNreal ədədlər. Bu çoxluğun arifmetik ortasını göstərən proqram yazın.

Giriş

Cyclic proqramlar demək olar ki, hər hansı bir proqram təminatında istifadə olunur. Bu vəziyyətdə dövrlər açıq və ya gizli ola bilər. Xüsusilə, qeyri-müəyyən döngə kəsmə işləyicilərində mövcuddur və bu, gövdəsi kəsmə tərəfindən tetiklenen sonsuz bir döngədə effektiv şəkildə işləyir. Alt proqramlar - Windows proqramlarının pəncərə funksiyaları da siklikdir. Aşağıda gövdəsində funksional modullar olan dövrə ilə proqramları nəzərdən keçiririk.

Tsiklik proses arqumentin müxtəlif dəyərləri üçün eyni düsturlardan istifadə etməklə hesablamaların təkrar-təkrar aparıldığı hesablama prosesidir.

Proqramlar, tsiklik prosesi həyata keçirən dövri proqramlar adlanır.

Dövrün təşkili aşağıdakı mərhələlərə bölünə bilər:

dövrünün hazırlanması (insiallaşdırılması) (AND);

dövrə hesablamalarının yerinə yetirilməsi (dövrə gövdəsi) (T);

parametrlərin dəyişdirilməsi (M);

dövrün son vəziyyətinin yoxlanılması (U).

T və M kimi bu addımların sırası fərqli ola bilər. Dövrün sonu vəziyyəti yoxlanışının yerindən asılı olaraq, aşağı və yuxarı sonluqlu dövrlər arasında fərq qoyulur. Aşağıdan sona çatan dövrə üçün dövrənin gövdəsi ən azı bir dəfə yerinə yetirilir, çünki əvvəlcə hesablamalar aparılır və sonra dövrədən çıxmaq şərti yoxlanılır.


Yuxarı ucluq halqası halında, çıxış şərti dərhal yerinə yetirilərsə, döngənin gövdəsi bir dəfə də olsa icra olunmaya bilər.

Döngə gövdəsinin təkrarlarının sayı əvvəlcədən məlumdursa və ya müəyyən edilirsə, dövrə deterministik deyilir. Döngə gövdəsinin təkrar sayı əvvəlcədən bilinmirsə, lakin hesablamalarda iştirak edən parametrlərin (bəzi dəyişənlərin) dəyərlərindən asılıdırsa, dövr iterativ adlanır.

Döngə gövdəsi- Bu proqramın dəfələrlə təkrarlanan bölməsidir.

Döngə parametri döngə hər dəfə təkrarlananda yeni dəyərlər alan dəyişəndir (döngülər sadə və ya mürəkkəb ola bilər).

Döngənin ümumi görünüşü n dəfə

Ümumiyyətlə, n dəfə döngə belə yazılır:

nc təkrarların sayı

Xidmət sözü nts (dövrün başlanğıcı) və kts (dövrün sonu) ciddi şəkildə bir-birinin altında yazılır və şaquli xətt ilə birləşdirilir. Bu sətrin sağında təkrarlanan əmrlər ardıcıllığı (dövrə gövdəsi) yazılır.

Təkrarların sayı ixtiyari tam ədəddir.

Alqoritmi yerinə yetirərkən, dövrənin gövdəsində əmrlərin ardıcıllığı müəyyən edilmiş sayda təkrarlanır. Alqoritmik dilin qaydaları təkrarların istənilən tam sayını təyin etməyə imkan verir. Sıfır və ya hətta mənfi ola bilər. Bu hallar səhv hesab edilmir, döngənin gövdəsi sadəcə bir dəfə də olsa yerinə yetirilməyəcək və kompüter dərhal cc-dən sonra yazılmış əmrləri yerinə yetirməyə davam edəcəkdir.

İndiyə qədər dövrün ümumi görünüşü

Ümumiyyətlə, dövriyyə hazırda aşağıdakı kimi yazılır:

hələ şərt yoxdur

| loop gövdəsi (əmrlərin ardıcıllığı)

Bir dövrü yerinə yetirərkən kompüter aşağıdakı hərəkətləri təkrarlayır:

a) while funksiya sözündən sonra yazılan şərti yoxlayır;

b) şərt yerinə yetirilmədikdə, dövrənin icrası başa çatır və kompüter cc-dən sonra yazılmış əmrləri yerinə yetirməyə başlayır. Əgər şərt yerinə yetirilirsə, onda kompüter dövrənin gövdəsini yerinə yetirir, şərti yenidən yoxlayır və s.

Üçün dövrün ümumi görünüşü

i üçün i1-dən i2-yə qədər nc

| loop gövdəsi (əmrlərin ardıcıllığı)

Burada i tam ədəd növü dəyərinin adıdır, i1, i2 ixtiyari tam ədədlər və ya tam ədədli ifadələrdir. Döngənin gövdəsi i = i1, i = i1 + 1, i1 + 2, …i = i2 üçün ardıcıl olaraq yerinə yetirilir.

Alqoritmik dilin qaydaları istənilən i1, i2 tam ədədlərini təyin etməyə imkan verir. xüsusilə, i2 i1-dən az ola bilər. bu hal xəta hesab edilmir - sadəcə olaraq dövrənin gövdəsi bir dəfə də olsa yerinə yetirilməyəcək və kompüter dərhal cc-dən sonra yazılmış əmrləri yerinə yetirməyə davam edəcək.

n dəfə döndərin və isə dövrələyin

Döngələr n dəfə və indiyə qədər alqoritmik dildə demək olar ki, eyni şəkildə formatlanır. Bu təəccüblü deyil, çünki bu əmrlərin hər ikisi bir döngəni - əmrlərin təkrarlanan ardıcıllığını təyin edir. Nts və kts xidmət sözləri döngənin icra edildiyini bildirir, döngə başlığı isə onun icrası üçün xüsusi mexanizmi müəyyən edir.

Bununla belə, bu iki dövrənin bir əhəmiyyətli fərqi var. Kompüter döngəni n dəfə yerinə yetirməyə başlayanda o, döngənin gövdəsini neçə dəfə təkrarlamalı olacağını bilir. Döngəni icra edərkən, bu, hələ ki, belə deyil: kompüter hər dəfə dövrənin vəziyyətini yoxlayır və icranın nə vaxt bitəcəyini əvvəlcədən müəyyən edə bilmir. Hələlik, bir dövrün təkrar sayını yalnız dövr tamamlandıqdan sonra öyrənə bilərsiniz.

Bu, hansı hallarda hansı döngənin istifadə edilməli olduğunu aydınlaşdırır. Təkrarların sayı döngə başlayan zaman məlumdursa, döngədən n dəfə istifadə etmək rahatdır. Təkrarların sayını əvvəlcədən müəyyən etmək mümkün deyilsə, bir dövrə lazımdır.

Məsələn, avtomatik idarəetmə proqramı Şəkildə göstərilən quruluşa malikdir. 1. Dövrə daxil olan modullar(həmçinin fasilələrlə işləmə modulları), hər birində bir giriş və bir çıxış olmaqla, tipik olaraq xarakterik xüsusiyyətə malikdir ki, modullarda cari dövrədə dəyər təyin edilmiş statik dəyişənlər var və bu dəyişənlərin təhlili növbəti dövrədə həyata keçirilir. . Beləliklə, qeyd olunan dəyişənlər cari cərəyanın sonunda və ya növbəti proqram dövrünün əvvəlində modulun vəziyyətini xarakterizə edir. Bundan sonra biz yalnız tsiklik proqramların belə modullarını nəzərdən keçirəcəyik və onları qısaca MCP kimi qeyd edəcəyik.


Şəkil 1. Sonsuz döngə ilə idarəetmə proqramının tipik strukturu.

MCP-lər müxtəlif struktura malikdir, onların mürəkkəbliyi xüsusi meyarlara uyğun olaraq qiymətləndirilməlidir. V.V.Lipaev proqram modullarının mürəkkəbliyi üçün əlverişli və obyektiv meyar təklif etdi, yəni: modulun idarəetmə qrafikindəki yolların sayı və ümumi uzunluğu. Yalnız şərti və seçim ifadələri nəzərə alınır. Bununla belə, bu meyar açıq şəkildə statik yaddaşa malik MCP üçün kifayət deyil, çünki MCP-ni təhlil edərkən əvvəlki dövrədə təyin edilmiş bütün statik dəyişənlərin dəyərlərini yadda saxlamaq lazımdır. Bundan əlavə, C və Pascal kimi çox istifadə olunan proqramlaşdırma dillərində çoxdan məlum strukturlaşdırılmış proqramlaşdırma istisna olmaqla, alqoritmlərin və proqramların standartlaşdırılması üçün heç bir tövsiyə yoxdur. Bu məqalə MCP ilə bağlı bu boşluqları doldurmağı təklif edir.

2. Tsiklik proqram modullarının fraqmentləri

İki terminal fraqmenti və ya sadəcə fraqment, nəzərdən keçirilən MCP-lərin strukturlaşdırıldığı fərziyyəsi altında bir giriş və bir çıxış (dövr operatorları daxil olmaqla) olan proqramın bölməsi hesab ediləcək. Ən sadə fraqmentə tək bir ifadə daxildir. Fraqmentlərin ardıcıllığı da fraqmentdir. MCP, öz növbəsində, bir fraqmentdir və fraqmentlər ardıcıllığından ibarətdir.

Qərar cədvəllərini həyata keçirən modulların strukturunun sintezi üçün müstəqil fraqmentlər üsulu təklif olunur. Bu halda modul fraqmentlərinin ardıcıllığının istənilən yerinə daxil edilə bilən fraqment müstəqil hesab olunur. Belə fraqmentin yerləşməsinin müstəqilliyi onda təhlil edilən məlumatların fraqmentlərin müəyyən edilmiş ardıcıllığında yaradılmaması və müstəqil fraqmentdə yaradılan məlumatların bu fraqmentlər ardıcıllığında təhlil edilməməsi ilə bağlıdır. Buna görə müstəqil fraqmentlər paralel olaraq (psevdoparalel) icra edilə bilər. Şəkildə. Şəkil 2-də iki müstəqil fraqmentli modulun mümkün icra variantları göstərilir. “a” və “b” variantlarında fraqmentlər proqramın mahiyyətini təhrif etmədən yenidən düzülür; “c” variantında fraqmentlər paralel olaraq həyata keçirilir.


Şəkil 2. Müstəqil fraqmentləri olan modulun tətbiqi variantları:

a) və b) - ardıcıl icra,

c) - paralel icra: ikiqat üfüqi xətt proqramın paralelləşdirilməsini, qalın üfüqi xətt paralel proseslərin tamamlanmasını göstərir.

Asılı fraqment, yeri moduldakı digər fraqment(lər)in yerindən asılı olan fraqmentdir. Yuxarıda və aşağıda asılı olan fraqmentləri ayırd edəcəyik. Üstdən asılı fraqment həmişə bu (asılı) fraqmentdə istifadə olunan dəyişənlərin formalaşdığı bəzi fraqmentin altında yerləşməlidir. Aşağıdan asılı fraqment həmişə bu fraqmentdə yaradılan dəyişənlərdən istifadə edən fraqmentin üstündə yerləşdirilməlidir. Biri yuxarıdan ikincidən, ikincisi aşağıdan birincidən asılı olan iki asılı fraqmentə qarşılıqlı asılı fraqmentlər deyilir. Onlar dəyişdirilə bilməz və paralel olaraq həyata keçirilə bilməz. Şəkildə. Şəkil 3-də qarşılıqlı asılı fraqmentləri olan modul nümunəsi göstərilir. Qarşılıqlı asılı fraqmentlər arasında onlardan asılı və ya müstəqil başqaları ola bilər. şək.3. Asılı fraqmentləri olan modul.

Moduldakı yeri sabit olaraq ciddi şəkildə müəyyən edilmiş asılı fraqmenti çağıracağıq. Məsələn, klaviaturadan daxil edilmiş simvolun tanınması modulunda birincisi faktiki simvol girişinin aşağıdan asılı fraqmenti olmalıdır. Modulun “start” və “son” operatorları sabit fraqmentlərdir.

Mütləq müstəqil fraqmentlər mövcud deyil, çünki hər hansı bir modulda başlanğıc və sonun qeyd olunan sabit fraqmentləri var. Buna görə də, müstəqil fraqment, ümumiyyətlə, iki qarşılıqlı asılı fraqmentlə məhdudlaşan mümkün yerləşmə sahəsinə malikdir. Yəni, müstəqil fraqmentin daha sərt tərifi belədir: iki sabit fraqmentə münasibətdə müstəqil olaraq yuxarıda və aşağıda göstərilən sabit fraqmentlərlə məhdudlaşan fraqmentlər ardıcıllığının istənilən yerində yerləşdirilə bilən fraqment adlandıracağıq.




Üst