Kako postaviti pametne telefone i računala. Informativni portal

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

Opis:

Operator ciklusa For namijenjen je cikličkom ponavljanju 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 automatski se 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. Uvjet izvođenja petlje uvijek se 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. Brojač ciklusa tzv.Izraz 1 Numerički izraz koji specificira početnu vrijednost dodijeljenu brojaču petlje prvi put kada se petlja prođe.Sintaktičkom vezom 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 nakon ključne riječi Loop izvode se 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 zbirke vrijednosti. Svaka iteracija petlje vraća novu stavku kolekcije. Obilaženje se izvodi dok se ne prijeđu svi elementi zbirke.

Sintaksa:

Opcije:

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

Zbogom ciklus

Opis:

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

Sintaksa:

Opcije:

Booleov izraz Booleov izraz.Operatori petlje koji slijede ključnu riječ Loop izvode se sve dok je rezultat logičkog izraza Pravi. // Operatori Izvršni operator ili niz takvih operatora.Prekini Prekinite petlju u bilo kojem trenutku. Nakon izvršenja ovog izraza, kontrola se prenosi na naredbu nakon ključne riječi EndCycle.Nastavi Odmah prenosi kontrolu na početak petlje, gdje se petlja procjenjuje i provjerava. Operatori koji ga slijede u tijelu petlje ne izvode se u ovoj iteraciji.Kraj petlje Ključna riječ koja završava strukturu izraza petlje.
12. prosinca 2014. u 13.13 sati

Koji ciklus je brži? Testiranje 1C

  • visoke performanse,
  • Nenormalno programiranje,
  • Programiranje

Programiram 1C nekoliko godina, a onda sam došao na ideju - “Zašto ne proći neku vrstu treninga, odjednom postoje neke praznine u znanju za koje nisam ni znao prije”? Tek što je rečeno nego učinjeno. Sjedim, slušam tečaj, dolazim do cikličkih operatera i onda druga pomisao (da, nemam ih često) - "Koji je ciklus brži?" Trebali bismo provjeriti.
Tako sam pronašao pet načina, kako možete organizirati ciklus pomoću 1C.

Prva vrsta ciklusa, nazovimo je uvjetno "ForPo" izgleda ovako:

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

Za svaku kolekciju predmeta iz zbirke, Loop WhatToAction (); Kraj ciklusa;
Treći "Zbogom":

Sve 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 ~ Pokreni ciklus; Završi ako;
I konačno "Rekurzija"

Procedura Rekurzivni ciklus (n, broj iteracija) WhatToAction (); Ako je n<>Broj iteracija zatim rekurzivni ciklus (n + 1, broj iteracija); Završi ako; Završetak postupka
Naravno, nije sasvim ispravno klasificirati rekurziju kao petlju, ali unatoč tome, uz njezinu pomoć možete postići slične rezultate. Odmah da rezerviram da rekurzija nije sudjelovala u daljnjem testiranju. Prvo, svi testovi su provedeni na 1 000 000 iteracija, a rekurzija ispada već na 2 000. Drugo, stopa rekurzije je deset puta manja od stope drugih petlji.

Posljednja digresija. Jedan od uvjeta bilo je izvršenje bilo koje radnje u ciklusu. Prvo, prazna petlja se koristi vrlo rijetko. Drugo, za kolekciju se koristi ciklus "Za svakoga", što znači da ostali ciklusi moraju raditi s kolekcijom kako bi se testiranje odvijalo pod istim uvjetima.

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


ili, kada koristite ciklus "Za svakoga"

Primatelj testne vrijednosti = Elem;
Testiranje je provedeno na platformi 8.3.5.1231 za tri vrste sučelja (Obična aplikacija, Upravljana aplikacija i Taxi).
Brojevi su vrijeme u milisekundama dobiveno pomoću funkcije CurrentUniversalDate u milisekundama () koju sam nazvao prije i poslije petlje. Brojevi su razlomci jer sam koristio aritmetičku sredinu pet mjerenja. Zašto nisam upotrijebio mjerač performansi? Moj cilj nije bio mjeriti brzinu svakog retka koda, već samo brzinu ciklusa s 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 ga testirati na drugom stroju. Neću davati rezultate, možete ih sami generirati pomoću ove konfiguracije. 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čke 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 zbirke u varijablu.

Naposljetku:
Čemu sve ovo? Za sebe sam napravio nekoliko zaključaka:

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

Pažnja! Na kraju članka nalazi se poveznica na video tutorial.
Ako se prije niste susreli s programiranjem, potreba za korištenjem ciklusa u 1C programu vjerojatno nije sasvim jasna. U ovom članku govorit ću o operatorima petlje, kao io njihovoj glavnoj namjeni.

Ali prvo, radi jasnoće, nekoliko pojašnjenja o izrazima korištenim u članku:
Iteracija Je ponavljanje.
Zagrade operatera- rezervirane riječi, koje se uvijek pišu u paru, operator otvaranja i operatora zatvaranja. Na primjer: Function - EndFunction, If - EndIf, For - End of Loop, itd.
Tijelo 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 treba iteracija. Zamislite ako u dokumentu ima 100 redaka i trebate ih sortirati i, recimo, promijeniti vrijednost, ali ako se u isto vrijeme njihov broj povremeno mijenja, t.j. dodaju se i uklanjaju. Ne bi bilo lako.
Petlja vam omogućuje da pojednostavite zadatak izvršavanja ponovljenih redaka koda.
U programu 1C 8.1 postoje tri konstrukcije ciklusa:
"Za .. By .. Cycle" - ponavlja broj ciklusa od početne vrijednosti brojača do konačne specificirane vrijednosti, dodajući 1 varijablu brojača pri 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 sve

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

Za svaki CurrentElement From ArrayElements Petlja // EndCycle tijela petlje;

Obrnuti ciklus 1C

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

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

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

Algoritmi mnogih programa često uključuju cikličko ponavljanje određenih radnji. 1C nije iznimka u ovom slučaju. Ciklusi u 1C dopuštaju:

  • Prođite kroz elemente imenika;
  • Ispunite područja izgleda;
  • Izvršite određene radnje s 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 "Varijabla" = "Početak. vrijednost "Po" Kon. Značenje";
  3. Dok "Izraz".

Razmotrimo ih detaljnije.

Za svaku od

Ovaj alat za indeksiranje prikladan je za zbirke vrijednosti (odabir dokumenata ili kataloških stavki, zaliha). Izvršenje će se nastaviti sve dok se ne prođe zadnji element zbirke. Redak mora sadržavati:

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

Najčešća pogreš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 zbirke (odabira) vrijednosti dobivenih pomoću operatora Select ().

Za po

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 vršit će se sve dok varijabla ne bude jednaka ili po prvi put ne prijeđe konačnu vrijednost. U ovom slučaju, iterator će se povećavati za 1 svaki korak. Vrijednosti se uspoređuju prije izvođenja sljedećeg koraka.

Ovaj dizajn se vrlo često koristi pri prelasku tabličnih dijelova.

Kada koristite ovaj alat za indeksiranje, važno je razlikovati broj redaka u tabličnom odjeljku i indeks jednog preuzetog retka. U prvom slučaju, početna vrijednost će biti 1, konačna vrijednost može se dobiti pomoću operatora Količina (). Indeksi počinju s 0 i završavaju s Count () - 1. U suprotnom, možete dobiti pogrešku (slika 2).

Zbogom

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 dovršiti obilazak.

Vrlo je važno razumjeti da u nekim slučajevima testirani izraz uvijek može biti u vrijednosti True, pa će se prelazak izvršiti beskonačan broj puta, suspendirajući sustav.

U takvim slučajevima potrebno je registrirati jednu od dvije opcije za prekid izvođenja unutar tijela petlje.

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

Prekinite izvršenje pritiskom na kombinaciju tipki

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

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

Uvjetni prekid

Često algoritam programa pretpostavlja zaustavljanje cikličke 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 mogu se izvesti na dva načina:

  • U prvoj metodi postavljamo uvjet unutar If Then End Ako napišemo izvršni kod, ako uvjet 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 uvjeta lako je pogriješiti, gdje dolazi početak jednog “Ako” a gdje završava drugi;
  • Puno je ispravnije koristiti konstrukciju gdje se umjesto iskaza uvjeta uzima njegova negacija (umjesto jednako uzima se nejednako itd.) i mjesto operatora Continue unutar konstrukcije;

Operator "Continue" u tijelu koda označen je crvenom bojom i prenosi izvođenje petlje na njezin početak.

Vrhunski povezani članci