Probleme propuse
Problema 1 – Transformări de tip
Se citește un număr întreg n.
Afișați, pe linii separate:
- valoarea lui
ntransformată înfloat; - valoarea lui
ntransformată înstr; - tipul valorii obținute la prima conversie;
- tipul valorii obținute la a doua conversie.
Problema 2 – Real, întreg și caracter
Se citește un număr real pozitiv x.
Se elimină partea zecimală a numărului folosind
int().
Numărul întreg obținut reprezintă un cod Unicode valid. Afișați caracterul corespunzător acelui cod.
Problema 3 – Cifră și expresie algebrică
Se citește un singur caracter care reprezintă o cifră.
Transformați caracterul în număr întreg n.
Calculați valoarea expresiei:
n ** 2 + 3 * n + 1
Afișați rezultatul.
Problema 4 – Caracter și succesor
Se citește un caracter.
Afișați:
- codul Unicode al caracterului;
- caracterul care are codul Unicode cu o unitate mai mare.
Se garantează că există caracterul corespunzător codului următor.
Problema 5 – Afișare cu separator
Se citesc trei numere întregi
a, b și c.
Afișați cele trei valori pe aceeași linie, astfel încât
între două valori consecutive să apară exact două caractere
-.
Pentru valorile 4, 7 și 12,
afișarea trebuie să fie:
4--7--12
Problema 6 – O singură instrucțiune print()
Se citesc trei numere întregi.
Folosind o singură instrucțiune print(),
afișați cele trei numere pe trei linii diferite.
Problema 7 – Modificarea succesivă a variabilelor
Se consideră programul:
a = 8
b = 5
c = a + b
a = c - 2
b = a + c
c = b - a
print(a, b, c)
Determinați, fără a executa programul, valorile finale
ale variabilelor a, b și c.
Precizați exact ce va afișa programul.
Problema 8 – Expresie aritmetică
Se citesc trei numere întregi
a, b și c,
unde c este nenul.
Calculați și afișați valoarea expresiei:
(a + b) * c - a ** 2 + b // c + b % c
Respectați ordinea de efectuare a operațiilor.
Problema 9 – Cât și rest
Se citesc două numere întregi pozitive
n și d, cu d != 0.
Determinați câtul împărțirii întregi a lui n
la d și restul împărțirii.
Afișați cele două valori pe linii separate.
Problema 10 – Prioritatea operatorilor
Se citesc trei numere întregi pozitive
a, b și c,
cu c != 0.
Calculați:
(a + b ** 2) // c + (a * b) % c
Afișați rezultatul.
Problema 11 – Apartenența la un interval
Se citește un număr întreg x.
Afișați DA dacă x aparține
intervalului închis [-15, 28] și
NU în caz contrar.
Condiția trebuie construită folosind operatorul logic
and.
Problema 12 – În afara unui interval
Se citește un număr întreg x.
Afișați DA dacă x se află
în afara intervalului închis [10, 30].
În rezolvare trebuie folosit operatorul logic not.
Problema 13 – Număr pozitiv și par
Se citește un număr întreg n.
Afișați DA dacă numărul este simultan
strict pozitiv și par.
În caz contrar, afișați NU.
Problema 14 – Condiție alternativă
Se citește un număr întreg n.
Afișați DA dacă cel puțin una dintre
următoarele condiții este adevărată:
neste negativ;neste divizibil cu 5.
În caz contrar, afișați NU.
Problema 15 – Clasificarea unui număr
Se citește un număr întreg n.
Afișați:
NEGATIV, dacăn < 0;ZERO, dacăn == 0;POZITIV PAR, dacăn > 0și este par;POZITIV IMPAR, dacăn > 0și este impar.
Problema 16 – Maximul a trei numere
Se citesc trei numere întregi
a, b și c.
Determinați și afișați cel mai mare dintre cele trei numere.
Nu utilizați funcția max().
Rezolvarea trebuie să utilizeze comparații și
instrucțiuni condiționale.
Problema 17 – Ordinea a trei numere
Se citesc trei numere întregi
a, b și c.
Afișați:
CRESCATOR, dacăa < b < c;DESCRESCATOR, dacăa > b > c;NICIUNA, în orice alt caz.
Ordinea este strictă, deci două valori egale nu formează o ordine crescătoare sau descrescătoare.
Problema 18 – Clasificarea unui caracter
Se citește un singur caracter. Se garantează că acesta este fie o literă englezească, fie o cifră.
Folosind codul Unicode al caracterului, determinați dacă acesta este:
- o literă mare;
- o literă mică;
- o cifră.
Nu utilizați metode de șiruri.
Problema 19 – Succesor circular
Se citește o literă mică englezească.
Afișați litera care urmează în alfabet.
Pentru litera z, următoarea literă este
considerată a.
Utilizați ord(), chr() și
instrucțiuni condiționale.
Problema 20 – Urmărirea unui program
Fără a executa programul, determinați exact ce se va afișa:
x = 7
y = 3
x = x + y
y = x - y
x = x - y
if x > y and x % 2 == 0:
z = x // y
elif x < y or y % 2 == 0:
z = x + y
else:
z = x - y
print(x, y, z, sep="---")
Pentru justificare, urmăriți valorile lui x,
y și z după fiecare instrucțiune
relevantă.
Rezolvări
Problema 1 – Transformări de tip
Se citește un număr întreg n.
Afișați, pe linii separate:
- valoarea lui
ntransformată înfloat; - valoarea lui
ntransformată înstr; - tipul valorii obținute la prima conversie;
- tipul valorii obținute la a doua conversie.
Rezolvare
n = int(input())
x = float(n)
y = str(n)
print(x)
print(y)
print(type(x))
print(type(y))
Variabila n este de tip int.
Prin float(n) obținem un număr real,
iar prin str(n) obținem un text.
Prin urmare:
x → float
y → str
Problema 2 – Real, întreg și caracter
Se citește un număr real pozitiv x.
Se elimină partea zecimală a numărului folosind
int().
Numărul întreg obținut reprezintă un cod Unicode valid. Afișați caracterul corespunzător acelui cod.
Rezolvare
x = float(input())
n = int(x)
c = chr(n)
print(c)
Mai întâi citim un număr real.
int(x) elimină partea zecimală.
Nu realizează rotunjirea.
Apoi folosim chr() pentru a transforma
codul întreg în caracter.
De exemplu:
x = 65.9
int(x) → 65
chr(65) → "A"
Problema 3 – Cifră și expresie algebrică
Se citește un singur caracter care reprezintă o cifră.
Transformați caracterul în număr întreg n.
Calculați valoarea expresiei:
n ** 2 + 3 * n + 1
Afișați rezultatul.
Rezolvare
c = input()
n = int(c)
rezultat = n ** 2 + 3 * n + 1
print(rezultat)
input() returnează un str.
De aceea, caracterul citit trebuie transformat în int.
Pentru c = "4":
n = 4
4 ** 2 + 3 * 4 + 1
= 16 + 12 + 1
= 29
Problema 4 – Caracter și succesor
Se citește un caracter.
Afișați:
- codul Unicode al caracterului;
- caracterul care are codul Unicode cu o unitate mai mare.
Se garantează că există caracterul corespunzător codului următor.
Rezolvare
c = input()
cod = ord(c)
urmator = chr(cod + 1)
print(cod)
print(urmator)
ord(c) transformă caracterul în codul său Unicode.
Adăugăm 1 la cod și folosim chr() pentru
a obține caracterul corespunzător.
Problema 5 – Afișare cu separator
Se citesc trei numere întregi
a, b și c.
Afișați cele trei valori pe aceeași linie, astfel încât
între două valori consecutive să apară exact două caractere
-.
Pentru valorile 4, 7 și 12,
afișarea trebuie să fie:
4--7--12
Rezolvare
a = int(input())
b = int(input())
c = int(input())
print(a, b, c, sep="--")
Parametrul sep reprezintă separatorul dintre
valorile transmise lui print().
Deoarece avem sep="--", între valori apar
exact două caractere -.
Problema 6 – O singură instrucțiune print()
Se citesc trei numere întregi.
Folosind o singură instrucțiune print(),
afișați cele trei numere pe trei linii diferite.
Rezolvare
a = int(input())
b = int(input())
c = int(input())
print(a, b, c, sep="\n")
\n reprezintă trecerea la o linie nouă.
Prin urmare, folosirea lui ca separator determină afișarea fiecărei valori pe o linie separată.
Problema 7 – Modificarea succesivă a variabilelor
Se consideră programul:
a = 8
b = 5
c = a + b
a = c - 2
b = a + c
c = b - a
print(a, b, c)
Determinați, fără a executa programul, valorile finale
ale variabilelor a, b și c.
Precizați exact ce va afișa programul.
Rezolvare
| Instrucțiune | a | b | c |
|---|---|---|---|
| Inițial | 8 | 5 | — |
| c = a + b | 8 | 5 | 13 |
| a = c - 2 | 11 | 5 | 13 |
| b = a + c | 11 | 24 | 13 |
| c = b - a | 11 | 24 | 13 |
Programul afișează:
11 24 13
Problema 8 – Expresie aritmetică
Se citesc trei numere întregi
a, b și c,
unde c este nenul.
Calculați și afișați valoarea expresiei:
(a + b) * c - a ** 2 + b // c + b % c
Respectați ordinea de efectuare a operațiilor.
Rezolvare
a = int(input())
b = int(input())
c = int(input())
rezultat = (a + b) * c - a ** 2 + b // c + b % c
print(rezultat)
Ordinea operațiilor este:
- paranteze;
- puteri;
- înmulțire, împărțire, împărțire întreagă și rest;
- adunare și scădere.
Problema 9 – Cât și rest
Se citesc două numere întregi pozitive
n și d, cu d != 0.
Determinați câtul împărțirii întregi a lui n
la d și restul împărțirii.
Afișați cele două valori pe linii separate.
Rezolvare
n = int(input())
d = int(input())
cat = n // d
rest = n % d
print(cat)
print(rest)
Operatorul // calculează câtul întreg,
iar operatorul % calculează restul.
Pentru exemplul:
17 // 5 = 3
17 % 5 = 2
Problema 10 – Prioritatea operatorilor
Se citesc trei numere întregi pozitive
a, b și c,
cu c != 0.
Calculați:
(a + b ** 2) // c + (a * b) % c
Afișați rezultatul.
Rezolvare
a = int(input())
b = int(input())
c = int(input())
rezultat = (a + b ** 2) // c + (a * b) % c
print(rezultat)
Puterea are prioritate mai mare decât înmulțirea și împărțirea.
Parantezele sunt evaluate înaintea celorlalte operații.
Problema 11 – Apartenența la un interval
Se citește un număr întreg x.
Afișați DA dacă x aparține
intervalului închis [-15, 28] și
NU în caz contrar.
Condiția trebuie construită folosind operatorul logic
and.
Rezolvare
x = int(input())
if x >= -15 and x <= 28:
print("DA")
else:
print("NU")
Pentru ca x să aparțină intervalului,
trebuie îndeplinite simultan cele două condiții:
x >= -15
x <= 28
De aceea folosim and.
Problema 12 – În afara unui interval
Se citește un număr întreg x.
Afișați DA dacă x se află
în afara intervalului închis [10, 30].
În rezolvare trebuie folosit operatorul logic not.
Rezolvare
x = int(input())
if not (x >= 10 and x <= 30):
print("DA")
else:
print("NU")
Expresia:
x >= 10 and x <= 30
verifică dacă numărul este în interval.
Aplicând not, obținem exact condiția opusă:
numărul se află în afara intervalului.
Problema 13 – Număr pozitiv și par
Se citește un număr întreg n.
Afișați DA dacă numărul este simultan
strict pozitiv și par.
În caz contrar, afișați NU.
Rezolvare
n = int(input())
if n > 0 and n % 2 == 0:
print("DA")
else:
print("NU")
Prima condiție verifică dacă numărul este pozitiv:
n > 0
A doua verifică dacă este par:
n % 2 == 0
Deoarece trebuie să fie adevărate ambele condiții,
folosim and.
Problema 14 – Condiție alternativă
Se citește un număr întreg n.
Afișați DA dacă cel puțin una dintre
următoarele condiții este adevărată:
neste negativ;neste divizibil cu 5.
În caz contrar, afișați NU.
Rezolvare
n = int(input())
if n < 0 or n % 5 == 0:
print("DA")
else:
print("NU")
Avem două condiții alternative. Este suficient ca una dintre ele să fie adevărată.
De aceea folosim operatorul or.
Problema 15 – Clasificarea unui număr
Se citește un număr întreg n.
Afișați:
NEGATIV, dacăn < 0;ZERO, dacăn == 0;POZITIV PAR, dacăn > 0și este par;POZITIV IMPAR, dacăn > 0și este impar.
Rezolvare
n = int(input())
if n < 0:
print("NEGATIV")
elif n == 0:
print("ZERO")
elif n % 2 == 0:
print("POZITIV PAR")
else:
print("POZITIV IMPAR")
Cazurile sunt verificate de sus în jos.
Dacă n este negativ, primul bloc este executat.
Dacă nu, se verifică următoarea condiție și așa mai departe.
Problema 16 – Maximul a trei numere
Se citesc trei numere întregi
a, b și c.
Determinați și afișați cel mai mare dintre cele trei numere.
Nu utilizați funcția max().
Rezolvarea trebuie să utilizeze comparații și
instrucțiuni condiționale.
Rezolvare
a = int(input())
b = int(input())
c = int(input())
maxim = a
if b > maxim:
maxim = b
if c > maxim:
maxim = c
print(maxim)
Presupunem inițial că a este maximul.
Dacă b este mai mare decât valoarea memorată,
actualizăm maximul.
Apoi facem aceeași verificare pentru c.
Problema 17 – Ordinea a trei numere
Se citesc trei numere întregi
a, b și c.
Afișați:
CRESCATOR, dacăa < b < c;DESCRESCATOR, dacăa > b > c;NICIUNA, în orice alt caz.
Ordinea este strictă, deci două valori egale nu formează o ordine crescătoare sau descrescătoare.
Rezolvare
a = int(input())
b = int(input())
c = int(input())
if a < b and b < c:
print("CRESCATOR")
elif a > b and b > c:
print("DESCRESCATOR")
else:
print("NICIUNA")
Pentru ca numerele să fie strict crescătoare trebuie să avem simultan:
a < b
b < c
De aceea folosim and.
Pentru ordinea descrescătoare procedăm analog.
Problema 18 – Clasificarea unui caracter
Se citește un singur caracter. Se garantează că acesta este fie o literă englezească, fie o cifră.
Folosind codul Unicode al caracterului, determinați dacă acesta este:
- o literă mare;
- o literă mică;
- o cifră.
Nu utilizați metode de șiruri.
Rezolvare
c = input()
cod = ord(c)
if cod >= ord("A") and cod <= ord("Z"):
print("LITERA MARE")
elif cod >= ord("a") and cod <= ord("z"):
print("LITERA MICA")
else:
print("CIFRA")
Verificăm intervalele de coduri Unicode.
A ... Z
a ... z
0 ... 9
Dacă valoarea se află între codurile lui A
și Z, avem o literă mare.
Dacă se află între codurile lui a și z,
avem o literă mică.
În orice alt caz, caracterul este o cifră.
Problema 19 – Succesor circular
Se citește o literă mică englezească.
Afișați litera care urmează în alfabet.
Pentru litera z, următoarea literă este
considerată a.
Utilizați ord(), chr() și
instrucțiuni condiționale.
Rezolvare
c = input()
if c == "z":
print("a")
else:
print(chr(ord(c) + 1))
Pentru z avem un caz special:
după z urmează a.
Pentru orice altă literă mică, codul Unicode este mărit cu 1.
Problema 20 – Urmărirea unui program
Fără a executa programul, determinați exact ce se va afișa:
x = 7
y = 3
x = x + y
y = x - y
x = x - y
if x > y and x % 2 == 0:
z = x // y
elif x < y or y % 2 == 0:
z = x + y
else:
z = x - y
print(x, y, z, sep="---")
Pentru justificare, urmăriți valorile lui x,
y și z după fiecare instrucțiune
relevantă.
Rezolvare
Valorile inițiale sunt:
x = 7
y = 3
După:
x = x + y
obținem:
x = 10
y = 3
După:
y = x - y
obținem:
x = 10
y = 7
După:
x = x - y
obținem:
x = 3
y = 7
Verificăm prima condiție:
x > y and x % 2 == 0
Prima parte este:
3 > 7
False
Prin urmare, primul bloc nu se execută.
Verificăm condiția din elif:
x < y or y % 2 == 0
Prima parte este:
3 < 7
True
Deoarece avem operatorul or, întreaga condiție
este adevărată.
Se execută:
z = x + y
Deci:
z = 3 + 7
z = 10
În final:
x = 3
y = 7
z = 10
Instrucțiunea:
print(x, y, z, sep="---")
va afișa:
3---7---10