Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Windows 8
  • Programimi i proceseve llogaritëse ciklike vba. Programimi i proceseve ciklike

Programimi i proceseve llogaritëse ciklike vba. Programimi i proceseve ciklike

Qëllimi i punës:

Studioni operatorët ciklikë për, while, do - while, mësoni se si të hartoni dhe programoni algoritme ciklike.

Informacion i shkurtër teorik

Operatorët e lakut përdoren kur është e nevojshme të përsëriten disa herë disa veprime (operatorë dhe operacione), dhe seksione të tilla të algoritmeve quhen unaza.

Operatori i ciklit for

Forma bazë e deklaratës së ciklit for është:

për (shprehje_1; shprehje_2; shprehje_3)

operator;

Ku shprehje_1– vlera fillestare e parametrit të ciklit;

shprehje_2– kontrollimin e kushteve për vazhdimin e ciklit;

shprehje_3– ndryshimi i parametrit të ciklit (korrigjim);

operatori– operator i thjeshtë ose i përbërë në gjuhën C.

Skema e funksionimit të operatorit është si më poshtë: vetëm një herë, së pari llogaritet shprehja_1, më pas kontrollohet shprehja_2, dhe nëse është "e vërtetë", atëherë ekzekutohet një seksion ciklik i programit, atëherë korrigjohet parametri, etj. derisa shprehja_2 të marrë vlerën “false”.

Për shembull: për (k=1; k<5; k++)

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

Si rezultat i ekzekutimit të këtij operatori, numrat nga 1 në 4 shtypen në një kolonë.

Ju mund të përdorni një variabël të çdo lloji bazë si një parametër cikli.

Për shembull:

për (ch='a'; kap<=’z’; ch++) // Вывод на экран букв

printf(“ %c”,ch); // Alfabeti latin

Është e nevojshme të kontrolloni me kujdes strukturën e sytheve for në program në mënyrë që të mos përfundoni me një lak të pafund (nga i cili nuk ka dalje).

Për shembull:

për(k=10; k>6;k++)

printf (“lak i pafund\n”);

Cikli i daljes përpara afatit në mënyrat e mëposhtme:

Me kusht shtesë;

Duke përdorur operatorët e mëposhtëm:

pushim;- dalja nga cikli në të cilin ndodhet ndërprerja, kontrolli transferohet në deklaratën e parë të ekzekutuar pas ciklit;

dalje (int Kod);- dilni nga programi;

kthimi;- dalje nga funksioni;

Përdorimi i operatorit të kërcimit të pakushtëzuar shkoj<метка>;

Herët përfundimi i hapit aktual ciklik e mundur duke përdorur një kusht ose operator shtesë vazhdojnë, e cila ndërpret ekzekutimin e hapit të ciklit aktual, d.m.th. anashkalon deklaratat e pjesës tjetër të ciklit dhe transferon kontrollin në deklaratën kryesore të ciklit për të rregulluar parametrin dhe për të kontrolluar gjendjen.

Ndalohet transferimi i kontrollit nga jashtë në brendësi të lakut.

Mund të mungojë ndonjë nga shprehjet e ciklit for në kllapa, por simboli ";". nuk mund të ulet.

Për shembull:

për (; i<3; i++)

vendos ("Përshëndetje!");

Deklaratat ciklike while dhe do–while

Forma bazë e operatorit ciklik derisa:

Ndërsa (kushti)

operator;

Ku operatori

Cikli funksionon për aq kohë sa kushti vlerësohet si i vërtetë, d.m.th. shprehja në kllapa jep një rezultat jozero. Ky është një lak me një parakusht - së pari kontrollohet kushti, pastaj ekzekutohet deklarata. Prandaj, cikli while nuk do të ekzekutohet as një herë nëse rezultati fillestar i llogaritjes së kushtit është 0.

Forma bazë e operatorit bej Nderkohe:

operator;

ndërsa(kusht);

Ku operatoriështë një pohim i thjeshtë, i përbërë ose bosh.

Operatori bëjderisa– operator i ciklit me kusht postar, d.m.th. fillimisht ekzekutohet deklarata dhe më pas gjendja kontrollohet për vërtetësi. Meqenëse në një cikli do–while gjendja kontrollohet në fund të ciklit, cikli do të ekzekutohet të paktën një herë.

Në unazat si while dhe do–while, të njëjtat metoda të daljes së hershme nga cikli dhe përfundimit të hershëm të hapit aktual të ciklit lejohen si në deklaratën for, por në rastin e fundit, ndryshe nga cikli for, kontrolli transferohet. për të kontrolluar gjendjen. Për të parandaluar një lak të pafund brenda sytheve while dhe do–while, duhet të parashikoni ndryshimin e variablave të përfshirë në kusht.

Për shembull:

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

nëse (i%5!=0) vazhdon;

printf(“%5d”,i);

Shembuj të sytheve të pafundme:

operator;

2) while(number_not_0) // Gjithmonë e vërtetë!

operator;

operator;

ndërsa (numri_jo_0); // Gjithmonë e vërtetë!

Midis operatorëve të ciklit duhet të ketë një kusht daljeje.

Unazat e mbivendosura

Në rastin e sytheve të mbivendosur, një lak është brenda një tjetri, për shembull:

për(i=nn;i

për(j=mn;j

operator;

Ku operatoriështë një pohim i thjeshtë, i përbërë ose bosh. Cikli i brendshëm do të ekzekutohet për çdo vlerë të parametrit i që plotëson gjendjen e ciklit të jashtëm.

Shembull:

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

për(j=1;j<4;j++)

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

printf (“\n”);

Një shembull i përdorimit të deklaratës for

Llogaritni. Programi duhet të printojë rezultatet e ndërmjetme dhe përfundimtare.

Teksti i programit mund të duket si

#përfshi

#përfshi

vendos ("Fut N");

scanf(“%d”,&N);

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

( // marr dhe cakton dyfish

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

printf("\n PËRGJIGJE: s=%f, Shtypni çdo tast...",s);

Opsione për detyra individuale

Shkruani një program për të përcaktuar një tabelë të vlerave të funksionit në një gamë arbitrare [ a,b] ndryshon argumenti X me hapa arbitrare h. vlerat a, b, h futur nga tastiera. Tabela duhet të përmbajë kolonat e mëposhtme: numrin e sekuencës, vlerën e argumentit x, vlera e funksionit, mesazhi për rritjen ose zvogëlimin e funksionit, ndryshimin e dy vlerave të funksionit fqinj.

Përcaktoni vlerat maksimale dhe minimale të funksionit.

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.

PROGRAMIMI I PROCESEVE CIKLIKE KOMPJUARIKE

Informata themelore

Quhet një proces në të cilin një deklaratë ose grup deklaratash ekzekutohet në mënyrë të përsëritur për vlera të ndryshme argumentesh procesi ciklik. VBA përdor deklarata looping për të kryer veprime të përsëritura, të cilat janë të llojeve të mëposhtme:

operatori lak me parametër For – Tjetra, ndërtimi i së cilës përdoret nëse paraprakisht dihet se sa herë duhet të përsëritet trupi i lakut:

Për numërues = fillestar_vlera Pastaj final_vlera Hapi hap block_of_operators

Tjetra me banak

operatorët lak me parakusht ose paskushte, të cilat përdoren për të organizuar një lak me një numër të panjohur përsëritjesh të trupit të lakut:

Dizajni i lakut

Dizajni i lakut

me një parakusht duket si:

me një kusht postar ka formën:

Kushti Do Ndërsa

deklaratë_blloku

deklaratë_blloku

Kushti Loop while

Bëni deri në kusht

deklaratë_blloku

deklaratë_blloku

Loop Deri në gjendje

Ndërsa kushti

deklaratë_blloku

Ne do të zhvillojmë një formë të personalizuar dhe do të krijojmë një program për të përcaktuar indeksin e përfitimit të projektit të investimit të propozuar për rinovimin e pajisjeve, nëse shuma e investimit fillestar (IP) është 10,000 mijë rubla, norma e skontimit është r = 10%, dhe e pritshme flukset monetare janë si më poshtë:

Rrjedha e parasë (DPk B), B mijë rubla

Lëreni formën e përdoruesit të duket si (Fig. 1) dhe vlerat e flukseve monetare në vitet 1-5 lexohen nga qelizat e fletës së punës "Shembulli 1" (Fig. 2).

Vetitë e objekteve të formës janë paraqitur në tabelën 1.

Oriz. 1. Formulari "Indeksi i Rentabilitetit"

rentabiliteti

projekt investimi"

llogaritur me formulë

∑n

DPk

IR =

k = 1 (1+ r)

ku n është numri i viteve gjatë të cilave do të mbërrijnë arkëtimet në para.

Oriz. 2. Tabela e shpërndarjes së fluksit të parasë

Tabela 1

Prona

Prona

Titulli = qiraja e indeksit-

Titulli = Madhësia origjinale

bardhësia e investimit

investimet e reja

projekti

Titulli = Norma e skontimit

Titulli = Indeksi i Rentabilitetit

Titulli = Pastro

Titulli = Dalje

Për të përpunuar ngjarjen e klikimit të butonit "Llogarit", shkruani sa vijon

Nën private calc_Click()

'cakto llojin e ndryshores

Dim pv, dp, i, n Si numër i plotë

Dim r, s Si Beqar

'leximi i vlerave të variablave

pv = Val(txtPV.Tekst)

r = Val(txtSD.Text) / 100

n = Val(InputBox("Fut numrin e viteve për të cilat

ejani

monetare

faturat", "Hyrja e të dhënave"))

'leximi i vlerave të rrjedhës së parasë

dp = Qeliza (2, i + 2)

'përmbledhje

txtIR.Text = Rrumbullakët(s / pv, 2) 'rrumbullakimi dhe nxjerrja e rezultatit

Funksioni Round(N, k) rrumbullakos numrin N në k shifra dhjetore.

Më pas duke përdorur elementin Toolbar Button Kontrollet Le të vendosim butonin “Open Form” poshtë tabelës për të nisur procedurën “Profitability Index Form” (Fig. 3). Kodi për këtë procedurë duket si ky:

Nën-Form Private Indeksi i Rentabilitetit_Click()

Oriz. 3. Përcaktimi i indeksit të përfitimit të një projekti investimi

Duke përdorur butonin e krijuar "Formulari i hapur", ne hapim formularin dhe llogarisim indeksin e përfitimit të projektit të investimit (Fig. 3).

Le të zhvillojmë një formë të personalizuar dhe të krijojmë një program për të gjetur të gjithë numrat dyshifrorë, shuma e katrorëve të shifrave të të cilëve është e pjesëtueshme me 13.

Për të krijuar këtë formë të personalizuar, le të shkojmë te redaktori VB (do të qëndrojmë në të njëjtin libër pune MS Excel si në shembullin 1) dhe të shtojmë një formë tjetër (Fig. 4).

Vetitë e objekteve të formës janë paraqitur në tabelën 2.

Për të trajtuar ngjarjet klikoni butonin

kodin e mëposhtëm:

Nën private calc_Click()

Oriz. 4. Formuloni për shembull 2

Label2.Caption = ""

Përkufizimi i shifrës së parë të një numri dyshifror

'përkufizimi i shifrës së dytë të një numri dyshifror

Nëse (i1^2+i2^2) Mod 13=0 Atëherë Label2.Caption = Label2.Caption+Str(i)+" "

Nën private pastër_Click()

Label2.Caption = ""

Nën-in privat exitForm_Click()

tabela 2

Prona

Titulli = Shembulli 2

Titulli = Numra dyshifrorë, shuma

katrorët e numrave të pjesëtueshëm me 13

TextAlign = 2-fmTextAlignCenter

Titulli = ""

Madhësia automatike = E rreme

Prona

Titulli = Pastro

Titulli = Dalje

Në fletën e punës “Shembulli 2” do të vendosim

Butoni "Hap formularin" për të hapur formularin

"Shembulli 2" dhe hapni këtë formë (Fig.

Le të zhvillohemi

zakon

ndërfaqe

dhe make up

program për ju

shumat e serive:

numrat me saktësi ε = 10P

k+2

S = ∑

(− 1)

k = 1

Le të qëndrojmë në të njëjtin libër pune në Excel,

si në shembujt 1 dhe 2. Duke përdorur mjetin

Oriz. 5. Numrat dyshifrorë, shuma e katrorit

shënimet "Mbishkrim", "Fushë" dhe "Buton"

numri i shifrave të cilat janë të pjestueshme me 13

asnjë mjet

Elementet

menaxhimi

Le të vendosim objektet përkatëse në fletën e punës "Shembulli 3" (Fig. 6).

Vetitë e objekteve të fletës "Shembulli 3" janë paraqitur në Tabelën 3.

Tabela 3

Prona

Prona

Titulli = Shuma e serive

Titulli = Pastro

Për të përpunuar ngjarjet e shtypjes së butonave "Llogarit" dhe "Pastro", fut kodin e mëposhtëm të programit në modulin "Fleta 3 (Shembulli 3)":

eps = Val(InputBox("Caktimi i saktësisë", "Hyrja e të dhënave"))

a = (-1)^(k + 2) / (f * 2^k) s = s + a

Loop txtS.Text = s

Nën Private clean_Click() txtS.Text = ""

Këtu do të jetë trupi i ciklit Do while – Loop

të kryhet

afati

absolute

k+2

n− 1

k+2

n+ 2

madhësia (d.m.th.

(− 1)

−∑

(− 1)

(− 1)

) do

Oriz. 6. Llogaritni shumën

k = 1

k = 1

tejkalojnë saktësinë e specifikuar 10 P

Le të kontrollojmë funksionimin e programit (Fig. 7).

Le të zhvillohemi

zakon

Le të shkruajmë një program për të zgjidhur problemin e mëposhtëm.

Kur analizohen aktivitetet ekonomike, para-

instaluar

tjetër

model: në janar 2004, fitimi i kësaj

ndërmarrja arriti në 573 mijë rubla. dhe gjatë

gjatë 5 viteve të ardhshme u rrit çdo muaj me i%,

ku i është numri i muajit (d.m.th. në shkurt - me 2%, në mars

- me 3%, etj.), krahasuar me shumën e fitimit në

Oriz. 7. Rezultati i llogaritjes

muajin e kaluar.

Përcaktoni para-

shumat e serive

duke pranuar shumën e fitimit për vitet 2004, 2005, ..., 2008, si dhe shumën totale të fitimit për këto 5 vite.

Për të krijuar këtë formë të personalizuar, le të shkojmë te redaktori VB (do të qëndrojmë në të njëjtin libër pune MS Excel si në shembujt 1–3) dhe të shtojmë një formë tjetër (Fig. 8). Prodhimi i vlerave të llogaritura të fitimit të ndërmarrjes do të kryhet si në fushën e objektit të listës (ListBox), të vendosur në formular, ashtu edhe në qelizat e fletës së punës "Shembulli 4" (Fig. 9).

Oriz. 8. Formulari “Fitimi i ndërmarrjes” Fig. 9. Tabela për shembull 4

Vetitë e objekteve të formës janë paraqitur në tabelën 4.

Tabela 4

Prona

Prona

Titulli = Fitimi i ndërmarrjes

Titulli = Pastro

Titulli = Dalje

Shënim. Vetia ColumnCount specifikon numrin e kolonave të objektit ListBox.

Për të përpunuar ngjarjet e shtypjes së butonave "Llogarit", "Pastro" dhe "Dalje".

lëviz" fut kodin e mëposhtëm:

Nën Private calc_Click() Dim i, j Si numër i plotë

Dim PrM, prG, sPr Si Single

PrM = Val(InputBox("Fut fitimin e marrë në janar 2004," "Hyrja e të dhënave"))

ListBox përdor metodën AddItem për të shtuar artikuj në listë

Lista Emri. Shprehja e artikullit Shtesë, Indeksi

ku Expression është elementi i listës që duhet shtuar; Indeksi – numri serial i një elementi në listë (numërimi i elementeve të listës fillon nga 0).

Dhe vetia List (Numri i rreshtit, Numri i kolonës) i objektit ListBox kthen (cakton) elementin e listës që ndodhet në kryqëzimin e rreshtit dhe kolonës së specifikuar.

Në fletën e punës “Shembulli 4” do të vendosim butonin “Open Form” për të thirrur formularin “Enterprise Profit” dhe do ta hapim këtë formular (Fig. 10).

Tani mund të shtoni një fletë tjetër në librin e punës MS Excel të quajtur "Tabela e Përmbajtjes", në të cilën, për shembull, duke përdorur mjetin Button në shiritin e veglave Forms, do të krijojmë katër butona: "Indeksi i përfitimit", "Numrat me dy shifra". , Ndërmarrjet “Suma e Serive”, “Fitimi”.

Në redaktorin VB, shtoni një modul të ri (Insert → Module), në të cilin futim kodin e mëposhtëm:

Shembulli i Nën-Fletës Publike1()

Fletët e punës ("Shembulli 1").Aktivizo

ListPr.Shto artikull "Viti", 0

'vendosja e nënshkrimeve dhe të dhënave fillestare

ListPr.List(0, 1) = "Fitimi, mijë rubla."

'cikël për vit

'ciklojnë muajt e çdo viti

Nëse (i = 4) Dhe (j = 1) Atëherë

PrM = PrM * (1 + j / 100)

Duke klikuar në butonin "Shkarko arkivin", do të shkarkoni skedarin që ju nevojitet plotësisht pa pagesë.
Përpara se të shkarkoni këtë skedar, mendoni për ato ese të mira, teste, punime termike, disertacione, artikuj dhe dokumente të tjera që janë të padeklaruara në kompjuterin tuaj. Kjo është puna juaj, ajo duhet të marrë pjesë në zhvillimin e shoqërisë dhe të përfitojë njerëzit. Gjeni këto vepra dhe dorëzojini ato në bazën e njohurive.
Ne dhe të gjithë studentët, studentët e diplomuar, shkencëtarët e rinj që përdorin bazën e njohurive në studimet dhe punën e tyre do t'ju jemi shumë mirënjohës.

Për të shkarkuar një arkiv me një dokument, futni një numër pesëshifror në fushën më poshtë dhe klikoni butonin "Shkarko arkivin"

Dokumente të ngjashme

    Hartimi i fletës së raportit “Dyqane” në Excel 2013. Puna me tabela nga familja Microsoft Office. Ndërtimi i grafikëve me byrek dhe histogrameve, grafikëve. Zhvillimi i procedurave për tabelimin e funksioneve. Programimi i funksioneve të përdoruesit në VBA.

    puna e kursit, shtuar 04/03/2014

    Microsoft Office Suite. Tabela MS Excel. Krijimi i një formulari ekrani dhe futja e të dhënave. Formulat dhe funksionet. Shpjegimi i funksioneve të përdoruesit të MS Excel. Formulimi fizik i problemeve. Vendosja e kushteve kufitare për vlerat e pranueshme të variablave.

    puna e kursit, shtuar 06/07/2015

    Karakteristikat e përdorimit të funksioneve të integruara të Microsoft Excel. Krijimi i tabelave, plotësimi i tyre me të dhëna, ndërtimi i grafikëve. Aplikoni formula matematikore për të kryer pyetje duke përdorur paketat e aplikacionit. Kërkesat teknike për kompjuterin.

    puna e kursit, shtuar 25.04.2013

    Organizimi i skedarit dhe aksesi. Operacionet e skedarëve. Programimi duke përdorur funksione të integruara I/O; procese llogaritëse lineare, të degëzuara dhe ciklike duke përdorur operatorin If-else, Case Selection; vargjeve dhe matricave.

    puna e kursit, shtuar 24.05.2014

    Procesori i spreadsheet Microsoft Excel është një program aplikimi i krijuar për të automatizuar procesin e përpunimit të informacionit ekonomik të paraqitur në formën e tabelave; aplikimi i formulave dhe funksioneve për llogaritje; duke komplotuar.

    abstrakt, shtuar 02/03/2013

    Programimi i proceseve llogaritëse në FORTRAN për të siguruar ndërveprimin e sistemit "Njeriu-Prodhimi-Natyra". Përdorimi i grupeve për të përpiluar cikle për llogaritjen e nivelit të ndotjes së mjedisit dhe kostot e përpunimit të mbetjeve.

    puna e kursit, shtuar 30.05.2014

    Krijimi i një aplikacioni që do të vizatojë grafikët e funksionit duke përdorur një shprehje të caktuar matematikore. Zhvillimi i programit “Gjenerator i funksioneve matematikore”. Krijimi i një magjistari funksioni për futjen e një shprehje matematikore, testim.

    tezë, shtuar 16.02.2016

1. Metodat për ndërtimin e proceseve llogaritëse ciklike në programe.

2. Hyrë në kompjuterNnumra realë. Shkruani një program që shfaq mesataren aritmetike të këtij grupi.

Prezantimi

Programet ciklike përdoren pothuajse në çdo softuer. Në këtë rast, ciklet mund të jenë eksplicite ose implicite. Në veçanti, cikli i nënkuptuar është i pranishëm në mbajtësit e ndërprerjeve, të cilët në mënyrë efektive funksionojnë në një lak të pafund, trupi i të cilit shkaktohet nga ndërprerja. Nënprogramet - funksionet e dritareve të aplikacioneve të Windows - janë gjithashtu ciklike. Më poshtë shqyrtojmë programet me një lak, trupi i të cilave përmban module funksionale.

Procesi ciklikështë një proces llogaritës në të cilin llogaritjet kryhen në mënyrë të përsëritur duke përdorur të njëjtat formula për vlera të ndryshme të argumentit.

Programet, zbatimi i një procesi ciklik quhen programe ciklike.

Organizimi i ciklit mund të ndahet në fazat e mëposhtme:

përgatitja (inicializimi) i ciklit (AND);

kryerja e llogaritjeve të lakut (trupi i lakut) (T);

modifikimi i parametrave (M);

duke kontrolluar gjendjen e përfundimit të ciklit (U).

Rendi i këtyre hapave, si T dhe M, mund të ndryshojë. Në varësi të vendndodhjes së kontrollit të gjendjes së përfundimit të ciklit, bëhet një dallim midis cikleve me përfundime të poshtme dhe të sipërme. Për një cikli fundor nga fundi, trupi i ciklit ekzekutohet të paktën një herë sepse fillimisht kryhen llogaritjet dhe më pas kontrollohet kushti për daljen nga cikli.


Në rastin e një cikli me fund të sipërm, trupi i ciklit mund të mos ekzekutohet edhe një herë nëse kushti i daljes plotësohet menjëherë.

Një cikël quhet determinist nëse numri i përsëritjeve të trupit të lakut dihet ose përcaktohet paraprakisht. Një cikël quhet iterativ nëse numri i përsëritjeve të trupit të lakut është i panjohur paraprakisht, por varet nga vlerat e parametrave (disa variablave) të përfshirë në llogaritjet.

Trupi i lakut- Ky është një seksion i përsëritur në mënyrë të përsëritur i programit.

Parametri i lakutështë një variabël që merr vlera të reja sa herë që cikli përsëritet (qarqet mund të jenë të thjeshta ose komplekse).

Pamje e përgjithshme e lakut n herë

Në përgjithësi, një cikli n herë shkruhet kështu:

nc numri i përsëritjeve

Fjala e shërbimit nts (fillimi i ciklit) dhe kts (fundi i ciklit) shkruhen rreptësisht njëra poshtë tjetrës dhe lidhen me një vijë vertikale. Në të djathtë të kësaj rreshti, është shkruar një sekuencë e përsëritshme komandash (trupi i lakut).

Numri i përsëritjeve është një numër i plotë arbitrar.

Gjatë ekzekutimit të algoritmit, sekuenca e komandave në trupin e lakut përsëritet numrin e caktuar herë. Rregullat e gjuhës algoritmike lejojnë të specifikoni çdo numër të plotë të përsëritjeve. Mund të jetë zero ose edhe negative. Këto raste nuk konsiderohen të gabuara, trupi i lakut thjesht nuk do të ekzekutohet as edhe një herë, dhe kompjuteri do të vazhdojë menjëherë të ekzekutojë komandat e shkruara pas cc

Pamje e përgjithshme e ciklit deri tani

Në përgjithësi, cikli aktualisht është shkruar si më poshtë:

asnjë kusht ende

| trupi i lakut (sekuenca e komandave)

Kur kryeni një cikël, kompjuteri përsërit veprimet e mëposhtme:

a) kontrollon gjendjen e shkruar pas fjalës së funksionit while;

b) nëse kushti nuk plotësohet, atëherë ekzekutimi i ciklit përfundon dhe kompjuteri fillon të ekzekutojë komandat e shkruara pas cc. Nëse kushti plotësohet, atëherë kompjuteri ekzekuton trupin e lakut, kontrollon përsëri gjendjen, etj.

Pamje e përgjithshme e ciklit për

nc për i nga i1 në i2

| trupi i lakut (sekuenca e komandave)

Këtu i është emri i një vlere të tipit të plotë, i1, i2 janë numra të plotë arbitrar ose shprehje me vlera të plota. Trupi i ciklit ekzekutohet në mënyrë sekuenciale për i = i1, i = i1 + 1, i1 + 2, …i = i2.

Rregullat e gjuhës algoritmike lejojnë të specifikoni çdo numër të plotë i1, i2. në veçanti, i2 mund të jetë më i vogël se i1. ky rast nuk konsiderohet si gabim - thjesht trupi i ciklit nuk do të ekzekutohet as edhe një herë, dhe kompjuteri do të vazhdojë menjëherë me ekzekutimin e komandave të shkruara pas cc.

Loop n herë dhe loop while

Unazat n herë dhe deri tani janë formatuar pothuajse në të njëjtën mënyrë në gjuhën algoritmike. Kjo nuk është për t'u habitur, sepse të dyja këto komanda përcaktojnë një lak - një sekuencë të përsëritur komandash. Fjalët e shërbimit nts dhe kts tregojnë se një lak është duke u ekzekutuar, dhe kreu i ciklit specifikon mekanizmin specifik për ekzekutimin e tij.

Sidoqoftë, këto dy cikle kanë një ndryshim domethënës. Kur kompjuteri fillon të ekzekutojë një lak n herë, ai e di se sa herë do të duhet të përsërisë trupin e ciklit. Gjatë ekzekutimit të një cikli, kjo nuk është ende rasti: kompjuteri kontrollon gjendjen e ciklit çdo herë dhe nuk mund të përcaktojë paraprakisht se kur do të përfundojë ekzekutimi. Tani për tani, ju mund ta zbuloni numrin e përsëritjeve të një cikli vetëm pasi të përfundojë cikli.

Kjo e bën të qartë se në cilat raste duhet përdorur cili lak. Nëse numri i përsëritjeve dihet deri në kohën kur fillon cikli, është e përshtatshme të përdoret cikli n herë. Nëse numri i përsëritjeve nuk mund të përcaktohet paraprakisht, është i nevojshëm një cikël.

Për shembull, një program kontrolli automatik ka strukturën e treguar në Fig. 1. Modulet e përfshira në cikël(si dhe modulet e trajtimit të ndërprerjeve), me një hyrje dhe një dalje secila, zakonisht kanë veçorinë karakteristike që modulet përmbajnë variabla statike të cilave u është caktuar një vlerë në ciklin aktual dhe analiza e këtyre variablave kryhet në ciklin e ardhshëm. . Kështu, variablat e përmendur karakterizojnë gjendjen e modulit në fund të ciklit aktual ose në fillim të ciklit të ardhshëm të programit. Në vijim, ne do të shqyrtojmë vetëm module të tilla të programeve ciklike dhe do t'i shënojmë shkurtimisht si MCP.


Fig.1. Struktura tipike e një programi kontrolli me një lak të pafund.

MCP-të kanë një strukturë të larmishme, kompleksiteti i së cilës duhet të vlerësohet sipas kritereve të veçanta. V.V. Lipaev propozoi një kriter të përshtatshëm dhe objektiv për kompleksitetin e moduleve të softuerit, përkatësisht: numrin dhe gjatësinë totale të shtigjeve në grafikun e kontrollit të modulit. Vetëm deklaratat e kushtëzuara dhe të përzgjedhjes merren parasysh. Sidoqoftë, ky kriter nuk është qartësisht i mjaftueshëm për një MCP me memorie statike, sepse kur analizoni një MCP është e nevojshme të mbani mend vlerat e të gjitha variablave statike të vendosura në ciklin e mëparshëm. Për më tepër, nuk ka rekomandime për standardizimin e algoritmeve dhe programeve, përveç programimit të strukturuar të njohur prej kohësh në gjuhët e programimit të përdorura zakonisht si C dhe Pascal. Ky artikull propozon plotësimin e këtyre boshllëqeve në lidhje me MCP.

2. Fragmente të moduleve të programit ciklik

Një fragment me dy terminale, ose thjesht një fragment, do të konsiderohet një seksion i një programi me një hyrje dhe një dalje (duke përfshirë operatorët e ciklit) me supozimin se MCP-të në shqyrtim janë të strukturuara. Fragmenti më i thjeshtë përfshin një deklaratë të vetme. Një sekuencë fragmentesh është gjithashtu një fragment. MCP, nga ana tjetër, është një fragment dhe përbëhet nga një sekuencë fragmentesh.

Metoda e fragmenteve të pavarura është propozuar për sintetizimin e strukturës së moduleve që zbatojnë tabelat e vendimeve. Në këtë rast, një fragment që mund të futet kudo në sekuencën e fragmenteve të modulit konsiderohet i pavarur. Pavarësia e vendndodhjes së një fragmenti të tillë është për faktin se të dhënat e analizuara në të nuk gjenerohen në sekuencën e caktuar të fragmenteve, dhe të dhënat e krijuara në fragmentin e pavarur nuk analizohen në këtë sekuencë fragmentesh. Prandaj, fragmente të pavarura mund të ekzekutohen paralelisht (pseudo-paralel). Në Fig. Figura 2 tregon opsionet e mundshme të zbatimit për një modul me dy fragmente të pavarura. Në opsionet "a" dhe "b" fragmentet riorganizohen pa shtrembëruar thelbin e programit; në opsionin “c” fragmentet zbatohen paralelisht.


Fig.2. Opsionet për zbatimin e një moduli me fragmente të pavarura:

a) dhe b) - zbatimi vijues,

c) - zbatimi paralel: një vijë e dyfishtë horizontale tregon paralelizimin e programit, një vijë e trashë horizontale tregon përfundimin e proceseve paralele.

Një fragment i varur është ai, vendndodhja e të cilit varet nga vendndodhja e një fragmenti tjetër në modul. Do të bëjmë dallimin midis fragmenteve të varura nga lart dhe poshtë. Fragmenti i varur nga lart duhet të jetë gjithmonë nën ndonjë fragment në të cilin janë formuar variablat e përdorur në këtë fragment (të varur). Një fragment i varur nga fundi duhet të vendoset gjithmonë mbi një fragment që përdor variabla të krijuara në këtë fragment. Dy fragmente të varura, njëri prej të cilëve është i varur nga lart nga i dyti dhe i dyti nga poshtë i varur nga i pari, do të quhen fragmente të varura reciprokisht. Ato nuk mund të ndërrohen dhe nuk mund të zbatohen paralelisht. Në Fig. Figura 3 tregon një shembull të një moduli me fragmente të varura reciprokisht. Midis fragmenteve të varura reciprokisht mund të ketë të tjerë, të varur ose të pavarur prej tyre. Fig.3. Modul me fragmente të varura.

Ne do të quajmë një fragment të varur, vendndodhja e të cilit në modul është përcaktuar rreptësisht si fikse. Për shembull, në modulin për njohjen e një karakteri të futur nga tastiera, i pari duhet të jetë fragmenti i varur nga fundi i hyrjes aktuale të karaktereve. Operatorët "fillimi" dhe "mbarimi" i një moduli janë fragmente fikse.

Fragmente absolutisht të pavarura nuk ekzistojnë, vetëm sepse në çdo modul gjenden fragmentet fikse të përmendura të fillimit dhe të fundit. Prandaj, një fragment i pavarur, në përgjithësi, ka një zonë të mundshme vendndodhjeje të kufizuar nga dy fragmente të varura reciprokisht. Kjo do të thotë, një përkufizim më i rreptë i një fragmenti të pavarur është si vijon: i pavarur në lidhje me dy fragmente fikse do të quajmë një fragment që mund të vendoset kudo në sekuencën e fragmenteve të kufizuara sipër dhe poshtë nga fragmentet fikse të specifikuara.

Në programim, shpesh ka detyra që kërkojnë ekzekutim të përsëritur të të njëjtit grup deklaratash programore me vlera të ndryshme të operandëve të tyre. Procese të tilla quhen ciklike ose thjesht cikle. Një grup deklaratash të përsëritura në mënyrë ciklike formon të ashtuquajturat trup lak, e cila mund të përfaqësohet ose nga një shprehje e thjeshtë ose e përbërë. Ne do ta quajmë ekzekutimin një herë të trupit të ciklit përsëritje.

Trupi i një cikli në një program gjithmonë paraprihet nga kokën e ciklit, që përmban emërtimin operatori i ciklit dhe një shprehje që përcakton (drejtpërsëdrejti ose indirekt) numrin e përsëritjeve. Vini re se trupi i lakut është operand i operatorit të ciklit; prandaj, kreu dhe trupi i lakut përbëjnë një njësi strukturore të pandashme të programit. Në vijim, duke përdorur termin " operatori i ciklit", do të nënkuptojmë si kokën ashtu edhe trupin e lakut.

Për të organizuar cikle në të gjitha sistemet e programimit, ka të specializuara operatorët e ciklit, përdorimi i të cilit e liron programuesin nga nevoja për të programuar ciklet "me dorë". MathCAD mbështet dy lloje të operatorëve të tillë - cikli me paracaktimin Për (e quajtur edhe lak me numërues) Dhe lak me parakusht Derisa . Një përshkrim i strukturës së këtyre operatorëve është dhënë në tabelën 5.

5.4.1 Operatori Për

Ky operator duhet të përdoret në rastet kur numri i përsëritjeve është i paracaktuar, domethënë i njohur paraprakisht.

Kreu i ciklit i këtij operatori (operandi i duhur) përmban një variabël të quajtur parametri(ose kundër) ciklit, Dhe lista e vlerave këtë parametër. Numri i elementeve të listës përcakton gjithashtu numrin e përsëritjeve - gjatë çdo përsëritjeje, parametri i lakut merr vlerën tjetër nga lista e specifikuar në kokë.

Parametri i lakut ka statusin e një variabli të brendshëm të programit dhe ka të gjitha vetitë e tij (të përshkruara në seksionin 5.1.4). Si rregull, parametri i lakut përdoret në anën e djathtë të shprehjeve të përfshira në trupin e lakut, megjithëse nuk ndalohet zyrtarisht përdorimi i tij në anën e majtë të shprehjeve (d.m.th., në të majtë të përkufizimit lokal operatori "f"). Duhet mbajtur mend se nëse një parametër është ndryshuar në trupin e lakut, vlera e tij e ndryshuar do të jetë e vlefshme vetëm deri në fund të përsëritjes aktuale, pasi para fillimit të përsëritjes tjetër parametri do të marrë ende vlerën tjetër nga lista e specifikuar në kokën e ciklit.

Formalisht, lejohet të mos përdoret fare parametri i lakut në shprehjet e trupit të lakut - në këtë rast, lista e vlerave të parametrave nuk luan ndonjë rol - vetëm gjatësia e kësaj liste është e rëndësishme, e cila përcakton numri i përsëritjeve (ndoshta të pakuptimta).

Pas përfundimit të përsëritjes së fundit, deklarata e programit që ndjek deklaratën e ciklit do të ekzekutohet. Në këtë rast, ndryshorja e përdorur si parametër i ciklit të përfunduar ruan vlerën që kishte në të fundit të përfunduar në fakt përsëritje[*]. Vini re se kjo vlerë nuk përkon gjithmonë me vlerën e fundit nga lista e specifikuar në kokën e ciklit, pasi një dalje "e hershme" nga cikli është e mundur kur operatori aktivizohet. Pushim të përfshira në trupin e lakut.

Lista e vlerave Parametri i lakut është shkruar në kokën e lakut pas simbolit " Î ", duke treguar anëtarësimin në një grup (ky simbol nuk ka nevojë të futet manualisht - ai do të shfaqet automatikisht kur të hyni në operator Për ). MathCAD lejon përdorimin tre forma shënimet në këtë listë: transferim direkt- elementët e listës janë specifikuar në mënyrë eksplicite të ndara me presje, parametri merr vlerat nga lista në rendin që shfaqen; në stilin e variablit të renditur - elementet e listës formojnë serinë aritmetike përkatëse; varg- elementët e listës marrin në mënyrë sekuenciale vlerat e elementeve të grupit sipas renditjes së indekseve të tyre (së pari, kolonat nga e majta në të djathtë, pastaj rreshtat nga lart poshtë).

Tre programet e paraqitura në figurën 21 ilustrojnë përdorime të ndryshme të operatorit Për .

Programi Fakt(n) njehson faktorialin e një numri n . Operatori i ciklit në këtë program është pjesë e një shprehjeje të përbërë, e cila, nga ana tjetër, është operandi i një operatori të kushtëzuar. Përndryshe. Parametri i lakut k merr vlera nga një seri aritmetike me numra të plotë.

Programi Ch(V,N,p) përpunon vektorin e hyrjes V , duke e zëvendësuar me vlerën fq ato elemente, indekset e të cilëve specifikohen nga elementet e vektorit të dytë hyrës N . Në këtë shembull, një listë e vlerave të parametrave të lakut i të përcaktuara nga një grup elementesh vektoriale N . Vini re se të dy këto programe kryejnë kontrollin e të dhënave hyrëse dhe bllokojnë ekzekutimin e algoritmit kryesor nëse argumentet aktuale të programit janë specifikuar gabimisht.

Programi L(M,z) dhënë në shembull V ), shoqërohet me komente të hollësishme dhe nuk kërkon shpjegim. Ky program ilustron mundësinë e përdorimit të deklaratave të shumëfishta të ciklit, njëri prej të cilëve përfshihet në deklarata trupi një tjetër. Përdorimi sythe të mbivendosur- një teknikë tipike e përdorur për përpunimin e vargjeve shumëdimensionale.

Figura 21 – Shembuj të programimit të ciklit Për


Figura 22 ilustron përdorimin e operatorëve Pushim Dhe Vazhdoni në trupin e lakut. Në mënyrë tipike, këta operatorë janë vetë operatorë të operatorëve të kushtëzuar Nëse ose Përndryshe .

Operatori Pushim ("abort") ndërpret ekzekutimi i ciklit dhe transferimi i kontrollit te operatori pas operatorit të ciklit të ndërprerë. Vini re se nëse operatori Pushim i ndërprerë lak i mbivendosur, ekzekutimi i lakut të jashtëm do të vazhdojë.

Operatori Vazhdoni ("vazhdim") vepron ndryshe - ai ndërpret vetëm përsëritjen aktuale të ciklit dhe transferon kontrollin në kokën e këtij cikli, pas së cilës ekzekutohet cikli vazhdon nga përsëritja tjetër (përveç nëse, sigurisht, përsëritja e ndërprerë ishte e fundit).

Operatori Pushim lejohet të përdoret dhe jashtë trupi i ciklit. Në këtë rast, ekzekutimi i të gjithë nënprogramit ndërpritet dhe rezultati i vlerësimit të shprehjes së fundit të ekzekutuar në të vërtetë kthehet.

Figura 22 – Shembuj të përdorimit të operatorëve Pushim Dhe Vazhdoni

Funksioni Shuma N(V) mbledh vetëm ato elemente vektoriale që përmbajnë të dhëna numerike skalare dhe anashkalon elementët e mbetur. Funksioni Anasjelltas (V) formon një vektor, elementët e të cilit janë vlerat e kundërta të elementeve përkatëse të vektorit origjinal. Për më tepër, nëse elementi tjetër përmban numrin "0" ose nuk është një skalar i një lloji numerik, cikli ndërpritet. Vini re se operatori Pushim në shembullin e fundit nuk e ndërpret programin, por ia transferon kontrollin operatorit Kthimi , menjëherë pas operatorit Për .

5.4.3 Operatori Derisa

Ndryshe nga operatori Për , kreu i deklaratës Derisa (në përkthim - " Mirupafshim") nuk përmban tregues të qartë të numrit të përsëritjeve - përmban shprehje logjike, vlera e së cilës llogaritet automatikisht para fillimit ekzekutimi i çdo përsëritjeje tjetër[†]. Për sa kohë që kjo shprehje është e vërtetë, cikli do të vazhdojë të përsëritet; Sapo shprehja të bëhet false pas përfundimit të përsëritjes tjetër, përsëritja tjetër e ciklit nuk do të ekzekutohet dhe deklarata e programit që pason deklaratën do të marrë kontrollin Derisa .

Natyrisht, nëse një shprehje logjike identike e rreme vendoset në kokën e ciklit, ky cikli nuk do të plotësojë asnjë nga përsëritjet e tij, dhe nëse kjo shprehje është identikisht e vërtetë, cikli do të jetë i pafund (situata e fundit quhet looping programe). Për të shmangur situata të tilla, operandët e një shprehjeje logjike duhet të përfshijnë një ose më shumë variabla që ndryshojnë vlerat e tyre. në trupin e lakut në mënyrë që cikli të jetë i kufizuar (mund të përdoren mjete të tjera për të parandaluar lakimin - për shembull, duke e detyruar operatorin të dalë nga cikli Pushim ).

Shembuj të përdorimit të operatorit Derisa janë paraqitur në figurën 23. Janë dhënë tri opsione për zgjidhjen e të njëjtit problem: secili nga programet F0 , F1 Dhe F2 kthen indeksin e elementit të parë të vektorit burimorV duke tejkaluar vlerën e specifikuarz .

Programi i parë (shembull A ) shton një në numërator k në trupin e lakut Derisa deri te tjetra k elementi i th i vektorit origjinal nuk do të kalojë vlerën e specifikuar z . Pas kësaj, cikli përfundon dhe programi kthen vlerën e fundit të modifikuar të ndryshores k , e cila është zgjidhja e problemit. Vini re se, ndryshe nga cikli Për , kundër k këtu është e nevojshme ta përpunoni atë me deklarata të veçanta: inicializoni (d.m.th., caktoni një vlerë fillestare) përpara operatorit të ciklit dhe ndryshoni vlerën e tij në trupin e ciklit.

Është e lehtë të shihet se opsioni A ) i programit ka një pengesë domethënëse: nuk e pengon programin të qarkullojë në rastin kur problemi nuk ka zgjidhje, domethënë kur parametri z tejkalon vlerën e elementit më të madh të vektorit V . Në këtë shembull, looping në një situatë të tillë nuk do të ndodhë me të vërtetë - por kjo nuk është meritë e programit tonë, por e sistemit MathCAD, i cili do të kontrollojë daljen e indeksit të vektorit V jashtë vlerave të lejuara dhe do të gjenerojë një mesazh gabimi.

Pa këtë pengesë është opsioni b ) i një programi në të cilin trupi i ciklit përmban një kontroll shtesë për vlefshmërinë e vlerës së indeksit tjetër dhe ndërpret me forcë ciklin me operatorin Pushim në situatën e duhur me lëshimin e një mesazhi me tekst.

Ndoshta zgjidhja më efektive për këtë problem është opsioni V ), i cili nuk e përdor fare operatorin Derisa . Në këtë program ndryshorja k përdoret vetëm për të ruajtur "pastërtinë e stilit" - për të përjashtuar përpunimin e parametrit të lakut i jashtë operatorit Për .

Figura 23 – Shembuj të programimit të ciklit Derisa

Artikujt më të mirë mbi këtë temë