Clasa a V-a lecția 2 - 14 sep 2019
Tema - rezolvări
Rezolvări aici [1]
Lecție
<html5media height="720" width="1280">http://algopedia.ro/video/2019-2020/2019-09-14-clasa-5-lectie-info-02-720p.mp4</html5media>
Programarea structurată
Programarea structurată este un mod de a scrie scheme logice care îmbunătățește claritatea, citibilitatea, calitatea și ușurința modificării ulterioare. Denumirea vine de la Programarea cu structuri. Mai exact, programarea structurată ne limitează modul în care putem folosi și îmbina blocurile. Ele pot fi aranjate în trei feluri distincte, conform unor modele numite structuri. În continuare vom studia două dintre aceste structuri.
Structura liniară
Se mai numește și structură de calcul. Ea constă dintr-o înșiruire de blocuri de calcul și blocuri de citire/scriere.

Structura alternativă
Structura alternativă este compusă dintr-un bloc de decizie, două ramuri de execuție, DA și NU, care se reunesc la final.

Exerciții
Exerciții de folosire a structurilor liniară și alternativă.
Extragerea primei cifre
Se citește n, un număr natural strict mai mic decît 100. Să se afișeze prima cifră a lui n.

Cifre impare
Se citește un număr n. Se știe că 1 ≤ n < 100. Să se spună dacă toate cifrele lui n sînt impare.
Iată două posibile soluții:
![]() |
![]() |
Care din ele este mai bună? Din nou, cele două scheme logice par apropiate, dar atunci cînd n crește (cînd numărul lui de cifre este mai mare), prima schemă logică se dublează cu fiecare cifră în plus, pe cînd cea de-a doua adaugă o singură structură alternativă, deci a doua schemă logică este mai bună.
Maximul a trei numere
Se citesc trei numere, a, b și c. Să se afișeze valoarea maximă.
Iată două posibile soluții:
![]() |
![]() |
Care din ele este mai bună? Ele sunt aproximativ la fel, cu o diferență: dacă am dori să calculăm maximul a patru sau cinci numere prima schemă logică se dublează pentru fiecare număr în plus. Cea de-a doua adaugă doar o comparație, deci este mai bună.
Divizibilitate
Se citesc trei numere naturale, a, b și k. Să se afișeze numărul de numere divizibile cu k în intervalul [a, b] (inclusiv a și b).
Am putea fi tentați aici să scriem un algoritm rapid:
- Fie să considerăm că numărul de numere divizibile cu k în intervalul [a, b] este, în principiu, (b - a + 1) / k (deoarece numărul de numere din intervalul [a, b] este b - a + 1). Dar avem excepții, cînd trebuie să adunăm unu, excepții care trebuie tratate cu decizii care nu sînt tocmai simple.
- Fie să considerăm că numărul de numere este, în principiu, b/k - a/k. Dar atunci cînd a este divizibil cu k trebuie să adunăm unu.
Probabil mai sunt și alte variante. Vom prezenta în continuare o variantă optimă, care nu folosește condiții.
Răspuns: să rezolvăm mai întîi o problemă mai simplă: cîte numere sunt divizibile cu k în intervalul (0, x]? Aici răspunsul este simplu, vom avea exact x/k numere divizibile cu k. Ei bine, numărul de numere divizibile cu k din intervalul [a, b] este totuna cu numărul de numere din intervalul (0, b] din care scădem numărul de numere din intervalul (0, a-1]! Obținem formula:
- n = b/k - (a-1)/k
Iar algoritmul devine banal:

Rețineți această tehnică, de a descompune un interval în diferență de două intervale. O vom mai folosi. Această tehnică reduce problema inițială la o subproblemă mai simplă.
Intrebare: Există cazuri cînd algoritmul nu funcționează?
Structura repetitivă de tip WHILE-DO
Structura repetitivă de tip WHILE-DO (cîtă vreme - execută) este o structură în care cîtă vreme condiția <cond> este adevărată se execută prelucrarea <prel>, după care se revine înaintea blocului de decizie. Atunci cînd <cond> devine falsă se iese din structură:

Afișare cifre număr în ordine inversă
Se citește n. Să se afișeze cifrele lui n în ordine inversă.

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.
- Te afli într-o încăpere goală. Ai în mînă un pahar cilindric și transparent care conține apă. Nu poți să acoperi gura paharului cu mîna, deoarece este prea largă. Cum afli dacă paharul este fix jumate plin?
- Cîte cubuleţe sînt necesare pentru a construi cubul din figură:
Cîte cubulețe conține acest cub? - 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.
- Schemă logică: să se spună dacă un număr n are ultimele două cifre consecutive, în ordine crescătoare. Exemple: 312, 4523 și 1 sînt numere care au ultimele două cifre consecutive. 215, 4321 și 7 nu au ultimele două cifre consecutive crescător.
- Schemă logică: să se spună dacă n copii se pot așeza în formă de pătrat plin. Exemple:
- Scrieți o schemă logică care să determine dacă un an este bisect. Un an este bisect dacă este divizibil cu 4, cu excepția anilor divizibili cu 100, care nu sînt bisecți, cu excepția anilor divizibili cu 400 care sînt bisecți. Exemple: 2012 este an bisect, 1900 nu a fost an bisect, 2000 a fost an bisect.
- Schemă logică: se citesc trei numere, a, b și c. Să se afișeze în ordine crescătoare. Exemplu: dacă a = 8, b = 4, c = 12, se va afișa 4 8 12.
Rezolvări aici [2]