Difference between revisions of "Clasa a IX-a lecția 4"

From Algopedia
Jump to navigationJump to search
(One intermediate revision by the same user not shown)
Line 1: Line 1:
= Teorie =
+
= Lectie =
 
== Programarea structurată ==
 
== 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. Aceste structuri sunt:
 
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. Aceste structuri sunt:
Line 13: Line 13:
 
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.
 
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]]
 
[[Image:sl-ultima-cifra.gif|frame|none|Ultima cifră a lui n]]
 
'''Pseudocod'''
 
intreg n, cf
 
citeste n
 
cf <- n mod 10
 
scrie cf
 
  
 
=== Structura alternativă ===
 
=== Structura alternativă ===
 
Structura alternativă este compusă dintr-un bloc de decizie, două ramuri de execuție, ''DA'' și ''NU'', care se reunesc la final. Blocul de decizie contine o expresie logica. Daca expresia logica ( cond ) are valoarea  True atunci se vor executa intructiunile de pe ramura ''DA'' altfel se vor executa intructiunile de pe ramura ''NU''.
 
Structura alternativă este compusă dintr-un bloc de decizie, două ramuri de execuție, ''DA'' și ''NU'', care se reunesc la final. Blocul de decizie contine o expresie logica. Daca expresia logica ( cond ) are valoarea  True atunci se vor executa intructiunile de pe ramura ''DA'' altfel se vor executa intructiunile de pe ramura ''NU''.
 
[[Image:sl-structura-alternativa.gif|frame|none|Structura alternativă]]
 
[[Image:sl-structura-alternativa.gif|frame|none|Structura alternativă]]
 +
 +
Pseudocod
 +
if conditie atunci
 +
  intrusctiune1
 +
altfel
 +
  instructiune2
  
 
=== Exemple ===
 
=== Exemple ===
Line 35: Line 35:
 
Se citește n, un număr natural strict mai mic decît 100. Să se afișeze prima cifră a lui n. [[Image:prima-cifra.gif|frame|none|Prima cifră a lui n, n < 100]]
 
Se citește n, un număr natural strict mai mic decît 100. Să se afișeze prima cifră a lui n. [[Image:prima-cifra.gif|frame|none|Prima cifră a lui n, n < 100]]
  
= Laborator =
+
== Laborator ==
  
 
=== Laturile unui triunghi ===
 
=== Laturile unui triunghi ===
 
Se citesc trei numere, a, b și c. Să se spună dacă pot fi laturile unui triunghi. [[Image:laturi-triunghi.gif|frame|none|a, b, c pot fi laturile unui triunghi?]]
 
Se citesc trei numere, a, b și c. Să se spună dacă pot fi laturile unui triunghi. [[Image:laturi-triunghi.gif|frame|none|a, b, c pot fi laturile unui triunghi?]]
  
integer a, b, c
 
read a, b, c
 
if ( a + b > c ) then
 
  if( a + c > b ) then
 
    if( b + c > a ) then
 
      write " Pot fi laturile unui triungi"
 
    else
 
      write " NU pot fi laturile unui triungi"
 
  else
 
      write " NU pot fi laturile unui triungi"
 
else
 
  write " NU pot fi laturile unui triungi"
 
 
Mai scurt, folosind operatorii logici:
 
integer a, b, c
 
read a, b, c
 
if ( a + b > c AND a + c > b AND b + c > a ) then
 
  write " Pot fi laturile unui triungi"
 
else
 
  write " NU pot fi laturile unui triungi"
 
  
 
=== Strîngeri de mînă ===
 
=== Strîngeri de mînă ===
Line 70: Line 50:
 
| valign="top"| [[Image:sl-max-3-nr-2.gif|frame|none|maximul a trei numere, varianta 2]]
 
| valign="top"| [[Image:sl-max-3-nr-2.gif|frame|none|maximul a trei numere, varianta 2]]
 
|}
 
|}
 +
 +
=== Sortarea a 3 numere ===
 +
* 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.
 +
 +
[[Image:sl-sortare-3-nr.gif|frame|none|Afișare a, b și c în ordine crescătoare, varianta 1]]
 +
[[Image:sl-3-nr-crescatoare-var-2.gif|frame|none|Afișare a, b și c în ordine crescătoare, varianta 2]]
 +
 +
Am discutat la clasa de asemenea inca 2 metode de sortare, pe care le putem folosi si in situatia in care avem mai mult de 3 numere:
 +
- metoda interschimbarii directe
 +
- metoda bulelor
 +
==== Metoda interschimbarii directe ====
 +
<syntaxhighlight>
 +
intreg a, b, c, aux
 +
cieste a, b, c
 +
 +
if ( a > b ) atunci
 +
  aux = a
 +
  a = b;
 +
  b = aux
 +
if ( a > c ) atunci
 +
  aux = a
 +
  a = c;
 +
  c = aux
 +
if ( b > c ) atunci
 +
  aux = b
 +
  b = c;
 +
  c = aux
 +
scrie a, b, c
 +
</syntaxhighlight>
 +
 +
==== Metoda bulelor ====
 +
<syntaxhighlight>
 +
intreg a, b, c, aux
 +
cieste a, b, c
 +
 +
if ( a > b ) atunci
 +
  aux = a
 +
  a = b;
 +
  b = aux
 +
if ( b > c ) atunci
 +
  aux = b
 +
  b = c;
 +
  c = aux
 +
if ( a > b ) atunci
 +
  aux = a
 +
  a = b;
 +
  b = aux
 +
scrie a, b, c
 +
</syntaxhighlight>
  
 
=== Cifre impare ===
 
=== Cifre impare ===
Line 84: Line 113:
 
Exerciții de folosire a structurilor liniară și alternativă folosind - Pseudocod
 
Exerciții de folosire a structurilor liniară și alternativă folosind - Pseudocod
  
===Diferenta dintre max si min===
+
=== Diferenta dintre max si min ===
Să se scrie un program care citeşte de la tastatură trei numere naturale și determină diferenţa dintre cel mai mare şi cel mai mic.
+
Să se scrie un program care citeşte de la tastatură trei numere naturale și determină diferenţa dintre cel mai mare şi cel mai mic numar.
 
<syntaxhighlight>
 
<syntaxhighlight>
int a, b, c
+
intreg a, b, c
read a, b, c
+
citeste a, b, c
 
min=a
 
min=a
 
max=a
 
max=a
daca ( min > b )
+
daca ( min > b ) atunci
 
   min = b
 
   min = b
if (min > c)
+
daca ( min > c ) atunci
 
   min = c
 
   min = c
if (max < b)
+
daca ( max < b ) atunci
 
   max = b
 
   max = b
if (max < c)
+
daca ( max < c ) atunci
 
   max = c
 
   max = c
write max - min;
+
scrie max - min;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Cate cifre pare are n?===
+
=== Cate cifre pare are n? ===
 
Se citește de la tastatură un număr natural de 3 cifre. Să se determine  
 
Se citește de la tastatură un număr natural de 3 cifre. Să se determine  
 
câte cifre impare conține.
 
câte cifre impare conține.
Line 108: Line 137:
 
<syntaxhighlight>
 
<syntaxhighlight>
 
int n, contor;
 
int n, contor;
read n
+
citeste n
 
contor = 0
 
contor = 0
if( n % 2 != 0 )
+
daca ( n mod 2 != 0 ) atunci
 
   contor = contor + 1
 
   contor = contor + 1
if( n / 10 % 2 != 0)
+
daca( n div 10 mod 2 != 0 )
   contor= contor+1
+
   contor = contor + 1
if( n / 100 % 2!=0 )
+
daca ( n div 100 mod 2 != 0 )
   contor= contor+1
+
   contor = contor + 1
write contor
+
scrie contor
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Au 2 numere acelasi semn?===
+
=== Au 2 numere acelasi semn? ===
 
Să se scrie un program care citeşte de la tastatură două numere întregi şi verifică dacă cele doua numere au acelaşi semn.
 
Să se scrie un program care citeşte de la tastatură două numere întregi şi verifică dacă cele doua numere au acelaşi semn.
 
<syntaxhighlight>
 
<syntaxhighlight>
integer a,b
+
intreg a,b
read a,b
+
citeste a, b
if(a<0) then
+
daca ( a < 0 ) atunci
    if (b<0) then
+
  daca ( b < 0 ) atunci
      write "au acelasi semn"
+
    scrie "au acelasi semn"
    else
+
  altfel
      write "nu au acelasi semn"
+
      scrie "nu au acelasi semn"
else
+
altfel
    if (b>=0) then
+
  daca ( b >= 0 ) atunci
      write "au acelasi semn"
+
      scrie "au acelasi semn"
    else
+
  altel
      write "nu au acelasi semn"
+
      scrie "nu au acelasi semn"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 139: Line 168:
  
 
<syntaxhighlight>
 
<syntaxhighlight>
integer a,b
+
intregi a, b
read a,b
+
citeste a, b
if((a<0) AND (b<0)) OR ((a>=0 si b>=0)) then
+
daca ( ( a < 0 ) AND ( b < 0 ) ) OR ( ( a >= 0 AND b >= 0 ) ) atunci
     write "au acelasi semn"
+
     scrie "au acelasi semn"
else
+
altfel
     write "nu au acelasi semn"   
+
     scrie "nu au acelasi semn"   
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Line 150: Line 179:
  
 
<syntaxhighlight>
 
<syntaxhighlight>
integer a,b
+
intregi a, b
read a,b
+
citeste a, b
if( a * b > 0 || ( a * b == 0 si a + b >= 0 ) ) then
+
daca  ( a < 0 AND b >= 0 ) OR ( a >= 0 AND b < 0 ) atunci
     write "au acelasi semn"
+
     scrie "nu au acelasi semn"
else
+
altfel
     write "nu au acelasi semn"  
+
     scrie "au acelasi semn"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
= Tema 4 Laborator =
+
== Tema 4 Laborator ==
 
===N are ultimele 2 cifre consecutive?===
 
===N are ultimele 2 cifre consecutive?===
 
* 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.
 
* 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.
Line 177: Line 206:
 
* 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.
 
* 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.
  
===Sortare 3 numere===
+
=== Tema Pbinfo ===
* 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.
+
'''Usor'''
 
+
*[https://www.pbinfo.ro/probleme/2765/checkcolor checkcolor] - minim, maxim
===Tema Pbinfo===
+
*[https://www.pbinfo.ro/probleme/448/ciford ciford] - ordonarea cifrelor unui numar de 3 cifre
* S4 Sturctura decizionala"
+
*[https://www.pbinfo.ro/probleme/447/cifmid cifmid] - afisare cifra din mijloc ca valoare
 +
*[https://www.pbinfo.ro/probleme/559/5numere 5numere] - suma celor mai mari 3 numere din 5 date
 +
*[https://www.pbinfo.ro/probleme/3275/nrsumcifmax  nrsumcifmax] - afisarea tuturor numerelor egale cu max din 3 numere
 +
'''Mediu '''
 +
*[https://www.pbinfo.ro/probleme/1943/bacterie bacterie]
 +
*[https://www.pbinfo.ro/probleme/2908/planta planta]
 +
'''Dificil'''
 +
*[https://www.pbinfo.ro/probleme/1002/paginare paginare]
 +
*[https://www.pbinfo.ro/probleme/1934/catalin-si-elfii-magici catalin-si-elfii-magici]
  
 
== Optional ==
 
== Optional ==

Revision as of 22:40, 12 February 2020

Lectie

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. Aceste structuri sunt:

  • Structura liniară (de calcul)
  • structura alternativă (decizională)
  • structura repetitivă (ciclică)

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. Aceste blocuri se vor executa in ordinea in care ele apar in structura.

Structura liniară

Exemple

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

Structura alternativă

Structura alternativă este compusă dintr-un bloc de decizie, două ramuri de execuție, DA și NU, care se reunesc la final. Blocul de decizie contine o expresie logica. Daca expresia logica ( cond ) are valoarea True atunci se vor executa intructiunile de pe ramura DA altfel se vor executa intructiunile de pe ramura NU.

Structura alternativă

Pseudocod

if conditie atunci
  intrusctiune1
altfel
  instructiune2

Exemple

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

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

Laborator

Laturile unui triunghi

Se citesc trei numere, a, b și c. Să se spună dacă pot fi laturile unui triunghi.

a, b, c pot fi laturile unui triunghi?


Strîngeri de mînă

Avem n oameni care dau mîna fiecare cu fiecare o singură dată. În total sînt k strîngeri de mînă. Să se scrie o schemă logică care citește k (numărul de strîngeri de mînă), apoi calculează și afișează n (numărul de oameni).

n oameni dau mîna. Sînt k strîngeri de mînă. Dîndu-se k să se calculeze n.

Maximul a trei numere

Se citesc trei numere, a, b și c. Să se afișeze valoarea maximă.

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

Sortarea a 3 numere

  • 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.
Afișare a, b și c în ordine crescătoare, varianta 1
Afișare a, b și c în ordine crescătoare, varianta 2

Am discutat la clasa de asemenea inca 2 metode de sortare, pe care le putem folosi si in situatia in care avem mai mult de 3 numere: - metoda interschimbarii directe - metoda bulelor

Metoda interschimbarii directe

intreg a, b, c, aux
cieste a, b, c

if ( a > b ) atunci
  aux = a
  a = b;
  b = aux
if ( a > c ) atunci
  aux = a
  a = c;
  c = aux
if ( b > c ) atunci
  aux = b
  b = c;
  c = aux
scrie a, b, c

Metoda bulelor

intreg a, b, c, aux
cieste a, b, c

if ( a > b ) atunci
  aux = a
  a = b;
  b = aux
if ( b > c ) atunci
  aux = b
  b = c;
  c = aux
if ( a > b ) atunci
  aux = a
  a = b;
  b = aux
scrie a, b, c

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.

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

Numere divizibile cu K din [a,b]

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).

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

Exerciții 2

Exerciții de folosire a structurilor liniară și alternativă folosind - Pseudocod

Diferenta dintre max si min

Să se scrie un program care citeşte de la tastatură trei numere naturale și determină diferenţa dintre cel mai mare şi cel mai mic numar.

intreg a, b, c
citeste a, b, c
min=a
max=a
daca ( min > b ) atunci
  min = b
daca ( min > c ) atunci
  min = c
daca ( max < b ) atunci
  max = b
daca ( max < c ) atunci
  max = c
scrie  max - min;

Cate cifre pare are n?

Se citește de la tastatură un număr natural de 3 cifre. Să se determine câte cifre impare conține.

int n, contor;
citeste n
contor = 0
daca ( n mod 2 != 0 ) atunci
  contor = contor + 1
daca( n div 10 mod 2 != 0 )
  contor = contor + 1
daca ( n div 100 mod 2 != 0 )
  contor = contor + 1
scrie contor

Au 2 numere acelasi semn?

Să se scrie un program care citeşte de la tastatură două numere întregi şi verifică dacă cele doua numere au acelaşi semn.

intreg a,b
citeste a, b
daca ( a < 0 ) atunci
  daca ( b < 0 ) atunci
     scrie "au acelasi semn"
  altfel 
      scrie "nu au acelasi semn"
altfel
   daca ( b >= 0 ) atunci
      scrie "au acelasi semn"
   altel
      scrie "nu au acelasi semn"

SAU

intregi a, b
citeste a, b
daca ( ( a < 0 ) AND ( b < 0 ) ) OR ( ( a >= 0 AND b >= 0 ) ) atunci
    scrie "au acelasi semn"
altfel 
    scrie "nu au acelasi semn"   

SAU

intregi a, b
citeste a, b
daca  ( a < 0 AND b >= 0 ) OR ( a >= 0 AND b < 0 )  atunci
    scrie "nu au acelasi semn"
altfel 
    scrie "au acelasi semn"

Tema 4 Laborator

N are ultimele 2 cifre consecutive?

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

N copii se pot aseza in forma de patrat

  • Varianta1: să se spună dacă n copii se pot așeza în formă de pătrat plin. Exemplu: Nouă copii se pot așeza în formă de pătrat astfel:
x x x
x x x
x x x
  • Varianta2: să se spună dacă n copii se pot așeza în formă de pătrat gol ( pe laturile unui patrat. In imaginile de mai sus vom considera ca locuri posibile doar conturul patratului. De exemplu 12 copii se pot aseza sub forma unui patrat gol astfel:
x x x x 
x     x
x     x
x x x x

An bisect

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

Tema Pbinfo

Usor

  • checkcolor - minim, maxim
  • ciford - ordonarea cifrelor unui numar de 3 cifre
  • cifmid - afisare cifra din mijloc ca valoare
  • 5numere - suma celor mai mari 3 numere din 5 date
  • nrsumcifmax - afisarea tuturor numerelor egale cu max din 3 numere

Mediu

Dificil

Optional

Problema Triunghi1 de pe campion

Tema olimpici 1

Tema olimpici 2