Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 8
  • Programiranje cikličkih računarskih procesa vba. Programiranje cikličkih procesa

Programiranje cikličkih računarskih procesa vba. Programiranje cikličkih procesa

Cilj:

Proučiti cikličke izjave za, while, do - while, naučiti kako sastaviti i programirati ciklične algoritme.

Kratke teorijske informacije

Operatori ciklusa se koriste kada je potrebno nekoliko puta ponoviti neke radnje (operatore i operacije), a takvi dijelovi algoritama se nazivaju ciklusi.

for naredba petlje

Osnovni oblik operatora petlje for je

za (izraz_1; izraz_2; izraz_3)

operater;

gdje izraz_1– početna vrijednost parametra ciklusa;

izraz_2– provjera uslova za nastavak ciklusa;

izraz_3– promjena parametra ciklusa (korekcija);

operater je jednostavan ili složen C operator.

Operativna shema operatora je sljedeća: samo kada se izračuna izraz_1, onda se provjerava izraz_2, a ako je "tačno", onda se izvršava ciklički dio programa, zatim se ispravlja parametar, i tako sve dok izraz_2 uzima vrijednost “false”.

Na primjer: za (k=1; k<5; k++)

printf("\n %d", k);

Kao rezultat izvršavanja ove naredbe, brojevi od 1 do 4 se štampaju u koloni.

Možete koristiti varijablu bilo kojeg osnovnog tipa kao parametar petlje.

Na primjer:

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

printf(“%c”,ch); // latinično pismo

Morate pažljivo kontrolisati strukturu for petlji u programu kako ne biste na kraju dobili beskonačnu petlju (iz koje nema izlaza).

Na primjer:

for(k=10;k>6;k++)

printf("beskonačna petlja \n");

Izađite iz petlje rano na sljedeće načine:

Po dodatnom uslovu;

Koristeći sljedeće izjave:

break;- izlaz iz petlje u kojoj se nalazi prekid, kontrola se prenosi na prvi izvršeni izraz nakon petlje;

izlaz (intCode);- izlaz iz programa;

povratak;- izlaz iz funkcije;

Korištenje operatora bezuvjetnog skoka idi<метка>;

Rano kraj trenutnog cikličkog koraka moguće uz pomoć dodatnog uslova ili operatera nastaviti, čime se prekida izvršavanje koraka tekuće petlje, tj. preskače naredbe ostatka petlje i prenosi kontrolu na glavni iskaz petlje da ispravi parametar i testira uvjet.

Zabranjeno je prenošenje upravljanja izvana u unutrašnjost petlje.

Bilo koji od izraza u for petlji u zagradama može nedostajati, ali simbol ";" ne može se ispustiti.

Na primjer:

za(;i<3; i++)

puts("Zdravo!");

Petljanje while i do-while naredbi

Osnovni oblik cikličkog operatora dok:

dok (uvjet)

operater;

gdje operater

Petlja se izvršava sve dok se uslov procjenjuje na "tačno", tj. izraz u zagradi vraća rezultat koji nije nulti. Ovo je petlja sa preduslovom - prvo se provjerava uvjet, a zatim se izvršava naredba. Stoga se while petlja neće izvršiti čak ni jednom ako je početni rezultat procjene uvjeta 0.

Osnovni oblik operatora učiniti - dok:

operater;

dok (stanje);

gdje operater je jednostavna, složena ili prazna izjava.

Operater uradidok je operator petlje sa postuslovom, tj. prvo se izvršava naredba, a zatim se provjerava istinitost uvjeta. Budući da do-while petlja procjenjuje stanje na kraju petlje, petlja će se izvršiti barem jednom.

U petljama kao što su while i do–while, dozvoljene su iste metode ranog izlaska iz petlje i prijevremenog prekida trenutnog koraka petlje, kao u for naredbi, ali u drugom slučaju, za razliku od for petlje, kontrola je prešao na provjeru stanja. Da biste spriječili beskonačnu petlju unutar while i do-while petlji, morate osigurati promjenu varijabli uključenih u uvjet.

Na primjer:

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

ako (i%5!=0) nastavi;

printf("%5d",i);

Primjeri beskonačnih petlji:

operater;

2) while(number_not_0) // Uvijek istinito!

operater;

operater;

while(broj_ne_0); // Uvijek istinito!

Među izjavama petlje, mora postojati izlazni uslov.

Ugniježđene petlje

U slučaju ugniježđenih petlji, jedna petlja je unutar druge, na primjer:

for(i=nn;i

for(j=mn;j

operater;

gdje operater je jednostavna, složena ili prazna izjava. Unutrašnja petlja će se izvršiti za svaku vrijednost parametra i koja zadovoljava uvjet vanjske petlje.

primjer:

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

for(j=1;j<4;j++)

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

printf("\n");

Primjer korištenja for naredbe

Izračunati . Program treba da štampa međurezultate i konačne rezultate.

Tekst programa može izgledati ovako

#include

#include

puts("Unesite N");

scanf(“%d”,&N);

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

( // uzeti i dvostruki zadatak

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

printf("\n ODGOVOR: s=%f, Pritisnite bilo koji taster...",s);

Varijante individualnih zadataka

Napišite program za definiranje tablice vrijednosti funkcija at u proizvoljnom rasponu [ a,b] argument se mijenja X sa proizvoljnim korakom h. Vrijednosti a, b, h uneseno sa tastature. Tabela mora sadržavati sljedeće stupce: serijski broj, vrijednost argumenta x, vrijednost funkcije, poruka o rastućoj ili opadajućoj funkciji, razlika između dvije susjedne vrijednosti funkcije.

Odredite maksimalnu i minimalnu vrijednost funkcije.

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.

PROGRAMIRANJE CIKLIČNIH RAČUNARSKIH PROCESA

Osnovne informacije

Proces u kojem se jedna naredba ili grupa iskaza izvršava više puta s različitim vrijednostima argumenta naziva se ciklički proces. VBA koristi naredbe petlje za izvođenje radnji koje se ponavljaju, koje su sljedećih tipova:

operater petlja sa parametrom For - Next, čija se konstrukcija koristi ako je unaprijed poznato koliko puta tijelo petlje treba ponoviti:

Za brojač = start_value Zatim end_value Korak korak statement_block

Sljedeći sa cekerom

operateri petlja sa preduslovom ili postuslov, koji se koriste za organiziranje petlje s nepoznatim brojem ponavljanja tijela petlje:

Dizajn petlje

Dizajn petlje

sa preduslovom izgleda ovako:

sa postuslovom izgleda ovako:

Uradite dok uslov

statement_block

statement_block

Petlja while uvjet

Radite do stanja

statement_block

statement_block

Petlja do uvjeta

dok stanje

statement_block

Razvićemo prilagođeni obrazac i sastaviti program za određivanje indeksa profitabilnosti predloženog investicionog projekta za obnovu opreme, ako je iznos početnog ulaganja (IP) 10.000 hiljada rubalja, diskontna stopa r = 10% i očekivana gotovina tokovi su sljedeći:

Novčani tok (CFk B ),B hiljada rubalja

Neka korisnički obrazac izgleda kao (slika 1), a vrijednosti novčanih tokova u 1. - 5. godini se očitavaju iz ćelija radnog lista „Primjer 1“ (slika 2).

Svojstva objekata obrasca prikazana su u tabeli 1.

Rice. 1. Obrazac „Indeks profitabilnosti

profitabilnost

investicioni projekat"

izračunato po formuli

∑n

DPk

IR =

k = 1 (1+r)

gdje je n broj godina tokom kojih će dolaziti gotovinski računi.

Rice. 2. Tabela raspodjele novčanih tokova

Tabela 1

Nekretnina

Nekretnina

Naslov = Indeks najma-

Naslov = Početna veličina

održivost ulaganja

ulaganja

th projekat

Naslov = Stopa popusta

Naslov = Indeks profitabilnosti

Naslov = Jasno

Naslov = Izlaz

Za rukovanje događajem pritiska na dugme "Izračunaj", unesite sljedeće

Private Sub calc_Click()

'postavljanje tipa varijabli

Dim pv, dp, i, n Kao cijeli broj

Dim r, s Kao samac

'čitaj vrijednosti varijabli

pv = Val(txtPV.Tekst)

r = Val(txtSD.Tekst) / 100

n = Val(InputBox("Unesite broj godina tokom kojih

dođi

monetarne

potvrde", "Unos podataka"))

'čitanje vrijednosti novčanih tokova

dp = Ćelije(2, i + 2)

'sumacija

txtIR.Text = Round(s / pv, 2) 'okruži i izlazni rezultat

Funkcija Round(N, k) zaokružuje N na k decimalnih mjesta.

Dalje koristeći element dugmeta na traci sa alatkama Kontrole Postavimo dugme „Otvori obrazac“ ispod tabele da pokrenemo proceduru „Obrazac za indeks profitabilnosti“ (slika 3). Kod za ovu proceduru izgleda ovako:

Privatni Sub FormIndexProfitability_Klik()

Rice. 3. Određivanje indeksa profitabilnosti investicionog projekta

Koristeći kreirano dugme „Otvori obrazac“, pokrenućemo obrazac i izračunati indeks profitabilnosti investicionog projekta (slika 3).

Razvićemo prilagođeni obrazac i napisati program za pronalaženje svih dvocifrenih brojeva čiji je zbir kvadrata cifara djeljiv sa 13.

Da kreiramo ovaj korisnički obrazac, idemo u VB editor (ostat ćemo u istoj radnoj svesci MS Excel-a kao u primjeru 1) i dodati još jedan obrazac (slika 4).

Svojstva objekata obrasca prikazana su u tabeli 2.

Za rukovanje događajima klika na dugme

sljedeći kod:

Private Sub calc_Click()

Rice. 4. Obrazac na primjer 2

Label2.Caption = ""

'određivanje prve cifre dvocifrenog broja

'određivanje druge cifre dvocifrenog broja

Ako je (i1^2+i2^2) Mod 13=0 Tada je Label2.Caption = Label2.Caption+Str(i)+" "

Privatni sub clean_Click()

Label2.Caption = ""

Privatni Sub exitForm_Click()

tabela 2

Nekretnina

Naslov = Primjer 2

Opis = Dvocifrene brojke, zbir

kvadrati čije su cifre djeljive sa 13

TextAlign = 2-fmTextAlignCenter

Naslov = “ ”

autosize=false

Nekretnina

Naslov = Jasno

Naslov = Izlaz

Na radnom listu "Primjer 2" mjesto

dugme "Otvori obrazac" za pozivanje obrasca

"Primjer 2" i pokrenite ovaj obrazac (Sl.

Mi ćemo se razvijati

običaj

interfejs

i napravi

program za vas

sume redova:

proračuni sa tačnošću ε = 10P

k + 2

S = ∑

(− 1)

k = 1

Ostanite u istoj radnoj svesci Excel

kao u primjerima 1 i 2. Koristeći alat

Rice. 5. Dvocifreni brojevi, zbir kvadrata

policajci "Natpis", "Polje" i "Dugme" pa-

broj cifara koji je djeljiv sa 13

alatne trake

Elementi

menadžment

postavimo odgovarajuće objekte na radni list "Primjer 3" (slika 6).

Svojstva listova objekata "Primjer 3" prikazana su u tabeli 3.

Tabela 3

Nekretnina

Nekretnina

Naslov = Zbroj reda

Naslov = Jasno

Da biste obradili događaje pritiska na tipke "Izračunaj" i "Obriši", unesite sljedeći programski kod u modul "Sheet3 (Primjer 3)":

eps = Val(InputBox("Set Precision", "Input"))

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

Petlja txtS.Text = s

Privatni sub clean_Click() txtS.Text = ""

Ovdje će biti tijelo Do While - Loop-a

biti izvedena

termin

apsolutno

k + 2

n− 1

k + 2

n+ 2

veličina (tj.

(− 1)

−∑

(− 1)

(− 1)

) bice

Rice. 6. Obračun sume

k = 1

k = 1

premašiti navedenu tačnost 10 P

Provjerimo rad programa (slika 7).

Mi ćemo se razvijati

običaj

Napišimo program za rješavanje sljedećeg problema.

Prilikom analize ekonomske aktivnosti, pre-

instaliran

sljedeći

regularnost: u januaru 2004. dobit ovog

preduzeća iznosila 573 hiljade rubalja. i tokom

za narednih 5 godina mjesečno uvećan za i%,

gdje je i broj mjeseca (tj. u februaru - za 2%, u martu

- za 3% itd.), u poređenju sa iznosom dobiti u

Rice. 7. Rezultat izračuna

prethodni mjesec.

Utvrditi primljene pre-

serijske sume

prihvatanjem iznosa dobiti za 2004., 2005., ..., 2008. godinu, kao i ukupnog iznosa dobiti za ovih 5 godina.

Da kreiramo ovaj korisnički obrazac, idemo u VB editor (ostat ćemo u istoj radnoj svesci MS Excel-a kao u primjerima 1–3) i dodati još jedan obrazac (slika 8). Izlaz izračunatih vrijednosti dobiti preduzeća izvršit će se kako u polju objekta liste (ListBox), postavljenog na obrazac, tako iu ćelijama radnog lista "Primjer 4" (slika 9. ).

Rice. 8. Obrazac "Dobit preduzeća" sl. 9. Tabela na primjer 4

Svojstva objekata obrasca prikazana su u tabeli 4.

Tabela 4

Nekretnina

Nekretnina

Naslov = Dobit preduzeća

Naslov = Jasno

Naslov = Izlaz

Bilješka. Svojstvo ColumnCount specificira broj stupaca u objektu ListBox.

Za rukovanje događajima pritiska na dugmad "Izračunaj", "Obriši" i "Vi-

premjestiti" unesite sljedeći kod:

Private Sub calc_Click() Dim i, j As Integer

Dim PrM, prG, sPr kao samac

PrM = Val(InputBox("Unesite dobit ostvarenu u januaru 2004", "Input"))

ListBox koristi metodu AddItem za dodavanje stavki na listu

ListName.AddItem izraz, indeks

gdje je Expression element liste koji treba dodati; Indeks je redni broj elementa u listi (numeracija elemenata liste počinje od 0).

I svojstvo List (LineNumber, ColumnNumber) objekta ListBox vraća (dodjeljuje) element liste na raskrsnici navedenog reda i stupca.

Na radnom listu „Primer 4“ postavite dugme „Otvori obrazac“ da biste pozvali obrazac „Profit preduzeća“ i pokrenite ovaj obrazac (slika 10).

Sada možete dodati još jedan list pod nazivom “Sadržaj” u radnu svesku MS Excel, na kojem ćemo, na primjer, pomoću alata Button na traci sa alatkama Forms kreirati četiri dugmeta: “Indeks profitabilnosti”, “Dvocifreni brojevi”, “ Zbir reda”, „Profitna preduzeća”.

U VB editor dodajte novi modul (Insert → Module ), u koji unosimo sljedeći kod:

Javna podlistaPrimjer1()

Radni listovi("Primjer 1").Aktivirajte

ListPr.AddItem "Godina", 0

'postavite početne potpise i podatke

ListPr.List(0, 1) = "Profit, hiljada rubalja."

'ciklus po godinama

'kruži kroz mjesece svake godine

Ako (i = 4) i (j = 1) Onda

PrM = PrM * (1 + j / 100)

Klikom na dugme "Preuzmi arhivu" besplatno ćete preuzeti datoteku koja vam je potrebna.
Prije nego što preuzmete ovu datoteku, zapamtite one dobre eseje, kontrolne, seminarske radove, teze, članke i druge dokumente koji nisu traženi na vašem računalu. Ovo je vaš rad, on treba da učestvuje u razvoju društva i da koristi ljudima. Pronađite ove radove i pošaljite ih u bazu znanja.
Mi i svi studenti, postdiplomci, mladi naučnici koji koriste bazu znanja u svom studiranju i radu bićemo vam veoma zahvalni.

Da preuzmete arhivu sa dokumentom, unesite petocifreni broj u polje ispod i kliknite na dugme "Preuzmi arhivu"

Slični dokumenti

    Izrada izveštajnog lista "Prodavnice" u Excel 2013. Rad sa tabelama iz porodice Microsoft Office. Konstrukcija tortnog grafikona i histograma, grafikona. Razvoj procedura za tabelarne funkcije. Programiranje korisničkih funkcija u VBA.

    seminarski rad, dodan 03.04.2014

    Microsoft Office paket. Tabela MS Excel. Izrada ekranske forme i unos podataka. Formule i funkcije. Objašnjenje korisničkih funkcija MS Excel-a. Fizički prikaz problema. Postavljanje graničnih uslova za dozvoljene vrednosti varijabli.

    seminarski rad, dodan 07.06.2015

    Značajke korištenja ugrađenih funkcija programa Microsoft Excel. Kreiranje tabela, njihovo popunjavanje podacima, crtanje grafikona. Primjena matematičkih formula za izvršavanje upita korištenjem paketa aplikacija. Tehnički uslovi za računar.

    seminarski rad, dodan 25.04.2013

    Organizacija fajlova i pristup. operacije sa datotekama. Programiranje pomoću ugrađenih I/O funkcija; linearni, granasti i ciklični računski procesi koji koriste If-else, operator odabira slučaja; nizovi i matrice.

    seminarski rad, dodan 24.05.2014

    Microsoft Excel tabelarni procesor - aplikativni program dizajniran za automatizaciju obrade ekonomskih informacija predstavljenih u obliku tabela; primjena formula i funkcija za izradu proračuna; zacrtavanje.

    sažetak, dodan 03.02.2013

    Programiranje računarskih procesa na jeziku FORTRAN kako bi se osigurala interakcija sistema "Čovjek-Proizvodnja-Priroda". Korišćenje nizova za sastavljanje ciklusa za izračunavanje nivoa zagađenja životne sredine, troškova prerade otpada.

    seminarski rad, dodan 30.05.2014

    Kreiranje aplikacije koja će iscrtati grafove funkcija za dati matematički izraz. Izrada programa "Generator matematičkih funkcija". Kreiranje čarobnjaka funkcija za unos matematičkog izraza, testiranje.

    teze, dodato 16.02.2016

1. Metode konstruisanja cikličkih računskih procesa u programima.

2. Ušao u kompjuterNrealni brojevi. Napišite program koji prikazuje aritmetičku sredinu ovog skupa.

Uvod

Programi petlje se koriste u gotovo svakom softveru. U ovom slučaju, ciklusi mogu biti eksplicitni i implicitni. Konkretno, implicitna petlja je prisutna u rukovaocima prekida, koji se zapravo izvode u beskonačnoj petlji čije tijelo pokreće prekid. Potprogrami su takođe ciklične - prozorske funkcije Windows aplikacija. Nadalje, razmatraju se programi s ciklusom, čije tijelo sadrži funkcionalne module.

Ciklični proces je računski proces u kojem se izračuni ponavljaju koristeći iste formule za različite vrijednosti argumenta.

Programi koji implementiraju ciklički proces nazivaju se ciklički programi.

Organizacija ciklusa se može podijeliti u sljedeće faze:

priprema (inicijalizacija) ciklusa (AND);

izvođenje proračuna petlje (tijelo petlje) (T);

modifikacija parametara (M);

provjera stanja za kraj ciklusa (U).

Redoslijed kojim se ovi koraci, npr. T i M, mogu izvesti može varirati. Ovisno o lokaciji testa, uvjeti završetka petlje razlikuju petlje s donjim i gornjim završecima. Za petlju sa donjim krajem, tijelo petlje se izvršava najmanje jednom, pošto se prvo izvode proračuni, a zatim se provjerava uvjet izlaska iz petlje.


U slučaju petlje sa vrhom završene, tijelo petlje se ne može izvršiti čak ni jednom ako je izlazni uvjet ispunjen odmah.

Petlja se naziva determinističkom ako je broj ponavljanja tijela petlje poznat ili određen unaprijed. Petlja se naziva iterativnom ako broj ponavljanja tijela petlje nije unaprijed poznat, već ovisi o vrijednostima parametara (nekih varijabli) uključenih u proračune.

Telo petlje Ovo je dio programa koji se ponavlja mnogo puta.

Parametar ciklusa je varijabla koja poprima nove vrijednosti svaki put kada se petlja ponavlja (postoje jednostavne i složene petlje).

Opšti pogled na ciklus n puta

Općenito, ciklus n puta se piše na sljedeći način:

nc broj puta ponavljanja

Servisna riječ nts (početak ciklusa) i kts (kraj ciklusa) napisane su striktno jedna ispod druge i povezane su vertikalnom trakom. Desno od ovog reda je napisan ponovljeni niz naredbi (tijelo petlje).

Broj ponavljanja je proizvoljan cijeli broj.

Kada se algoritam izvrši, niz naredbi u tijelu petlje se ponavlja određeni broj puta. Pravila algoritamskog jezika dozvoljavaju specificiranje bilo kojeg cijelog broja ponavljanja. Može biti nula ili čak negativna. Ovi slučajevi se ne smatraju pogrešnim, samo se tijelo petlje neće izvršiti niti jednom, a kompjuter će odmah nastaviti sa izvršavanjem naredbi napisanih nakon kts-a

Opšti pogled na ciklus

Općenito, ciklus je napisan na sljedeći način:

nc bok uslov

| tijelo petlje (sekvenca naredbi)

Prilikom izvođenja ciklusa, računar ponavlja sljedeće korake:

a) provjerava stanje napisano nakon službene riječi;

b) ako uslov nije ispunjen, onda se izvršavanje petlje završava i računar počinje da izvršava komande napisane nakon kts-a. Ako je uslov ispunjen, računar izvršava telo petlje, ponovo proverava uslov i tako dalje.

Opšti pogled na ciklus za

nc za i od i1 do i2

| tijelo petlje (sekvenca naredbi)

Ovdje je i naziv vrijednosti cjelobrojnog tipa, i1, i2 su proizvoljni cijeli brojevi ili izrazi sa cjelobrojnim vrijednostima. Tijelo petlje se sekvencijalno izvršava za i = i1, i = i1 + 1, i1 + 2, …i = i2.

Pravila algoritamskog jezika dozvoljavaju specificiranje bilo kojih cijelih brojeva i1, i2. posebno, i2 može biti manje od i1. ovaj slučaj se ne smatra pogrešnim - samo tijelo petlje neće biti izvršeno ni jednom, a računar će odmah nastaviti sa izvršavanjem naredbi napisanih nakon kts-a.

Petlja n puta i petlja while

Petlje n puta i do sada su raspoređene u algoritamskom jeziku na skoro isti način. To nije iznenađujuće, jer obje ove naredbe postavljaju ciklus - ponavljajući niz naredbi. Servisne riječi nts i kts označavaju da se ciklus izvršava, a zaglavlje ciklusa specificira određeni mehanizam za njegovo izvršavanje.

Međutim, ova dva ciklusa imaju jednu značajnu razliku. Počevši da izvršava petlju n puta, računar zna koliko puta će morati da ponovi telo petlje. Prilikom izvršavanja petlje to još nije slučaj: računar svaki put provjerava stanje petlje i ne može unaprijed odrediti kada će se izvršavanje završiti. Možete saznati samo broj ponavljanja ciklusa dok se ciklus ne završi.

Time postaje jasno u kojim slučajevima koji ciklus treba koristiti. Ako je broj ponavljanja poznat do trenutka kada petlja počinje, zgodno je koristiti petlju n puta. Ako se broj ponavljanja ne može unaprijed odrediti, do sada je potreban ciklus.

Na primjer, automatski upravljački program ima strukturu prikazanu na sl. jedan. Moduli uključeni u ciklus(kao i moduli za rukovanje prekidima), sa po jednim ulazom i jednim izlazom, obično imaju karakterističnu osobinu: moduli sadrže statičke varijable kojima se dodeljuje vrednost u trenutnom ciklusu, a analiza ovih varijabli se vrši u sledećem ciklusu. . Dakle, navedene varijable karakteriziraju stanje modula na kraju tekućeg ili na početku sljedećeg programskog ciklusa. Ubuduće ćemo razmatrati samo takve module cikličkih programa i ukratko ih označavati kao MCP.


Fig.1. Tipična struktura kontrolnog programa sa beskonačnom petljom.

MCP imaju raznoliku strukturu, čija se složenost mora procijeniti prema posebnim kriterijima. V.V. Lipaev je predložio pogodan i objektivan kriterijum za složenost programskih modula, i to: broj i ukupnu dužinu putanja u kontrolnom grafu modula. Ovo uzima u obzir samo uslovne i odabrane izjave. Međutim, ovaj kriterij očito nije dovoljan za MCP sa statičkom memorijom, jer je prilikom analize MCP-a potrebno zapamtiti vrijednosti svih statičkih varijabli postavljenih u prethodnom ciklusu. Osim toga, ne postoje preporuke za standardizaciju algoritama i programa, osim za odavno poznato strukturirano programiranje u uobičajeno korištenim programskim jezicima kao što su C i Pascal. Ovaj članak predlaže da se popune ove praznine u odnosu na MCP.

2. Fragmenti modula cikličkih programa

Dvopolni fragment, ili jednostavno fragment, razmatraćemo dio programa s jednim ulazom i jednim izlazom (uključujući operatore petlje) pod pretpostavkom da su MCP-ovi koji se razmatraju strukturirani. Najjednostavniji fragment uključuje jedan operator. Niz fragmenata je također fragment. MCP je, zauzvrat, fragment i sastoji se od niza fragmenata.

Predložena je metoda nezavisnih fragmenata za sintezu strukture modula koji implementiraju tablice odluka. U ovom slučaju, fragment se smatra nezavisnim ako se može umetnuti bilo gdje u nizu fragmenata modula. Nezavisnost lokacije takvog fragmenta nastaje zbog činjenice da se podaci analizirani u njemu ne formiraju u navedenom nizu fragmenata, a podaci generirani u nezavisnom fragmentu se ne analiziraju u ovom nizu fragmenata. Stoga se nezavisni fragmenti mogu izvoditi paralelno (pseudoparalelno). Na sl. 2 prikazuje moguće implementacije modula sa dva nezavisna fragmenta. U opcijama "a" i "b" fragmenti su preuređeni bez izobličenja suštine programa; u "c" verziji, fragmenti se implementiraju paralelno.


Fig.2. Opcije za implementaciju modula sa nezavisnim fragmentima:

a) i b) - sekvencijalna implementacija,

c) - paralelna implementacija: dvostruka horizontalna linija označava paralelizaciju programa, podebljana horizontalna linija označava završetak paralelnih procesa.

Zavisni fragment je onaj čija lokacija ovisi o lokaciji drugog fragmenta u modulu. Razlikujemo fragmente koji ovise o vrhu i dnu. Top-zavisni fragment uvijek treba biti smješten ispod nekog fragmenta u kojem se formiraju varijable koje se koriste u ovom (zavisnom) fragmentu. Fragment ovisan o dnu uvijek treba postaviti iznad fragmenta koji koristi varijable generirane u ovom fragmentu. Dva zavisna fragmenta, od kojih je jedan gornji zavisan od drugog, a drugi zavisan od prvog odozdo, nazivat ćemo se međusobno zavisnim fragmentima. Ne mogu se zamijeniti i ne mogu se implementirati paralelno. Na sl. 3 prikazuje primjer modula sa međusobno zavisnim fragmentima. Između međusobno zavisnih fragmenata mogu postojati i drugi, zavisni ili nezavisni od njih. Fig.3. Modul sa zavisnim fragmentima.

Fiksni fragment ćemo nazvati zavisnim fragmentom, čija je lokacija u modulu strogo definirana. Na primjer, u modulu za prepoznavanje znaka unesenog s tastature, prvi bi trebao biti donji ovisan fragment karaktera koji je direktno unet. Operatori “start” i “end” modula su fiksni fragmenti.

Apsolutno nezavisni fragmenti ne postoje, makar samo zato što se u bilo kojem modulu spominju fiksni fragmenti početka i kraja. Stoga, nezavisni fragment, općenito, ima područje moguće lokacije ograničeno sa dva međusobno zavisna fragmenta. Odnosno, rigoroznija definicija nezavisnog fragmenta je sljedeća: nezavisan u odnosu na dva fiksna fragmenta je fragment koji se može postaviti bilo gdje u nizu fragmenata koji su iznad i ispod ograničeni navedenim fiksnim fragmentima.

U programiranju često postoje zadaci koji zahtijevaju višestruko izvršavanje iste grupe programskih izraza s različitim vrijednostima njihovih operanada. Takvi procesi se nazivaju ciklično ili jednostavno ciklusa. Grupa iskaza koji se ciklički ponavljaju čini tzv tijelo petlje, koji se može predstaviti kao jednostavan ili složen izraz. Poziva se jedno izvršenje tijela petlje iteracija.

Tijelu petlje u programu uvijek prethodi zaglavlje petlje, koji sadrži notaciju operator petlje i izraz koji specificira (direktno ili indirektno) broj iteracija. Imajte na umu da je tijelo ciklusa operand operatora ciklusa, stoga zaglavlje i tijelo ciklusa čine nedjeljivu strukturnu jedinicu programa. U daljem tekstu, koristeći termin izjava petlje“, imaćemo na umu i naslov i tijelo ciklusa.

Za organizaciju ciklusa u svim programskim sistemima postoje specijalizovani naredbe petlje, čija upotreba štedi programera od potrebe da programira cikluse "ručno". MathCAD podržava dvije vrste takvih operatora − ciklus sa predodređenjem Za (takođe se zove petlja sa brojačem) i petlja sa preduslovom Dok . Struktura ovih operatora je opisana u tabeli 5.

5.4.1 Operater Za

Ovaj operator treba koristiti u slučajevima kada je broj iteracija unaprijed određen, odnosno unaprijed poznat.

Zaglavlje ciklusa ovog operatora (desni operand) sadrži varijablu pod nazivom parametar(ili brojač) ciklus, i lista vrednosti ovo podešavanje. Broj elemenata liste takođe određuje broj iteracija - tokom svake iteracije, parametar petlje prima sledeću vrednost sa liste navedene u zaglavlju.

Parametar ciklusa ima status interne programske varijable i ima sva svoja svojstva (opisana u paragrafu 5.1.4). Po pravilu se parametar petlje koristi na desnoj strani izraza koji su dio tijela petlje, iako formalno nije zabranjeno koristiti ga na lijevoj strani izraza (tj. lijevo od lokalnog operator definicije "f"). Treba imati na umu da ako je parametar promijenjen u tijelu petlje, njegova promijenjena vrijednost će biti važeća samo do kraja trenutne iteracije, jer će prije sljedeće iteracije parametar i dalje primiti sljedeću vrijednost sa liste navedene u zaglavlje petlje.

Formalno je dozvoljeno da se parametar petlje uopće ne koristi u izrazima tijela petlje - u ovom slučaju lista vrijednosti parametara ne igra nikakvu ulogu - značajna je samo dužina ove liste, što određuje broj (moguće besmislenih) iteracija.

Po završetku posljednje iteracije, programski izraz koji slijedi nakon naredbe petlje će se izvršiti. U ovom slučaju, varijabla koja se koristi kao parametar završene petlje zadržava vrijednost koju je imala u posljednjem stvarno završenom iteracije[*]. Imajte na umu da se ova vrijednost ne poklapa uvijek sa posljednjom vrijednošću sa liste navedene u zaglavlju petlje, jer je moguć "rani" izlazak iz petlje kada se aktivira operator Pauza uključeno u tijelo petlje.

Lista vrijednosti parametar petlje je upisan u zaglavlju petlje iza simbola " Î ", što označava članstvo u skupu (ovaj simbol nije potrebno unositi "ručno" - automatski će se prikazati prilikom ulaska operatera Za ). MathCAD dozvoljava upotrebu tri forme unosi na ovoj listi: direktan transfer– elementi liste su eksplicitno navedeni odvojeni zarezima, parametar prima vrijednosti sa liste redosledom kojim se pojavljuju; u stilu rangirane varijable − elementi liste formiraju odgovarajući aritmetički niz; niz– elementi liste uzastopno primaju vrijednosti elemenata niza po redoslijedu njihovih indeksa (prvo - stupci slijeva nadesno, zatim - redovi odozgo prema dolje).

Tri programa prikazana na slici 21 ilustruju različite upotrebe operatora Za .

Program činjenica(n) izračunava faktorijel broja n . Operator petlje u ovom programu dio je složenog izraza, koji je, pak, operand uvjetnog operatora inače. Parametar ciklusa k dobija vrijednosti iz cjelobrojnog aritmetičkog niza.

Program Ch(V,N,p) obrađuje ulazni vektor V , zamjenjujući ga vrijednošću str oni elementi čiji su indeksi dati elementima drugog ulaznog vektora N . U ovom primjeru, lista vrijednosti parametara petlje i dat skupom vektorskih elemenata N . Imajte na umu da oba ova programa vrše kontrolu ulaznih podataka i blokiraju izvršavanje glavnog algoritma ako su stvarni argumenti programa pogrešno navedeni.

Program L(M,z) , dato u primjeru in ), popraćen je detaljnim komentarima i ne zahtijeva objašnjenje. Ovaj program ilustruje mogućnost korištenja više naredbi petlje, od kojih je jedan uključen u naredbe tijelo drugi. Upotreba ugniježđene petlje je tipičan trik koji se koristi za obradu višedimenzionalnih nizova.

Slika 21 - Primjeri ciklusa programiranja Za


Slika 22 ilustruje upotrebu operatora Pauza i Nastavi u telu petlje. Po pravilu, ovi operatori su sami operandi uslovnih operatora. Ako ili inače .

Operater Pauza ("prekini") prekida izvršavanje petlje i prenosi kontrolu na naredbu koja slijedi nakon naredbe prekinute petlje. Imajte na umu da ako operater Pauza prekinut ugniježđena petlja, izvođenje vanjske petlje će se nastaviti.

Operater Nastavi ("nastaviti") djeluje drugačije - to prekida samo trenutnu iteraciju petlje i prenosi kontrolu na zaglavlje ovog ciklusa, nakon čega se ciklus izvršava nastavlja od sljedeće iteracije (osim ako, naravno, prekinuta iteracija nije bila posljednja).

Operater Pauza dozvoljena upotreba i vani tijela ciklusa. U ovom slučaju, izvršenje čitavog potprograma se prekida i vraća se rezultat evaluacije posljednjeg stvarno izvršenog izraza potprograma.

Slika 22 - Primjeri korištenja operatora Pauza i Nastavi

Funkcija zbroj N(V) zbraja samo one elemente vektora koji sadrže skalarne podatke numeričkog tipa, a zanemaruje ostale elemente. Funkcija Inverzno (V) generiše vektor čiji su elementi recipročni vrednosti odgovarajućih elemenata originalnog vektora. U ovom slučaju, ako sljedeći element sadrži broj "0" ili nije skalar numeričkog tipa, ciklus je prekinut. Imajte na umu da operater Pauza u posljednjem primjeru, ne prekida program, već prenosi kontrolu na operatera povratak odmah nakon operatera Za .

5.4.3 Operater Dok

Za razliku od operatera Za , zaglavlje izjave Dok (u prijevodu - " ćao") ne sadrži eksplicitne naznake broja iteracija - sadrži boolean izraz, čija se vrijednost automatski izračunava prije početka izvršenje svake uzastopne iteracije[†]. Sve dok je ovaj izraz "tačan", iteracije petlje će se nastaviti; čim nakon završetka sljedeće iteracije izraz postane "netačan", sljedeća iteracija petlje neće biti izvršena, a kontrolu će primiti programski izraz koji slijedi nakon naredbe Dok .

Očigledno, ako se identično lažni logički izraz stavi u zaglavlje petlje, ova petlja neće izvršiti nijednu od svojih iteracija, a ako je ovaj izraz identično istinit, petlja će biti beskonačna (posljednja situacija se naziva petlja programe). Kako bi se izbjegle takve situacije, jedna ili više varijabli koje mijenjaju svoje vrijednosti moraju biti uključene u broj operanada logičkog izraza. u telu petlje na takav način da je petlja konačna (druga sredstva se mogu koristiti za sprječavanje petlje - na primjer, prisilni izlazak iz petlje od strane operatora Pauza ).

Primjeri upotrebe operatera Dok prikazani su na slici 23. Date su tri opcije za rješavanje istog problema: svaki od programa F0 , F1 i F2 vraća indeks prvog od elemenata originalnog vektoraV prekoračenje zadate vrednostiz .

Prvi program (primjer a ) dodaje jedan na brojač k u telu petlje Dok do sledećeg k -ti element originalnog vektora neće premašiti datu vrijednost z . Nakon toga, petlja se završava i program vraća posljednju izmijenjenu vrijednost varijable k , što je rješenje problema. Imajte na umu da, za razliku od ciklusa Za , brojač k ovdje je potrebno obraditi sa odvojenim naredbama: inicijalizirati (tj. dodijeliti mu početnu vrijednost) prije izraza petlje i promijeniti njegovu vrijednost u tijelu petlje.

Lako je uočiti da je to opcija a ) programa ima značajan nedostatak: ne sprečava program da se vrti u petlji u slučaju kada problem nema rješenje, odnosno kada je parametar z prelazi vrijednost najvećeg elementa vektora V . U ovom primjeru, petlja u takvoj situaciji se zaista neće dogoditi - ali to nije zasluga našeg programa, već MathCAD sistema koji kontrolira izlaz vektorskog indeksa V izvan dometa i generirat će poruku o grešci.

Opcija je oslobođena ovog nedostatka b ) programa u kojem tijelo petlje sadrži dodatnu provjeru valjanosti sljedeće vrijednosti indeksa i prisilno prekida petlju operatorom Pauza u odgovarajućoj situaciji sa izdavanjem tekstualne poruke.

Možda je najefikasniji način za rješavanje ovog problema in ), koji uopće ne koristi operator Dok . U ovom programu, varijabla k koristi se samo za održavanje "čistoće stila" - da se isključi obrada parametra ciklusa i izvan operatera Za .

Slika 23 - Primjeri ciklusa programiranja Dok

Top Related Articles