Kako podesiti pametne telefone i računare. Informativni portal

Za svaki, obrnuti redoslijed je 1s. Petlje koje koriste logički izraz

Opis:

Operator ciklusa For je namijenjen za ciklično ponavljanje operatora smještenih unutar konstrukcije Loop - Cycle End.

Prije početka izvođenja petlje, vrijednost Izraz 1 dodjeljuje se varijabli Variable_name. Vrijednost varijabli_name se automatski povećava sa svakim prolaskom kroz petlju. Brojač se povećava svaki put kada se petlja izvršava.

Petlja se izvršava sve dok je vrijednost varijable Variable_name manja ili jednaka vrijednosti izraza 2. Stanje izvršenja petlje se uvijek provjerava na početku, prije izvođenja petlje.

sintaksa:

Opcije:

VariableName Identifikator varijable (brojač petlje), čija se vrijednost automatski povećava za 1 svaki put kada se petlja ponavlja. Takozvani brojač ciklusa.Izraz 1 Numerički izraz koji specificira početnu vrijednost dodijeljenu brojaču petlje prvi put kada se petlja prođe.Po sintaksičkoj vezi za izraz 2.Izraz 2 Maksimalna vrijednost brojača petlje. Kada varijabla Variable_name postane veća od izraza 2, izvršenje naredbe petlje For se prekida.Petlja Naredbe koje slijede nakon ključne riječi Loop se izvršavaju sve dok je vrijednost varijable ime_varijable manja ili jednaka vrijednosti izraza 2.

Ciklus za svakoga

Opis:

Operator petlje Za svaki je dizajniran za petlju kroz kolekcije vrijednosti. Svaka iteracija petlje vraća novu stavku kolekcije. Obilazak se izvodi dok se ne pređu svi elementi kolekcije.

sintaksa:

Opcije:

Variable_name_1 Varijabla kojoj je dodijeljena vrijednost sljedećeg elementa kolekcije pri svakoj iteraciji petlje.Iz sintaksne veze za ime varijable_2.Variable_name_2 Varijabla ili izraz koji predstavlja kolekciju. Elementi ove kolekcije će biti dodijeljeni parametru varijabli_name_1.Petlja Naredbe koje slijede nakon ključne riječi Loop se izvode za svaku stavku u kolekciji.// Operatori Izvršni operator ili niz takvih operatora.Prekini Prekinite petlju u bilo kom trenutku. Nakon izvršenja ovog izraza, kontrola se prenosi na izraz koji slijedi ključnu riječ EndCycle.Nastavi Odmah prenosi kontrolu na početak petlje, gdje se petlja procjenjuje i provjerava. Operatori koji ga prate u tijelu petlje se ne izvršavaju u ovoj iteraciji.Kraj petlje Ključna riječ koja završava strukturu izraza petlje.

Bye Cycle

Opis:

Operator petlje Dok je namijenjen za ciklično ponavljanje naredbi koje se nalaze unutar strukture Petlja - Kraj petlje... Petlja se izvršava sve dok je logički izraz Istinito... Stanje izvršenja petlje se uvijek provjerava na početku, prije izvođenja petlje.

sintaksa:

Opcije:

Boolean izraz Boolean izraz.Operatori petlje koji slijede ključnu riječ Loop se izvršavaju sve dok je rezultat logičkog izraza Istinito. // Operatori Izvršni operator ili niz takvih operatora.Prekini Prekinite petlju u bilo kom trenutku. Nakon izvršenja ovog izraza, kontrola se prenosi na izraz koji slijedi ključnu riječ EndCycle.Nastavi Odmah prenosi kontrolu na početak petlje, gdje se petlja procjenjuje i provjerava. Operatori koji ga prate u tijelu petlje se ne izvršavaju u ovoj iteraciji.Kraj petlje Ključna riječ koja završava strukturu izraza petlje.
12. decembar 2014. u 13:13

Koji ciklus je brži? Testiranje 1C

  • Visoke performanse ,
  • abnormalno programiranje,
  • Programiranje

Programiram 1C nekoliko godina, a onda sam došao na ideju - “Zašto ne prođeš neku vrstu obuke, odjednom se pojave neke rupe u znanju za koje nisam ni znao ranije”? Ne pre rečeno nego učinjeno. Sjedim, slušam kurs, dolazim do cikličnih operatera i onda druga pomisao (da, nemam ih često) - "Koji ciklus je brži?" Trebali bismo provjeriti.
Tako sam našao pet načina, kako možete organizirati ciklus pomoću 1C.

Prvi tip ciklusa, nazovimo ga uslovno "ForPo" izgleda ovako:

Za n = 0 po broju iteracija Cycle WhatToAction (); Kraj ciklusa;
Drugi pogled "Za svaki":

Za svaku kolekciju predmeta iz kolekcije, Loop WhatToAction (); Kraj ciklusa;
Treće "ćao":

Do n<>Broj iteracija Petlja WhatToAction (); n = n + 1; Kraj ciklusa;
Tada sam se sjetio asemblerske mladosti - ciklusa "ako":

~ Početak ciklusa: Ako n<>Broj iteracija Zatim WhatToAction (); n = n + 1; Idi ~ Cycle Start; EndIf;
I na kraju "rekurzija"

Procedura RecursiveCycle (n, broj iteracija) WhatToAction (); Ako je n<>Broj iteracija zatim rekurzivni ciklus (n + 1, broj iteracija); EndIf; Kraj procedure
Naravno, nije sasvim ispravno klasificirati rekurziju kao petlju, ali ipak uz njenu pomoć možete postići slične rezultate. Odmah da rezervišem da rekurzija nije učestvovala u daljem testiranju. Prvo, svi testovi su obavljeni na 1.000.000 iteracija, a rekurzija ispada već na 2.000. Drugo, stopa rekurzije je deset puta manja od brzine drugih petlji.

Poslednja digresija. Jedan od uslova je bilo izvršenje bilo koje radnje u ciklusu. Prvo, prazna petlja se koristi vrlo rijetko. Drugo, ciklus "Za svakoga" se koristi za kolekciju, što znači da ostali ciklusi moraju raditi sa kolekcijom tako da se testiranje odvija pod istim uslovima.

Pa, idemo. Čitanje iz prethodno popunjenog niza korišteno je kao tijelo petlje.


ili, kada koristite ciklus "Za svakoga"

TestValue Primalac = Elem;
Testiranje je obavljeno na platformi 8.3.5.1231 za tri tipa interfejsa (Regularna aplikacija, Upravljana aplikacija i Taxi).
Brojevi su vrijeme u milisekundama dobiveno korištenjem funkcije CurrentUniversalDate u milisekundama () koju sam zvao prije i poslije petlje. Brojevi su razlomci jer sam koristio aritmetičku sredinu pet mjerenja. Zašto nisam koristio Performance Meter? Moj cilj nije bio da mjerim brzinu svake linije koda, već samo brzinu ciklusa sa istim rezultatom rada.

Čini se da je to sve, ali - testirajte pa testirajte!
Rezultat za platformu 8.2.19.106
U prosjeku, 8.2 platforma je 25% brža od 8.3. Nisam očekivao toliku razliku i odlučio sam da je testiram na drugoj mašini. Neću davati rezultate, možete ih sami generirati koristeći ovu konfiguraciju. Mogu samo reći da je 8.2 tamo bio brži za 20 posto.

Zašto? Ne znam, rastavljanje kernela nije bilo dio mojih planova, ali sam ipak pogledao mjerenje performansi. Pokazalo se da su same ciklične operacije u 8.3 nešto brže nego u 8.2. Ali na liniji
ReceiverTestValue = TestArray.Get (n);
to jest, postoji značajna degradacija performansi pri čitanju stavke kolekcije u varijablu.

na kraju:
čemu sve ovo? Za sebe sam napravio nekoliko zaključaka:

1. Ako je moguće koristiti specijalizirani ciklus - "Za svakoga", onda je bolje koristiti ga. Usput, sam po sebi radi duže od ostalih petlji, ali je brzina pristupa predmetu kolekcije mnogo veća.
2. Ako znate broj iteracija unaprijed, koristite ForPo. "Zbogom" će raditi sporije.
3. Ako koristite petlju "Ako", drugi programeri vas očigledno neće razumjeti.

Pažnja! Na kraju članka nalazi se link do video tutorijala.
Ako se ranije niste susreli sa programiranjem, onda potreba za korištenjem ciklusa u 1C programu vjerovatno nije sasvim jasna. U ovom članku ću govoriti o operatorima petlje, kao io njihovoj glavnoj svrsi.

Ali prvo, radi jasnoće, nekoliko pojašnjenja o izrazima korištenim u članku:
Iteracija Je ponavljanje.
Zagrade operatera- rezervisane reči, koje se uvek pišu u paru, operator otvaranja i operatora zatvaranja. Na primjer: Function - EndFunction, If - EndIf, For - End of Loop, itd.
Telo petlje- programski kod unutar zagrada operatora petlje.
Ciklus Je konstrukcija koja ponavlja izvođenje linija u tijelu petlje, broj ponavljanja ovisi o rezultatu uvjeta na početku petlje.

Da nije bilo ovog operatora, tada bi kod unutar petlje morao biti napisan onoliko puta koliko nam je potrebno iteracija. Zamislite da u dokumentu ima 100 redova i da ih trebate sortirati i, recimo, promijeniti vrijednost, ali ako se u isto vrijeme njihov broj periodično mijenja, tj. oni se dodaju i uklanjaju. Ne bi bilo lako.
Petlja vam omogućava da pojednostavite zadatak izvršavanja ponovljenih linija koda.
U programu 1C 8.1 postoje tri ciklusne konstrukcije:
"Za .. By .. Cycle" - ponavlja broj ciklusa od početne vrijednosti brojača do konačne specificirane vrijednosti, dodajući 1 varijablu brojača na svakoj iteraciji. Koristi se kada je poznat broj iteracija.

Ciklus 1C Za

Za Counter = 1 By 3 Cycle // Cycle body EndCycle;

Ciklus 1C Zbogom

"Dok ... ciklus" - izvršava se dok je izračunata vrijednost True. Može se koristiti u slučajevima kada se varijable za procjenu izraza mijenjaju u tijelu petlje, ili ako se kolekcija ponavlja i ima odgovarajuću metodu koja vraća boolean, koji se poziva na početku petlje.

While Fetch.Next () Loop // Tijelo petlje EndCycle;

Ciklus 1C Za svakoga

Za svaki ... Od ... Petlja ponavlja kolekciju od prve do posljednje stavke. Upisivanje u varijablu (u primjeru: TekElement) vrijednosti elementa.

Za svaki CurrentElement From ArrayElements Loop // Loop Body EndCycle;

Obrnuti ciklus 1C

Postoji i obrnuta petlja koja se može koristiti za prelazak kolekcija obrnutim redoslijedom, tj. odozdo prema gore (od kraja). Ova metoda može biti potrebna ako trebate izbrisati elemente kolekcije.

Broj stavki = Niz stavki Broj (); Za ReverseIndex = 1 Po broju stavki Petlja TekElement = Niz stavki [Broj stavki - ReverseIndex]; Kraj ciklusa;

Operatori nastavljaju i prekidaju razgovaraju se u videu, link ispod.

Algoritmi mnogih programa često uključuju ciklično ponavljanje određenih radnji. 1C nije izuzetak u ovom slučaju. Ciklusi u 1C dozvoljavaju:

  • Prođite kroz elemente direktorija;
  • Popunite područja rasporeda;
  • Izvršiti određene radnje sa odabirom dokumenata;
  • I mnoge mnoge druge.

Vrste petlje

U 1C je uobičajeno razlikovati tri vrste ciklusa, ovisno o skupu riječi uključenih u konstrukciju:

  1. Za svaku "Varijablu" iz "Zbirke vrijednosti";
  2. Za "Variable" = "Start. vrijednost "Po" Kon. Značenje";
  3. Dok je "Expression".

Razmotrimo ih detaljnije.

Za svaku od

Ovaj indeks je pogodan za zbirke vrijednosti (izbor dokumenata ili kataloških artikala, zaliha). Izvršenje će se nastaviti sve dok se ne prođe posljednji element kolekcije. Red mora sadržavati:

  • Varijabla koja identificira trenutnu stavku u kolekciji;
  • Definiranje kolekcije vrijednosti.

Najčešća greška u ovom slučaju prikazana je na slici 1.

Najčešće se događa kada programer ne razumije u potpunosti razliku između objekta (dokumenta, referentne knjige) i kolekcije (selekcije) vrijednosti dobivenih pomoću operatora Select ().

Za by

U ovom slučaju, parametri koji se prosljeđuju nizu su:

  1. Ime varijable - iterator;
  2. Početna vrijednost varijable;
  3. Konačna vrijednost varijable.

Ponavljanje bloka naredbi uključenih u tijelo petlje će se izvoditi sve dok varijabla ne bude jednaka ili po prvi put ne pređe konačnu vrijednost. U ovom slučaju, iterator će se povećavati za 1 svaki korak. Vrijednosti se upoređuju prije izvođenja sljedećeg koraka.

Ovaj dizajn se vrlo često koristi pri prelasku tabelarnih sekcija.

Kada koristite ovaj alat za indeksiranje, važno je napraviti razliku između broja redova u tabelarnom dijelu i indeksa jednog preuzetog reda. U prvom slučaju, početna vrijednost će biti 1, konačna vrijednost se može dobiti pomoću operatora Količina (). Indeksi počinju od 0 i završavaju na Count () - 1. U suprotnom, možete dobiti grešku (slika 2).

ćao

Postoji samo jedan parametar - logički izraz, koji se provjerava istinitost prije svakog sljedećeg koraka petlje. Čim logički izraz ne uspije, rukovalac će završiti obilazak.

Vrlo je važno shvatiti da u nekim slučajevima testirani izraz uvijek može biti u vrijednosti True, tako da će se obilazak izvršiti beskonačan broj puta, suspendujući sistem.

U takvim slučajevima potrebno je registrovati jednu od dvije opcije za prekid izvršavanja unutar tijela petlje.

Ponekad se može pojaviti situacija kada se nikada neće dogoditi istinitost testiranog izraza. Ovo može dovesti do beskorisnog traženja grešaka u kodu i gubljenja vremena.

Prekinite izvršenje pritiskom na kombinaciju tastera

Ako u tijelu petlje napišete proceduru User Interrupt Handling () , tada u bilo kojem trenutku njenog izvršavanja, pritiskom na kombinaciju tipki Ctrl + PauseBreak, možete zaustaviti njen rad. U tom slučaju će se u prozoru za poruke prikazati linija (slika 3).

Kako bi izbjegli neugodne posljedice svojih aktivnosti, izuzetno je korisno da se programeri osposobe za pisanje ove procedure u tijelo obrade.

Uslovni prekid

Često algoritam programa pretpostavlja zaustavljanje ciklične obrade ako je ispunjen ovaj ili onaj uvjet. Ovu proceduru možete staviti u tijelo petlje pomoću operatora Interrupt.

Ova izjava, ispravno napisana u programskom kodu, označena je crvenom bojom.

Preskakanje nekih operacija petlje

Često je u petlji potrebno provjeriti ispunjenje uvjeta i, ako ovaj uvjet nije ispunjen, preskočiti glavni rukovalac. Takve konstrukcije se mogu izvesti na dva načina:

  • U prvoj metodi postavljamo uslov unutar If Then End Ako napišemo izvršni kod, ako uslov nije ispunjen, kod se neće izvršiti u skladu s tim. Očigledan nedostatak ovog pristupa je što je prilično glomazan i u slučaju velikog broja uslova lako je pogriješiti, gdje dolazi početak jednog „Ako“ a gdje se završava drugo;
  • Mnogo je ispravnije koristiti konstrukciju gdje se umjesto iskaza uslova uzima njegova negacija (umjesto jednako uzima se nejednako itd.) i lokacija operatora Continue unutar konstrukcije;

Operator "Continue" u tijelu koda je označen crvenom bojom i prenosi izvršenje petlje na njen početak.

Top srodni članci