Cum să faci o buclă nesfârșită într-un idol. Executarea algoritmilor ciclici bazati pe sistemul „idol”. Comenzi simple ale robotului

Luați în considerare problema:

Intrarea în program este un număr natural care nu depășește 2 * 10 9. Determinați suma cifrelor acestui număr.

La prima vedere, sarcina este foarte simplă: este necesar să evidențiați succesiv 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 acestuia.

În algoritmii de buclă, în care numărul de repetări ale unui anumit set de comenzi nu poate fi obținut decât în ​​momentul în care acesta începe, se folosesc bucle condiționate.

Ciclul de adio

Un astfel de construct în limbajul de programare Kumir este ciclu la revedere... Acest ciclu, adesea denumit bucla de precondiție, Are următorul formatînregistrări:

  • nc până acum stare
  • ciclu_corp

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

Bucla se execută după cum urmează:

  1. Se calculează valoarea expresie booleană.
  2. Dacă rezultatul calculului este nu, atunci execuția ciclului se încheie, iar Idolul trece la prima comandă după ciclul bye. 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 cu condiția pentru a asigura sfârșitul buclei, în caz contrar, bucla poate ajunge pentru totdeauna.

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

  • intrare num
  • 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 încheia.

Ciclul „până atunci”

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

  • ciclu_corp
  • kts la stare

Dacă în buclă în timp ce condiția 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 continuă la execuția următoarei comenzi după buclă.

Sarcină. Programul primește o secvență de numere întregi care se termină cu zero. Aflați numărul de numere negative din succesiune. Este garantat că secvența conține cel puțin un număr întreg diferit de zero.

(Un fragment din codul programului)

  • intrare num
  • daca num 0
  • atunci k: = k + 1
  • kts la num = 0
  • roz

Curs 4. Expresii aritmetice

Expresii aritmetice și reguli pentru scrierea lor. Algoritmi de feedback. Pai comanda. Condiții în limbaj algoritmic... Comenzile If and choice. Echipe de control. Prezentarea „vizuală” a comenzilor. Digresiune: regulile și forma de scriere a expresiilor aritmetice în Fortran al secolului XXI.

Numărul ziarului

Curs 1. Obiectivele principale ale cursului. Metodologia de construire a unui curs. Abordare problematică. Teoria se învață prin practică. Sistemul Kumir este un suport eficient pentru conceptele tradiționale ale limbajelor de programare procedurală și metodele tradiționale de depanare. Exemple de utilizare a „Kumir” în cursurile preprofesionale.

Curs 2. Cunoașterea practică a sistemului Kumir: Robot performer. Conceptul de algoritm. Controlul robotului cu ajutorul telecomenzii. Algoritmi liniari. Înregistrarea algoritmului. Retragere: Karel-Robot în curs initial programare la Universitatea Stanford.

Curs 3. Metode de înregistrare „vizuală” a algoritmului. Control programat robot. Ciclul „ n o singura data". Folosind algoritmi auxiliari. Scrierea algoritmilor în limbaj algoritmic.

Lucrarea de examinare numărul 1.

Curs 4. Expresii aritmetice și reguli de redactare a acestora. Algoritmi de feedback. Pai comanda. Condiții într-un limbaj algoritmic. Comenzile If and choice. Echipe de control. Prezentarea „vizuală” a comenzilor. Digresiune: regulile și forma de scriere a expresiilor aritmetice în Fortran al secolului XXI.

Curs 5. Mărimi în limbaj algoritmic. Comenzi de intrare/ieșire a informațiilor. Comanda de atribuire. Algoritmi auxiliari. Algoritmi cu rezultate si algoritmi-functii. Ciclul „pentru”. Valori tabelare... Valori logice, simbolice și literale.

Lucrul de testare numărul 2.

Curs 6. Metode de algoritmizare. Relații de recurență. Metoda iterației. Invariant de ciclu. Recursiune.

Cursul 7. Fundamentele fizice calculatoare moderne. Microprocesorul este inima computerului modern. Cum se creează un computer.

Curs 8. Interpreți virtuali și reali în sistemul „Kumir”. Artist desenator. Robotul Lego este un interpret controlat de software al lui „Kumir”. Hipertext în sistemul Kumir. Pregătirea temelor pentru studenți și verificarea automată a acestora.

Lucrare finală.

În timp ce studentul „asamblează” programul în „PiktoMir”, practic nu trebuie să stăpânească o „lume computerizată” nouă, neobișnuită. Desigur, copilul trebuie să învețe să opereze mouse-ul pentru a obține rezultatul dorit de la computer, dar interfața în ansamblu se bazează pe conceptele și acțiunile familiare copilului, este „transparentă” și nu necesită concentrarea copilului. prea mult despre procesul de interacțiune cu computerul. În acest moment, elevul își concentrează aproape 100% din eforturile sale (sau, mai bine zis, „durata de atenție”) pe algoritmul de rezolvare a problemei. Dar de îndată ce are loc o tranziție de la programarea grafică la una textuală mai tradițională, elevul începe să se confrunte cu o „lume diferită”, ale cărei legi diferă de cele obișnuite deja studiate în școală. Este vorba în primul rând despre scrierea expresiilor aritmetice, elevul a petrecut zeci de ore pe stăpânirea abilităților de manipulare a acestora la lecțiile de matematică de la școală și a obținut un anumit automatism.

În primele sarcini de control al robotului, computerul își demonstrează capacitățile ca mașină de control, și nu ca mașină de calcul. Dar apoi un ciclu apare de N ori, iar la rezolvarea unor probleme, elevul poate fi nevoit să ia drept N un număr care apare ca urmare a unor calcule, de exemplu, numărul de celule dintr-un câmp de dimensiunea 9? 14. Se pare că nu este deloc necesar să calculați singur numărul total de celule ale unui astfel de câmp (în mintea dvs., pe hârtie sau cu un calculator) și să „introduceți” rezultatul în program. Se pare că computerul însuși va putea face toate calculele necesare de îndată ce îi spunem (notați-l în program) exact ce trebuie calculat. Adică, aproximativ vorbind, pentru a rezolva o problemă pe un computer, nu trebuie atât de mult să știi „câte vor fi de două ori doi”, cât să poți spune computerului că trebuie să iei rezultatul efectuării operației” de două ori două” sau operația „de 9 ori pe 14”.

Nu există probleme cu adunarea și scăderea. În înregistrare ciclu de 3 + 3 ori nimic nou pentru student. În exact aceeași formă la lecțiile de matematică, elevii notează și, sperăm, calculează diverse sume și diferențe fără a folosi un calculator. Dar pentru expresii aritmetice mai complexe, regulile de scriere în matematica școlară și în limbajele algoritmice tradiționale încep să difere oarecum.

Cert este că atunci când lucrăm pe hârtie și pe tablă, „desenăm” formule matematice - rădăcini, fracții, grade și indici - și acest lucru este foarte convenabil. Și în limbajele tradiționale de programare, o expresie aritmetică nu poate fi desenată, ci trebuie „codificată” prin apăsarea butoanelor de pe tastatura computerului. Din această cauză, în programare s-a dezvoltat o tradiție de notare simplificată, așa-numită „liniară” a formulelor, la care un student de la începutul secolului XXI trebuie să se obișnuiască și să se adapteze. (Probabil, până la jumătatea secolului acest lucru nu va trebui făcut, vezi programul din dreapta jos.) Deci, atunci când introducem formulele necesare (expresii aritmetice) în program, va trebui să folosim tastatura computerului și codifică (criptează) aceste formule într-un anumit mod. Ca și în cazul oricărei probleme de codificare sau criptare a informațiilor, această simplă problemă tehnică se poate dovedi a fi atractivă pentru unii școlari (obosiți să controleze Robotul). Când se rezolvă această problemă, se dovedește că există un simbol punct pe tastatură, dar nu există un simbol de înmulțire „?”, Și punctul, de asemenea, nu servește deloc ca simbol de înmulțire. De asemenea, se dovedește că nu este obișnuit să scrieți formule aritmetice de forma 8 (2 + 3) cu semnul de înmulțire lipsă. Un computer (mai precis, un compilator al unui limbaj de programare) ar putea descoperi astfel de formule, dar în mod tradițional refuză să facă acest lucru și necesită introducerea unui asterisc în formulă - un semn de înmulțire: 8 * (2 + 3). Dar computerul, de regulă, percepe două asteriscuri consecutive ca un semn de exponențiere.

Luate împreună, toate aceste mici detalii formează obstacolul pe care elevul trebuie să-l depășească. Acest lucru este de obicei simplu.

Copiii, de regulă, nu fac greșeli, cu excepția uneia larg răspândite: fracții de formă

și sunt scrise ca 3 + 5/2 și 3 * 5/2 fără paranteze, în loc de notația corectă (3 + 5) / 2 și (3 * 5) / 2.

Reguli pentru scrierea expresiilor aritmetice în Fortran al secolului XXI

În ultimele secole, matematicienii au practicat limbajul formulelor matematice, care s-a dovedit a fi un mijloc eficient de exprimare a conceptelor și metodelor matematice de manipulare a obiectelor matematice. Când au apărut computerele la mijlocul secolului trecut, primii editori de text pe calculator și primele limbaje de programare, acestea s-au dovedit a fi incapabile să lucreze cu limbajul de formule matematice elaborat în matematică. De-a lungul timpului, situația cu formulele matematice din documentele text s-a îmbunătățit. Matematicienii și programatorii au inventat și standardizat modalități de a introduce formule matematice în documente text, dar programatorii în programele lor au continuat să folosească forma inexpresivă „liniară” de scriere a formulelor sub forma unui șir de caractere introduse de la o tastatură standard.

În secolul XXI, situația a început să se schimbe. La ordinul armatei americane, specialiștii SUN au dezvoltat limbajul Fortress, care a fost inițial destinat să utilizeze notația matematică general acceptată în textele programelor. Pe în prezent doar primii pași au fost făcuți în această direcție, dar în limba Cetății este deja posibil să se folosească: litere grecești:

superindice/indice și fracții:

formule cu semne de înmulțire omise:

formule în care argumentele funcțiilor elementare nu sunt incluse în paranteze:

stabiliți semne de funcționare

Și acesta este doar începutul, în câteva decenii textele programelor folosite de oamenii de știință și ingineri vor fi aspectul exterior sunt asemănătoare manualelor de matematică elementară și superioară.

Algoritmi de feedback. Pai comanda

Până acum, am lucrat cu Robotul în stilul graficii Turtle din LOGO, și anume, comandat fără niciun feedback. Prin urmare, ceea ce am făcut (din punct de vedere metodologic) s-ar putea face cu același succes, de exemplu, în același LOGO. Algoritmii de ajutor (cu sau fără argumente) pot fi învățați folosind fie Robotul, fie Țestoasa.

La început, la compilarea programelor pentru Robot (sau pentru Vertun), de regulă, aveam în prealabil informații complete despre situația Robotului. Dar Robotul (și Vertun), din punct de vedere metodologic, este mult mai bogat decât Turtle, deoarece are comenzi de feedback. Și, folosind aceste comenzi, un bărbat poate obține rapid informații despre situația din jurul unui robot la distanță de la el, iar un computer poate primi rapid informații atunci când execută un program. De exemplu, executând comanda „liber la stânga”, indiferent de la cine vine, Robotul comunică o porțiune de informații despre situația în care se află în acest moment. O altă informație poate fi obținută întrebând Robotul dacă celula în care se află este pictată peste.

Când utilizați telecomanda prezentată mai sus, persoana citește răspunsurile robotului de pe tablă sub formă de text. O telecomandă mai ieftină ar putea imita răspunsul robotului prin aprinderea unui bec (LED). Când robotul este controlat de un computer, răspunsul robotului este convertit în niveluri de semnal electric. Dar esența procesului este aceeași: atunci când comanda de feedback este executată, informația nu merge doar către Robot, ci este transmisă și în sens invers, de la Robot la computer sau Om. De aici și termenul de feedback. Teoretic, era posibil să se facă cu o singură comandă de întrebare din fiecare pereche de tip: Free Right - Wall Right. Acest lucru ar complica însă scrierea algoritmului, întrucât ar necesita introducerea negației, care într-un stadiu incipient al pregătirii este nejustificată metodologic, complicând regulile de scriere și execuție a programelor. În loc de notația naturală „pe partea de sus a peretelui”, ar trebui să scrie ceva de genul „deasupra nu este liber”, ceea ce sugerează un fel de dualitate, și dacă există ceva în afară de perete?

Ce este mobilierul robot

Mediul Robotului este un câmp dreptunghiular înconjurat de un gard și împărțit în celule și este descris de următoarele valori: 1) dimensiunea câmpului - numărul de rânduri (de la 1 la 10) și numărul de coloane (de la 1). până la 16); 2) pentru fiecare celulă: prezența pereților în jurul celulei; semn de umbrire; cantitatea de radiație (măsurată în unități arbitrare, poate lua orice valoare reală de la 0 la 100); temperatura (măsurată în grade Celsius, poate lua orice valoare reală de la –273 la +233). Notă. Cea mai scăzută temperatură posibilă este (aproximativ) zero absolut (0 grade Kelvin). Temperatura superioară este temperatura la care sunt arse cărțile (451 de grade Fahrenheit). Această temperatură este cunoscută de toți cititorii celebrei povești a lui Ray Bradbury „Fahrenheit 451”.

Sistemul de comandă al robotului îi permite să determine valorile tuturor acestor caracteristici ale celulei. În plus, cușca poate conține semne vizibile pentru observator, dar inaccesibile „simțurilor” Robotului: simboluri în colțurile din stânga sus și din stânga jos ale cuștii, un punct în colțul din dreapta jos al cuștii. O parte integrantă a mediului este Robotul însuși (mai precis, locația sa pe teren). Nu există comenzi în sistemul de comandă Robot care să vă permită să solicitați coordonatele Robotului pe teren.

Robotul are trei grupuri de comenzi de feedback. Primul grup vă permite să analizați prezența sau absența pereților de sus, jos, dreapta și stânga. Al doilea grup este format din două comenzi diametral opuse-întrebări „este colivia pictată?” și „cușca este curată?”

Dacă comenzile primelor două grupuri returnează „da” sau „nu” ca răspuns, atunci comenzile ultimului grup returnează un număr real ca răspuns. Cu ajutorul acestor comenzi, puteți afla care este temperatura și care este radiația din cușca în care se află Robotul. Datorită echipelor din grupa a treia, lumea Robotului devine considerabil mai bogată. Datorită acestor echipe, putem stabili și rezolva o gamă mai largă de sarcini pentru controlul Robotului și colectarea de informații pe câmpul Robot. Mai mult decât atât, sarcinile de temperatură și radiații în domeniul Robotilor pot înlocui unele dintre sarcinile tradiționale de prelucrare a tablourilor. „Echiparea” unui robot cu un „termometru” și un „contor Geiger” este o abordare metodologică bună atunci când se studiază problemele formulate de obicei pentru matrice. Asemenea sarcini tradiționale de prelucrare a tablourilor precum „elementul minim”, „indicele elementului maxim”, „suma elementelor”, „media aritmetică”, etc., pot fi reformulate ca sarcini de colectare a informațiilor pe câmpul Robot și în același timp timpul primește o interpretare foarte firească...

Un rând orizontal de cinci celule cu o radiație dată în fiecare celulă (10, 10, 30, 20 și 40) este un analog exact al unui tabel liniar de numere reale de cinci elemente. Și aproape fiecare problemă liniară de foi de calcul poate fi reformulată ca o problemă de robot. Într-o astfel de formulare, va fi mai clar de ce a apărut o astfel de problemă și de ce trebuie rezolvată. Să ne imaginăm că pe câmpul Robotului din dreapta există un zid la care oamenii vor trebui să meargă – poate salvatorii. Mai întâi trebuie să aflați cât de periculos este trecerea de-a lungul coridorului pentru sănătate, care este nivelul de radiație. Dacă oamenii se mișcă cu o viteză aproximativ constantă, atunci doza de radiație pe care o primesc va fi proporțională cu suma nivelurilor de radiație din toate celulele trecerii către perete. Prin urmare, analiza gradului de pericol al acestei treceri pentru viața salvatorilor poate fi reformulată ca problema calculării radiației totale în celulele de trecere. Aceasta este problema găsirii sumei elementelor tabelului, formulată în termeni de control Robot. În mod similar, puteți reformula aproape orice sarcină pentru procesarea tabelelor (matrice).

Exercitiul... Reformulați sarcinile „Element minim de matrice” și „Indexul elementului de matrice minimă” în ceea ce privește controlul Robotului.

Deci, să vedem care dintre următoarele formulări ale problemei este mai atractivă pentru elev: 1) găsiți indicii elementului minim al unui tabel dreptunghiular; 2) în dreptunghiul din câmpul Robot, găsiți o celulă cu radiații minime și mutați Robotul în această celulă (pentru odihnă).

Prima formulare este pur matematică. Cine are nevoie de acești indici și de ce depășește cu mult domeniul de aplicare al sarcinii. Al doilea este mai înțeles și mai semnificativ. Deși, cel mai probabil, școlarii nu s-au confruntat cu radiațiile înainte, pentru ei este clar că un nivel ridicat de radiații este „rău”, că celula necesară pentru sarcină este cea mai sigură și dacă Robotul trebuie să găsească un loc unde să se odihnească , atunci este mai bine să alegeți cea mai sigură celulă - o celulă cu radiații minime.

După cum puteți vedea, algoritmul Suma Elementelor folosește o buclă „pa” pe care nu am introdus-o încă. Aici tocmai ne-am devansat puțin. Bucla „pa” ar trebui introdusă atunci când se discută o problemă (abordare problematică), de exemplu, cum ar fi în manual:

„Există un zid undeva sub Robot pe câmp. Este necesar să mutați robotul vertical în jos pe perete, de exemplu. plasați Robotul în cușcă direct deasupra peretelui pe aceeași verticală cu poziția inițială a Robotului”. Puteți încerca mai întâi să rezolvați această problemă manual. Profesorul poate chiar să deseneze un câmp Robot pe o foaie și, deocamdată, nearătând foaia școlarilor, să le urmeze comenzile. În curând, școlarii vor înțelege că trebuie să întrebe tot timpul: „Este gratuit de jos?” (sau „sub zid?”) și comandă „jos” până dedesubt Robotul este liber.

De obicei, după 10 minute de un astfel de joc, fiecare elev din clasă are o idee detaliată despre cum să comande Robotul pentru a rezolva problema. Această înțelegere este scopul metodologic al unui astfel de „joc”.

Tehnica metodologică a unei astfel de introduceri a unui nou design al limbajului de programare G.V. Lebedev a descris în prelegerile sale după cum urmează:

„Când studenții își dau seama în detaliu cum să rezolve problema de mai sus în timp ce controlează robotul „manual”, o opoziție cheie pentru metoda noastră metodologică are loc între această muncă „manual” și schema de control programată.

"Minunat! – spune profesorul. - Toată lumea și-a dat seama cum să controleze robotul. Dar nu avem de-a face cu controlul manual al Robotului, ci cu informatica. Prin urmare, sarcina noastră este să scriem un algoritm pentru un computer, atunci când este executat, computerul va comanda Robotului astfel încât problema să fie rezolvată. Rețineți că distanța de la Robot la perete este necunoscută, dar computerul, care rulează algoritmul (și nu știe distanța), trebuie să mute Robotul pe perete. Încercați să scrieți un algoritm ca acesta. La urma urmei, înțelegeți cum trebuie să controlați robotul, ce comenzi ar trebui să emită computerul robotului. Așa că scrieți-l sub forma unui algoritm computerizat”. Vă atrag încă o dată atenția asupra acestei abordări problematice. La urma urmei, practic în acest loc le rugăm școlarilor să vină cu o construcție a ciclului „pa”. Adică, spre deosebire de secvența standard (întâi forma de notație, apoi semantica ei (sensul), apoi soluția problemelor), mai întâi punem problema, apoi analizăm cum să o rezolvăm, adică. înțelegem sensul (semantica) construcției viitoare și apoi le cerem elevilor să vină cu o formă de înregistrare”.

Bucla while este în mod semnificativ o construcție foarte complexă. Și procesul de stăpânire este mai bine să îl faceți vizual. Tutorialul explică acest ciclu prin căi diferite, inclusiv folosind o diagramă bloc. O explicație vizuală a activității ciclului „bye” este la fel de importantă ca și modul de execuție pas cu pas în „Kumir”, deoarece imaginile grafice și observațiile din procesul propriei activități sunt mai bine asimilate de conștiința elevului decât vorbirea și formulele matematice emanate de la profesor.

Efectuează un PAS al programului și intră în modul PAUZĂ. Când este pornit în starea EDITARE și ANALIZĂ, trece peste liniile de „utilizare” și se oprește înainte de a executa prima linie a intro-ului programului principal (dacă există) sau înainte de a executa linia cu cuvântul „alg” al algoritmului principal. . Executarea comenzii de apelare a algoritmului-procedura este tratată ca un PAS. Afișează rezultatele calculelor și verificărilor condițiilor în câmpuri.

Se efectuează în mod similar cu comanda „STEP”. Diferența constă în executarea comenzii pentru apelarea algoritmului-procedură sau calcularea valorii algoritmului-funcție (dacă sunt prezentate în fereastra de lucru). În aceste cazuri, următorul pas este executarea liniei de antet algoritm auxiliar... În viitor, comanda „pas” sau „STEP” va duce la executarea pasului următor în cadrul algoritmului auxiliar care se execută.

Să încercăm să executăm algoritmul „Mergi până la capăt”. Vom executa programul pas cu pas făcând clic pe pictograma PAS. Suntem interesați de execuția ciclului „pa”. În primul rând, se verifică condiția „liber înainte”. Răspunsul este „da”, ceea ce înseamnă că corpul buclei trebuie executat. Iar robotul coboară o celulă. Când corpul buclei s-a terminat, ne întoarcem și verificăm din nou starea. Și așa mai departe, până la următorul ( Exercitiul: Care este scorul?) la pas Robotul va lovi peretele și verificarea stării va da rezultatul „nu”. Și apoi vom finaliza execuția ciclului și vom începe să executăm comenzile scrise în program după kts.

Vă rugăm să rețineți că rezultatele verificării condițiilor sunt afișate pe câmpuri, astfel încât după fiecare verificare a condiției, elevul să înțeleagă imediat dacă corpul ciclului va fi executat din nou, sau execuția ciclului va fi finalizată.

Ce se întâmplă dacă mediul robotului este diferit și acesta stă deja deasupra peretelui înainte de finalizarea ciclului? Să încercăm să executăm algoritmul cu astfel de condiții inițiale. Puțină teamă

dar dacă robotul se defectează? Nimic de genul acesta. Robotul nu s-a rupt, ciclul s-a încheiat, deoarece condiția „liber de jos” la prima verificare nu este îndeplinită și, prin urmare, corpul ciclului nu este executat nici măcar o dată. Aceasta este una dintre caracteristicile importante ale ciclului de revedere.

O altă caracteristică importantă a execuției buclei „bye” este posibilitatea buclei - execuția nesfârșită a corpului buclei. Să presupunem că am amestecat-o și în loc de comanda „jos”, am scris comanda „vopsire” în interiorul buclei. Dacă este liber sub Robot, atunci Robotul nu se va mișca nicăieri, ci va sta nemișcat și va picta la infinit peste celula în care stă. Dacă rulați un astfel de program, atunci puteți afla despre bucla după numărul de pași efectuati de program, care va crește rapid în fața ochilor noștri, în timp ce Robotul stă nemișcat.

A treia și ultima caracteristică a buclei „bye” este că condiția pentru continuarea buclei în timpul execuției corpului buclei nu este verificată. Să schimbăm ușor algoritmul din nou adăugând încă o comandă „jos” în corpul buclei. Lăsați robotul să finalizeze sarcina mai repede. De regulă, studenții nu văd eronarea unui astfel de program, presupunând în mod incorect că condiția buclei este cumva verificată magic în fiecare moment al execuției corpului buclei. Acesta, desigur, nu este cazul. Exemplul dat demonstrează a apărut eroare de rulare, chiar dacă condiția buclei era (la timpul trecut) valoarea „da”. Dar înainte de al doilea pas „în jos”, nimeni nu a verificat starea. Din această cauză, a existat un refuz în program.

Condiții într-un limbaj algoritmic. Dacă și Selectați Comenzi

De regulă, după stăpânirea ciclului „pa”, comenzile „dacă” și „alegere” sunt stăpânite fără prea multe dificultăți. Ca de obicei, introducerea unei noi comenzi ar trebui începută de la sarcina în cauză. Dat: Un robot este undeva pe teren și în dreapta este liber. Este necesar: ​​deplasați Robotul în jos, pictând acele celule ale câmpului de-a lungul drumului, care au un perete în dreapta.

Algoritmul este obținut prin simpla reluare a soluției la problema anterioară, trebuie doar să adăugați comanda „dacă”.

Întrebarea metodologică de ce apare construcția „dacă” în curs după construcția „pa” poate fi găsită în „12 prelegeri” de G.V. Lebedeva: „Desigur, este ușor să introduci și să explici comanda „dacă” folosind un exemplu de tip de pas „prudenți”: „dacă partea de jos este liberă, atunci totul este în jos ”. Necazul, în opinia noastră, este că, dacă pornești de la asta (și mai ales dacă introduci comanda „dacă” înainte de cicluri), atunci școlarii nu au în cap niciun context extern (deși nu formalizat), în care scrierea unei astfel de echipe ar fi semnificativă pentru rezolvarea unor sarcini semnificative. După ce se analizează cel puțin un exemplu cu o buclă și cu un „dacă” în interior, apare un astfel de context extern. Atunci este deja posibilă studierea comenzii „dacă” fără cicluri - elevii își vor imagina situația în care apare necesitatea unei astfel de comenzi. Dar atunci când acest prim exemplu (cu bucla și „dacă”) este tratat, comanda „dacă” nu are nimic de învățat. Alte exemple ilustrative pur și simplu nu sunt necesare - trebuie să rezolvați probleme. Prin urmare, credem că pentru prima dată comanda „dacă” ar trebui să apară în buclă. ” Complexitatea comenzii „dacă” poate sta doar în înregistrarea stării. Puteți veni cu o problemă pentru școlari - notați în mod oficial condiția „Robotul stă în colț”:

(peretele din stânga și perete de sus)

sau(peretele de sus și peretele din dreapta)

sau(peretele din dreapta și peretele de jos)

sau(peretele de jos și peretele stâng)

Comanda de alegere

Comanda „select” este prima comandă „inutilă” în limbajul algoritmic. Este imposibil de formulat o problemă care nu poate fi rezolvată fără această comandă. Comanda „selectare” simplifică doar înregistrarea într-o situație în care există multe opțiuni. Dar chiar și în această situație, algoritmul poate fi notat, limitându-se la utilizarea doar a comenzii „dacă”.

Prezentarea „vizuală” a comenzilor

Ciclul „pa” poate fi explicat nu numai școlarilor care folosesc „Kumir” cu robotul, ci și preșcolarilor, folosind fratele mai mic al lui „Kumir” - „PiktoMir”. Din prelegerea anterioară, suntem familiarizați cu Vertun, care poate merge pe un câmp similar cu cel al unui Robot. Vertun este un interpret interesant, are comenzi de feedback: Vertun poate verifica dacă cușca pe care stă este pictată și dacă este un perete în fața lui. Vertun, ca și Robotul, are un set dublu de comenzi de feedback. Dar există motive întemeiate pentru acest lucru în PiktoMir. Dacă în „Kumir” am putea obține echivalentul comenzii „drept liber” de la comanda Robot „pe peretele din dreapta” adăugând negația „nu” în interiorul comenzii, atunci în stilul vizual de programare în „PictoMir” particule nu există. Asta înseamnă că nu poți face cu două echipe și ai nevoie de toate patru.

Pictogramele prezentate în figură denotă aceste perechi de comenzi (de la stânga la dreapta): „celula este umplută” (culoarea gri a câmpului); „Zidul înainte” (zid de cărămidă); „Cușca este curată” ( Culoarea verde câmpuri); „Liber înainte” (zidul este distrus).

Comanda de alegere

Dacă condiția 1: seria 1

Cu condiția 2: seria 2

Dacă condiția n: seria n

În caz contrar, seria n + 1

Cuvântul cheie altfel, împreună cu seria corespunzătoare de comenzi, poate lipsi:

Dacă condiția 1: seria 1

Cu condiția 2: seria 2

Dacă condiția n: seria n

„Kumir” verifică mai întâi condiția 1. Dacă este îndeplinită, atunci „Kumir” execută comenzi din seria 1 și apoi trece la executarea comenzilor scris după cuvântul toate. În caz contrar, „Kumir” face același lucru cu condiția 2 și comenzile din seria 2 etc.

Comenzile scrise după cuvântul „altfel” sunt executate atunci când niciuna dintre condiții nu este îndeplinită.

Într-o comandă, nu este întotdeauna selectată mai mult de o serie de comenzi, chiar dacă mai multe condiții sunt adevărate. Executarea comenzii select se termină după ce se găsește prima condiție (în ordine) cu valoarea yes (și seria corespunzătoare de comenzi a fost executată).

Există trei comenzi de control al execuției în limba Kumir:

aprobat, dat, este necesar.

Format apel:

aprobat<ЛОГ ВЫРАЖЕНИЕ>

dat<ЛОГ ВЫРАЖЕНИЕ>

necesar<ЛОГ ВЫРАЖЕНИЕ>

Toate cele trei comenzi sunt executate astfel. Se verifică starea. Dacă condiția nu este îndeplinită, atunci „Kumir” oprește execuția algoritmului și raportează că a avut loc o eroare. Dacă condiția este îndeplinită, atunci execuția algoritmului continuă în mod normal ca și cum nu ar exista nicio comandă de control. Comanda dată verifică starea la începutul execuției algoritmului, comanda este necesară - la sfârșitul execuției algoritmului, iar cu comanda de aprobare puteți verifica starea în timpul execuției algoritmului.

Cum pot fi utilizate aceste condiții în PiktoMir? Condițiile pot fi plasate la începutul algoritmilor auxiliari în celule speciale. Cele albastre conțin un repetor (pentru organizarea buclei de N ori), iar cele roz - condiția executării algoritmului f1 – f5. După cum sa menționat deja în cursul 3, bucla de N ori ajută elevul să salveze celule atunci când elaborează algoritmul.

Dar dacă o sarcină simplă este, de exemplu, să mutați Vertun la dreapta pe perete, atunci programul poate arăta astfel:

Într-adevăr, dacă „puiți” situația Vertun, puteți calcula cu ușurință că sunt 4 pași până la perete. Este o altă problemă dacă situația nu ne este vizibilă și putem afla despre ea doar prin feedback de la Vertun. Similar cu situația cu Robotul, elevul va trebui să-l întrebe pe Vertun înainte de a păși înainte dacă există un zid în fața lui. În limbajul algoritmic școlar, când elevii sunt forțați să vină cu construcția ciclului „pa”, copiii au încă mult loc pentru imaginație, deoarece limitele limbajului algoritmic nu sunt vizibile. În PiktoMir, un copil are doar ceea ce vede pe ecran. Și condițiile pot fi puse doar într-un singur loc. Trebuie doar să încerce.

Un astfel de program va funcționa corect pentru mediul actual al Vertun (și, desigur, în toate cazurile când peretele este mai aproape de patru pași de poziția de pornire).

Să explicăm cum funcționează algoritmul auxiliar f1. Înainte de începerea algoritmului (care este conținut în 12 celule executabile), se execută comanda Vertun, care se află în caseta roz. Dacă răspunsul este „da”, atunci algoritmul este executat de câte ori este indicat în câmpul albastru. În acest caz, celulele goale sunt sărite, iar comanda din câmpul roz este apelată de fiecare dată înainte de următorul ciclu de execuție al algoritmului f1.

Dacă caseta roz este goală, atunci răspunsul este da. Dacă câmpul albastru este gol, atunci bucla este executată o dată. De fapt, un astfel de algoritm auxiliar ar fi analog cu următoarea notație în limbajul algoritmic:

nts <синее поле> doar la revedere <розовое поле>

<команды в клетках алгоритма>

Dar nu există o astfel de construcție într-un limbaj algoritmic. În acest caz, f1 se transformă într-un analog al constructului „dacă”, în cazul unui repetor gol (câmp albastru gol) sau al unui singur repetor, iar algoritmul f1 se transformă într-o buclă „pa” dacă condiția este prezentă ( câmp roz) iar repetorul este infinit.

Exercitiul... Amintiți-vă cum să construiți o buclă de la f1 N ori.

Ce îl va motiva pe copil să folosească ciclul bye (folosește cutia roz)? Cert este că în PiktoMir există doar 7 repetoare: 1 dată, 2 ori, 3 ori, 4 ori, 5 ori, 6 ori și „la infinit”. Cu acest set, poți ajunge la perete când acesta are 1, 2, 3, 4, 5 sau 6 pași. Dar ce să faci când sunt 7 pași până la perete sau sunt atât de mulți pași încât copilul pur și simplu nu-și poate număra numărul? Există un repetor „infinit”, și chiar dacă un copil nu a stăpânit încă acest concept, după ce a trecut prin cele câteva opțiuni de creare a programelor din PictoWorld, va încerca cu siguranță opțiunea cu repetorul „infinit” într-o cușcă albastră și condiție necesară într-o cușcă roz. Acesta va fi ciclul „pa” creat de copil (conștient).

Limbajul grafic al „PiktoMir” încurajează copilul să inventeze ciclul „pa” mai puternic decât limbajul algoritmic al „Kumir”. Faptul este că atunci când „se lăutălește” cu „PiktoMir”, copilul este foarte limitat în alegerea mijloacelor. „PiktoMir” este totul în palma mâinii tale, iar limbajul algoritmic poate fi studiat mult timp. În PiktoMir, puteți parcurge rapid toate opțiunile de programare și, deoarece există și un ciclu „pa” printre ele, îl puteți deschide și pe acesta. Diferența dintre „Kumir” și „PiktoMir” este similară cu diferența dintre șah și dame. Despre acesta din urmă, celebrul scriitor american Edgar Allan Poe a scris în povestea polițistă „Murder on Morgue Street” după cum urmează:

„Între timp, atenția decide aici (la șah. - Notă Ed.). De îndată ce el slăbește, și comiteți o neglijență care duce la calcul greșit sau la înfrângere. Și din moment ce mișcările de șah sunt nu numai diverse, ci și ambigue, șansele unei greșeli cresc în consecință și, în nouă cazuri din zece, câștigă nu cu atât mai capabil, ci cu atât mai concentrat. Damele este o altă problemă, unde este permisă o singură mișcare cu variații minore; aici șansele de supraveghere sunt mult mai mici, atenția nu joacă un rol deosebit și succesul depinde în principal de claritate. ... Evident, aici (cu forțe egale) victoria depinde de o mișcare reușită, de o decizie neașteptată și plină de duh 6 ”.

A existat, de asemenea, un motiv mai profund pentru care am dotat Robotul cu perechi de comenzi de întrebări diametral opuse. Odată ajuns într-un limbaj algoritmic, era imposibil să plasați o particulă în afara numelui comenzii. În acele vremuri, din această cauză, ar fi necesar să se folosească expresii complet ilizibile din punctul de vedere al limbii ruse precum „nu celula este pictată peste” sau „nu este liberă de sus”. În versiunea modernă a limbii, astfel de expresii sunt scrise mult mai normal: „celula nu este pictată”, „vârful nu este liber”.

Kushnirenko A.G., Lebedev G.V., Svoren R.A. Fundamentele Informaticii si Informaticii. M .: Educație, 1990, 1991, 1993, 1996.

Din păcate, este imposibil să numiți algoritmul „Mergeți până la capăt” în „Kumir”, deoarece „înainte” este cuvânt cheie limba.

12 prelegeri despre ce servește un curs școlar de informatică și cum se preda: A.G. Kushnirenko, G.V. Lebedev. // Trusa de instrumente. Moscova: Laboratorul de cunoștințe de bază, 2000.

Carduri de sarcini

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

    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 într-o succesiune

    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 de negative

    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 într-o succesiune

    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 de negative

    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 într-o succesiune

    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 de negative

    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 într-o succesiune

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

Cunoașterea programului Kumir stăpânirea elementelor de bază ale programării.

În cadrul acestuia, studenții pot dobândi abilități practice în crearea și depanarea unui algoritm, lucrând cu interpreți precum Robot, Draftsman, Aquarius, Grasshopper, Turtle.

Când studiezi una dintre cele mai dificile secțiuni ale informaticii „algoritmi și programare”.

Scopul dezvoltării :

Descarca:


Previzualizare:

Dezvoltare metodică în informatică.

Subiect: „Robot interpret în programul Kumir în lecțiile de informatică”

profesor de tehnologie „Informatică și TIC”

Notă explicativă

Scop de dezvoltare: să studieze posibilitățile de programare pe exemplul unui Robot executor specific folosind mediul IDC; pentru a oferi abilități practice pentru a lucra cu interpretul.

Dezvoltare metodicăcompilat pentru lecțiile de informaticăExersează pe computer: lucrul cu executantul de antrenament al algoritmilor; compilare de liniare, ramificate și algoritmi ciclici managementul interpretului; compilare de algoritmi cu o structură complexă; utilizarea algoritmilor auxiliari (proceduri, subrutine).

Elevii ar trebui să știe:

  • ce este un interpret; SKI Robot, mediu de executant robot;
  • ce este un algoritm;care sunt principalele proprietăți ale algoritmului;
  • metode de scriere a algoritmilor: diagrame bloc, limbaj algoritmic educațional;construcții algoritmice de bază: urmărire, ramificare, buclă; structurilor
  • algoritmi; ⇒ atribuirea algoritmilor auxiliari; tehnologii pentru construirea de algoritmi complecși:

Elevii ar trebui să fie capabili să:

  • să înțeleagă descrierile algoritmilor în limbajul algoritmic educațional;
  • urmăriți algoritmul pentru un interpret binecunoscut;
  • compune algoritmi de control liniar, ramificat și ciclic pentru Robotul executant; evidențiați subsarcinile; definiți și utilizați algoritmi de ajutor.

Lecția 1 (2 ore) Lecția 1.

Artist Robot.Sistemul de comandă al executorului.

Planul lecției.

  1. Descrierea SKI-ului interpretului, mediul interpretului.

2. Analiza algoritmilor tipici Robotului.

În timpul orelor.

Luați în considerare descrierea interpretului.

Mediul artistului: Performer Robotul este capabil să navigheze într-un labirint desenat pe un plan împărțit în celule.

Robot de schi : comenzi simple: sus, jos, stânga, dreapta, pictură.

Comenzi booleene: (verificarea condiției)

sus liber jos liber

stânga liberă dreapta liberă.

Conective logice: AND, NOT, SAU:

Exemplu: (Nu este lăsat liber) sau (Nu este liber în dreapta)

Comanda de filială: comandă buclă:

Dacă condiția apoi nts în timp ce starea

Seria de comenzi seria de comenzi

toate kts

(În KIM-urile din 2009, comenzile Robotului diferă de copiii obișnuiți, ceea ce a dus la confuzie :)

Comanda de filială: comandă buclă:

Dacă condiția apoi nts în timp ce condiția este de făcut

Seria de comenzi seria de comenzi

sfârşitul sfârşitului

Vedere generală a ferestrei programului Kumir. Mediul grafic al robotului:

În CMM-urile versiunii demo 2010, formatul de comandă a fost schimbat în obișnuit

Procedura de creare a algoritmului:

1.Echipe Instrumente - Editați mediul de porniretrageți pereți pe câmpul Robot și setați robotul în poziția inițială.

2.Echipe Robot - Schimbă mediul de pornirepăstrează noul mediu.

3.Echipe Inserare - Utilizați robotprecizați executorul.

4. În fereastra documentului, notați algoritmul folosind meniul Introduce.

5. Folosind comenzile de execuție - executați continuu (sau pas cu pas) pentru a rula algoritmul.

6. Luați în considerare rezultatul algoritmului și, dacă este necesar, depanați-l.

Lecția 1 (2 ore) Lecția 2.

Munca practica "Elaborarea algoritmilor liniari”.

Sarcini: 1. Robot într-un punct arbitrar al câmpului. Pictați peste celula de deasupra, dedesubt și în dreapta poziției inițiale.

  1. Un robot într-un punct arbitrar al câmpului. Mutați robotul 4 celule la dreapta pictând peste ele.
  2. Creați un nou mediu de pornire desenând un pătrat cu o latură de 4 celule pe tablă. Salvați setarea ca punct de plecare.
  3. Creați un nou mediu de pornire desenând un coridor cu pasarele în pereții câmpului. Salvați mobilierul ca obst2.fil. Schimbați mediul de pornire în cel nou creat.

Lecția 2 (2 ore) Lecția 1.

Temă : Ramificarea si rafinarea secventiala a algoritmului.

Analiza sarcinilor CMM folosind performerul Robot.

utilizați robotul

alg Kim 2009

din timp

dacă nu liber de jos

apoi corect

toate

dacă nu liber de jos

apoi corect

toate

dacă nu liber de jos

apoi corect

toate

con

utilizați robotul

alg Kim 2010

din timp

dacă nu liber de jos

apoi corect

toate

dacă nu liber de jos

apoi corect

toate

dacă nu liber de jos

apoi corect

toate

con

NS. sclav. nr. 14. Compilarea și depanarea algoritmilor de ramificare

Sarcini. Vezi atașament.

Lecția 3. Algoritmi ciclici. Lecția 1-2

Ţintă: pentru a dezvălui esența conceptului de ciclu în algoritmi, pentru a arăta formele de scriere a ciclurilor la algoritmi, pentru a oferi abilități de a crea și scrie algoritmi ciclici.

NS. sclav. nr. 15. Compilarea și depanarea algoritmilor ciclici

1. Realizați un algoritm care pictează toate celulele interioare adiacente peretelui.

utilizați robotul

alg

din timp

nts până acum în dreapta este liber

vopsea peste; La dreapta

kts

nts în timp ce mai jos este gratuit

vopsea peste; mult mai jos

kts

nts până când partea de jos este liberă

vopsea peste; La stânga

kts

con

2. Realizați un algoritm care pictează toate celulele dintre Robot și perete. Distanța până la zid este necunoscută.

utilizați robotul

alg

din timp

nts până acum în dreapta este liber

La dreapta; vopsea peste

kts

con

3. Realizați un algoritm care pictează toate celulele dintre cei doi pereți.

utilizați robotul

alg uch3

din timp

nts până (nu de sus liber) sau (nu de jos liber)

La dreapta

dacă (nu este liber de sus) și (nu de jos gratuit)

atunci

vopsea peste

toate

kts

con

4. Realizați un algoritm care pictează toate celulele din jurul peretelui dreptunghiular.

alg uch4

din timp

vopsea peste; sus

nts nu sunt încă în dreapta liber

vopsea peste; sus;

kts

vopsea peste; corect

nts până când partea de jos este liberă

vopsea peste; dreapta;

kts

vopsea peste; jos

nts nu sunt încă lăsați liberi

vopsea peste; jos;

kts

vopsea peste; stânga

nts până când vârful este liber

vopsea peste; La stânga;

kts

con

utilizați robotul

alg uch5

din timp

La dreapta

nts până când partea de jos este liberă

vopsea peste; La dreapta

kts

vopsea peste; mult mai jos

nts atât de departe în stânga este liber

vopsea peste; La stânga

kts

nts nu sunt încă lăsați liberi

vopsea peste; mult mai jos

kts

vopsea peste; stânga; picta peste; sus;

nts până când vârful este liber

vopsea peste; sus

kts

nts până când vârful este liber

vopsea peste; La stânga

kts

con

Lecția 4 Lecția 1

Algoritmi de ajutor.

Ţintă: introducerea conceptului de algoritmi principali și auxiliari; explicați regulile de utilizare a algoritmului auxiliar; dezasamblați exemple de algoritmi folosind auxiliarul.

Planul lecției

1. Introducerea de termeni noi (algoritm principal și auxiliar, apel) și explicarea noilor concepte.

2. Analiza exemplelor de rezolvare a problemelor folosind un algoritm auxiliar.

Când rezolvați unele probleme, este convenabil să le împărțiți în subsarcini mai mici, fiecare dintre acestea putând fi formalizate ca un algoritm independent. În acest caz, în primul rând, se elaborează un așa-numit algoritm principal, în care apelurile de algoritmi auxiliari sunt folosite pentru a rezolva subsarcinile, care sunt adăugate ulterior. Această soluție se numeșteprin metoda rafinarii secventiale.Permite unui grup de programatori să lucreze la un proiect, fiecare rezolvându-și propria sarcină secundară.

În procesul de rezolvare a problemei, fiecare algoritm auxiliar poate fi, dacă este necesar, defalcat în algoritmi auxiliari mai mici.

Se apelează comanda pentru executarea algoritmului auxiliar provocare și este scris în corpul algoritmului principal.

Unul și același algoritm poate fi considerat principal și auxiliar în raport cu alți algoritmi. Într-un limbaj algoritmic, algoritmul principal este mai întâi scris, urmat de altele auxiliare mai jos.

Sarcina 1:

Robotul se află în colțul din stânga sus al câmpului. Nu există pereți sau celule pictate. Creați un algoritm folosind unul auxiliar care desenează patru cruci pe o linie orizontală. Poziția finală a robotului poate fi arbitrară.

Soluţie

Analizarea pe tablă:

Sarcina 2. Robotul se află în colțul din stânga sus al câmpului. Nu există pereți sau celule pictate. Creați un algoritm care colorează un pătrat de 8 x 8 într-un model de șah. Poziția finală a robotului poate fi arbitrară.

Lecția 4 Lecția 2

Lucrare practică pe computer „Rezolvarea problemei folosind algoritmi auxiliari”.

Ţintă : pentru a insufla abilități practice în construirea algoritmilor prin metoda rafinării secvențiale.

Planul lecției

1. Sarcina are loc complet pe PC. Elevii primesc sarcini și le execută în mediul software Kumir. Rezultate Lucrarea este salvată ca fișiere pentru verificare ulterioară.

Sarcina 1 ... Robotul se află în colțul din stânga jos al câmpului. Nu există pereți sau celule pictate. Realizați un algoritm care pictează 6 dungi verticale de aceeași lungime în 6 celule. Poziția finală a robotului poate fi arbitrară.

Sarcina 2 Folosind cele auxiliare, creați un algoritm pentru pictarea celulelor care formează numărul 1212.

Teme pentru acasă: Vino cu un algoritm care desenează următoarea imagine: Utilizați doi algoritmi auxiliari pentru a rezolva problema.

Lecția 5 Lecția 1-2

Test

„Elaborarea unui algoritm în mediul executorului robot”.

Ţintă: verifica cunostintele acumulate cu privire la crearea si capacitatea de analiza a algoritmilor in mediul software Kumir.

Misiuni pentru munca de testare sunt împărțite pe nivele de dificultate și includ 3 sarcini cu executantul Robot (1 și 2 sarcini - pentru ramificare și cicluri, 3 sarcini cu - pentru utilizarea unui algoritm auxiliar.) Textele sarcinilor sunt date în anexă.

Setările inițiale și finale și algoritmii creați sunt înregistrate ca fișier.

Nota este stabilită în funcție de nivelul de dificultate al sarcinii. Studentul are dreptul de a alege el însuși tipul de temă.

Și astăzi vom vorbi despre cicluri. Să ne dăm seama ce este un ciclu și cum să învățăm cum să executăm algoritmii ciclici ai robotului nostru.

Asa de, ce este un ciclu? Imaginează-ți că suntem la o lecție de educație fizică și ne confruntăm cu o sarcină face 7 genuflexiuni... Această sarcină poate fi formulată ca un algoritm liniar și apoi va arăta cam așa:

fă o ghemuială

fă o ghemuială

fă o ghemuială

fă o ghemuială

fă o ghemuială

fă o ghemuială

fă o ghemuială

Adică am repetat comanda de ghemuit de 7 ori. Are sens să scrii 7 comenzi identice? Poate fi mai ușor să dai o comandă face 7 genuflexiuni? Desigur, este mai ușor și mai corect. Acesta este ciclul... Tu însuți poți să-ți amintești exemple de cicluri din viață - există destul de multe dintre ele.

Prin urmare algoritm liniar , unde se repetă aceleași comenzi, putem emite sub forma unui algoritm ciclic- ca asta:

repeta de 7 ori

fă o ghemuială

sfârşitul ciclului

Deci, în limbajul inventat de noi, am proiectat ciclul. Artistul Robot are, de asemenea, capacitatea de a înregistra bucle. În plus, ciclurile sunt diferite... Opțiunea pe care tocmai am luat-o în considerare este numită contraciclu sau buclă cu parametru.

Tipuri de cicluri.

Bucla cu contor.

Ciclu cu contor se foloseste cand se stie dinainte cate repetari trebuie facute. În exemplul de ghemuit de mai sus, acesta este exact cazul.

Pentru a scrie o buclă cu un numărător pentru executor, trebuie să cunoașteți sintaxa acesteia. Și el este așa:

nts<numărul de repetări> ori

<команда 1>

<команда 2>

<команда n>

Aici trebuie sa indicam numarul de repetari (numarul) si comenzile care vor fi repetate. Comenzile care sunt repetate în buclă sunt apelate corpul ciclului.

Să aruncăm o privire la asta cu un exemplu.

Inițial, Robotul era în cușca din stânga sus.

Să începem prin a rezolva problema liniar. În acest caz, vom picta peste celula curentă și vom muta 1 celulă la dreapta, iar programul va arăta astfel:
utilizați robotul
alg
din timp

vopsea peste

La dreapta

vopsea peste

La dreapta

vopsea peste

La dreapta

vopsea peste

La dreapta

vopsea peste

La dreapta

vopsea peste

La dreapta

vopsea peste

La dreapta

După cum puteți vedea, comenzile pentru a picta peste și în dreapta sunt repetate de 7 ori. Să rescriem acum programul folosind o buclă. Apropo, pentru a introduce un ciclu în programul dvs., puteți merge la meniu Introduce selectați elementul nts-raz-kts sau apăsați una dintre combinațiile de taste Esc, P(litera rusă P) sau Esc, H(litera latină H). Și tastele trebuie apăsate secvenţial- mai întâi Esc, eliberați-l și abia apoi P sau H.

Deci, al nostru program în buclă va arata asa:

utilizați robotul

nts de 7 ori

vopsea peste

La dreapta

Dacă îl rulăm, vom vedea că rezultatul este același - 7 celule umplute. Totuși, programul a devenit mai scurt și mult mai inteligent din punct de vedere algoritmic!

Ca încălzire și consolidare, îmi propun să scriem independent un program pentru Robot, care va desena un pătrat cu o latură de 7 celule. Desigur, folosind o buclă. Astept o solutie in comentarii.

Bucla cu condiție.

Când rezolvați problema 19 a GIA în informatică cu un robot, nu va funcționa să folosiți o buclă cu un contor. Întrucât câmpul este de obicei infinit, iar pereții nu au o lungime anume. Prin urmare, nu vom putea determina numărul de repetări pentru o buclă cu un contor. Dar nu contează - ne va ajuta buclă condiționată.

Să revenim la educația fizică și să schimbăm problema. La urma urmei, cineva poate să nu facă 7 genuflexiuni, în timp ce altul este capabil să facă 27. Poate fi luat în considerare acest lucru la crearea unui ciclu? Desigur. Numai că acum nu vom folosi un numărător (numărul de repetări), ci o condiție. De exemplu, în timp ce nu ești obosit, fă genuflexiuni. În acest caz, persoana nu va face un anumit număr de genuflexiuni, ci se va ghemui până când obosește. Și bucla noastră într-un limbaj abstract va arăta astfel:

in timp ce nu obosit

fă o ghemuială

sfârşitul ciclului

Cuvintele nu sunt obosite în cazul nostru - aceasta este o condiție. Când este adevărat, bucla este executată. Dacă este fals (obosit) corpul buclei nu va fi executat. Robotul executor are mai multe condiții

liber de sus

de jos liber

lăsat liber

drept liber

peretele de sus

peretele de jos

peretele stâng

peretele drept

Dar în condiția problemei 19 din GIA sunt indicate doar primele 4. Așa că le vom folosi doar pe ele.

Acum să rezolvăm următoarea problemă pentru Robot - trageți o linie verticală de la marginea stângă la dreapta câmpului folosind o buclă condiționată. Inițial, robotul este în colțul din stânga sus.

Să formulăm mai întâi algoritm verbal- adică vom descrie în cuvinte ce trebuie să facă Robotul. Acest algoritm va suna cam așa:

« În timp ce sunteți în dreapta, faceți liber un pas spre dreapta și pictați peste cușcă. »

Drept urmare, Robotul va alerga prin toate celulele din dreapta și va picta peste ele până când va apărea un perete în dreapta.

Codul sursă pentru programul nostru Robot va fi cam așa:

utilizați robotul

nts până acum în dreapta este liber

La dreapta

vopsea peste

Ca urmare a executării acestui program, vom vedea următoarea imagine: