Difference between revisions of "Clasa a V-a lecția 1 - 13 sep 2019"

From Algopedia
Jump to: navigation, search
(Lecție)
(Tema)
Line 281: Line 281:
 
[[Image:puzzle-numere-poligoane.gif|frame|none|Cu ce se înlocuiește semnul întrebării?]]
 
[[Image:puzzle-numere-poligoane.gif|frame|none|Cu ce se înlocuiește semnul întrebării?]]
 
* Puzzle: vine fluxul. Apa urcă trei sferturi de metru la fiecare sfert de oră. Vaporul are 3 metri jumate de la apă pînă sus la buză. În cît timp se va revărsa apa în vapor?
 
* Puzzle: vine fluxul. Apa urcă trei sferturi de metru la fiecare sfert de oră. Vaporul are 3 metri jumate de la apă pînă sus la buză. În cît timp se va revărsa apa în vapor?
 +
 +
Rezolvări aici [http://solpedia.francu.com/wiki/index.php/Clasa_a_V-a_lec%C8%9Bia_1_-_13_sep_2019]

Revision as of 11:17, 13 September 2019

Introducere

Prezentarea instructorilor

Numele meu este Mihai Tuțu și vă voi ghida în acest an în cadrul cercului de informatică IQ Academy. Contacte:

  • email Mihai: mihaitutu7@gmail.com
  • telefon Mihai

Mihai Tuțu

  • Un pasionat de tehnologie, programare și gaming. Mai ales gaming :).
  • Colegiul Național „Mihai Viteazul” București, clasă de intensiv engleză.
  • Facultatea de Construcții Civile, Industriale și Agricole, UTCB și Facultatea de Informatică, Universitatea București și Universitatea „Titu Maiorescu”.
  • Activist în cadrul Fundației Leaders, unde am ajutat peste 3000 de tineri în cadrul programelor educaționale, în calitate de instructor, 2013 - 2016.
  • Programator web și desktop în cadrul mai multor companii, 2016 - 2018.
  • Profesor de robotică cu multiple participări la concursuri internaționale.

Prezentarea cercului de informatică

La acest cerc vom face informatică la cel mai înalt nivel. Vom include cunoștințele de olimpiadă, dar nu ne vom rezuma la ele. Nu vom învăța materie în avans înainte de a stăpîni bine materia din urmă. Cu alte cuvinte nu vom face dopaj de dragul olimpiadei. Toate lecțiile predate vor fi disponibile electronic, ca pagini web. Locul unde găsiți rezumatul lecțiilor trecute, precum și temele este algopedia.ro. În acest fel vom avea transparență. Toată lumea, inclusiv părinții, vor ști ce facem noi aici. De asemenea vă ușurează vouă munca, nemaifiind obligați să notați totul în timpul orelor de cerc.

Studiați informatică în cadrul orelor de la școală. Dacă veniţi la acest cerc înseamnă că vreţi să studiaţi mai mult, dincolo de olimpiadă: informatică la cel mai înalt nivel posibil la vârsta voastră. Aceasta înseamnă un efort deosebit de mare. Nu oricine poate acest lucru. S-ar putea să fiţi nevoiţi să faceţi sacrificii pentru a putea face faţă, cum ar fi să renunţaţi la orele de pian, engleză, înot sau baschet. Dacă vă aşteptaţi că acest cerc este doar una din activităţile voastre de autodezvoltare veţi avea surpriza că vă înşelaţi. Pe scurt: sunteţi la o instituție de vârf, la cercul de informatică (peste nivelul orelor de clasă), unde predă un profesor de vârf. Aştept totul de la voi, altfel nu veţi reuşi să ţineţi pasul.

Scopul cercului de informatică

Informatica ca știință este foarte la început, la nivelul la care erau matematica și fizica în evul mediu. În informatică încă așteptăm un Newton care să o structureze și să o închege. Pentru ca aceasta să se întâmple, ea ar trebui predată din clasa a doua, imediat ce copiii învață primele noțiuni de matematică. Mintea copilului trebuie abstractizată pentru a învăța bine informatică (precum spunea și Moisil), ceea ce este bine să facem cât mai de mici.

Chiar și atunci când informatica este predată în școli, în clasele 5-8, ea are tendința de a fi predată dezlânat, haotic, de multe ori punând accentul pe utilizarea calculatorului și nu pe programare. Atunci când se predă programare, de multe ori se pune accentul pe limbaj și mai puțin pe algoritmi. Este ca și cum i-am explica unui copil în detaliu ce conține un microscop, lentile, măsuța microscopului, carcasa metalică, etc, iar apoi i l-am da copilului să-l folosească. N-ar trebui să rămînem surprinși dacă elevul va bate cuie cu el; pentru că nu l-am învățat să răzuiască un strat subțire de celule, să-l așeze pe lamelă, să adauge colorant, apoi să se uite prin lentile și să rotească pînă ce imaginea se clarifică.

Scopul acestui cerc este formarea unor minți algoritmice, cu putere de abstractizare. Olimpiada și alte concursuri sunt un corolar, nu un scop, dar sunt evaluatoare necesare, deci le vom acorda o atenție deosebită. La fel și limbajul C, el nu este un scop, ci un corolar. Scopul principal sunt algoritmii, iar limbajul C este modul în care îi putem implementa și testa.

Conduită

Elevul care vine la acest cerc este cel care a epuizat materia de la clasă și vrea să învețe mai mult. Pun accentul pe cuvântul vrea. Există în București școli foarte bune la care pregătirea la orele de informatică este pe măsură de bună. Nu aveți nevoie să veniți la acest cerc pentru a învăța informatică. Veniți aici pentru aprofundare și pentru lucruri în plus. Dacă nu vă doriți acest lucru nu are rost să veniți, veți pierde timpul, pe al vostru, pe al colegilor voștri și pe al meu. Iată o listă incompletă de motive incorecte de a veni la cerc:

  • Ne predă unul tare de la Google. Credeți că ăla tare de la Google a venit să-și piardă vremea cu cei care nu vor să învețe ci să obțină autografe?
  • M-a pus mama/tata/fratele/sora. Nu cred că este așa. Nu vă obligă nimeni. Familia vă dorește binele și vă arată cercul nostru, dar nu vă și obligă. În acest caz le puteți spune nu, dacă nu doriți cercul.
  • Mulți colegi de clasă sunt la cerc. Și mai mulți colegi nu sunt la cerc, nu este un motiv.
  • Colega pe care o iubesc în secret merge la acest cerc. Un motiv aproape valid. Dar foarte distructiv, invitați-o vă rog în parc, sau la cofetărie la un suc, sau să-i arătați ultima aplicație de Android.

Ce mă aștept de la cei care veniți la acest cerc:

  • Prezență. Nu suntem institutul de învățare la distanță. La vîrsta voastră este important să fiți prezenți la cerc. Este în regulă dacă din forță majoră nu veniți o dată la zece lecții. Nu este în regulă dacă din forță majoră veniți una din doua lecții.
  • Seriozitate. Tratați cercul cu seriozitate. Faceți-vă temele chiar dacă nu voi apuca mereu să le corectez. Nu lipsiți nemotivat.
  • Dorința de a învăța. Vreau să aveți o atitudine pozitivă, la modul "pot și vreau să fac asta". Nu vreau să aud oftaturi ci vreau să văd sclipiri de bucurie în ochi. Dacă la cerc intrați cu un oftat, poate că nu aici vă este locul. Nu uitați, cercul este absolut opțional și facultativ. Ideal, aș vrea ca elevul de la cerc să dea dovadă de o anume exaltare și curiozitate, să încerce să facă și alte lucruri decât cer eu, în plus față de ceea ce cer eu.
  • Spirit analitic. Treceți întotdeauna prin filtrul minții voastre ceea ce spun. Uneori voi greși, încercați să vă dați seama că am greșit. Uneori voi greși intenționat, pentru verificare, alteori voi greși genuin. În ambele cazuri exprimați-vă, atrageți-mi atenția.

Despre situația clasei a cincea

În trecut informatica a fost materie opțională la gimnaziu. Puține școli o predau, fiecare avînd programa proprie. Olimpiada de informatică are o programă scrisă, inutilă, deoarece menționează generalități. Profesorii ce făceau pregătire pentru olimpiadă trebuiau să își formeze propria programă bazată pe istoricul problemelor date la concurs. Acest lucru l-am făcut și eu.

De câțiva ani, informatica a devenit obligatorie în toate școlile la clasa a Va. Avem, deci, o programă unitară. Acesta este un lucru bun, deoarece mai mulți elevi vor învăța această materie. Dar, ca orice început, există și probleme: timpul alocat este de o oră pe săptămînă, iar jumate din el este alocat pentru TIC, ceea ce duce la o jumate de oră de informatică pe săptămînă, timp prea scurt pentru a acoperi programa de olimpiadă. În consecință, programa de școală este mult sub nivelul programei olimpiadei.

Nivelul acestui cerc va fi același ca la cercul pe care l-am susținut la Vianu, adică undeva peste nivelul olimpiadei de anul trecut, întrucât noi creăm informaticieni, nu olimpici. În caz că programa de olimpiadă se modifică veți fi supracalificați și, poate, o idee dezavantajați, deoarece programa școlară nu include limbajul C, ci Scratch, un limbaj vizual dezvoltat la MIT, despre care înșiși creatorii spun că este recomandat la opt ani. Oare aceasta este vârsta elevilor de clasa a cincea?

De ce începem în ritm accelerat?

La clasa a cincea pornim de la zero; în cîţeva luni trebuie să învăţăm ce este acela un calculator, algoritmi, scheme logice, limbajul C. Este o cantitate mare de informaţie şi un salt calitativ mare. Acesta este un motiv.

Al doilea motiv este că programa de olimpiadă de clasa a cincea, cea veche, este cea mai încărcată programă din anii de gimnaziu. Este, probabil, dublă ca nivel de cunoştinţe acumulate faţă de oricare din celelalte clase. Nu ştiu motivul pentru care comisia de olimpiadă insistă să dea probleme foarte grele la clasa a cincea. Poate că mottoul lor este "hai să depășim clasa a 6a la greutatea problemelor". Aceasta ar explica faptul că în 2014 la clasa a 5a s-a dat problema iepurași, problemă NP-hard, de cercetare mondială, pentru care omenirea nu cunoaște o rezolvare bună.

Dacă aş putea, aş preda această materie în ritm mai lent, lăsînd o parte pentru clasa a 6a. Aceasta ar însemna rezultate mai slabe la olimpiadă. Din nefericire atât profesorii cât şi părinţii îşi doresc foarte mult aceste rezultate, aşa încât sunt pus în situaţia să aleg: fie predau în ritmul infernal impus de olimpiadă şi unii elevi vor fi nefericiţi, fie predau mai lent, dar risc să fiu perceput ca un instructor slab, fără rezultate la olimpiadă, ceea ce ar însemna implicit că anul următor nu aş mai avea elevi dornici să vină la acest curs.

Al treilea motiv pentru care începem atât de repede este unul organizatoric: nu pot lucra cu 60 de elevi. O soluţie ar fi ca la începutul anului să dau un test. Deoarece majoritatea elevilor nu ştiu încă informatică, testul ar trebui să fie la matematică. Nu am fost de acord cu această soluţie deoarece mi se pare incorectă. Am preferat să predau patru lecţii cu toţi elevii doritori şi apoi să dau un test bazat pe materia predată. Este o soluţie imperfectă, dar cea mai bună pe care am găsit-o.

Eventualii nemulţumiţi de această soluţie aş vrea să ţineţi cont de faptul că aceste patru lecţii reprezintă un efort uriaş. Voi corecta 50-60 de teme de două ori pe săptămînă şi le voi returna elevilor spre învăţare.

Test de selecție

Deoarece numărul elevilor doritori să participe la cerc este mare vom da un test de selecție, în urma căruia vom forma două grupe a câte 15 elevi. Formăm două grupe deoarece unii elevi învață dimineața, iar alții după amiază.

La acest nivel de performanţă îmi este imposibil să lucrez cu 40 de elevi. În fapt, numărul ideal este de 8-10 elevi. O grupă de 15 elevi reprezintă un efort foarte mare din partea mea, pe care îl fac pentru voi, copiii.

Ce se întîmplă cu elevii care nu se vor califica la curs? După cum spuneam, voi mai forma o grupă sâmbătă dimineața pentru aceștia, în care voi face o materie mai de bază, în pregătirea materiei pentru anul următor. Regulile acestei grupe sunt aceleași, diferă doar materia de curs.

Atenție, cei ce nu dau dovadă de seriozitate nu vor putea continua, locurile lor fiind date altor elevi, ce nu au fost selecționați, dar au continuat să lucreze singuri.

Materia: ce vom învăța?

La acest cerc nu vom învăța doar informatică! O gîndire algoritmică necesită mai multe elemente: matematică, psihologie, sport, joacă, gîndire abstractă (probleme de logică). În cadrul acestui cerc voi încerca să ating toate aceste puncte.

Ca informatică vom încerca să atingem următoarele subiecte, de-a lungul a patru ani, unele mai în detaliu, altele tangențial, cu mențiunea că aceasta este doar o listă orientativă:

Nivel 1 (avansat)

  • probleme de logică (dezvoltarea gîndirii abstracte)
  • algoritmi, definiție, proprietăți
  • scheme logice, programare structurată
  • probleme cu structuri alternative
  • probleme cu structuri repetitive
  • definitii de bază: variabilă, contor, acumulator, steguleț, sentinelă
  • analiza algoritmilor (timp de execuție și memorie ocupată)
  • despre organizarea calculatorului (procesor, memorie, periferice)
  • despre limbaje (mașină, asamblare, nivel înalt)
  • limbajul C
  • algoritmi fără șiruri
  • algoritmi cu șiruri (dar fără vectori)
  • algoritmi cu vectori (tablouri unidimensionale)
  • algoritmi cu matrice (tablouri bidimensionale)
  • matematică aplicată, "cărămizi" de bază (divizibilitate, primalitate, baze de numerație)
  • aplicații ale matematicii in informatică: ecuația de gradul întîi și doi, calcule cu polinoame, calcule cu fracții, codul Gray, operații pe mulțimi, cmmdc/cmmmc, fibonacci, combinatorică
  • căutare (căutare liniară, căutare binară, KMP, căutare cu funcții hash, arbori de căutare)
  • sortare (bubble sort, select sort, merge sort, sortare cu arbori de căutare, quicksort, radix sort, heapsort)
  • baze ale geometriei analitice (sistemul cartezian, distanța euclidiană, distanța manhattan, segmente, arii)
  • elemente de grafică pe calculator
  • pregatire pentru concurs (psihologie, ce să facem și să nu facem, reguli)
  • jocuri: tip puzzle, gen cubul rubik, turnurile din hanoi, nim, etc, precum și anumite jocuri pe calculator gen sokoban, lines, etc

Nivel 2 (liceu, posibil clasa a 8a)

  • structuri de date (vectori, heaps, liste, arbori, grafuri, functii hash si tabele hash)
  • arbori (reprezentari, parcurgeri, arbori binari, arbori binari de cautare, codul lui Pruffer)
  • grafuri (reprezentari, parcurgeri, arbore minim de acoperire, distanta minima, sortare topologica, drum/ciclu eulerian, drum/ciclu hamiltonian, cuplaj)
  • recursivitate
  • tehnici de programare (greedy, divide et impera, backtracking, programare dinamica)
  • bazele compilarii (analiza lexicala, analiza sintactica, automate finite)
  • compresie (huffman, shannon-fano, lzw, lz)
  • grafica (trasare linie, cerc, fillpoly, grafica 3D)
  • elemente de inteligenta artificiala (algoritmul alfa-beta)
  • analiza algoritmilor, NP completitudine, probleme de lower si upper bound

Materiale de studiu

În acest moment, materia informatică este într-o stare de tranziție. Pînă anul acesta informatica la nivel de gimnaziu era opțională. Acest lucru înseamna că nu exista o programă de studiu uniformă, pentru toate școlile, aprobată de ministerul învățămîntului. Fiecare școală care dorește să predea informatică își alcătuiește propria programă și o supune aprobării ministerului.

În aceste condiții viața celor care scriu manuale de informatică pentru clasele V-VIII este foarte complicată. Sper să nu supăr pe nimeni afirmînd că la acest moment nu există nici un manual care să corespundă nivelului extra-olimpiadă, nivelul pe care îl dorim la acest cerc. Există unele culegeri de probleme destul de bune, dar care sunt gîndite pentru începători la nivel de liceu, de aceea nu le voi recomanda aici.

Aceste motive m-au determinat să adun materiale de studiu în cadrul acestui site. Desigur că este o listă incompletă.

Iată, deci, recomandările, firave, de materiale de studiu:

  • Biblia informaticii, către care trebuie să tindă o minte algoritmică și cartea de bază în teoria calculatoarelor este Indroduction to Algorithms de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (porecla oficială a acestei cărți, după autori, este CLR). A fost tradusă și în română; nu este clar unde poate fi cumpărată, în afară de anticariate și pe okazii.ro; acesta este site-ul editurii care pare să o comercializeze. Atenție! Este o carte la nivel de anul doi de facultate! Deși tot ceea ce vom face la cerc este prezent în această carte, modul de abordare la ore va fi foarte diferit, fiind transformat pentru înțelegerea la nivel de gimnaziu. Cu toate acestea este o carte care trebuie să existe în casa oricărui informatician și pe care o vom consulta de-a lungul anilor.
  • Web-ul este prietenul vostru pentru subiecte specifice, voi încerca să dau referințe bibliografice pe parcurs
  • Ca surse de probleme:
  • Acest site, desigur :)

Altele

  • Lecțiile vor fi pe algopedia.ro, nu scrieți lecția în caiet, nu are rost, la clasa a cincea scrieți prea încet față de cantitatea de cunoștinte predate. Notați numai lucrurile interesante.
  • Scrieți temele pe foi, nu în caiete! Data viitoare îmi veți aduce tema pe aceste foi, pe care le voi lua acasă pentru a le corecta. Vă voi returna tema corectată. Nu uitați să semnați aceste foi! Gîndiți-vă singuri la răspunsuri, apoi, dacă nu găsiți rezolvarea căutați pe google și abia apoi, dacă nu reușiți, întrebați părinții sau prietenii. Mă bazez pe codul onoarei.

Exemple probleme auxiliare

Iată niște exemple de probleme complementare, nu de informatică, ce susțin o minte computațională. Vom rezolva și astfel de probleme:

  • Jocuri ce stimulează mintea: cubul rubik, scrabble flash, powerball
  • Problemă de matematică: dacă 5 oameni construiesc 6 case în 300 zile în cât timp construiesc 10 oameni 4 case?
  • Exemple de întrebări puzzle:
    • De ce este iarba verde?
    • De ce este cerul albastru?
    • De ce nu cade luna pe Pămînt?

Lecție

Algoritmi

Definiție

Ce sunt algoritmii?

Definiție - Algoritm: un set de instrucțiuni sau reguli care, pornind cu un set de date inițiale, rezolvă o clasă de probleme folosind operații precise, executate mecanic, fără intervenția creativă a omului.

Exemple

Exemple: rețete de bucate, asamblarea jocurilor Lego, convorbire telefonică la telefon public, înmulțirea și împărțirea numerelor, navigarea într-un oraș folosind o hartă.

Ne-am putea gîndi la rețetele de bucătărie ca algoritmi. Ele enumeră pas cu pas o procedură care atinge un scop (mâncarea) începând cu date inițiale (ingredientele) și cerându-vă să executați instrucțiuni relativ ușoare și clare. Cu toate acestea, oricare dintre noi a încercat să folosească o carte de bucate știe că "ușoare și clare" sunt termeni relativi. Rețetele tind să fie ambigue ducînd la un potențial coșmar pentru bucătarul neavizat. Și atunci, cum ar trebui să fie o rețetă bine scrisă?

Proprietăți

Pentru a constitui un algoritm, setul de instrucțiuni trebuie să aibă următoarele proprietăți:

  1. Precizie - Sau neambiguitate. Fiecare pas trebuie să fie neambiguu/clar și executabil fără intervenție creativă.
  2. Generalitate - Să rezolve o clasă de probleme, nu doar o problemă în particular.
  3. Finitudine - Algoritmul trebuie să se termine în timp finit. Din punct de vedere practic trebuie să se termine într-un timp rezonabil (de exemplu pînă la sfîrșitul vieții noastre).
  4. Corectitudine - Rezultatul final trebuie să fie corect pentru toate datele de intrare.

Au rețetele de bucate proprietățile de mai sus? Probabil că sunt corecte. De asemenea sunt finite. Nu sunt generale, deoarece gătesc o singură mâncare folosind aceleași ingrediente. Iar multe dintre rețete sunt imprecise, ceea ce, pe de o parte, le transformă în exemple proaste de algoritmi, pe de alta lasă loc pentru creativitate si unicitate.

Scheme logice

Schemele logice sunt un mod de descriere a algoritmilor (un alt mod este pseudocodul). Ele conțin următoarele blocuri:

Bloc de calcul

Așa cum sugerează și numele, aceste blocuri sunt folosite pentru a calcula expresii. De obicei conțin calcule matematice. Exemple:

  • Flow-assign-example.gif calculează expresia 2 + 3 și stochează rezultatul (în acest caz 5) în x.
  • Flow-assign-example-02.gif ia vechea valoare a lui x x, îi adună 1 și stochează rezultatul în variabila x, suprascriind vechea valoare. Dacă x era 5 inițial, valoarea finală va fi 6, după execuția acestui bloc.

Bloc de citire/scriere

Aceste blocuri controlează fluxul de date către și dinspre algoritmul nostru. Putem citi valori inițiale, sau să scriem rezultatele. Exemple:

  • Sl-citire-x.gif citește o valoare și o depozitează în x. 'C' vine de la 'citește'.
  • Sl-citire-x-y.gif citește două valori, una ce va fi depozitată în x iar a doua în y.
  • Sl-scriere-y.gif scrie valoarea stocată în y. 'S' vine de la 'scrie'.

Bloc de decizie

Un bloc de decizie este folosit pentru a crea o 'intersecție pe șosea'. Desparte firul execuției în funcție de rezultatul condiției din bloc. Dacă expresia este adevărată execuția algoritmului continuă pe ramura din dreapta. Dacă expresia este falsă execuția continuă cu ramura din stînga. Exemple:

  • Sl-test-x-10.gif testează dacă x este mai mic ca zece, atunci cînd se ajunge în acest punct al algoritmului. Dacă x este mai mic ca zece continuăm cu blocurile de pe ramura dreaptă. Dacă x este mai mare ca zece, sau egal cu zece, continuăm cu ramura din stînga.
  • Flow-decision-example-02.gif testează dacă valoarea lui x este mai mare sau egală cu valoarea lui y plus 3. În acest caz continuăm pe ramura din dreapta. Dacă nu, continuăm pe ramura din stînga.

Ne vom face o idee mai bună despre blocurile de decizie atunci cînd vom scrie prima noastră schemă logică.

Bloc terminator

Nici nu aș denumi acest simbol un bloc propriu, probabil că ne-am putea descurca fără el foarte bine. Singurul lui rol este să specifice unde începe algoritmul și unde se termină. Iată cele doua blocuri pe care le vom folosi:

  • Flow-terminator-example-01.gif este locul unde începe schema logică.
  • Flow-terminator-example-02.gif este locul unde se termină schema logică.

Operatori

Vom enumera principalii operatori pe care îi vom folosi în scheme logice.

Operatori aritmetici

Operatorii aritmetici pe care îi putem folosi în blocurile de calcul sunt:

Operator Semnificație Exemplu
+ Adunarea a două numere x ← a + b
- Scăderea a două numere y ← y - 10
* Înmulțirea a două numere x ← a * 10
/ Împărțirea întreagă a două numere (câtul împărțirii) x ← 14 / 3 (x primește valoarea 4)
% Împărțirea întreagă a două numere (restul împărțirii) x ← 14 % 3 (x primește valoarea 2)
( ) Paranteze: schimbul ordinii operațiilor x ← 2 * (10 - (3 + 4)) (x primește valoarea 6)
 __

Radical: partea întreagă a operațiunii radical
     __
x ← √10
(x primește valoarea 3)

Operatori de comparație și logici

Operatori de comparație și logici pe care îi vom folosi în blocurile de decizie: = ≠ < ≤ > ≥ și sau

Exerciții cu scheme logice

Distanța pînă la Stormwind

Orașul Stormwind se află pe autostrada A1 la kilometrul 60. Se știe că noi ne aflăm pe autostradă la kilometrul k (k citit). La ce distanță de Stormwind ne aflăm? Să construim o schemă logică care o calculează (vezi figura din dreapta).

Pentru a executa o schemă logică pornim de la blocul de START si urmăm săgețile. Primul pas este să citim k, kilometrul la care ne aflăm pe autostradă. Apoi vom testa dacă am depășit Stormwind, adică dacă am trecut de kilometrul 60. Dacă k este mai mare decât 60 o vom lua pe ramura din dreapta, numită și ramura DA, unde vom calcula distanța d ca fiind valoarea k - 60. Dacă k este mai mic sau egal cu 60 vom urma ramura din stînga (ramura NU) unde vom calcula distanța ca fiind 60 - k. Indiferent ce ramură am urmat vom ajunge în final la conectorul cerculeț. În acest moment d conține valoarea corectă a distanței. Tot ce mai avem de făcut este să o afișăm, după care ne oprim la blocul STOP.

Am vorbit despre variabile. Asemănătoare cu cele de la matematică, dar la informatică ele își pot schimba valoarea. Analogie cu sertare pe care avem etichete cu numele variabilelor.

Distanța pînă la Stormwind

Cifrele unui număr

Se dă un număr n între zero și 999 inclusiv. Să se afișeze cifrele lui în ordine inversă. Soluție: avem trei cazuri posibile. Numărul poate să aibă o cifră, două cifre sau trei. Cum testăm dacă un număr are o cifră? Un număr are o cifră dacă este mai mic decât 10. Cum testăm dacă un număr are două cifre? Un număr are două cifre dacă este între 10 și 99. Similar, el are trei cifre dacă este între 100 și 999. Algoritmul nostru va testa în care din cele trei cazuri se încadrează numărul citit n, apoi va calcula și afișa cifrele componente în ordine inversă. Iată schema logică bazată pe această idee:

Afișare cifre număr în ordine inversă (0 ≤ n ≤ 999)

Extragerea ultimei cifre

Să se afișeze ultima cifră a unui număr n, folosind operatorul '%', respectiv restul împărțirii la 10. Am demonstrat că restul împărțirii la 10 este ultima cifră a unui număr.

Ultima cifră a lui n

Testul de divizibilitate

Testul de divizibilitate n cu k, discuție cele două metode, prima folosind operatorul %, a doua folosind operatorul /.

n divizibil cu k, varianta 1
n divizibil cu k, varianta 2

Tema

Scrieți temele pe foi, nu în caiete! Data viitoare îmi veți aduce tema pe aceste foi, pe care le voi lua acasă pentru a le corecta. Vă voi returna tema corectată. Nu uitați să semnați aceste foi! Gîndiți-vă singuri la răspunsuri, apoi, dacă nu găsiți rezolvarea căutați pe google și abia apoi, dacă nu reușiți, întrebați părinții sau prietenii. Mă bazez pe codul onoarei.

  • Citiţi secţiunea reguli ale cercului de informatică pe acest site.
  • Din ce sunt produse stafidele?
  • De ce este cald vara și frig iarna? (cu mențiunea că răspunsul de la geografie din școală se predă greșit, de multe ori)
  • Sînt 10 oameni numerotați de la 1 la 10. Omul cu numărul 1 spune "fix unul dintre noi minte". Omul cu numărul 2 spune "fix doi dintre noi mințim". Și așa mai departe, al nouălea om spune "fix nouă dintre noi mințim", iar al zecelea susține că "toți mințim". Cine minte și cine spune adevărul? Nu răspundeți doar cu un număr, dați și o justificare (explicație).
  • Ce număr trebuie completat în ultima figură:
Cu ce se înlocuiește semnul întrebării?
  • Puzzle: vine fluxul. Apa urcă trei sferturi de metru la fiecare sfert de oră. Vaporul are 3 metri jumate de la apă pînă sus la buză. În cît timp se va revărsa apa în vapor?

Rezolvări aici [1]