{"id":40208,"date":"2020-02-01T06:04:35","date_gmt":"2020-02-01T03:04:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly"},"modified":"2020-02-01T06:04:35","modified_gmt":"2020-02-01T03:04:35","slug":"kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","title":{"rendered":"Come insegnare a superare le difficolt\u00e0 e, nel contempo, a scrivere cicli","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Nonostante si parli di uno dei temi fondamentali, questo articolo \u00e8 scritto per specialisti esperti. L'obiettivo \u00e8 mostrare quali sono i fraintendimenti comuni tra i neofiti della programmazione. Per i programmatori pratici, questi problemi sono ormai risolti, dimenticati o addirittura non notati. L'articolo potrebbe essere utile se dovessi aiutare qualcuno su questo argomento. Vengono stabilite delle parallele con materiali tratti da vari libri di programmazione di autore come Schildt, Stroustrup e Okulov.<\/p>\n<p>L'argomento dei cicli \u00e8 stato scelto perch\u00e9 molti abbandonano la programmazione durante questo apprendistato.<\/p>\n<p>Questa metodologia \u00e8 destinata a studenti poco forti. Di solito, gli studenti pi\u00f9 forti non si soffermano su questo argomento e non \u00e8 necessario inventare metodi specifici per loro. Un secondo obiettivo dell'articolo \u00e8 quello di traslare questa metodologia dalla categoria \"funziona su tutti gli studenti, ma solo con un insegnante\" alla categoria \"funziona su tutti gli studenti e tutti gli insegnanti\". Non pretendo di essere assolutamente originale. Se gi\u00e0 utilizzi una metodologia simile per insegnare questo argomento, per favore scrivi in cosa si differenzia la tua versione. Se decidi di applicarla, racconta alla fine com'\u00e8 andata. Se una metodologia simile \u00e8 descritta in qualche libro, per favore inviami il titolo.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nHo sviluppato questa metodologia per 4 anni, lavorando individualmente con studenti di vari livelli. In totale, circa una cinquantina di studenti e duemila ore di lezione. Inizialmente, gli studenti si bloccavano per sempre su questo tema e abbandonavano. Dopo ogni studente, la metodologia e i materiali sono stati corretti. Nell'ultimo anno, gli studenti non si bloccano pi\u00f9 su questo argomento, quindi ho deciso di condividere le mie esperienze.<\/p>\n<h4>Perch\u00e9 tante parole? I cicli sono elementi fondamentali!<\/h4>\n<p>\nCome ho gi\u00e0 scritto in precedenza, per i programmatori pratici e per gli studenti pi\u00f9 forti, la complessit\u00e0 del concetto di cicli pu\u00f2 essere sottovalutata. Ad esempio, si potrebbe tenere una lunga lezione, vedere teste che annuiscono e occhi intelligenti. Ma quando si tenta di risolvere un problema, si blocca e sorgono problemi inspiegabili. Dopo la lezione, gli studenti avrebbero sicuramente una comprensione solo parziale. La situazione \u00e8 aggravata dal fatto che gli studenti non riescono a esprimere quali siano precisamente i loro fraintendimenti.<br \/>\nUn giorno mi sono reso conto che gli studenti percepiscono i miei esempi come geroglifici. Cio\u00e8, come pezzi di testo indivisibili, nei quali bisogna aggiungere una qualche lettera \"magica\" affinch\u00e9 funzioni.<br \/>\nA volte notavo che gli studenti pensano che per risolvere un determinato problema sia necessaria <i>qualche altra<\/i> struttura, che semplicemente non ho ancora spiegato. Sebbene per risolvere fosse sufficiente modificare leggermente l'esempio.<\/p>\n<p>Quindi sono arrivato all'idea che l'attenzione principale dovrebbe essere rivolta non alla sintassi delle espressioni, ma all'idea di rifattorizzare il codice ripetitivo utilizzando i cicli. Non appena gli studenti padroneggiano questa idea, qualsiasi sintassi si apprende attraverso piccoli esercizi.<\/p>\n<h4>A chi e perch\u00e9 insegno<\/h4>\n<p>\nPoich\u00e9 non ci sono esami di ammissione, durante le lezioni possono esserci sia studenti forti che molto deboli. \u00c8 possibile leggere pi\u00f9 dettagliatamente sui miei studenti nell'articolo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/350360\/\">Ritratto degli studenti dei corsi serali<\/a><\/noindex><br \/>\nHo sempre cercato di far s\u00ec che la programmazione fosse accessibile a chiunque desiderasse impararla.<br \/>\nLe mie lezioni si svolgono in modo individuale e lo studente paga di tasca sua per ciascuna di esse. Potrebbe sembrare che gli studenti vogliano ottimizzare i costi e richiedere il minimo. Tuttavia, le persone partecipano a corsi in presenza con un docente dal vivo non solo per acquisire conoscenze, ma per avere la certezza di aver compreso, per percepire il progresso e per ricevere approvazione da un esperto (docente). Se gli studenti non sentono di progredire nel loro apprendimento, se ne andranno. In generale, \u00e8 possibile strutturare le lezioni in modo che gli studenti percepiscano un progresso nell'aumento del numero di strutture conosciute. Cio\u00e8, prima approfondiamo il ciclo while, poi studiamo il for, poi il do while, ed ecco che abbiamo un corso delle mille e una notte, in cui per due mesi si studi solo cicli, e alla fine abbiamo uno studente che ha scritto la libreria standard sotto dettatura. Tuttavia, per risolvere problemi pratici non \u00e8 necessaria solo la conoscenza del materiale, ma anche l'autonomia nell'applicazione e nella ricerca di nuove informazioni. Pertanto, considero corretto per i corsi in presenza adottare il seguente principio: insegnare il minimo e incoraggiare lo studio autonomo delle sfumature e degli argomenti correlati. Per quanto riguarda i cicli, considero il ciclo while come il minimo. Da esso si pu\u00f2 capire il principio. Una volta compreso il principio, \u00e8 possibile apprendere anche il for e il do-while in modo autonomo.<\/p>\n<p>Per garantire l'apprendimento del materiale da parte di studenti pi\u00f9 deboli, non basta descrivere la sintassi. \u00c8 necessario fornire pi\u00f9 compiti semplici ma variegati e spiegare gli esempi in modo pi\u00f9 dettagliato. Alla fine, la velocit\u00e0 di apprendimento \u00e8 limitata dalla capacit\u00e0 dello studente di trasformare le espressioni e cercare le correlazioni. Per gli studenti pi\u00f9 brillanti, la maggior parte dei compiti risulter\u00e0 noiosa. Quando si lavora con loro, non \u00e8 necessario insistere sulla risoluzione del 100% dei problemi. Puoi vedere il mio materiale su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AKryukov92\/programming-basics\">il mio GitHub<\/a><\/noindex>. Tuttavia, il repository assomiglia pi\u00f9 a un grimorio di un negromante: nessuno, tranne me, capir\u00e0 cosa si trova dove, e se fallisci il controllo, potresti impazzire.<\/p>\n<h4>La metodologia \u00e8 orientata alla pratica.<\/h4>\n<p>\nLa teoria \u00e8 spiegata attraverso la risoluzione di problemi. Nelle lezioni di programmazione di base, dove si studiano le diramazioni e i cicli, non \u00e8 possibile organizzare una lezione utile su un unico argomento per un'ora intera. 15-20 minuti bastano per spiegare il concetto. Le principali difficolt\u00e0 sorgono nell'esecuzione di compiti pratici.<br \/>\nI docenti principianti possono gettare operatori, diramazioni, cicli e array in un'unica lezione. Peccato che gli studenti si troveranno di fronte al problema di assimilare queste informazioni.<br \/>\n\u00c8 importante non solo illustrare il materiale, ma anche assicurarsi che gli ascoltatori l'abbiano compreso.<\/p>\n<p>Il fatto di aver assimilato un argomento si determina in base a come lo studente affronta il lavoro autonomo. <br \/>\nSe lo studente riesce a risolvere un problema sull'argomento senza l'aiuto dell'insegnante, significa che l'argomento \u00e8 stato assimilato. Per garantire un'autovalutazione, ogni problema \u00e8 accompagnato da una tabella con scenari di test. I problemi seguono un ordine ben definito. Non \u00e8 consigliabile saltare i problemi. Se il problema attuale \u00e8 troppo difficile, passare al successivo \u00e8 inutile. Sar\u00e0 ancora pi\u00f9 difficile. Per consentire allo studente di affrontare l'attuale problema complesso, vengono spiegati alcuni trucchi utilizzando il primo problema come esempio. In effetti, tutto il contenuto dell'argomento si riduce a strategie per superare le difficolt\u00e0. I cicli sono, piuttosto, un effetto collaterale.<\/p>\n<p>Il primo problema \u00e8 sempre un esempio. Il secondo differisce leggermente ed \u00e8 svolto \"autonomamente\" subito dopo il primo sotto la supervisione dell'insegnante. Tutti i problemi successivi sono finalizzati a richiamare l'attenzione su varie piccole cose che possono causare malintesi.<\/p>\n<p>La spiegazione dell'esempio consiste in un dialogo in cui lo studente deve attivare il back propagation e la cross-validation per assicurarsi di aver assimilato una porzione di materiale.<\/p>\n<p>Sar\u00f2 banale e dir\u00f2 che il primo esempio sull'argomento \u00e8 molto importante. Se c'\u00e8 materiale per un ampio lavoro autonomo, le mancanze del primo esempio possono essere corrette. Se non c'\u00e8 null'altro oltre all'esempio, \u00e8 probabile che lo studente non padroneggi l'argomento.<\/p>\n<h4>While o for?<\/h4>\n<p>\nUno dei punti controversi \u00e8 la scelta della struttura per l'esempio: while o for. Una volta, un mio amico sviluppatore pratico, senza esperienza nell'insegnamento, ha passato un'ora a convincermi che il ciclo for \u00e8 il pi\u00f9 semplice da capire. Gli argomenti si riducevano a \"\u00e8 tutto chiaro e in ordine\". Tuttavia, la causa principale delle difficolt\u00e0 per i veri principianti risiede nell'idea stessa del ciclo, e non nella sua scrittura. Se una persona non capisce quest'idea, avr\u00e0 difficolt\u00e0 con la sintassi. Una volta compresa l'idea, i problemi di formattazione del codice svaniscono.<\/p>\n<p>Nei miei materiali, l'argomento dei cicli segue il tema delle diramazioni. La somiglianza esterna di if e while permette di fare un'analogia diretta: \"quando la condizione nell'intestazione \u00e8 vera, viene eseguito il corpo\". La particolarit\u00e0 del ciclo sta nel fatto che il corpo viene eseguito molte volte.<\/p>\n<p>Il mio secondo argomento \u00e8 che while richiede meno formattazione rispetto a for. Meno formattazione significa meno errori stupidi con virgole e parentesi mancanti. I principianti non hanno ancora un'attenzione e una scrupolosit\u00e0 tali da evitare automaticamente gli errori sintattici.<br \/>\nIl terzo argomento \u00e8 che in molti buoni libri, while viene spiegato per primo.<\/p>\n<p>Se uno studente riesce a trasformare le espressioni facilmente, si pu\u00f2 parlare di for di passaggio. Lo studente poi sceglier\u00e0 ci\u00f2 che preferisce. Se invece le trasformazioni presentano difficolt\u00e0, \u00e8 meglio non distrarre. Lasciate che lo studente risolva tutto prima utilizzando while. Quando ha padroneggiato il tema dei cicli, pu\u00f2 riscrivere le soluzioni per esercitarsi nella trasformazione da while a for.<br \/>\nI cicli con post-condizione sono piuttosto rari. Non spendo tempo su di essi. Se uno studente ha compreso le idee di individuazione delle regolarit\u00e0 e trasformazione delle espressioni, potr\u00e0 affrontarli senza il mio aiuto.<\/p>\n<p>Durante la dimostrazione del primo esempio agli studenti pi\u00f9 forti, sottolineo che \u00e8 importante fissare non solo la soluzione, ma anche tutta la catena di azioni che ha portato al risultato. Gli studenti pigri possono trascurare la scrittura e limitarsi a riportare solo l'algoritmo finale. Bisogna convincerli che una volta si troveranno di fronte a un compito difficile. Per risolverlo, sar\u00e0 necessario seguire i passaggi proprio come in questo esempio. Ecco perch\u00e9 \u00e8 importante fissare tutte le fasi. Nei compiti successivi si potr\u00e0 lasciare solo la versione finale della soluzione.<\/p>\n<p>L'idea principale dell'automazione \u00e8 che chiediamo al computer di eseguire il lavoro rutinario al posto dell'uomo. Uno dei metodi di base \u00e8 la scrittura dei cicli. Questo viene applicato quando nel programma vengono eseguite consecutivamente pi\u00f9 azioni identiche e ripetitive.<\/p>\n<h4>Esplicito \u00e8 meglio di implicito<\/h4>\n<p>\nPotrebbe sembrare un'ottima idea nel primo compito sui cicli stampare a schermo qualche frase identica pi\u00f9 volte. Ad esempio:<\/p>\n<blockquote><p>Evviva, funziona!<br \/>\nEvviva, funziona!<br \/>\nEvviva, funziona!<br \/>\nEvviva, funziona!<br \/>\nEvviva, funziona!<br \/>\nEvviva, funziona!<br \/>\nEvviva, funziona!<br \/>\nEvviva, funziona!\n<\/p><\/blockquote>\n<p>\nQuesta opzione \u00e8 scarsa poich\u00e9 nell'output non si vede il valore del contatore. Questo \u00e8 un problema per i principianti. Non bisogna sottovalutarlo. Inizialmente questo compito era il primo, mentre il compito sullo stampare una serie di numeri in ordine crescente era il secondo. Dobbiamo introdurre ulteriori termini come \"ciclo N volte\" e \"ciclo da A a B\", che essenzialmente sono la stessa cosa. Per non creare entit\u00e0 superflue, ho deciso di mostrare solo l'esempio con l'output di una serie di numeri. Poco riescono a imparare a tener conto del contatore e a modellare il comportamento del programma nella mente senza preparazione. Alcuni studenti affrontano per la prima volta il modellamento \"nella mente\" proprio sul tema dei cicli.<br \/>\nDopo un po' di pratica, do il compito di ripetere un testo identico per soluzione autonoma. Se per prima cosa si mostra un contatore visibile e poi invisibile, gli studenti incontrano meno problemi. A volte \u00e8 sufficiente un suggerimento \"non scrivere il contatore a schermo\".<\/p>\n<h4>Come viene spiegato agli altri?<\/h4>\n<p>\nNella maggior parte dei materiali didattici disponibili su internet, la sintassi dei cicli \u00e8 presentata come parte di una \"lezione\". Ad esempio, su developer.mozilla.org (attualmente) il ciclo while \u00e8 descritto insieme ad altre costruzioni. In questo modo vengono fornite esclusivamente le stesse costruzioni sotto forma di modelli. Il risultato della loro esecuzione viene descritto a parole, ma l'illustrazione \u00e8 assente. A mio avviso, un approccio del genere azzera l'utilit\u00e0 di tali materiali. Lo studente pu\u00f2 riscrivere il codice ed eseguirlo da solo, ma \u00e8 comunque necessario avere un riferimento per il confronto. Come fare a capire se l'esempio \u00e8 stato riscritto correttamente se non c'\u00e8 nulla con cui confrontare il risultato?<br \/>\nQuando viene fornito solo il modello, senza un esempio, diventa ancora pi\u00f9 difficile per lo studente. Come capire se i frammenti di codice sono collocati correttamente nel modello? Si pu\u00f2 provare a scrivere <i>qualcosa<\/i>, e poi eseguire. Ma se non c'\u00e8 un riferimento per confrontare il risultato, anche l'esecuzione non aiuta.<\/p>\n<p>Nel corso di C++, la sintassi del ciclo \u00e8 nascosta nella terza pagina della lezione 4 sull'argomento \"operatori\". Nella spiegazione della sintassi dei cicli si pone particolare enfasi sul termine \"operatore\". Questo termine viene presentato come un insieme di fatti, ad esempio \"il simbolo; \u00e8 un operatore\", \"{} \u00e8 un operatore composto\", \"il corpo del ciclo deve essere un operatore\". Questo approccio non mi piace perch\u00e9 nasconde importanti relazioni dietro un unico termine. L'analisi del codice sorgente a livello di termini \u00e8 necessaria per i programmatori di compilatori per implementare le specifiche del linguaggio, ma non per gli studenti al primo approccio. I principianti nella programmazione raramente possiedono la scrupolosit\u00e0 necessaria per prestare attenzione ai termini in questo modo. Raramente una persona ricorda e comprende nuove parole al primo tentativo. Praticamente nessuno riesce ad applicare correttamente un termine appena appreso. Pertanto, gli studenti commettono molti errori come \"ho scritto while(a&lt;7);{, e il programma non funziona&quot;.<br \/>\nA mio avviso, inizialmente \u00e8 meglio fornire la sintassi della costruzione fin da subito con le parentesi. La variante senza parentesi andrebbe spiegata solo se allo studente sorge una domanda specifica \"perch\u00e9 qui senza parentesi e funziona\".<\/p>\n<p>Nel libro di Okulov \u00abFondamenti di programmazione\u00bb del 2012, l'introduzione ai cicli inizia con il modello for, vengono poi date raccomandazioni sul suo utilizzo e subito dopo c'\u00e8 la sezione sperimentale della lezione. Capisco che il libro sia stato scritto per quella minoranza di studenti molto capaci che raramente partecipano alle mie lezioni.<\/p>\n<p>Nei libri popolari viene sempre mostrato il risultato dei frammenti di codice. Ad esempio, nel libro di Schildt \u00abJava 8. Guida completa\u00bb del 2015, prima viene dato il modello, poi un esempio di programma e subito dopo il risultato dell'esecuzione.<\/p>\n<blockquote><p>Come esempio, consideriamo il ciclo while, in cui viene eseguito un conteggio alla rovescia<br \/>\na partire da 10, e vengono stampate esattamente 10 righe di \u00abtacche\u00bb: <\/p>\n<pre><code class=\"java\">\/\/\u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0446\u0438\u043a\u043b\u0430 while\nclass While {\n    public static void main(String args []) {\n        int n = 10;\n        while (n &gt; 0) {\n            System.out.println(&quot;\u0442\u0430\u043a\u0442 &quot; + n);\n            n--;\n        }\n    }\n}<\/code><\/pre>\n<p>\nDopo l'avvio, questo programma stampa dieci \u00abtacche\u00bb nel seguente modo:<br \/>\n<code>passo 10<br \/>\npasso 9<br \/>\npasso 8<br \/>\npasso 7<br \/>\npasso 6<br \/>\npasso 5<br \/>\npasso 4<br \/>\npasso 3<br \/>\npasso 2<br \/>\npasso 1<\/code><\/p><\/blockquote>\n<p>\nL'approccio di descrivere il modello, l'esempio di programma e il risultato dell'esecuzione viene utilizzato anche nel libro \u00abJavascript per bambini\u00bb e nel corso di js su w3schools.com. Il formato della pagina web consente persino di rendere questo esempio interattivo.<\/p>\n<p>Nel libro di Stroustrup \u00abPrincipi e pratica con C++\u00bb del 2016, l'autore \u00e8 andato ancora oltre. Prima di tutto viene spiegato quale risultato dovrebbe essere ottenuto e solo dopo si mostra il testo del programma. Inoltre, come esempio non si prende un programma casuale, ma viene fatta un'escursione nella storia. Questo aiuta a mettere in evidenza: \u00abGuarda, questo non \u00e8 solo un testo inutile. Vedi qualcosa di significativo\u00bb.<\/p>\n<blockquote><p>Come esempio di iterazione, consideriamo il primo programma realizzato su una macchina a programma memorizzato (EDSAC). Fu scritto da David Wheeler nel laboratorio informatico dell'Universit\u00e0 di Cambridge (Cambridge University, Inghilterra) il 6 maggio 1949. Questo programma calcola e stampa una semplice lista di quadrati.<br \/>\n<code>0 0<br \/>\n1 1<br \/>\n2 4<br \/>\n3 9<br \/>\n4 16<br \/>\n...<br \/>\n98 9604<br \/>\n99 9801<\/code><br \/>\nQui, in ogni riga, c'\u00e8 un numero seguito da un carattere di tabulazione ('t') e dal quadrato di quel numero. La versione di questo programma in C++ appare cos\u00ec:<\/p>\n<pre><code class=\"cpp\">\/\/\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0447\u0438\u0441\u0435\u043b 0-99\nint main()\n{\n    int i = 0; \/\/ \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043d\u0443\u043b\u044f\n    while(i &lt; 100){\n        cout &lt;&lt; i &lt;&lt; 't' &lt;&lt; square(i) &lt;&lt; 'n';\n        ++i;\n    }\n}<\/code><\/pre>\n<\/blockquote>\n<p>\nCuriosamente, il modello di sintassi in questo libro non viene descritto. Stroustrup nel manuale per l'istruttore (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/349342\/\">traduzione<\/a><\/noindex>) sottolinea che rispetta l'intelligenza dei suoi studenti. Forse la capacit\u00e0 di identificare un modello in diversi esempi \u00e8 considerata un segno di tale intelligenza.<\/p>\n<h4>Come spiego io stesso<\/h4>\n<p>\nL'approccio di Stroustrup: descrivere il risultato, poi risolvere il problema e infine analizzare autonomamente lo studente - sembra il pi\u00f9 ragionato. Quindi ho deciso di basarmi proprio su questo, ma di presentarlo con un esempio meno storico: il problema della generazione di un \"indice\". Esso crea un ancoraggio riconoscibile, cos\u00ec da poter dire \"ricorda il problema dell'indice\" e gli studenti lo ricorderanno. Nel mio esempio ho cercato di prevenire anche due dei pi\u00f9 comuni fraintendimenti. Di seguito parler\u00f2 di loro in modo pi\u00f9 dettagliato.<\/p>\n<blockquote><p>In questo compito ci familiarizziamo con le tecniche di risoluzione di problemi complessi. La soluzione iniziale deve essere primitiva e semplice. Dopodich\u00e9, possiamo pensare a come migliorare questa soluzione.<br \/>\n<code>Introduzione<br \/>\nCapitolo 1<br \/>\nCapitolo 2<br \/>\nCapitolo 3<br \/>\nCapitolo 4<br \/>\nCapitolo 5<br \/>\nCapitolo 6<br \/>\nCapitolo 7<br \/>\nConclusione<\/code><\/p><\/blockquote>\n<p>\nDalle mie osservazioni, l'approccio \"modello-esempio-risultato\" in diverse combinazioni porta comunque gli studenti a percepire il ciclo come un geroglifico. Questo si manifestava nel fatto che non capivano perch\u00e9 fosse necessario scrivere una condizione, come scegliere tra i++ e i-- e altre cose che sembrano ovvie. Per evitare questi fraintendimenti, l'approccio per descrivere i cicli dovrebbe sottolineare il significato della ripetizione delle stesse azioni e solo dopo l'aspetto formale tramite la costruzione. Pertanto, prima di fornire la sintassi del ciclo, \u00e8 necessario risolvere il problema \"in modo diretto\". Una soluzione primitiva al problema del sommario appare cos\u00ec:<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"Introduzione\");\nConsole.WriteLine(\"Capitolo 1\");\nConsole.WriteLine(\"Capitolo 2\");\nConsole.WriteLine(\"Capitolo 3\");\nConsole.WriteLine(\"Capitolo 4\");\nConsole.WriteLine(\"Capitolo 5\");\nConsole.WriteLine(\"Capitolo 6\");\nConsole.WriteLine(\"Capitolo 7\");\nConsole.WriteLine(\"Conclusione\");\n<\/code><\/pre>\n<p>\nCome pu\u00f2 essere migliorato?<br \/>\nSostituire le azioni ripetitive con un ciclo.<br \/>\nQuali azioni qui si ripetono consecutivamente senza variazioni?<br \/>\nIn questo frammento non ce ne sono. Tuttavia, i comandi per l'output della parola \"Capitolo\" con il numero sono molto simili tra loro.<br \/>\nPertanto, il passo successivo \u00e8 cercare la differenza tra i frammenti. Questo \u00e8 ovvio solo in questo compito, in seguito le ripetizioni non saranno singoli comandi, ma blocchi di codice di 5 righe o pi\u00f9. Dovremo cercare non solo nell'elenco dei comandi, ma anche nelle costruzioni di ramificazione o ciclo.<br \/>\nNell'esempio, la differenza tra i comandi \u00e8 nel numero dopo la parola \"Capitolo\".<br \/>\nNon appena viene trovata la differenza, \u00e8 necessario comprendere la regolarit\u00e0 della variazione. Il frammento diverso \u00e8 un numero? Incrementa o diminuisce costantemente? Come cambia il valore del numero tra due comandi vicini?<br \/>\nNell'esempio, il numero dopo la parola \u00abCapitolo\u00bb aumenta di 1. La differenza \u00e8 stata trovata, la regolarit\u00e0 \u00e8 stata identificata. Ora possiamo sostituire il frammento variabile con una variabile.<br \/>\n\u00c8 necessario dichiarare tale variabile prima del primo dei frammenti ripetuti. Questa variabile viene di solito chiamata I o j o con un nome pi\u00f9 esteso. Il suo valore iniziale deve essere uguale al primo valore visualizzato a schermo. Nell'esempio, il primo valore \u00e8 1. <br \/>\nQuale valore iniziale deve essere preso per visualizzare la serie di numeri \u00ab100, 101, 102, 103, 104, 105\u00bb?<br \/>\nIn questa serie, il primo numero \u00e8 100.<br \/>\nDopo ogni comando di output, \u00e8 necessario aumentare il valore di questa variabile di 1. Questo valore \u00e8 il passo di cambiamento.<br \/>\nQuale passo avr\u00e0 la serie di numeri \u00ab100, 102, 104, 106\u00bb?<br \/>\nIn questa serie, il passo \u00e8 2.<br \/>\nDopo aver sostituito il frammento variabile, il codice apparir\u00e0 cos\u00ec:<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"Introduzione\");\nint i;\ni = 0;\nConsole.WriteLine(\"Capitolo \" + i);\ni = i + 1;\nConsole.WriteLine(\"Capitolo \" + i);\ni = i + 1;\nConsole.WriteLine(\"Capitolo \" + i);\ni = i + 1;\nConsole.WriteLine(\"Capitolo \" + i);\ni = i + 1;\nConsole.WriteLine(\"Capitolo \" + i);\ni = i + 1;\nConsole.WriteLine(\"Capitolo \" + i);\ni = i + 1;\nConsole.WriteLine(\"Capitolo \" + i);\ni = i + 1;\nConsole.WriteLine(\"Conclusione\");\n<\/code><\/pre>\n<p>\nDopo l'applicazione della tecnica \u00abesprimere la regolarit\u00e0 come variabile\u00bb, il codice contiene diversi gruppi di azioni identiche che vengono eseguite in sequenza. Ora le azioni ripetitive possono essere sostituite con un ciclo.<\/p>\n<p>La sequenza per risolvere un problema in cui \u00e8 necessario utilizzare cicli consiste in fasi:<\/p>\n<ol>\n<li>Risolvere \u00aballa lettera\u00bb con una serie di comandi singoli<\/li>\n<li>Trovare la regolarit\u00e0<\/li>\n<li>Espressione della regolarit\u00e0 come variabile<\/li>\n<li>Formulare sotto forma di ciclo<\/li>\n<\/ol>\n<p>In seguito vengono introdotti nuovi termini, affinch\u00e9 lo studente non si trovi nella situazione di \u00abcapire tutto, ma non sapere come esprimersi\u00bb:<br \/>\n \u2014 contatore \u2014 \u00e8 sempre una variabile necessaria per monitorare il numero di passaggi del ciclo. Di solito \u00e8 un numero intero che viene confrontato con un limite.<br \/>\n \u2014 passo del contatore \u2014 descrive la regolarit\u00e0 nella modifica del contatore.<br \/>\n \u2014 limite \u2014 numero o variabile con cui il contatore viene confrontato, affinch\u00e9 l'algoritmo sia finito. Il valore del contatore cambia in modo da avvicinarsi al limite.<br \/>\n \u2014 corpo del ciclo \u2014 insieme di comandi che verranno ripetuti. Quando si dice \u00abil comando scritto all'interno del ciclo\u00bb, si riferisce proprio al corpo.<br \/>\n \u2014 iterazione del ciclo \u2014 esecuzione singola del corpo del ciclo.<br \/>\n \u2014 condizione del ciclo \u2014 espressione logica dalla quale dipende se verr\u00e0 eseguita un'altra iterazione. (Qui pu\u00f2 esserci confusione con le strutture di ramificazione)<br \/>\nBisogna essere pronti al fatto che inizialmente gli studenti utilizzeranno i termini in modo improprio. Questo vale sia per i pi\u00f9 forti che per i pi\u00f9 deboli. Stabilire un linguaggio comune \u00e8 tutta un'arte. Adesso dir\u00f2 brevemente: bisogna porre il compito \"individua il frammento di codice con \" e usare correttamente questi termini nella conversazione.<br \/>\nDopo la trasformazione con il ciclo otteniamo il frammento:<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"Introduzione\");\nint i = 0;\nwhile (i &lt; 7) {\n    Console.WriteLine(&quot;Capitolo &quot; + i);\n    i = i + 1;\n}\nConsole.WriteLine(&quot;Conclusione&quot;);<\/code><\/pre>\n<h4>La principale illusione<\/h4>\n<p>\nUna credenza errata comune tra gli studenti \u00e8 che inseriscono all'interno della struttura del ciclo azioni che devono essere eseguite solo una volta. Ad esempio in questo modo:<\/p>\n<pre><code class=\"cs\">;\nint i = 0;\nwhile (i &lt; 7) {\n    Console.WriteLine(&quot;Introduzione&quot;)\n    Console.WriteLine(&quot;Capitolo &quot; + i);\n    i = i + 1;\n    Console.WriteLine(&quot;Conclusione&quot;);\n}\n<\/code><\/pre>\n<p>\nGli studenti si imbattono costantemente in questo problema, sia all'inizio che in compiti pi\u00f9 complessi.<br \/>\nSuggerimento chiave in questo caso:<\/p>\n<blockquote><p>Quante volte \u00e8 necessario ripetere il comando: una volta o molte?\n<\/p><\/blockquote>\n<p>\nI comandi per stampare le parole \"Introduzione\" e \"Conclusione\", cos\u00ec come la dichiarazione e l'inizializzazione della variabile i, non assomigliano ad altre azioni ripetitive. Vengono eseguiti solo una volta, quindi devono essere scritti al di fuori del corpo del ciclo.<\/p>\n<p>Nel codice devono rimanere tutte e tre le fasi della soluzione, in modo da poter fare riferimento ad esse in caso di difficolt\u00e0. I primi due esempi possono essere semplicemente commentati, in modo che non diano fastidio.<br \/>\nL'attenzione dello studente deve essere rivolta ai seguenti fatti:<br \/>\n \u2014 Nella condizione del ciclo di solito si confrontano il contatore e il limite. Il contatore pu\u00f2 cambiare all'interno del corpo del ciclo, mentre il limite no. Per violare questa regola, \u00e8 necessario formulare delle ragioni valide.<br \/>\n \u2014 I comandi per stampare le parole \"Introduzione\" e \"Conclusione\" si trovano al di fuori del corpo del ciclo. Dobbiamo eseguirli una sola volta. \"Introduzione\" \u2014 prima di ripetere le azioni, \"Conclusione\" \u2014 dopo.<br \/>\nNel processo di consolidamento di questo tema, nell'apprendimento dei successivi e nella risoluzione delle difficolt\u00e0, \u00e8 utile porre anche agli studenti pi\u00f9 forti la domanda: \"E quest'azione quanto spesso deve essere eseguita? Una volta o molte?\".<\/p>\n<h4>Sviluppo di competenze aggiuntive<\/h4>\n<p>\nDurante lo studio dei cicli, gli studenti migliorano anche le loro capacit\u00e0 di diagnosi e risoluzione dei problemi. Per effettuare una diagnosi, lo studente deve presentare il risultato desiderato e confrontarlo con il risultato effettivo. Le azioni correttive dipendono dalla differenza tra i due.<br \/>\nPoich\u00e9 gli studenti in questa fase hanno ancora una scarsa comprensione del risultato \u00abdesiderato\u00bb, possono fare riferimento ai dati di test. Di solito, in questa fase nessuno comprende effettivamente cosa possa andare storto e come affrontarlo. Pertanto, fornisco una descrizione delle problematiche tipiche e alcuni modi per risolverle da annotare nel taccuino. La scelta del pi\u00f9 adatto \u00e8 un compito dello studente.<br \/>\nLa registrazione \u00e8 necessaria per chiedere \u00ab\u00e8 successo ci\u00f2 che ci si aspettava?\u00bb, \u00abQuale di queste situazioni si \u00e8 realizzata ora?\u00bb, \u00abLa soluzione applicata ha aiutato?\u00bb.<\/p>\n<ol>\n<li>Il numero di azioni \u00e8 1 in meno o pi\u00f9 di quanto atteso. Modi di risoluzione:<br \/>\n \u2014 aumentare il valore iniziale del contatore di 1.<br \/>\n \u2014 sostituire l'operatore di confronto rigido (&lt; o &gt;) con uno non rigido (&lt;= o &gt;=).<br \/>\n \u2014 modificare il valore del limite di 1.<\/li>\n<li>Le azioni nel ciclo vengono eseguite senza fermarsi, all'infinito. Modi di risoluzione:<br \/>\n \u2014 aggiungere il comando di modifica del contatore, se \u00e8 assente.<br \/>\n \u2014 correggere il comando di modifica del contatore in modo che il suo valore si avvicini al limite.<br \/>\n \u2014 rimuovere il comando di modifica del limite, se \u00e8 nel corpo del ciclo.<\/li>\n<li>Il numero di azioni nel ciclo \u00e8 pi\u00f9 di 1 in meno o pi\u00f9 di quanto previsto. L'azione nel ciclo non \u00e8 stata eseguita neanche una volta. Prima bisogna determinare i valori effettivi delle variabili immediatamente prima dell'inizio del ciclo. Modi di risoluzione:<br \/>\n \u2014 modificare il valore iniziale del limite<br \/>\n \u2014 modificare il valore iniziale del contatore<\/li>\n<\/ol>\n<p>\nDi solito, il problema 3 \u00e8 legato all'uso della variabile sbagliata o alla mancata inizializzazione del contatore.<\/p>\n<p>Dopo questa spiegazione, lo studente pu\u00f2 ancora avere diverse idee sbagliate sul funzionamento dei cicli.<br \/>\nPer dissipare i malintesi pi\u00f9 comuni, propongo esercizi:<\/p>\n<ol>\n<li>In cui il limite, il valore iniziale del contatore o il passo del contatore vengono inseriti dall'utente.<\/li>\n<li>In cui il valore del contatore deve essere utilizzato in un'espressione aritmetica. \u00c8 preferibile che il contatore sia in un'espressione sotto-radicale o nel denominatore, affinch\u00e9 la differenza sia non lineare.<\/li>\n<li>In cui il valore del contatore non viene visualizzato sullo schermo durante l'esecuzione del ciclo. Ad esempio, per visualizzare un numero specifico di frasi di testo identiche o disegnare una figura utilizzando la grafica tartaruga.<\/li>\n<li>In cui \u00e8 necessario eseguire prima alcune azioni ripetitive e poi altre.<\/li>\n<li>In cui \u00e8 necessario eseguire altre azioni prima e dopo le azioni ripetitive.<\/li>\n<\/ol>\n<p>\nPer ogni compito bisogna fornire dati di test e il risultato atteso.<\/p>\n<p>Per capire quanto velocemente si pu\u00f2 procedere, \u00e8 necessario far leggere le condizioni di questi compiti e chiedere: \u00abin cosa differiscono dall'esempio?\u00bb, \u00abcosa bisogna cambiare nell'esempio per risolverli?\u00bb. Se lo studente risponde in modo riflessivo, allora dovrebbe risolvere almeno uno durante la lezione e gli altri a casa da solo. Se la soluzione \u00e8 corretta, si pu\u00f2 iniziare a spiegare le condizioni all'interno dei cicli.<br \/>\nSe ci sono difficolt\u00e0 nella risoluzione autonoma, \u00e8 necessario lavorare su tutto in aula. Per evitare che la soluzione del compito somigli al disegno di un gufo, consiglio di risolvere il compito in modo non universale all'inizio. Cio\u00e8, in modo che la soluzione superi il primo test e non utilizzi la struttura del ciclo. Solo dopo applicare trasformazioni per ottenere l'universalit\u00e0 della soluzione.<\/p>\n<h4>Cicli e ramificazioni<\/h4>\n<p>\nA mio avviso, \u00e8 utile trattare il tema \u00abcicli all'interno delle ramificazioni\u00bb separatamente. In questo modo, sar\u00e0 chiaro il differente tra il controllo condizionale ripetuto e quello singolo.<br \/>\nI compiti per il consolidamento riguarderanno l'output dei numeri da A a B, che vengono inseriti dall'utente:<br \/>\n \u2014 sempre in ordine crescente.<br \/>\n \u2014 in ordine crescente o decrescente a seconda dei valori di A e B.<\/p>\n<p>Il tema \"diramazione all'interno dei cicli\" deve essere affrontato solo dopo che lo studente ha padroneggiato le tecniche: \"sostituzione della regolarit\u00e0 con una variabile\" e \"sostituzione delle azioni ripetute con un ciclo\".<br \/>\nLa principale motivazione per l'applicazione delle ramificazioni all'interno dei cicli sono le anomalie nella regolarit\u00e0. A met\u00e0 essa viene interrotta a seconda dei dati di partenza.<br \/>\nAgli studenti capaci di cercare soluzioni combinando semplici tecniche, basta dire \u00able ramificazioni possono essere scritte all'interno dei cicli\u00bb e dare un compito \u00abper esempio\u00bb da risolvere completamente in modo autonomo.<br \/>\nCompito per esempio:<\/p>\n<blockquote><p>L'utente inserisce un numero X. Stampare in colonna i numeri da 0 a 9 e mettere il segno '+' accanto al numero che \u00e8 uguale a X.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">Se \u00e8 stato inserito 0<\/b>0+<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">Se \u00e8 stato inserito 6<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6+<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">Se \u00e8 stato inserito 9<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9+<\/p>\n<p><b class=\"spoiler_title\">Se \u00e8 stato inserito 777<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p>Se manca una spiegazione breve per scrivere con il ciclo, allora bisogna trovare una soluzione universale per lo stesso problema senza ciclo.<br \/>\nNe risulteranno due opzioni:<br \/>\n<b class=\"spoiler_title\">Desiderato<\/b><\/p>\n<pre><code class=\"cs\">string temp;\ntemp = Console.ReadLine();\nint x;\nx = int.Parse(temp);\nif (x==0) {\n    Console.WriteLine(0 + \"+\");\n} else {\n    Console.WriteLine(0);\n}\nif (x==1) {\n    Console.WriteLine(1 + \"+\");\n} else {\n    Console.WriteLine(1);\n}\nif (x==2) {\n    Console.WriteLine(2 + \"+\");\n} else {\n    Console.WriteLine(2);\n}\nif (x==3) {\n    Console.WriteLine(3 + \"+\");\n} else {\n    Console.WriteLine(3);\n}\nif (x==4) {\n    Console.WriteLine(4 + \"+\");\n} else {\n    Console.WriteLine(4);\n}\nif (x==5) {\n    Console.WriteLine(5 + \"+\");\n} else {\n    Console.WriteLine(5);\n}\nif (x==6) {\n    Console.WriteLine(6 + \"+\");\n} else {\n    Console.WriteLine(6);\n}\nif (x==7) {\n    Console.WriteLine(7 + \"+\");\n} else {\n    Console.WriteLine(7);\n}\nif (x==8) {\n    Console.WriteLine(8 + \"+\");\n} else {\n    Console.WriteLine(8);\n}\nif (x==9) {\n    Console.WriteLine(9 + \"+\");\n} else {\n    Console.WriteLine(9);\n}\n<\/code><\/pre>\n<p><b class=\"spoiler_title\">Possibile<\/b><\/p>\n<pre><code class=\"cs\">string temp;\ntemp = Console.ReadLine();\nint x;\nx = int.Parse(temp);\nif (x==0) {\n    Console.WriteLine(\"0+n1n2n3n4n5n6n7n8n9\");\n}\nif (x==1) {\n    Console.WriteLine(\"0n1+n2n3n4n5n6n7n8n9\");\n}\nif (x==2) {\n    Console.WriteLine(\"0n1n2+n3n4n5n6n7n8n9\");\n}\nif (x==3) {\n    Console.WriteLine(\"0n1n2n3+n4n5n6n7n8n9\");\n}\nif (x==4) {\n    Console.WriteLine(\"0n1n2n3n4+n5n6n7n8n9\");\n}\nif (x==5) {\n    Console.WriteLine(\"0n1n2n3n4n5+n6n7n8n9\");\n}\nif (x==6) {\n    Console.WriteLine(\"0n1n2n3n4n5n6+n7n8n9\");\n}\nif (x==7) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7+n8n9\");\n}\nif (x==8) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7n8+n9\");\n}\nif (x==9) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7n8n9+\");\n}\n<\/code><\/pre>\n<p>Assegno in anticipo un compito simile durante lo studio del tema sui rami.<br \/>\nSe lo studente ha ottenuto un'opzione \"possibile\", bisogna spiegare che una stessa problematica pu\u00f2 avere molteplici soluzioni. Tuttavia, queste differiscono per stabilit\u00e0 rispetto ai cambiamenti dei requisiti. Fai la domanda: \"Quanti punti nel codice dovranno essere corretti se sar\u00e0 necessario aggiungere un altro numero?\" Nell'opzione \"possibile\" bisognerebbe aggiungere un altro ramo e scrivere il nuovo numero in 10 altri posti. Nell'opzione \"desiderata\" \u00e8 sufficiente aggiungere solo un ramo.<br \/>\nFormula il compito di riprodurre l'opzione \"desiderata\", poi trova nel codice la regolarit\u00e0, esegui la sostituzione della variabile e scrivi un ciclo.<br \/>\nSe hai un'idea su come risolvere questo compito senza ciclo in un altro modo, per favore scrivilo nei commenti.<\/p>\n<h4>Cicli all'interno di cicli<\/h4>\n<p>\nIn questo tema bisogna prestare attenzione a:<br \/>\n \u2014 i contatori per il ciclo interno e quello esterno devono essere variabili diverse.<br \/>\n \u2014 il contatore per il ciclo interno deve essere azzerato molte volte (cio\u00e8 all'interno del corpo del ciclo esterno).<br \/>\n Nei problemi di output del testo, non \u00e8 possibile scrivere prima una lettera su pi\u00f9 righe e poi un\u2019altra. Bisogna prima stampare tutte le lettere della prima riga, poi tutte le lettere della seconda e cos\u00ec via.<\/p>\n<p>La spiegazione del tema sui cicli all'interno dei cicli \u00e8 meglio iniziare con l'importanza di azzerare il contatore.<br \/>\nCompito per esempio:<\/p>\n<blockquote><p>L'utente inserisce due numeri: R e T. Stampare due righe di caratteri \"#\". Nella prima riga devono esserci R caratteri. Nella seconda riga T caratteri. Se uno dei numeri \u00e8 negativo, stampare un messaggio di errore.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">R=5, T=11<\/b>#####<br \/>\n###########<\/p>\n<p><b class=\"spoiler_title\">R=20, T=3<\/b>####################<br \/>\n###<\/p>\n<p><b class=\"spoiler_title\">R=-1, T=6<\/b>Il valore di R deve essere non negativo<\/p>\n<p><b class=\"spoiler_title\">R=6, T=-2<\/b>Il valore di T deve essere non negativo<\/p>\n<p>\u00c8 evidente che anche questo problema ha almeno due varianti di soluzione.<br \/>\n<b class=\"spoiler_title\">Desiderato<\/b><\/p>\n<pre><code class=\"cs\">string temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nint i = 0;\nwhile (i &lt; R)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\nConsole.WriteLine();\ni = 0;\nwhile (i &lt; T)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\n<\/code><\/pre>\n<p><b class=\"spoiler_title\">Possibile \u21161<\/b><\/p>\n<pre><code class=\"cs\">string temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nint i = 0;\nwhile (i &lt; R)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\nConsole.WriteLine();\nint j = 0;\nj = 0;\nwhile (j &lt; T)\n{\n    Console.Write(&quot;#&quot;);\n    j = j + 1;\n}\n<\/code><\/pre>\n<p>La differenza \u00e8 che nella soluzione \"possibile\" per stampare la seconda riga \u00e8 stata utilizzata una seconda variabile. Bisogna insistere sull\u2019uso della stessa variabile per entrambi i cicli. \u00c8 possibile argomentare questa limitazione dicendo che una soluzione con un solo contatore per due cicli sar\u00e0 un'illustrazione del termine \"azzeramento del contatore\". Comprendere questo termine \u00e8 importante per risolvere i problemi successivi. Come compromesso, si possono mantenere entrambe le soluzioni al problema.<\/p>\n<p>Un problema tipico nell'uso di una variabile contatore per due cicli si manifesta in questo modo:<br \/>\n<b class=\"spoiler_title\">R=5, T=11<\/b>#####<br \/>\n######<\/p>\n<p>Il numero di simboli nella seconda riga non corrisponde al valore di T. Se hai bisogno di aiuto con questo problema, devi \"mostrare\" il riassunto sui problemi tipici con i cicli. Questo \u00e8 il sintomo \u21163. Si diagnostica se si aggiunge l'output del valore del contatore direttamente prima del secondo ciclo. Si corregge azzerando. Ma \u00e8 meglio non dirlo subito. Lo studente dovrebbe cercare di formulare almeno un'ipotesi.<\/p>\n<p>C'\u00e8, ovviamente, anche un'altra variante di soluzione. Ma non l'ho mai vista dagli studenti. Nella fase di apprendimento dei cicli, parlare di essa distrae l'attenzione. Possiamo tornarci pi\u00f9 tardi, durante lo studio delle funzioni per la manipolazione delle stringhe.<br \/>\n<b class=\"spoiler_title\">Possibile \u21162<\/b><\/p>\n<pre><code class=\"cs\">string temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nConsole.WriteLine(new String('#', R));\nConsole.WriteLine(new String('#', T));\n<\/code><\/pre>\n<p>\nIl prossimo compito obbligatorio:<\/p>\n<blockquote><p>Visualizza sullo schermo i numeri da 0 a 9. Ogni numero deve essere su una linea separata. Il numero di cifre in ogni riga (W) viene inserito da tastiera.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">W=1<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">W=10<\/b><code>0000000000<br \/>\n1111111111<br \/>\n2222222222<br \/>\n3333333333<br \/>\n4444444444<br \/>\n5555555555<br \/>\n6666666666<br \/>\n7777777777<br \/>\n8888888888<br \/>\n9999999999<\/code><\/p>\n<p>Se lo studente ha acquisito la tecnica della sostituzione delle variabili, proceder\u00e0 abbastanza rapidamente. Il problema potrebbe risiedere nuovamente nella azzeramento della variabile. Se non riesce a eseguire la conversione, significa che ti sei affrettato e devi affrontare compiti pi\u00f9 semplici.<\/p>\n<p>Grazie per l'attenzione. Metti mi piace, iscriviti al canale.<\/p>\n<p>P.S. Se hai trovato refusi o errori nel testo, ti prego di farmelo sapere. Puoi farlo evidenziando una parte del testo e premendo su Mac \u00ab\u2318 + Enter\u00bb, e su tastiere classiche \u00abCtrl \/ Enter\u00bb, oppure tramite messaggi privati. Se queste opzioni non sono disponibili, scrivi di eventuali errori nei commenti. Grazie!<\/p>\n<p class=\"for_users_only_msg\">Solo gli utenti registrati possono partecipare al sondaggio. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Accedi<\/a><\/noindex>, per favore.<\/p>\n<h2 class=\"default-block__polling-title\">Sondaggio per lettori senza karma<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>Insegno professionalmente, +12<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>Insegno professionalmente, -11<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">70,0%<\/strong>Non insegno, +17<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>Non insegno, -10<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>Altro0<\/p>\n<\/li>\n<\/ul>\n<p>    Hanno votato 10 utenti. Si sono astenuti 5 utenti.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/456500\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u0414\u043b\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u044b, \u043f\u043e\u0437\u0430\u0431\u044b\u0442\u044b \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u044b. \u0421\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-40208","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-01T03:04:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-01T03:04:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Come insegnare a superare le difficolt\u00e0 e allo stesso tempo scrivere cicli | ProHoster","description":"Nonostante si tratti di uno dei temi fondamentali, questo articolo \u00e8 scritto per specialisti esperti. L'obiettivo \u00e8 mostrare quali sono le malintesi comuni tra i principianti nella programmazione.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b | ProHoster","og:description":"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/it\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-01T03:04:35+00:00","article:modified_time":"2020-02-01T03:04:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"40208","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:43:24","updated":"2022-09-29 01:18:32","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/40208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=40208"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/40208\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=40208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=40208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=40208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}