Cumu insignà cumu superà e difficultà, è à u stessu tempu scrive ciculi

Malgradu u fattu chì avemu da parlà di unu di i temi basi, stu articulu hè scrittu per i prufessiunali sperimentati. U scopu hè di dimustrà ciò chì i principianti anu cuncepimentu sbagliatu in a prugrammazione. Per i sviluppatori praticanti, sti prublemi sò longu risolti, scurdati o micca nutati. L'articulu pò esse utile si di colpu avete bisognu di aiutà à qualchissia cù questu tema. L'articulu face paralleli cù materiale da parechji libri nantu à a prugrammazione di Schildt, Stroustrup, Okulov.

U tema nantu à i ciculi hè statu sceltu perchè assai persone sò escluse da ellu quandu u maestru di prugrammazione.

Sta tecnica hè pensata per i studienti debuli. In regula, e persone forti ùn si fermanu micca nantu à questu tema è ùn ci hè bisognu di vene cun tecniche speciali per elli. U scopu secundariu di l'articulu hè di trasfurmà sta tecnica da a classa "opere per tutti i studienti, ma solu un maestru" à a classe "opere per tutti i studienti, tutti i prufessori". Ùn pretendu micca l'uriginale assoluta. Sè vo site digià aduprendu una metodulugia simili per insignà stu tema, per piacè scrivite cumu a vostra versione hè diversa. Se decide di usà, diteci cumu hè andatu. Se una tecnica simili hè descritta in un libru, scrivite u nome.


Aghju travagliatu nantu à sta tecnica per 4 anni, studiendu individualmente cù studienti di diversi livelli di furmazione. In totale ci sò una cinquantina di studienti è duie mila ore di classi. À u principiu, i studienti sò sempre appiccicati nantu à questu tema è partanu. Dopu ogni studiente, a metodulugia è i materiali sò stati adattati. In l'annu passatu, i studienti ùn sò più appiccicati nantu à questu tema, cusì aghju decisu di sparte e mo scuperte.

Quale è perchè insegnu ?

Siccomu ùn ci sò micca esami d'ingressu, e classi ponu include studienti forti è assai debuli. Pudete leghje più nantu à i mo studienti in l'articulu Ritrattu di i studienti di i corsi di sera
I strived per assicurà chì tutti quelli chì volenu amparà a prugrammazione ponu amparà.
I mo classi sò tenuti individualmente è u studiente paga u so propiu soldi per ognunu. Sembra chì i studienti ottimisanu i costi è esigenu u minimu. In ogni casu, a ghjente và à e classi in faccia cun un maestru vivu micca per a cunniscenza stessu, ma per a cunfidenza di ciò chì anu amparatu, per un sensu di prugressu è per l'appruvazioni di l'espertu (insegnante). Se i studienti ùn sentenu micca u prugressu in u so apprendimentu, andaranu. In generale, e classi ponu esse strutturate in modu chì i studienti sentenu u prugressu in l'aumentu di u numeru di strutture familiari. Vale à dì, prima avemu studiatu mentre in detail, dopu studiamu per, dopu fà mentre, è avà avemu un cursu di milla è una notte pronti, in quale ciculi solu sò studiati per dui mesi, è à a fine - un studiente chì hà scrittu una biblioteca standard sottu dittatura. Tuttavia, per risolve i prublemi pratichi, ùn hè micca solu bisognu di cunniscenze di u materiale, ma ancu di l'indipendenza in a so applicazione è in a ricerca di nova infurmazione. Dunque, per i corsi in faccia, pensu chì u principiu currettu hè di insignà u minimu è incuragisce u studiu indipendente di sfumature è temi cunnessi. In u tema di i loops, cunsiderà chì a custruzzione mentri hè u minimu. Pudete capisce u principiu da ellu. Sapendu u principiu, pudete ammaistrà sia per è fà mentre sè stessu.

Per ottene a maestria di u materiale da i studienti debuli, a descrizzione di a sintassi ùn hè micca abbastanza. Hè necessariu di dà affari più sèmplice, ma variate, è descrive esempi in più detail. In ultimamente, a vitezza di u sviluppu hè limitata da a capacità di u studiente di trasfurmà l'espressioni è di ricerca di mudelli. Per i studienti intelligenti, a maiò parte di l'assignazioni saranu noiosi. Quandu studia cun elli, ùn avete micca bisognu di risolve u 100% di i prublemi. U mo materiale pò esse vistu à u mo github. Hè veru, u repository hè più cum'è u grimoriu di un stregone - nimu, ma mè, capirà ciò chì hè induve, è se falla u cuntrollu, pudete impazzisce.

A metodulugia hè orientata à a pratica

A teoria hè spiegata cù l'esempiu di risolve un prublema. In un fundamenti di a classa di prugrammazione induve i rami è i loops sò insignati, ùn hè simplicemente micca pussibule di dà una lezione utile nantu à un tema per una ora sana. 15-20 minuti hè abbastanza per spiegà u cuncettu. I difficultà principali si sviluppanu quandu eseguisce travaglii pratichi.
I prufessori principianti ponu scuzzulate l'operatori, i rami, i loops è l'arrays in una sola lezione. Ma i so studienti affruntà u prublema di assimilà sta infurmazione.
Hè necessariu micca solu per dì à u materiale, ma ancu per assicurà chì l'ascultori capiscenu.

U fattu di ammaistrà un tema hè determinatu da a manera chì u studiente face u travagliu indipendente.
Se un studiente hà sappiutu risolve un prublema nantu à un tema senza l'aiutu di un maestru, allora u tema hè stata maestru. Per assicurà l'autotesta, ogni attività hè descritta in una tabella cù scenarii di prova. I travaglii anu un ordine chjaru. Saltà i travaglii ùn hè micca cunsigliatu. Se u travagliu attuale hè troppu difficiule, allora passà à u prossimu hè inutile. Hè ancu più cumplicatu. Per chì u studiente pò ammaistrà u compitu cumplessu attuale, parechje tecniche sò spiegate cù l'esempiu di u primu prublema. In verità, tuttu u cuntenutu di u tema si riduce à tecniche per superà e difficultà. Cicli sò più di un effettu latu.

U primu compitu hè sempre un esempiu. U sicondu differ ligeramente è hè realizatu "indipendente" immediatamente dopu à u primu sottu a tutela di un maestru. Tutti i travaglii successivi sò destinati à prestu attenzione à parechji picculi cose chì ponu causà misconceptions.

A spiegazione di l'esempiu hè un dialogu in quale u studiente hà bisognu di chjamà a propagazione è a validazione incruciata per assicurà chì hà ammaistratu una parte di u materiale.

Seraghju banale è dì chì u primu esempiu nantu à u tema hè assai impurtante. Se tenete u materiale per un travagliu indipendente estensivu, l'omissioni di u primu esempiu pò esse corrette. Se ùn ci hè nunda altru oltri l'esempiu, allura u studiente più prubabilmente ùn hà micca maestru di u tema.

Mentre o per ?

Unu di i prublemi cuntruversi hè a scelta di a custruzzione per l'esempiu: mentri o per. Una volta, un mio amicu sviluppatore praticante senza sperienza d'insignamentu hà passatu una ora per cunvince chì u ciclu for era u più faciule da capisce. L'argumenti si sò ridutti à "tuttu in questu hè chjaru è dispostu in u so locu". Tuttavia, a causa principale di difficultà per i principianti veri hè l'idea di u ciculu stessu, è micca a so scrittura. Se una persona ùn capisce micca sta idea, allora averà difficultà cù a sintassi. Appena l'idea hè realizata, i prublemi di u disignu di u codice spariscenu per sè stessu.

In i mo materiali, u tema di i loops seguita u tema di branching. A similarità esterna di se è mentri ci permette di fà una analogia diretta: "quandu a cundizione in l'intestazione hè vera, allora u corpu hè eseguitu". L'unica peculiarità di u ciculu hè chì u corpu hè eseguitu parechje volte.

U mo secondu argumentu hè chì mentre richiede menu formattazione cà per. Meno furmatu significa menu sbagli stupidi cù virgule è parentesi mancanti. I principianti ùn anu micca sviluppatu abbastanza attente è meticulosità per evità automaticamente errori di sintassi.
U terzu argumentu hè spiegatu in parechji boni libri cum'è u primu argumentu.

Se u studiente pò facilmente trasfurmà l'espressioni, allora pudete parlà per passà. Allora u studiente sceglie ciò chì li piace di più. Sì i trasfurmazioni causanu difficultà, allora hè megliu ùn distractà a vostra attenzione. Chì u studiente prima risolve tuttu cù u tempu. Una volta chì avete ammaistratu u tema di i loops, pudete riscrive e suluzioni per praticà a cunversione mentre à per.
I loops postcondition sò una bestia abbastanza rara. Ùn passanu micca tempu in tuttu. Se un studiente hà ammaistratu l'idee di identificà mudelli è trasfurmà l'espressioni, pò capisce senza u mo aiutu.

Quandu dimustrà u primu esempiu à i studienti forti, aghju attiratu l'attenzione à u fattu chì in u primu esempiu hè impurtante di registrà micca solu a suluzione, ma ancu tutta a catena d'azzioni chì hà purtatu à u risultatu. I studienti lazy ponu trascuratà a scrittura è copià solu l'algoritmu finali. Hanu bisognu à esse cunvinta chì un ghjornu un compitu difficiule vinarà u so modu. À scioglie lu, vi tuccherà à seguità i passi comu in stu esempiu. Hè per quessa hè impurtante di registrà tutte e tappe. In i seguenti prublemi, serà pussibule di lascià solu a versione finale di a suluzione.

L'idea principale di l'automatizazione hè chì affidemu un urdinatore per fà u travagliu di rutina per una persona. Una di e tecniche basiche hè di scrive loops. Hè utilizatu quandu parechji azzioni ripetuti identici sò scritti in un prugramma in una fila.

Puderia parè una bona idea di visualizà a stessa frasa parechje volte in u primu compitu di looping. Per esempiu:

Hurrah, funziona!
Hurrah, funziona!
Hurrah, funziona!
Hurrah, funziona!
Hurrah, funziona!
Hurrah, funziona!
Hurrah, funziona!
Hurrah, funziona!

Questa opzione hè male perchè u valore di u cuntatore ùn hè micca visibile in u output. Questu hè un prublema per i principianti. Ùn la sottovalutate micca. À u principiu, stu compitu era u primu, è u compitu di derivà una seria di numeri in ordine crescente era u sicondu. Era necessariu di introduci termini supplementari "ciclu N volte" è "ciclu da A à B", chì sò essenzialmente a stessa cosa. Per ùn creà entità innecessarii, decisu di vede solu un esempiu cù a pruduzzioni di una seria di numeri. Pochi pirsuni riescenu à amparà à tene un cuntatore in u so capu è mudificà u cumpurtamentu di un prugramma in u so capu senza preparazione. Certi studienti scontranu prima a modellazione mentale nantu à u tema di i cicli.
Dopu qualchì pratica, aghju datu u compitu di ripetiri u listessu testu per esse risoltu indipindente. Se dà un contatore visibile prima è dopu un invisibule, i studienti anu menu prublemi. Calchì volta u suggerimentu "ùn scrivite micca u contatore nantu à u screnu" hè abbastanza.

Cumu l'altri spieganu?

In a maiò parte di i materiali educativi in ​​Internet, a sintassi di u ciculu hè datu cum'è parte di una "lectura". Per esempiu, in developer.mozilla.org (attualmente), parechje altre custruzzioni sò descritte cù u ciclu while. In questu casu, solu i disinni stessi sò datu in forma di mudelli. U risultatu di u so lanciu hè scrittu in parolle, ma ùn ci hè micca illustrazione. In u mo scusa, una tale presentazione di u tema multiplica l'utilità di tali materiali per zero. U studiente pò riscrive u codice è eseguisce ellu stessu, ma hà ancu bisognu di un standard per paragunà. Cumu pudete capisce chì un esempiu hè stata riscritta currettamente se ùn ci hè nunda per paragunà u risultatu?
Quandu solu un mudellu hè datu, senza un esempiu, diventa ancu più difficiule per u studiente. Cumu capisce chì i frammenti di codice sò posti currettamente in u mudellu? Pudete pruvà à scrive in una certa manera, e poi corre. Ma s'ellu ùn ci hè micca standard per paragunà u risultatu, allora u lanciamentu ùn aiuterà ancu.

In u cursu C++ nantu à l'Intuitivu, a sintassi di loop hè intarrata in a terza pagina di a Lecture 4 nantu à u tema "operatori". Quandu spiegà a sintassi di i loops, un enfasi particulari hè pusatu nantu à u terminu "operatore". U terminu hè prisentatu cum'è un inseme di fatti cum'è "simbulu; questu hè una dichjarazione", "{} hè una dichjarazione cumposta", "u corpu di u ciclu deve esse una dichjarazione". Ùn mi piace micca questu approcciu perchè pare chì ammuccià relazioni impurtanti daretu à un termini. Parsing u codice fonte di un prugramma in termini à questu livellu hè necessariu da i sviluppatori di compilatori per implementà a specificazione di a lingua, ma micca da i studienti cum'è una prima approssimazione. I principianti à a prugrammazione sò raramente abbastanza meticulosi per pagà cusì attente à i termini. Hè una persona rara chì si ricorda è capisce e parolle novi a prima volta. Quasi nimu pò applicà currettamente un termu chì hà appena amparatu. Dunque, i studienti ricevenu assai errori cum'è "Aghju scrittu mentri (a <7); {, ma u prugramma ùn funziona micca".
In u mo parè, à u principiu hè megliu dà a sintassi di a custruzzione immediatamente cù parentesi. L'opzione senza parentesi deve esse spiegata solu se u studiente hà una quistione specifica: "perchè ùn ci hè micca parentesi è funziona".

In u libru di Okulov 2012 "Fundamentals of Programming", una introduzione à i loops principia cù u mudellu for, dopu dà cunsiglii per u so usu, è dopu immediatamente vai à a sezione sperimentale di a lezioni. Capiscu chì u libru hè statu scrittu per quella minurità di studienti assai capaci chì raramente venenu à e mo classi.

In i libri populari, u risultatu di frammenti di codice hè sempre scrittu. Per esempiu, Shildt's "Java 8. The Complete Guide" edizione 2015. Prima, un mudellu hè datu, dopu un prugramma di esempiu è subitu dopu - u risultatu di l'esekzione.

Per esempiu, cunzidira un ciclu di tempu chì face u reversu
countdown partendu da 10, è esattamente 10 linee di "misure" sò affissate:

//Продемонстрировать применение оператора цикла while
class While {
    public static void main(String args []) {
        int n = 10;
        while (n > 0) {
            System.out.println("такт " + n);
            n--;
        }
    }
}

Una volta eseguitu, stu prugramma produce dece "cicli" cum'è seguente:
такт 10
такт 9
такт 8
такт 7
такт 6
такт 5
такт 4
такт 3
такт 2
такт 1

L'approcciu di descrizzione di un mudellu, un prugramma di esempiu è u risultatu di u prugramma hè ancu utilizatu in u libru "Javascript for Kids" è in u cursu js in w3schools.com. U formatu di a pagina web permette ancu questu esempiu per esse interattivu.

U libru di Stroustrup 2016 Principi è Pràtica Using C++ andò ancu più luntanu. U primu passu hè di spiegà quale risultatu deve esse ottenutu, è dopu chì u testu di u prugramma hè mostratu. Inoltre, ùn piglianu micca solu un prugramma casuale cum'è un esempiu, ma dà una escursione in a storia. Questu aiuta à attirà l'attenzione: "Fighjate, questu ùn hè micca solu un testu inutile. Vede qualcosa di significativu ".

Comu esempiu di iterazione, cunzidira u primu prugramma eseguitu nantu à una macchina di prugramma almacenata (EDSAC). Hè statu scrittu da David Wheeler à u Laboratoriu di Computer di l'Università di Cambridge, Inghilterra u 6 di maghju di u 1949. Stu prugramma calcula è stampa una lista simplice di quadrati.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801

Quì, ogni linea cuntene un numeru seguitatu da un caratteru di tabulazione ('t') è u quadru di quellu numeru. A versione C++ di stu prugramma hè cusì:

//Вычисляем и распечатываем таблицу квадратов чисел 0-99
int main()
{
    int i = 0; // Начинаем с нуля
    while(i < 100){
        cout << i << 't' << square(i) << 'n';
        ++i;
    }
}

Curiosamente, u mudellu di sintassi ùn hè micca descrittu in stu libru. Stroustrup in u manuale di l'istruttore (traduzzione) sottolinea chì rispettu l'intelligenza di i so studienti. Forsi l'abilità di identificà un mudellu in parechji esempii hè cunsideratu una manifestazione di tali intelligenza.

L'approcciu di Stroustrup: discrive u risultatu, poi risolve u prublema, è dopu un analisi indipendente da u studiente - pari u più pensativu. Per quessa, decisu di piglià com'è una basa, ma dite cù un esempiu menu storicu - u compitu di derivà una "tavula di cuntenutu". Forma un ancore ricunnoscevule in modu chì pudete poi dì "ricordate u compitu nantu à a tavola di cuntenutu" è cusì chì i studienti ricurdate esattamente questu. In u mo esempiu, aghju pruvatu à prevene dui più di i misconceptions più cumuni. Dopu scriveraghju nantu à elli in più detail.

In questu compitu, avemu intruduciutu tecniche per risolve i prublemi cumplessi. A decisione iniziale deve esse fatta primitiva è simplice. Ebbè, allura vi pò pinsà quantu à migliurà sta suluzione.
Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Заключение

Sicondu i mo osservazioni, l'approcciu di "template-example-result" in diverse cumminazzioni porta sempre à u fattu chì i studienti percepiscenu u ciculu cum'è un hieroglyph. Questu hè manifestatu in u fattu chì ùn anu micca capitu perchè ci era una cundizione per scrive quì, cumu sceglie trà i ++ è i - è altre cose apparentemente evidenti. Per evitari sti misconceptions, l'approcciu di parlà di ciculi deve enfatizà u significatu di ripetiri l'azzioni idèntica è solu dopu formalizà cù una struttura. Dunque, prima di dà a sintassi di u ciclu, avete bisognu di risolve u prublema in capu. Una suluzione primitiva à u prublema di u tavulu di cuntenutu s'assumiglia cusì:

Console.WriteLine("Введение");
Console.WriteLine("Глава 1");
Console.WriteLine("Глава 2");
Console.WriteLine("Глава 3");
Console.WriteLine("Глава 4");
Console.WriteLine("Глава 5");
Console.WriteLine("Глава 6");
Console.WriteLine("Глава 7");
Console.WriteLine("Заключение");

Cumu pò esse migliuratu?
Sustituisce l'azzioni monotoni cù un ciculu.
Chì azzioni sò ripetuti in una fila senza cambiamenti?
Ùn ci hè nimu in questu fragmentu. Tuttavia, i cumandamenti per vede a parolla "Capitulu" cù un numeru sò assai simili à l'altri.
Dunque, u prossimu tappa hè di truvà a diffarenza trà i frammenti. Hè solu in questu compitu chì tuttu hè ovvi, allora micca i cumandamenti unichi seranu ripetuti, ma blocchi di codice di 5 linee o più. Avete bisognu di circà micca solu in a lista di cumandamenti, ma in custruzzioni di ramificazione o di loop.
In l'esempiu, a diffarenza trà i cumandamenti hè in u numeru dopu a parolla "Capitulu".
Una volta chì a diferenza hè truvata, avete bisognu di capiscenu u mudellu di cambiamentu. U fragmentu sfarente hè u numeru? Hè in constantemente crescente o diminuite? Cumu cambia u valore di un numeru trà dui squadre fiancu à fiancu ?
In l'esempiu, u numeru dopu à a parolla "Capitulu" aumenta in increments di 1. A diferenza si trova, u mudellu hè revelatu. Avà pudete rimpiazzà u fragmentu diffirenti cù una variabile.
Avete bisognu di dichjarà una tale variabile prima di u primu di i frammenti ripetuti. Una tale variabile hè generalmente chjamata I o j o qualcosa più detallatu. U so valore iniziale deve esse uguali à u primu valore affissatu nantu à u screnu. In l'esempiu, u primu valore hè 1.
Chì valore iniziale deve esse pigliatu per vede a serie di numeri "100, 101, 102, 103, 104, 105"?
U primu numeru in questa serie hè 100.
Dopu à ogni cumanda di output, avete bisognu di aumentà u valore di sta variabile da 1. Questa unità hè u passu di cambiamentu.
Chì passu serà in a serie di numeri "100, 102, 104, 106"?
Passu 2 in questa fila.
Dopu avè rimpiazzatu u frammentu sfarente cù una variabile, u codice serà cusì:

Console.WriteLine("Введение");
int i;
i = 0;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Заключение");

Dopu applicà a tecnica "esprime u mudellu di una variabile" in u codice, avete parechji gruppi di azzioni idèntica chì vanu in una fila. Avà l'azzioni ripetuti ponu esse rimpiazzati cù un ciculu.

Последовательность решения задачи на циклы сводится к этапам:
* Решить «в лоб» множеством отдельных команд
* Найти закономерность
* Выразить закономерность переменной
* Оформить в виде цикла

In seguitu, novi termini sò intrudutti per chì u studiente ùn si trova micca in a situazione di "Aghju capitu tuttu, ma ùn possu micca dì":
- un contatore hè sempre una variabile chì hè necessariu per seguità u numeru di passi in un ciclu. Di genere un integer chì hè paragunatu à a limitazione.
- counter step - discrizzione di u mudellu di cambiamenti di counter.
- constraint - un numeru o variabile cù quale u contatore hè paragunatu per chì l'algoritmu hè finale. U valore di u contatore cambia per avvicinà u limitu.
- corpu di loop - un inseme di cumandamenti chì saranu ripetuti. Quandu dicenu "u cumandamentu hè scrittu in un ciclu", significanu u corpu.
- iterazione di loop - esecuzione unica di u corpu di u ciclu.
- Loop condition - una espressione logica chì determina se un'altra iterazione serà eseguita. (Ci pò esse cunfusione cù strutture ramificate quì)
Avete bisognu à esse preparatu per u fattu chì à u primu studiente aduprà termini per altri scopi. Questu hè appiicatu à i forti è i debuli. Stabbilisce una lingua cumuna hè un arte. Avà scriveraghju brevemente: avete bisognu di stabilisce u compitu "evidenzià u frammentu di codice cù <term>" è aduprà sti termini bè in a cunversazione.
Dopu a trasfurmazioni cù un ciclu, u frammentu hè ottenutu:

Console.WriteLine("Введение");
int i = 0;
while (i < 7) {
    Console.WriteLine("Глава " + i);
    i = i + 1;
}
Console.WriteLine("Заключение");

U principale misconception

Un misconception populari trà i studienti hè chì ponenu l'azzioni in un ciclu chì deve esse fattu solu una volta. Per esempiu cusì:

;
int i = 0;
while (i < 7) {
    Console.WriteLine("Введение")
    Console.WriteLine("Глава " + i);
    i = i + 1;
    Console.WriteLine("Заключение");
}

I studienti si trovanu in stu prublema tuttu u tempu, sia à u principiu sia in prublemi più cumplessi.
Cunsigliu chjave in questu casu:

Quante volte duvete ripete u cumandamentu: una volta o parechje volte?

I cumandamenti per stampà e parolle "Introduzione" è "Conclusione" è dichjarà è inizializzanu a variabile i ùn sò micca cum'è altre azzioni ripetitive. Sò eseguiti solu una volta, chì significa chì deve esse scritti fora di u corpu di u ciclu.

Tutti i trè tappe di a suluzione duveranu stà in u codice in modu chì pudete riferite à elli dopu in casu di difficultà. Hè abbastanza per cummentà e prime duie opzioni per ùn interferiscenu micca.
L'attenzione di u studiente deve esse attirata da i seguenti fatti:
- In una cundizione di loop, un contatore è un limitu sò generalmente paragunati. U cuntatore pò cambià in u corpu di u ciclu, ma u limitu ùn pò micca. Per rompe sta regula, avete bisognu di furmulà ragiuni convincenti.
- I cumandamenti per vede e parolle "Introduzione" è "Conclusione" sò situati fora di u corpu di u ciclu. Avemu bisognu di eseguisce 1 volta. "Introduzione" - prima di ripetiri l'azzioni, "Conclusione" - dopu.
In u prucessu di cunsulidà stu tema, maestru di i prossimi, è ancu di trattà di difficultà, hè utile ancu per i studienti forti di dumandà a quistione: "Quante volte deve esse realizatu sta azzione? Unu o parechji ?

Sviluppu di cumpetenze supplementari

In u prucessu di studià i cicli, i studienti sviluppanu ancu a capacità di diagnosticà è risolve i prublemi. Per fà u diagnosticu, u studiente hà bisognu di prisentà u risultatu desideratu è paragunà cù u risultatu attuale. L'azzioni currettive dipendenu da a diffarenza trà elli.
Siccomu i studienti in questa tappa anu sempre poca idea di u risultatu "desideratu", ponu fucalizza nantu à e dati di teste. In regula, nimu in questu stadiu capisce ancu ciò chì pò sbaglià è cumu si tratta. Dunque, scrivu in un quaderno una descrizzione di i prublemi tipici è parechje manere di risolve. Sceglie u più adattatu hè u compitu di u studiente stessu.
Un registru hè necessariu per dumandà "Ciò chì era aspittatu hè accadutu?", "Quale di sti situazioni hè accadutu avà?", "A suluzione applicata hà aiutatu?"

  1. U numaru d'azzioni hè 1 menu o più di l'aspittatu. Soluzioni:
    - aumenta u valore iniziale di u cuntatore da 1.
    - rimpiazzà l'operatore di paragone strettu (< o >) cù un operatore micca strettu (<= o >=).
    - cambia u valore limite à 1.
  2. L'azzioni in un ciclu sò realizati senza piantà, indefinitu. Soluzioni:
    - aghjunghje un cumandamentu di cambiamentu di contatore se manca.
    - riparà u cumandamentu di cambiamentu di contatore in modu chì u so valore sia più vicinu à u limitu.
    - sguassate u cumandamentu di cambiamentu di restrizzione s'ellu hè in u corpu di u ciclu.
  3. U numaru d'azzioni in un ciclu hè più di 1 menu o più di l'aspittatu. L'azzione in u ciclu ùn hè stata eseguita ancu una volta. Prima, avete bisognu di scopre i valori attuali di e variàbili appena prima di inizià u ciclu. Soluzioni:
    - cambià u valore iniziale di a limitazione
    - cambià u valore iniziale di u contatore

U prublema 3 generalmente implica l'usu di a variabile sbagliata o micca resettate u contatore à zero.

Dopu à sta spiegazione, u studiente pò ancu avè diverse idee sbagliate nantu à cumu funziona i loops.
Per dissipà i più cumuni, vi dugnu i seguenti compiti:

  1. In quale u limitu, u valore iniziale di u contatore, o u passu di u contatore hè inseritu da l'utilizatore.
  2. In quale u valore di u contatore deve esse usatu in qualchì espressione aritmetica. Hè cunsigliatu di utilizà un contatore in l'espressione radicali o in u denominatore per chì a diffarenza ùn hè micca lineale.
  3. In quale u valore di u contatore ùn hè micca visualizatu nantu à u screnu mentre u ciclu hè in esecuzione. Per esempiu, affissendu u numeru necessariu di frammenti di testu identici o disegnu una figura cù gràfiche di tartaruga.
  4. In quale avete bisognu di fà prima alcune azzioni ripetitive, è dopu altri.
  5. In quale avete bisognu di fà altre azzioni prima è dopu ripetiri

Per ogni compitu, avete bisognu di furnisce dati di prova è u risultatu previstu.

Per capisce quantu rapidamente pudete spustà, avete bisognu di leghje i termini di sti prublemi è dumandate: "cumu si differenzianu da l'esempiu?", "Chì ci vole à cambià in l'esempiu per risolviri?" Se u studiente risponde in modu significativu, allora ch'ellu risolve almenu unu in a classe, è u restu in casa da ellu stessu. Se a suluzione hè successu, allora pudemu cumincià à spiegà e cundizioni in i loops.
Sì avete prublemi à risolve i prublemi nantu à u vostru propiu, avete bisognu di travaglià tuttu in a classe. Per evitari di risolve u prublema chì ricorda di disegnà una civetta, ricumandemu prima di risolve u prublema in una manera micca universale. Hè cusì chì a suluzione passa a prima prova è ùn usa micca a custruzzione di u ciclu. Eppo, allora applicà e trasfurmazioni per ottene l'universalità di a suluzione.

Loops è rami

In u mo parè, hè utile per dà u tema "cicli in rami" separatamente. Cusì chì dopu pudete vede a diffarenza trà cuntrollà una cundizione parechje volte è cuntrollà una volta.
I travaglii per a cunsulidazione seranu nantu à a pruduzzioni di numeri da A à B, chì sò inseriti da l'utilizatore:
- sempre in ordine crescente.
- ascendante o discendente secondu i valori di A è B.

U tema di "ramificazione in i loops" deve esse spustatu solu dopu chì u studiente hà maestru di e tecniche: "sustituì un mudellu cù una variabile" è "sustituì l'azzioni ripetitive cù un ciclu".
U mutivu principale per aduprà rami in i loops hè anomalie in u mudellu. In u mezu si rompe sicondu i dati iniziali.
Per quelli studienti chì sò capaci di circà una suluzione cumminendu tecnichi simplici, hè abbastanza à dì "ramificazione pò esse scritta in loops" è dà u prublema "per esempiu" cumpletamente per risolve indipindente.
Esempiu di travagliu:

L'utilizatore inserisce u numeru X. Mostra i numeri da 0 à 9 in una colonna è mette un segnu "+" in fronte à u numeru chì hè uguali à X.

Se 0 hè statu inseritu0+
1
2
3
4
5
6
7
8
9

Se 6 hè statu inseritu0
1
2
3
4
5
6+
7
8
9

Se 9 hè statu inseritu0
1
2
3
4
5
6
7
8
9+

Se 777 hè statu inseritu0
1
2
3
4
5
6
7
8
9

Se una breve spiegazione ùn hè micca abbastanza per scrive cù un ciclu, allora avete bisognu di ottene una suluzione universale à u stessu prublema senza un ciclu.
Averete una di duie opzioni:
Desiratu

string temp;
temp = Console.ReadLine();
int x;
x = int.Parse(temp);
if (x==0) {
    Console.WriteLine(0 + "+");
} else {
    Console.WriteLine(0);
}
if (x==1) {
    Console.WriteLine(1 + "+");
} else {
    Console.WriteLine(1);
}
if (x==2) {
    Console.WriteLine(2 + "+");
} else {
    Console.WriteLine(2);
}
if (x==3) {
    Console.WriteLine(3 + "+");
} else {
    Console.WriteLine(3);
}
if (x==4) {
    Console.WriteLine(4 + "+");
} else {
    Console.WriteLine(4);
}
if (x==5) {
    Console.WriteLine(5 + "+");
} else {
    Console.WriteLine(5);
}
if (x==6) {
    Console.WriteLine(6 + "+");
} else {
    Console.WriteLine(6);
}
if (x==7) {
    Console.WriteLine(7 + "+");
} else {
    Console.WriteLine(7);
}
if (x==8) {
    Console.WriteLine(8 + "+");
} else {
    Console.WriteLine(8);
}
if (x==9) {
    Console.WriteLine(9 + "+");
} else {
    Console.WriteLine(9);
}

Possibile

string temp;
temp = Console.ReadLine();
int x;
x = int.Parse(temp);
if (x==0) {
    Console.WriteLine("0+n1n2n3n4n5n6n7n8n9");
}
if (x==1) {
    Console.WriteLine("0n1+n2n3n4n5n6n7n8n9");
}
if (x==2) {
    Console.WriteLine("0n1n2+n3n4n5n6n7n8n9");
}
if (x==3) {
    Console.WriteLine("0n1n2n3+n4n5n6n7n8n9");
}
if (x==4) {
    Console.WriteLine("0n1n2n3n4+n5n6n7n8n9");
}
if (x==5) {
    Console.WriteLine("0n1n2n3n4n5+n6n7n8n9");
}
if (x==6) {
    Console.WriteLine("0n1n2n3n4n5n6+n7n8n9");
}
if (x==7) {
    Console.WriteLine("0n1n2n3n4n5n6n7+n8n9");
}
if (x==8) {
    Console.WriteLine("0n1n2n3n4n5n6n7n8+n9");
}
if (x==9) {
    Console.WriteLine("0n1n2n3n4n5n6n7n8n9+");
}

Dà un compitu simili in anticipu, mentre studia u tema di branching.
Se u studiente vene cun una opzione "pussibile", allora avete bisognu di dì chì ci ponu esse parechje suluzione à u listessu prublema. Tuttavia, sò diffirenti in a so resistenza à i cambiamenti di esigenze. Fate a quistione: "Quanti posti in u codice avissi da esse currettu se aghju avutu à aghjunghje un altru numeru?" In a versione "pussibile", avete bisognu di aghjunghje un ramu più è aghjunghje un novu numeru in 10 altri posti. In u "desiratu" hè abbastanza per aghjunghje solu un ramu.
Stabilite u compitu per ripruduce l'opzione "desirata", dopu truvà un mudellu in u codice, eseguite un sustitutu variabile è scrivite un ciclu.
Sè avete una idea di cumu risolve stu prublema senza un ciclu in qualchì altru modu, scrivite in i cumenti.

Loops in Loops

In questu tema, avete bisognu di attentu à i seguenti:
- i cuntatori per i loops interni è esterni deve esse variàbili diffirenti.
- u contatore per u ciclu internu deve esse resettatu parechje volte (vale à dì, in u corpu di u ciclu esterno).
- in i travaglii di output di testu, ùn pudete micca scrive prima una lettera in parechje linee, è dopu a seconda. Prima deve esse stampatu tutte e lettere di a prima linea, dopu tutte e lettere di a seconda, è cusì.

Hè megliu cumincià à spiegà u tema di i loops in i loops spieghendu l'impurtanza di resetting u contatore à zero.
Esempiu di travagliu:

L'utilizatore inserisce dui numeri: R è T. Stampate duie linee di caratteri "#". A prima linea deve cuntene R caratteri. A seconda linea cuntene T pezzi. Se un numeru hè negativu, mostra un missaghju d'errore.

R = 5, T = 11#####
############

R = 20, T = 3######################
###

R=-1, T=6U valore R deve esse micca negativu

R=6, T=-2U valore T deve esse micca negativu

Ovviamente, stu prublema hà ancu almenu duie suluzioni.
Desiratu

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
int i = 0;
while (i < R)
{
    Console.Write("#");
    i = i + 1;
}
Console.WriteLine();
i = 0;
while (i < T)
{
    Console.Write("#");
    i = i + 1;
}

Possibile #1

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
int i = 0;
while (i < R)
{
    Console.Write("#");
    i = i + 1;
}
Console.WriteLine();
int j = 0;
j = 0;
while (j < T)
{
    Console.Write("#");
    j = j + 1;
}

A diferenza hè chì in a suluzione "pussibile", una seconda variabile hè stata utilizata per pruduce a seconda linea. Duvete insiste à aduprà a listessa variabile per i dui cicli. Questa limitazione pò esse ghjustificata da u fattu chì una suluzione cù un contatore per dui ciculi serà un'illustrazione di u terminu "reset counter". Capisce stu termini hè necessariu quandu risolve i seguenti prublemi. Cum'è un cumprumissu, pudete salvà e duie suluzioni à u prublema.

Un prublema tipicu cù l'usu di una variabile di cuntatore per dui loops appare cusì:
R = 5, T = 11#####
######

U numaru di caratteri in a seconda linea ùn currisponde micca à u valore di T. Sè avete bisognu di aiutu cù questu prublema, allora avete bisognu di guardà in e note nantu à i prublemi tipici cù i loops. Questu hè u sintumu #3. Hè diagnusticatu s'ellu aghjunghje un valore di u cuntrariu immediatamenti prima di u sicondu ciclu. Currettu da resetting. Ma hè megliu ùn dì micca questu subitu. U studiente deve pruvà à formulà almenu una ipotesi.

Ci hè, sicuru, una altra suluzione. Ma ùn aghju mai vistu trà i studienti. À u stadiu di studià i ciculi, a storia nantu à questu distrarà l'attenzione. Pudete vultà à questu più tardi quandu amparate nantu à e funzioni di stringa.
Possibile #2

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
Console.WriteLine(new String('#', R));
Console.WriteLine(new String('#', T));

U prossimu compitu necessariu:

Mostra i numeri da 0 à 9. Ogni numeru deve esse nantu à a so propria linea. U numaru di cifre in una linea (W) hè inseritu da u teclatu.

W = 10
1
2
3
4
5
6
7
8
9

W = 100000000000
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999

Sè un studiente hà ammaistratu a tecnica di rimpiazzà una variàbbili, allura vi affruntà abbastanza prestu. Un prublema pussibule serà di novu in resetting the variable. Se ùn pudete micca trattà a trasfurmazioni, significa chì erate in furia è avete bisognu di risolve i prublemi più simplici.

Grazie per a vostra attenzione. Mi piace è abbonate à u canali.

P.S. Если вы нашли опечатки или ошибки в тексте, пожалуйста, сообщите мне. Это можно сделать выделив часть текста и нажав «Ctrl / ⌘ + Enter», если у вас есть Ctrl / ⌘, либо через личные сообщения. Если же оба варианта недоступны, напишите об ошибках в комментариях. Спасибо!

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Sondaggio per i lettori senza karma

  • 20,0%Insegnu prufessiunale, +11

  • 20,0%Insegnu prufessiunale, -11

  • 60,0%Ùn insegnu micca, +13

  • 0,0%Ùn insegni micca, -10

  • 0,0%Altru 0

5 utilizatori anu vutatu. 5 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment