Clasa a V-a lecția 1 - 1 sep 2017

From Algopedia
Jump to navigationJump to search

Introducere

Prezentarea instructorilor

Numele nostru este Cristian Frâncu și Isabela Coman și vă vom ghida în acest an în cadrul cercului de informatică IQ Academy. Contacte:

  • email Cristian: cristian@francu.com
  • telefon Cristian
  • website Cristian: http://cristian.francu.com/
  • email Isabela: isabela.coman@gmail.com
  • telefon Isabela

Cristian Frâncu

  • Un fascinat de calculator și de comunicarea cu el (cînd eram mic mi se părea cel mai apropiat lucru de o comunicare cu o inteligență extraterestră, drept pentru care, mai tîrziu, am devenit interesat de inteligența artificală).
  • Liceul de informatică (Matematică-Fizică nr. 1 și nu MF3, deși eram la 7 minute distanță, față de MF3)
  • Facultatea de Automatică și Calculatoare, UPB
  • Rutgers University, New Jersey
  • Instructor la Clubul copilului și al elevului în perioada 1993-1996
  • Asistent la facultatea de Automatică și Calculatoare, UPB
  • Asistent la Rutgers University, New Jersey
  • Instructor la cercul de informatică al colegiului Tudor Vianu în perioada 2012-2015
  • Unul din primii angajați ai companiei Google

Isabela Coman

  • Profesoară de informatică la colegiul Tudor Vianu
  • Instructor la cercul de informatică al colegiului Tudor Vianu în perioada 2012-2016
  • Instructor Cisco Certified Network Associate ( CCNA ) din anul 2002
  • Instructor Oracle Academy - Database Design / PlSQL

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.

Sunteți prima generație de elevi de clasa a cincea ce veți studia informatică la ore. 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: sînteţ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 sînt un corolar, nu un scop, dar sînt 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 sînt 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ă sînt la cerc. Și mai mulți colegi nu sînt 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 sîntem 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.

Anul acesta este primul în care informatica devine 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.

La ora cînd scriu aceste rînduri, 31 august 2017, situația olimpiadei înseși este incertă. Vor păstra programa și nivelul anului trecut? Sau se vor crea o nouă programă, adaptată noii programe școlare?

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 mai devreme?

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 sînt 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 mai devreme 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 cinci 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 cinci 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ă. Aș vrea să aflu programul vostru cît mai curînd.

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 au putut să vină la lecţiile pregătitoare pentru test, deoarece erau în vacanţă? Vă rog să mă contactaţi şi voi decide de la caz la caz, voi face tot posibilul să recupereze.

Ce se întîmplă cu elevii care nu se vor califica la curs? Sfatul meu este să continuați să urmăriți lecțiile online, să rezolvați temele și să participați la concursuri (temele și concursurile vor fi accesibile la varena.ro). Dacă vă veți remarca în clasamentul temelor și al concursurilor, care va fi public, veți putea reveni la curs, ca loc extra.

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

La ora cînd scriu aceste rînduri (august 2017), 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 sînt 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?

Chestionar

  • Care este programul vostru de școală?

Întrebări

Sesiune de întrebări și răspunsuri.

Lecție

<html5media height="720" width="1280">https://www.algopedia.ro/video/2017-2018/2017-09-01-lectie-info-part-2-lectie-720p.mp4</html5media> Video al lecției 1. Din păcate ultimele cinci minute lipsesc (s-a terminat bateria camerei video)

Algoritmi

Definiție

Ce sînt 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" sînt 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 ș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ă sînt corecte. De asemenea sînt finite. Nu sînt generale, deoarece gătesc o singură mîncare folosind aceleași ingrediente. Iar multe dintre rețete sînt 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 sînt 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 sînt folosite pentru a calcula expresii. De obicei conțin calcule matematice. Exemple:

  • calculează expresia 2 + 3 și stochează rezultatul (în acest caz 5) în x.
  • 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:

  • citește o valoare și o depozitează în x. 'C' vine de la 'citește'.
  • citește două valori, una ce va fi depozitată în x iar a doua în y.
  • 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:

  • 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.
  • 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:

  • este locul unde începe schema logică.
  • este locul unde se termină schema logică.

Exemplu: distanța pînă la Stormwind

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.

Exemplu: 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)

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 sînt 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)
  • Ce număr trebuie completat în ultima figură:
Cu ce se înlocuiește semnul întrebării?
  • Schemă logică: ecuația de gradul 1: se dau a și b astfel încît a * x = b. Să se determine x pe baza valorilor a și b. Am discutat cele trei cazuri:
    • cînd a este diferit de zero x este b : a.
    • cînd a este zero și b este diferit de zero x nu există.
    • cînd a este zero și b este zero x poate avea orice valoare.

Rezolvări aici [1]