Idol bucle imbricate. Idol al limbajului algoritmic. Bucla cu stare

Luați în considerare problema:

Programul primește un număr natural care nu depășește 2 * 10 9 la intrare. Determinați suma cifrelor acestui număr.

La prima vedere, sarcina este foarte simplă: este necesar să evidențiați secvențial numerele din număr și să le adăugați la sumă. În același timp, este evident că numărul de cifre din număr se poate modifica, astfel încât valoarea finală a parametrului buclei pentru se dovedește a fi nedefinită și există dificultăți în aplicarea sa.

V algoritmi ciclici dacă numărul de repetări al unui set specific de comenzi nu poate fi obținut înainte de a începe, se aplică bucle condiționate.

Ciclu de pa

O astfel de construcție în limbajul de programare Kumir este ciclu pa... Acest ciclu, denumit adesea bucla de precondiție, Are urmând formatulînregistrări:

  • nc până acum condiție
  • ciclu_corp

Condiția scrisă după până acum este o expresie booleană.

Bucla se execută după cum urmează:

  1. Valoarea este calculată expresie logică.
  2. Dacă rezultatul calculului este nu, atunci execuția ciclului se termină, iar Idolul trece la prima comandă după ciclul pa. Dacă rezultatul calculului este da, atunci se execută corpul buclei, după care se calculează din nou valoarea expresiei cu noua valoare.

Important! În corpul buclei, deocamdată, trebuie să existe o modificare a unei valori asociate condiției pentru a asigura sfârșitul buclei, în caz contrar, bucla ar putea ajunge definitiv.

Acum să folosim o buclă while pentru a rezolva problema noastră.

  • numar de intrare
  • nc în timp ce num> 0
  • sum: = sum + mod (num, 10)
  • num: = div (num, 10)
  • suma de retragere

Deci, în cursul fiecărei execuții a corpului buclei, ultima cifră a numărului este adăugată la valoarea sumei, apoi numărul este redus de 10 ori. Evident, în cele din urmă num va deveni 0, după care bucla se va termina.

Ciclul „până atunci”

În Kumir, există o altă versiune a unei bucle cu o condiție, numită până atunci buclă, care are următorul format:

  • ciclu_corp
  • kts în stare

Dacă este în buclă în timp ce starea este verificată înainte de corpul buclei, atunci în buclă până atunci - după. Prin urmare, acest ciclu este adesea numit buclă cu postcondiție... Corpul unei astfel de bucle va fi întotdeauna executat cel puțin o dată.

Până atunci, ciclul funcționează după cum urmează:

  1. Corpul buclei este executat
  2. Se evaluează valoarea expresiei logice. Dacă rezultatul calculului este nu, atunci corpul buclei începe să se execute din nou și așa mai departe. Dacă rezultatul calculului este da, atunci bucla se termină, iar Idolul trece la executarea următoarei comenzi după buclă.

Sarcină. Programul primește o secvență de numere întregi terminate zero la intrare. Găsiți numărul numerelor negative din secvență. Este garantat că secvența conține cel puțin un număr diferit de zero.

(Un fragment din codul programului)

  • numar de intrare
  • dacă num 0
  • apoi k: = k + 1
  • kts la num = 0
  • roz

1. Introducere

sistemul „Kumir” (numele vine de la cuvintele „Set of Training Worlds”), care vă va prezenta acest lucru varianta electronică manual.
Dezvoltatorii limbajului Kumir și-au propus să creeze un limbaj simplu pentru curs inițial informatică, întâlnirea tehnologiei moderne de programare și permiterea utilizării industriale. Limbajul algoritmic școlar a fost luat ca bază. Limbajul a fost completat cu unele caracteristici care îl transformă de la educație la producție. Limba are:
tipuri întreg, lucru, aprins; set tradițional de operații pe date de acest tip (inclusiv operații pe șiruri și un set standard funcții matematice);
matrice ( filă) din tipurile specificate; construcții structurate de control pentru bucle, ramificare etc.
Kumir este deschis - conexiunea interpreților externi îmbogățește limbajul cu noi posibilități: de la gestionarea bazei de date și lucrul cu obiecte geometrice până la extinderea setului de tipuri numerice admisibile (în acest caz, limbajul va permite amestecarea de noi tipuri cu tipurile numerice existente în expresii ).
Tehnologie moderna programarea învață să împartă un program nu numai în subrutine, ci și în unități mai mari: seturi de programe care lucrează pe date comune. În diferite limbaje de programare, astfel de unități sunt numite diferit, în Kumir o astfel de unitate este numită „Executor”. Conceptul de interpret este extrem de important în munca practică și ar trebui introdus în cele mai timpurii etape posibile de formare.
Experiența utilizării lui Kumir în predare și pentru dezvoltarea de programe educaționale a arătat că limba este ușor de învățat și în același timp suficient de puternică pentru a extinde o clasă largă de sarcini de producție.
La fel ca atelierul electronic, Kumir este un sistem integrat care include editor de text, un compilator incremental cu timp de răspuns zero și un depanator simplu și convenabil. Un nume bun pentru acest tip de sistem este „Editor-compilator”: în timp ce introduceți programul, compilatorul îl procesează și, în orice moment, programul este gata să ruleze fără cea mai mică întârziere.

2. Denumiri și tipuri de cantități. Operațiunile lui Kumir

Orice simbol al alfabetelor rusești și latine, precum și numerele, pot fi utilizate în înregistrarea numelor variabilelor. Numele nu trebuie să înceapă cu un număr. Nu există restricții stricte cu privire la lungimea numelor în sistemul Kumir, dar pentru a facilita editarea și pentru a evita depășirea șirurilor, variabilele și algoritmii nu ar trebui să fie date prea mult nume lungi... De obicei, numele este ales astfel încât să puteți înțelege la ce servește algoritmul. Când editați programe, ar trebui să vă amintiți că literele rusești și latine, similare în ortografie, diferă în computer. De exemplu, dacă, atunci când descrie o variabilă cu numele A, utilizatorul a tastat „A” în alfabetul latin, iar în textul algoritmului încearcă să acceseze această variabilă tastând numele acesteia în alfabetul rus, atunci mesajul „ numele nu este definit "va apărea pe" câmpuri "...
În limbajul algoritmic al sistemului de programare Kumir, sunt utilizate trei tipuri de mărimi: numere întregi ( intact), real ( lucruri) și scrisoare ( litas).
Tipul cantității- definește setul de valori pe care le poate lua o valoare și un set de acțiuni care pot fi efectuate cu această valoare.
Cantitatea este un obiect de informație separat care are un nume, valoare și tip.

O valoare constantă (constantă) nu își schimbă valoarea în timpul executării algoritmului.
Variabila poate modifica valoarea în timpul executării algoritmului.
Expresie- o înregistrare care definește succesiunea acțiunilor asupra valorilor. O expresie poate conține constante, variabile, semne de operație, funcții.
Pentru a scrie expresii în Kumir, sunt utilizate următoarele simboluri:

Pentru a indica semne operații logice se folosesc simboluri:
= egal;
< >nu este egal;
< меньше;
> mai mult;
< = меньше или равно;
> = mai mare sau egal;
Pentru a înregistra condiții complexe, astfel de operații sunt utilizate ca: ȘI, SAU NU.
ȘI -
îndeplinirea simultană a condițiilor enumerate (X> 0 și X< = 2);
SAU- îndeplinirea a cel puțin uneia dintre condiții (X> 0 sau Y> 0);
NU- negare.

3. Funcții încorporate ale limbajului Kumir

Iată un exemplu de funcții încorporate:

Recurs

Funcţie

Tipuri

Argument

Funcții

PĂCAT (X) COS (X) TG (X) EXP (X) LN (X) ABS (X) SQRT (X) MOD (A,B) INT (X) PI

sinusul x cosinus x tangent x
exponent x (ex) naturi. logaritmul x
modulul x
rădăcină pătrată x
restul diviziunii (A cu B)
partea întreagă a numărului
numărul „pi” - 3,14159

lucruri
lucruri
lucruri
lucruri
lucruri
lucruri
lucruri
lucru, intact
lucruri
lucruri

lucruri
lucruri
lucruri
lucruri
lucruri
lucruri
lucruri
intact
intact
fără argum

Un exemplu de scriere a expresiilor aritmetice într-un limbaj algoritmic:

4. Comandă informații INPUT / OUTPUT

De multe ori este necesar să se organizeze un schimb de informații („dialog”) între o persoană și un computer în procesul de executare a unui algoritm. Pentru aceasta, în limbajul algoritmic există comenzi speciale pentru AFIȘAREA informațiilor din memoria computerului pe ecran și INTRAREA informațiilor de la tastatură (de la o persoană) în memoria computerului.
Comandă INPUT - comandă prin care valorile variabilelor sunt setate prin intermediul dispozitivelor de intrare (tastatură).
Comanda OUTPUT- comanda prin care valoarea cantității este reflectată pe dispozitivul de ieșire al computerului (ecranul monitorului).
Deoarece în limbajul algoritmic pentru stocarea informațiilor, sunt utilizate cantități, numele mărimilor sunt indicate în comenzile de intrare / ieșire, ale căror valori trebuie afișate (afișate pe ecran) sau introduse (memorate în memoria computerului) .
Exemplu:

Cuvânt de serviciu NS (linie nouă) indică computerului că informațiile trebuie afișate pe o nouă linie.

5. Comanda de atribuire. Crearea și editarea programelor de structură liniară

Pentru a aminti sau a modifica valoarea unei cantități, există o comandă specială în limbajul algoritmic - comanda de atribuire, care este scris ca:

DENUMIREA VALORII: = EXPRESIE

Semnul „: =” (colon urmat de egalitate) se numește semn sarcini și citește ca "atribui" (de exemplu, comanda "n: = e" citește "n atribui e"). La executarea comenzii de atribuire, computerul calculează mai întâi expresia scrisă în partea dreaptă (înlocuind numele mărimilor cu valorile lor), apoi scrie valoarea rezultată a expresiei în memorie.

Algoritmii care sunt secvențe simple de acțiuni se numesc algoritmi cu structură liniară.
Luați în considerare procesul de creare algoritm liniar folosind exemplul de evaluare a unei expresii:
1. Calculați suma a două numere
2. Scrieți un program pentru găsirea hipotenuzei unui triunghi dreptunghiular cu două picioare date
3. Găsiți volumul unui cub dacă latura acestuia este cunoscută

6. Crearea și editarea programelor de structurare a ramificărilor

Rezolvarea problemelor nu poate fi întotdeauna reprezentată ca un algoritm liniar. Există sarcini în care este necesar să se organizeze alegerea efectuării unei secvențe de acțiuni în funcție de orice condiții. Astfel de algoritmi sunt numiți algoritmi de ramificare.În sistemul de programare Kumir, pentru a crea un algoritm pentru o structură de ramificare, sunt furnizate construcțiile "IF - THEN - ELSE - ALL" și "SELECT - PRI - ALL".

Comandă de ramură: DACĂ - ALTĂ - ALTE - TOATE

Comandă de ramificare - împarte algoritmul în două căi în funcție de o anumită condiție; apoi executarea algoritmului merge la o continuare generală. Ramificarea este completă și incompletă.

Diagrama grafică a implementării proiectării " dacă"

Cuvinte de serviciu " dacă", "atunci", "in caz contrar"au semnificația obișnuită. Cuvântul" toate"înseamnă sfârșitul structurii. Între" atunci" și " in caz contrar"- într-una sau mai multe linii - este scrisă o succesiune de comenzi ale limbajului algoritmic (seria 1). Între" in caz contrar" și " toate"se înregistrează o altă secvență de comenzi (seria 2). Seria 2 împreună cu un cuvânt de serviciu" in caz contrar"poate lipsi. La executarea construcției" dacă„Computerul verifică mai întâi starea scrisă între” dacă" și " atunci Rezultatul verificării este fie DA sau NU. Daca este posibil DA, atunci SERIA 1 este executată și dacă NU, - apoi SERIA 2 (dacă există) .
Dacă condiția nu este îndeplinită (se dovedește NU), și seria 2 împreună cu „ in caz contrar"este absent, apoi computerul continuă imediat să execute comenzile scrise după cuvânt" toate".

7. Tipuri de cicluri în sistemul de programare Kumir

Algoritmii, ale căror acțiuni individuale se repetă de multe ori, se numesc algoritmi de structură ciclică. Setul de acțiuni ale unui algoritm asociat cu repetarea se numește buclă.
Comanda ciclului oferă executarea repetată a unei secvențe de comenzi (corpul buclei) în funcție de anumite condiții.
Pentru programarea algoritmilor structurii ciclice în sistemul de programare Kumir, există două tipuri de cicluri: un ciclu cu o condiție prealabilă (ciclu pentru moment) și un ciclu cu un parametru (ciclu pentru).

Buclă cu condiție prealabilă (bucla bye)

Buclă cu o precondiție (buclă deocamdată) - o buclă care se repetă atâta timp cât condiția buclei este adevărată. Cuvinte de serviciu NT(începutul ciclului) și CC(sfârșitul ciclului) sunt scrise strict unul sub celălalt și sunt conectate printr-o linie verticală. În dreapta acestei linii, se scrie secvența repetată de comenzi (corpul buclei).

Când este executat, computerul repetă ciclic următoarele acțiuni:
a) verifică ce este scris după cuvânt in timp ce condiție;
b) dacă condiția nu este îndeplinită (condiția este falsă), atunci se termină executarea ciclului și computerul începe să execute comenzile scrise după CC... Dacă condiția este îndeplinită (condiția este adevărată), atunci computerul execută corpul ciclului, verifică din nou starea și așa mai departe.
Dacă condiția din buclă in timp ce nu este observat de la bun început, atunci corpul buclei nu este executat nici măcar o dată.
cometariu... Executarea ciclului in timp ce s-ar putea să nu se completeze dacă condiția este adevărată tot timpul (această situație se numește de obicei buclă). Prin urmare, pentru a evita astfel de situații, corpul buclei trebuie să conțină comenzi pentru schimbarea stării.

Dat fiind un număr întreg pozitiv N. Calculați factorialul acestui număr: N! = 1 * 2 * 3 * ... * N.

Bucla cu parametru (bucla pentru)

Bucla cu parametru(bucla pentru) - executarea repetată a corpului buclei în timp ce parametrul întreg rulează prin setul tuturor valorilor de la inițial (i1) la final (în):

Aici i este o variabilă întreagă numită parametru buclă: i1, în sunt valorile inițiale și finale ale parametrului buclă, care pot fi specificate fie prin numere întregi arbitrare, fie prin expresii cu valori întregi; h - pas de schimbare a valorii parametrului ciclului, valoarea pasului poate fi orice număr întreg (atât pozitiv cât și negativ). Este posibil ca intrarea „pasul h” din prima linie să nu fie deloc prezentă, în timp ce valoarea implicită a pasului se presupune a fi 1.
La executarea unei bucle pentru, corpul său este executat pentru i = i1, i = i1 + h, i = i1 + 2 * h ,. ... ... , i = in. Regulile limbajului algoritmic permit specificarea oricărui număr întreg i1, în, h. În special, în poate fi mai mic decât i1. Dacă, în acest caz, valoarea h< 0, то цикл выполняется нужное количество раз, а если h имеет положительное значение, то этот случай не считается ошибочным - просто тело цикла не будет выполнено ни разу, а ЭВМ сразу перейдет к выполнению команд, записанных после CC... Când h = 0, apare o buclă.

Exemplu: Având un număr întreg pozitiv N. Calculați factorialul acestui număr: N! = 1 * 2 * 3 * ... * N.

8. Algoritmi de expresii recurente

În matematică și informatică, există adesea secvențe în care fiecare termen ulterior este calculat prin intermediul celor anterioare.
V progresie aritmetică, de exemplu, fiecare termen următor este egal cu cel anterior, crescut cu diferența de progresie:

ai =ai-1 +d

În secvența 1, 1, 2, 3, 5, 8, 13, ... ( se numește secvența Fibonacci) fiecare termen următor este egal cu suma celor doi anteriori. Pentru această secvență

ai = ai-1 + ai-2, a1 = a2 = 1

Se apelează formule care exprimă următorul membru al unei secvențe prin unul sau mai mulți membri anteriori relații de recurență.

9. Valori tabulareși lucrează cu ei

Pentru a scrie algoritmi care funcționează cu o cantitate mare de informații, în limbajul algoritmic există valori speciale ale tabelelor numite tabele (tablouri).
Valorile tabulare sunt alcătuite din alte valori, de obicei întregi sau valori reale, numite itemi. Elementele din tabel pot fi aranjate în moduri diferite. În limbajul algoritmic al sistemului de programare Kumir, sunt utilizate cele mai comune 2 tipuri de tabele: tabele liniare și dreptunghiulare.

Lucrul cu tabele liniare (tablouri unidimensionale)

Ca orice cantitate, tabel liniar ocupă spațiu în memoria computerului, are nume, valoare și tip. În Kumir, se utilizează tabele de tipuri întregi (celtab) și reale (materiale). De exemplu:

Înregistrați celtab A [1: 5] înseamnă că valoarea A este un tabel (tab), format din numere întregi (numere întregi), elementele acestui tabel au indici de la 1 (limita inferioară) la 5 (limita superioară). Valoarea A este de cinci numere întregi: 3, 15, 0, -10.101.
Elementele tabelului nu au nume separate. Pentru a desemna al i-lea element al tabelului A, se folosește înregistrarea A [i]. De exemplu, când se execută comanda A [3]: = A [2] + A [4], computerul va înlocui valorile elementelor 2 și 4 ale lui A în loc de A [2] și A [4] Tabelul A, adică numerele 15 și -10, le adună și atribuie valoarea rezultată elementului 3, astfel, în loc de 0, valoarea 5 apare în locul celui de-al treilea element din tabel.
Orice număr întreg (atât pozitiv cât și negativ) și 0 pot fi utilizate ca valori ale marginilor tabelului. Valoarea marginii inferioare trebuie să fie mai mică decât valoarea chenarului superior; dacă sunt egale, tabelul este considerat a fi format dintr-un singur element . Dacă în descrierea tabelului datorită alunecării limbii, marginea inferioară se dovedește a fi mai mare decât cea superioară, de exemplu, celtab [3: 1], atunci aceasta nu va fi considerată o eroare și nu există mesaje va apărea în „câmpuri” la introducerea algoritmului. În acest caz, se va considera că nu există elemente în acest tabel, iar mesajul „index greșit” va apărea prima dată când se accesează tabelul.

Sarcină.

Lucrul cu tabele dreptunghiulare (matrice)

La fel ca un tabel liniar, o matrice ocupă spațiu în memoria computerului, are un nume, valoare și tip. În Kumir, sunt utilizate tabele de tipuri întregi (celtab) și reale (materiale).

Notarea celtab A [1: 5, 1: 2] înseamnă că valoarea A este un tabel (tab) format din numere întregi (numere întregi), elementele acestui tabel au indici de la (prima coloană, primul rând) la (ultimul coloană, ultimul rând). Valoarea A este de zece numere întregi: 3, 15, 0, -10, 101, 200, -45, 50, 10, 222.
Elementele tabelului nu au nume separate. Pentru a desemna al i-lea element al tabelului A, se folosește înregistrarea A [i, j]. De exemplu, atunci când executați comanda A [3, 1]: = A [2, 1] + A [4, 1], computerul va înlocui valorile A [2, 1] și A [4, 1] Din elementele 2 și 4 ale primei coloane din tabelul A, adică numerele 15 și -10, le vor adăuga și vor atribui valoarea rezultată elementului 3 din primul rând, astfel, în locul celui de-al 3-lea element din primul rând din tabel, în loc de 0, va apărea valoarea 5.
Orice număr întreg (atât pozitiv cât și negativ) și 0 pot fi utilizate ca valori ale marginilor tabelului. Valoarea marginii inferioare trebuie să fie mai mică decât valoarea chenarului superior; dacă sunt egale, tabelul este considerat a fi format dintr-un singur element . Dacă în descrierea tabelului datorită alunecării limbii, marginea inferioară se dovedește a fi mai mare decât cea superioară, de exemplu, celtab [3: 1, 5: 2], atunci aceasta nu va fi considerată o eroare și nu vor apărea mesaje în „câmpuri” la introducerea algoritmului. În acest caz, se va considera că nu există elemente în acest tabel, iar mesajul „index greșit” va apărea prima dată când se accesează tabelul.

Sarcină.În tabelul dat B, determinați indexul și valoarea elementului maxim.

Anexă: Sarcini

Algoritmi liniari

Problema numărul 1

Găsiți suma a două numere - a și b
Soluţie:

alg sumă
din timp lucruri a, b, c
ieșire "introduceți valoarea a 2 numere"
intrare a, b
c: = a + b
ieșire NS , "suma numerelor", a, "și", b, "egal cu", c
con

Problema numărul 2

Găsiți diferența dintre două numere
Soluţie:

alg diferență
din timp lucruri a, b, c
ieșire „introduceți valori variabile”
intrare a, b
c: = a - b
ieșire ns, „diferența de numere”, a, „și”, b, „egal cu”, c
con

Problema numărul 3

Găsiți produsul oricăror două numere naturale
Soluţie:

intact a, b, c

alg muncă
din timp
ieșire
" introduceți două numere "
intrare
A,bc: =a +b
ieșire ns,
"
produsul numerelor ", a," și ", b" este egal ", c
con

Problema numărul 4

Găsiți coeficientul a două numere naturale
Soluţie:

lucruri a, b, c

alg privat
din timp
ieșire "
introduceți dividend și divizor "
intrare
a, b
c: = a / b
ieșire ns,
„coeficient”, a, „și”, b, „egal”, c
con

Problema numărul 5

Găsiți media aritmetică a cinci numere arbitrare
Soluţie:

lucruri a, b, c, d, e, f

alg aritmetic
începe lucruri a, b, c, d, e, f
ieșire „introduceți oricare 5 numere”
intrare a, b, c, d, e
f: = (a + b + c + d + e) ​​/ 5
ieșire ns , "media aritmetică a 5 numere este egală cu", f
con

Ramificare

Problema numărul 1

Găsiți cel mai mare dintre 3 numere întregi (numerele sunt arbitrare)

alg maxim
intact a B C
ieșire „introduceți trei numere arbitrare”
intrare a B C
dacă a> b> c
apoi ieșirea ns ," număr maxim este "și
toate
dacă A<б>cu
apoi ieșirea ns , „numărul maxim este”, b
toate
dacă A<б<с
apoi ieșirea ns , „numărul maxim este”, cu
toate
con

Problema numărul 2

Sunt date două numere arbitrare. Dacă primul număr este mai mare decât al doilea, atunci atribuiți suma acestuia lui, iar produsul lor celui de-al doilea număr. Dacă al doilea număr este mai mare decât primul, atunci atribuiți produsul primului număr și suma lor celui de-al doilea.

alg condiție
începe lucruri a, b
ieșire „introduceți două numere”
intrare a, b
dacă a> b
atunci a: = a + b
b: = a * b
in caz contrar a: = a * b
b: = a + b
ieșire ns , a, b
con

Sarcina numărul 3:

Găsiți printre 4 numere arbitrare minimul
Soluţie:

alg minim
începe lucruri a, b, c, f
ieșire „introduceți 4 numere arbitrare”
intrare a, b, c. e
dacă a> b> c> f
apoi ieșirea ns , „numărul maxim este” și
toate
dacă A<б>c> e
apoi ieșirea ns , „număr maxim -”, b
toate
dacă
A<б<с>e
apoi ieșirea ns , „număr maxim -”, s
toate
dacă
A<б<с<е
apoi ieșirea ns , „număr maxim -”, e
toate
con

Problema numărul 4

Există 2 picioare (2 cm și 2 cm) ale unui triunghi isoscel și baza acestuia (2,82 cm). Determinați dacă un triunghi este dreptunghiular.
Soluţie:

alg triunghi
începe lucruri i, h, s
i: = 2
h: = 2
c: = 2,82
dacă s ** 2 = (i ** 2) + (h ** 2)
apoi concluzia "adevăr"
în caz contrar, ieșirea „Minciuna”
toate
con

Problema numărul 5

Trimiteți mesajul „adevărat” dacă produsul a două numere negative este mai mare decât zero, în caz contrar trimiteți mesajul „fals”
Soluţie:

alg negare
începe lucruri i, h, s, m
ieșire „introduceți două numere negative”
intrare eu, h
c: = 0
m: = i * h
dacă m> s
apoi ieșirea ns , "Adevărat"
altfel ieșire ns , "Minciuna"
toate
con

Ciclul „pentru”

Problema numărul 1

Găsi Factorială numar naturaln ( Factorialul unui număr natural n este produsul tuturor numerelor naturale în intervalul de la 1 la n ) Soluție:

alg factorial
începe lucruri
A. b
intact
n, și
ieșire

intrare
n
a: = 1
nts pt
și din 1 inainte de n
ieșire ns,
"introduceți numărul"
intrare
b
a: = a * b
kts
ieșire ns
,
"factorial", n, "numere întregi este egal cu" și
con

Problema numărul 2

Găsiți valoarea maximă dintren - numere întregi
Soluţie:

alg maxim
începe lucruri
a, b
intact
si n
ieșire
„introduceți numărul întreg pentru a compara”
intrare
n
a: = 0
nts pt
și din 1 inainte de n
ieșire ns,
„introduceți numărul”
intrare
b
dacă
b> a
atunci
a: = b
toate
kts
ieșire ns,
"numărul maxim dintre date este un număr" și
con

Problema numărul 3

Găsiți printren-numere întregi numărul negativului
Soluţie:

alg coincidență
începe lucruri
a, b, c
intact
n, i, s
ieșire "
introduceți numărul numerelor naturale "
intrare
n
ieșire ns,
„introduceți numărul”
intrare
b
n: = n - 1
h: = 0
nts pt
și din 1 inainte de n
ieșire ns,"
introduceți numărul "
intrare
cu
dacă
c = b
atunci
s: = s + 1
toate
kts
ieșire ns
,

con

Problema numărul 4

N-numere întregi sunt introduse secvențial. Găsiți numărul de potriviri cu primul număr
Soluţie:

începe lucruri a, b, c
intact
n, i, s
ieșire
„introduceți numărul numerelor naturale”
intrare
n
ieșire ns,
„introduceți numărul”
intrare
b
n: = n - 1
h: = 0
nts pt
și din 1 inainte de n
ieșire ns,
"introduceți numărul"
intrare
cu
dacă
c = b
atunci s: = s + 1
toate
kts
ieșire ns
,
„numărul de meciuri cu primul număr este”, h
con

Problema numărul 5

N-numere întregi sunt introduse secvențial. Găsiți diferența dintre valorile maxime și minime ale numerelor date
Soluţie:

alg diferență
începe lucruri
A. b, c, d
intact
n, și
ieșire
„Introduceți numărul de numere”
intrare
n
a: = 0
c: = 0
nts pt
și din 1 inainte de n
ieșire ns,
„introduceți numărul”
intrare
d
dacă
d> c
atunci
c: = d
toate
dacă
d<а
atunci
a: = d
toate
kts
b: = c - a
ieșire ns,
„diferența dintre valorile minime și maxime este egală cu”, b
con

Ciclu de pa

Problema numărul 1

Găsiți suma tuturor numerelor cuprinse între 1 și 5
Soluţie:

alg numerele
începe lucruri a, b
ieșire „introduceți două numere astfel încât al doilea număr să fie mai mare decât primul”
intrare a, b
nc pa A<б
a: = a + 1
kts
ieșire ns
, A
con

Problema numărul 2

Două astfel de numere sunt date astfel încât al doilea număr să fie mai mare decât primul. Este necesar să adăugați 1 la primul număr până când este egal cu al doilea număr, afișați-l pe monitor.
Soluţie:

alg sumă
începe lucruri a, b, c
ieșire „introduceți intervalul de însumare”
intrare a, b
c: = a
nc pa A< б
a: = a + 1
c: = c + a
kts
ieșire ns
, "suma numerelor din acest interval este egală cu", cu
con

Problema numărul 3

Sunt date două numere arbitrare. În timp ce produsul lor este mai mic de 100, creșteți fiecare număr cu 2 și afișați numerele finale pe monitor
Soluţie:

alg muncă
începe lucruri a, b, c
ieșire „introduceți două numere arbitrare”
intrare a, b
c: = 100
nc pa a * b< с
a: = a + 2
b: = b + 2
kts
ieșire ns
, a, b
con

Tablouri unidimensionale

Problema numărul 1

Umpleți matricea numere aleatoriiși scoate elementele sale Soluție:

alg matricea 2
intact
n, i
lucruri
b, max
personalul general
a [1: n]
ieșire
„umpleți tabloul”
intrare
n
max: = 0
nts pt
eu din 1 inainte de n
ieșire ns,
"introduceți elementul matricei"
intrare
b
dacă
b> max
atunci max: = b
toate
kts
ieșire ns
,

con

Problema numărul 2

Găsiți elementul maxim al matricei și afișați-l pe monitor Soluție:

alg matricea 2
din timp
intact n, i
lucruri
b, max
personalul general a [1: n]
ieșire
„umpleți tabloul”
intrare
n
max: = 0
nts pt
eu din 1 inainte de n
ieșire ns,
"introduceți elementul matricei"
intrare
b
dacă
b> max
atunci max: = b
toate
kts
ieșire ns
,
„elementul maxim al acestui tablou este”, max
con

Problema numărul 3

Găsiți suma elementelor unui tablou unidimensional Soluție:

alg sumă
din timp intact
n, i
personalul general
a [1: n]
lucruri
b, z
ieșire
"introduceți numărul de elemente din matrice"
intrare
n
z: = 0
nts pt eu din 1 inainte de n
ieșire ns,
"introduceți elementul matricei"
intrare
b
z: = z + b
kts
ieșire ns
,
"sumă", n, "elemente matrice egale cu", z
con

Problema numărul 4

Găsiți produsul elementelor unei matrici unidimensionale Soluție:

alg muncă
intact
eu, n
lucruri
s, d
personalul general
a [1: n]
ieșire
"introduceți numărul de elemente din matrice"
intrare
n
d: = 1
nts pt
eu din 1 inainte de n
ieșire ns,
„introduceți numărul”
intrare
s
d: = d * s
kts
ieșire ns
,"
produs ", n," elemente este egal cu ", d
con

Matrice

Problema numărul 1


Completați matricea cu numere aleatoare Soluție:

alg matrice bidimensională
intact
n, j, h, v
șef al Statului Major General
A
ieșire
„introduceți cardinalitatea tabelului”
intrare
n
h: = 0
v: = 0
ieșire ns,
„umpleți tabloul”
intrare
A
nts pt
j din 1 inainte de n
dacă a> 0
atunci
h: = h + 1
in caz contrar
v: = v + 1
kts
ieșire ns,
A
con


Problema numărul 2


Calculați numărul de elemente pozitive și negative din primul rând al soluției matricei:

alg matricea 2
din timp
lucruri b, x, z
intact
eu, n
ieșire

intrare
n x: = 0
z: = 0
nts pt
eu din 1 inainte de n
ieșire
NS, „introduceți numărul”
intrare
b
dacă
b> 0
atunci
x: = x + 1
in caz contrar
z: = z + 1
toate
kts
ieșire ns
,

ieșire ns,

con


Problema numărul 3


Calculați suma elementelor fiecărui rând Soluție:

alg matrice 3
începe lucruri
b, x, z, y
intact
eu, n
personalul general
a [1: n, 1: n]
ieșire
„introduceți numărul de coloane”
intrare
n x: = 0
z: = 0
nts pt
eu din 1 inainte de n
ieșire ns,
„umpleți tabloul”
intrare
a [1: n, 1: n]
b: = a [1, i] + a [n, i]
kts
ieșire ns
,
„numărul numerelor pozitive este egal cu”, x
ieșire ns,
„numărul numerelor negative este egal”, z
con


Problema numărul 4


Calculați suma celor trei numere ale celui de-al doilea rând al matricei trei câte trei Soluție:

alg matrice
din timp intact
eu, n
personalul general a [1: 3, 1: 3]
ieșire „umpleți tabloul”
intrare a [1: 3, 1: 3]
n: = 0
nts pentru eu din 1 inainte de 3
n: = n + a [2, i]
kts
ieșire NS,
„suma numerelor din al doilea rând al tabloului este”, n
con

Khiryanov Timofey Fedorovich

dacă-atunci-altfel-totul

Vedere generală a echipei:

dacă starea
apoi seria 1
altfel seria 2
toate

Seria 2împreună cu cuvântul de serviciu in caz contrar poate lipsi. În acest caz, comanda arată astfel:

dacă starea
apoi seria 1
toate

La executarea comenzii dacă Kumir verifică mai întâi condiție scris între dacăși atunci... Dacă această condiție este îndeplinită, seria 1, in caz contrar - seria 2(dacă există una), după care Kumir continuă să execute comenzile scrise după cuvânt toate.
Dacă condiția nu este îndeplinită și seria 2, împreună cu altfel, este absentă, atunci Kumir trece imediat la executarea comenzilor scrise după cuvântul all.

Exemplul 1

în cazul în care o atunci
b: = b-a
p: = p + q
in caz contrar
a: = a-b
q: = q + p
toate

Exemplul 2

dacă x> m
atunci
m: = x
n: = n + 1
toate

Exemplul 3 (robot performer)

dacă dreptul este liber
atunci
La dreapta
toate

alegere-dacă-altfel-totul

Vedere generală a echipei:

alegere
pentru starea 1: seria 1
pentru starea 2: seria 2

pentru starea n: seria n
altfel seria n + 1
toate

Cuvânt cheie in caz contrarîmpreună cu seria corespunzătoare de comenzi pot lipsi:

alegere
pentru starea 1: seria 1
pentru starea 2: seria 2

pentru starea n: seria n
toate

Kumir verifică mai întâi starea 1... Dacă este observat, atunci Kumir execută comenzi din seria 1, și apoi trece la executarea comenzilor scrise după cuvânt toate... În caz contrar, Kumir face același lucru cu starea 2și echipe din seria 2 etc.
Comenzi scrise după cuvânt in caz contrar, sunt executate atunci când niciuna dintre condiții nu este îndeplinită.
Într-o comandă, nu este selectată întotdeauna mai mult de o serie de comenzi, chiar dacă mai multe condiții sunt adevărate. Executarea comenzii de selectare se încheie după ce se găsește prima (în ordine) condiție cu valoarea yes (și seria corespunzătoare de comenzi a fost executată).

Exemplul 1

alegere
pentru un> 1: i: = i + 1
la un< 0: j:= j - 1
altfel t: = i; i: = j; j: = t
toate

Carduri de sarcini

    Găsiți printre n-numere întregi introduse de la tastatură numărul negativ

    Sunt date două numere arbitrare. În timp ce produsul lor este mai mic de 100, creșteți fiecare număr cu 2 și afișați numerele finale pe monitor

    N-numere întregi sunt introduse secvențial. Găsiți numărul de cinci dintr-o secvență

    N-numere întregi sunt introduse secvențial. Găsiți diferența dintre valorile maxime și minime ale numerelor date

    Găsiți printre n-numere întregi introduse de la tastatură numărul negativ

    Sunt date două numere arbitrare. În timp ce produsul lor este mai mic de 100, creșteți fiecare număr cu 2 și afișați numerele finale pe monitor

    N-numere întregi sunt introduse secvențial. Găsiți numărul de cinci dintr-o secvență

    N-numere întregi sunt introduse secvențial. Găsiți diferența dintre valorile maxime și minime ale numerelor date

    Găsiți printre n-numere întregi introduse de la tastatură numărul negativ

    Sunt date două numere arbitrare. În timp ce produsul lor este mai mic de 100, creșteți fiecare număr cu 2 și afișați numerele finale pe monitor

    N-numere întregi sunt introduse secvențial. Găsiți numărul de cinci dintr-o secvență

    N-numere întregi sunt introduse secvențial. Găsiți diferența dintre valorile maxime și minime ale numerelor date

    Găsiți printre n-numere întregi introduse de la tastatură numărul negativ

    Sunt date două numere arbitrare. În timp ce produsul lor este mai mic de 100, creșteți fiecare număr cu 2 și afișați numerele finale pe monitor

    N-numere întregi sunt introduse secvențial. Găsiți numărul de cinci dintr-o secvență

    N-numere întregi sunt introduse secvențial. Găsiți diferența dintre valorile maxime și minime ale numerelor date

Khiryanov Timofey Fedorovich

Principalele construcții algoritmice, pe lângă operațiile elementare descrise de un element al circuitului, sunt cicluri și execuții alternative. Există două opțiuni pentru programarea execuției alternative și există trei tipuri principale de ciclu.

Cod executabil condiționat

Unele operațiuni pot fi supuse operator condiționat... Atunci vor fi îndeplinite numai dacă această condiție este adevărată.

dacă<условие>
atunci
<действия>
toate

Alternativă

Într-o diagramă de flux, o verificare a stării poate servi drept orientare pentru selectarea operațiunilor alternative. Adică, dacă condiția este adevărată, execuția va urma o traiectorie, iar dacă este falsă, atunci alta. În limbajul Kumir, un ciclu cu o condiție prealabilă are următoarea formă:

dacă<условие>
atunci
<действия>
in caz contrar
<альтернативные действия>
toate


Condiții pentru robot:
peretele stâng
peretele drept
peretele de jos
peretele de sus
celula este pictată peste
lăsat liber
dreptul liber
de jos liber
liber de sus
cușca este curată

Buclă cu condiție prealabilă

O buclă cu o precondiție este o buclă care se execută atâta timp cât unele condiții specificate înainte de începerea ei sunt adevărate. Această condiție este verificată înainte ca corpul buclei să fie executat, astfel încât corpul nu poate fi executat nici măcar o dată (dacă condiția este falsă de la bun început). În majoritatea limbajelor de programare procedurală, este implementat prin instrucțiunea while, de unde și al doilea nume - while-loop. În limbajul Kumir, un ciclu cu o condiție prealabilă are următoarea formă:

nc pa<условие>
<тело цикла>
kts

Buclă cu postcondiție

O buclă cu o postcondiție este o buclă în care starea este verificată după executarea corpului buclei. Prin urmare, rezultă că corpul este întotdeauna executat cel puțin o dată. În Pascal, această buclă implementează repetarea .. până la operator, în C - do ... while.
În limbajul Kumir, un ciclu cu o condiție post-condiționată are următoarea formă:

nts
<тело цикла>
kts_cu<условие>

Ciclează cu contor

O buclă cu un contor este o buclă în care o variabilă își schimbă valoarea de la o valoare inițială dată la valoarea sa finală cu un anumit pas, iar pentru fiecare valoare a acestei variabile, corpul buclei este executat o singură dată. În majoritatea limbajelor de programare procedurale, acesta este implementat de operator pentru, care indică contorul (așa-numita "variabilă de ciclu"), numărul necesar de treceri (sau valoarea limită a contorului) și, eventual, pasul cu care contorul se schimbă. În limbajul Kumir, o buclă cu un contor arată astfel:

intact
nts pentru a de la 0 la 9
... corpul buclei
kts

Diferite limbaje de programare rezolvă problema valorii unei variabile la sfârșitul unei bucle în care această variabilă a fost utilizată ca contor în moduri diferite.