Difference between revisions of "Clasa a V-a lecția 2 - 14 sep 2019"

From Algopedia
Jump to: navigation, search
(Created page with "== Programarea structurată == Programarea structurată este un mod de a scrie scheme logice care îmbunătățește claritatea, citibilitatea, calitatea și ușurința modifi...")
 
(Exerciții)
Line 11: Line 11:
 
== Exerciții ==
 
== Exerciții ==
 
Exerciții de folosire a structurilor liniară și alternativă.
 
Exerciții de folosire a structurilor liniară și alternativă.
 
=== Testul de divizibilitate ===
 
Testul de divizibilitate <tt>n</tt> cu <tt>k</tt>, discuție cele două metode, prima folosind operatorul <tt>%</tt>, a doua folosind operatorul <tt>/</tt>.
 
 
{|
 
| [[Image:sl-n-div-k-var-1.gif|frame|none|n divizibil cu k, varianta 1]]
 
| [[Image:sl-n-div-k-var-2.gif|frame|none|n divizibil cu k, varianta 2]]
 
|}
 
 
=== 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.
 
[[Image:sl-ultima-cifra.gif|frame|none|Ultima cifră a lui n]]
 
  
 
=== Extragerea primei cifre ===
 
=== Extragerea primei cifre ===
Line 73: Line 61:
  
 
'''Intrebare''': Există cazuri cînd algoritmul nu funcționează?
 
'''Intrebare''': Există cazuri cînd algoritmul nu funcționează?
 
  
 
= Tema =
 
= Tema =

Revision as of 11:13, 13 September 2019

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 liniară

Structura alternativă

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

Structura alternativă

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.
Prima cifră a lui n, n < 100

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:

Toate cifrele lui n sînt impare, varianta 1
Toate cifrele lui n sînt impare, varianta 2

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:

maximul a trei numere, varianta 1
maximul a trei numere, varianta 2

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:

Cîte numere divizibile cu k se află în intervalul [a, b]?

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ă?

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:
    • Nouă copii se pot așeza în formă de pătrat astfel:
      Nouă copii așezați în formă de pătrat
    • 14 copii nu se pot așeza în formă de pătrat:
      14 copii
  • 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 [1]