Instrucțiunea switch
Este utilizată pentru a selecta una dintre mai multe opțiuni bazate pe valoarea unei variabile. Este mai eficientă atunci când avem de ales între multe cazuri discrete.
Sintaxă:
switch (expresie) {
case valoare1:
// Cod executat dacă expresia == valoare1
break;
case valoare2:
// Cod executat dacă expresia == valoare2
break;
// ... alte cazuri
default:
// Cod executat dacă niciun caz nu se potrivește
}
Exemplu:
char optiune = 'B';
switch (optiune) {
case 'A':
std::cout << "Ai ales optiunea A." << std::endl;
break;
case 'B':
std::cout << "Ai ales optiunea B." << std::endl;
break;
case 'C':
std::cout << "Ai ales optiunea C." << std::endl;
break;
default:
std::cout << "Optiune invalida." << std::endl;
}
Notă: Este important să folosești break după fiecare caz pentru a preveni „fall-through”, adică continuarea execuției în cazurile următoare. Dacă omiti break, execuția va continua până la primul break întâlnit sau până la sfârșitul instrucțiunii switch.
Exemplu:
Programul de mai jos ne permite să tastăm doar cele trei litere mari A,B,C folosind exemplul de mai sus.
#include <iostream>
using namespace std;
int main()
{
char optiune;
cin >> optiune;
switch (optiune) {
case 'A':
std::cout << "Ai ales optiunea A." << std::endl;
break;
case 'B':
std::cout << "Ai ales optiunea B." << std::endl;
break;
case 'C':
std::cout << "Ai ales optiunea C." << std::endl;
break;
default:
std::cout << "Optiune invalida." << std::endl;
}
return 0;
}
Operatorul Ternar (?:) în C++
Operatorul ternar (?:) este un operator condițional în C++ care permite evaluarea rapidă a unei condiții și returnarea unuia dintre cele două valori posibile, în funcție de rezultatul acelei condiții. Este o modalitate concisă și eficientă de a efectua decizii simple, echivalentă cu o instrucțiune if...else scurtă.
Sintaxa Operatorului Ternar
condiție ? expresie_dacă_adevărat : expresie_dacă_fals;
condiție: O expresie care este evaluată ca true sau false.
expresie_dacă_adevărat: Valoarea returnată dacă condiție este adevărată.
expresie_dacă_fals: Valoarea returnată dacă condiție este falsă.
Exemplu:
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 20;
int maxim = (a > b) ? a : b;
cout << "Valoarea maximă este: " << maxim << endl;
return 0;
}
Explicație:
- Se compară
așib. - Dacă
aeste mai mare decâtb,maximprimește valoarea luia. - Altfel,
maximprimește valoarea luib.
Output:
Valoarea maximă este: 20
Operatorul Ternar în Expresii Mai Complexe
Operatorul ternar poate fi utilizat în diverse contexte, cum ar fi în parametrii funcțiilor, în expresii aritmetice, sau chiar în combinație cu alte operatori.
Exemplu:
#include <iostream>
using namespace std;
int main() {
int a = 15, b = 25, c = 20;
int maxim = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
cout << "Valoarea maximă este: " << maxim << endl;
return 0;
}
Output:
Valoarea maximă este: 25
Operatorul Ternar vs. Instrucțiunea if...else
Avantaje ale operatorului ternar:
- Concizie: Codul este mai scurt și mai compact.
- În linie: Poate fi utilizat în expresii, cum ar fi în atribuiri sau parametri de funcții.
Dezavantaje:
- Citibilitate redusă: Codul poate deveni greu de înțeles dacă este folosit excesiv sau într-un mod complex.
- Limitări în complexitate: Nu este potrivit pentru decizii complexe sau multiple ramificații.
Exemplu echivalent folosind if...else:
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 20;
int maxim;
if (a > b) {
maxim = a;
} else {
maxim = b;
}
cout << "Valoarea maximă este: " << maxim << endl;
return 0;
}
Operator Ternar în Atribuiri Multiple:
#include <iostream>
using namespace std;
int main() {
int a = 3, b = 4, c = 5;
int maxim = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
std::cout << "Maximul este: " << maxim << std::endl;
return 0;
}
Bune practici
- Folosește-l pentru Decizii Simple:
- Utilizează operatorul ternar pentru condiții simple care pot fi ușor înțelese într-o singură linie.
- Menține Claritatea:
- Dacă operatorul ternar face codul mai puțin clar, preferă
if...else.
- Dacă operatorul ternar face codul mai puțin clar, preferă
- Documentează Deciziile Complexe:
- Dacă este necesar să folosești operatorul ternar într-un mod mai complex, adaugă comentarii pentru a explica logica.
- Testează Cu Atenție:
- Asigură-te că toate ramurile condiționale sunt corect evaluate și că nu există erori de tip.
Probleme sugestive de rezolvat cu instrucțiunea SWITCH:
Mai jos sunt zece probleme sugestive care implică utilizarea instrucțiunii switch în C++:
1. Conversia notelor în calificative
Scrie un program care citește o notă între 1 și 10 și afișează calificativul corespunzător: 10 – „Excelent”, 9 – „Foarte bine”, 7-8 – „Bine”, 5-6 – „Suficient”, 1-4 – „Insuficient”.
2. Calculator simplu
Scrie un program care citește două numere și un operator matematic (+, -, *, /). Folosind switch, efectuează operația respectivă și afișează rezultatul. Afișează un mesaj de eroare dacă se introduce un operator nevalid.
3. Conversia zilei săptămânii
Scrie un program care citește un număr între 1 și 7 și afișează ziua corespunzătoare a săptămânii: 1 pentru Luni, 2 pentru Marți, și așa mai departe până la 7 pentru Duminică. Dacă numărul nu este între 1 și 7, afișează un mesaj de eroare.
4. Luna anului
Scrie un program care citește un număr între 1 și 12 și afișează numele lunii corespunzătoare (1 – Ianuarie, 2 – Februarie, etc.). Dacă numărul este în afara intervalului, afișează un mesaj de eroare.
5. Tipul de figură geometrică
Scrie un program care citește un număr între 3 și 6 și afișează ce figură geometrică corespunde acelui număr de laturi: 3 – Triunghi, 4 – Pătrat, 5 – Pentagrame, 6 – Hexagon.
6. Clasificarea unui caracter
Scrie un program care citește un caracter de la tastatură și folosește switch pentru a afișa dacă acesta este o vocală mică (a, e, i, o, u), o vocală mare (A, E, I, O, U), o consoană sau un caracter special.
7. Afișarea anotimpului
Scrie un program care citește un număr între 1 și 12 (corespunzător unei luni) și afișează anotimpul: 12, 1, 2 – Iarnă; 3, 4, 5 – Primăvară; 6, 7, 8 – Vară; 9, 10, 11 – Toamnă.
8. Conversia valorilor de bancnote
Scrie un program care citește un număr întreg și, folosind switch, afișează valoarea unei bancnote românești: 1 – 1 leu, 5 – 5 lei, 10 – 10 lei, 50 – 50 lei, 100 – 100 lei, 200 – 200 lei, 500 – 500 lei. Afișează un mesaj de eroare pentru orice valoare nevalidă.
9. Conversia gradelor de dificultate
Scrie un program care citește un număr între 1 și 5, unde fiecare număr corespunde unui nivel de dificultate al unui joc (1 – Ușor, 2 – Mediu, 3 – Dificil, 4 – Foarte dificil, 5 – Expert). Afișează un mesaj corespunzător pentru fiecare nivel.
10. Calculator de reduceri
Scrie un program care citește un cod de reducere între 1 și 4 și, folosind switch, aplică o reducere de preț corespunzătoare: 1 – 5%, 2 – 10%, 3 – 15%, 4 – 20%. Dacă se introduce un cod invalid, afișează un mesaj de eroare.
Probleme sugestive de rezolvat cu operatorul ternar:
Operatorul ternar (? :) este un operator condițional în C++ care permite evaluarea unei expresii și returnarea unei valori pe baza unei condiții într-o formă compactă. Iată zece probleme sugestive care pun accent pe utilizarea operatorului ternar:
1. Par sau impar
Scrie un program care citește un număr întreg și folosește operatorul ternar pentru a afișa dacă numărul este par sau impar.(indicație: se folosește operatorul % unde a%b = restul lui a/b).
2. Pozitiv, negativ sau zero
Scrie un program care citește un număr întreg și utilizează operatorul ternar pentru a determina dacă numărul este pozitiv, negativ sau zero.
3. Major sau minor
Scrie un program care citește vârsta unei persoane și folosește operatorul ternar pentru a afișa dacă persoana este majoră (vârsta >= 18) sau minoră.
4. Discount aplicat pe baza prețului
Scrie un program care citește prețul unui produs și folosește operatorul ternar pentru a aplica un discount de 10% dacă prețul este mai mare de 100, și de 5% dacă este mai mic sau egal cu 100.
5. Afișarea unei litere majuscule sau minuscule
Scrie un program care citește un caracter de la tastatură și folosește operatorul ternar pentru a determina dacă acesta este o literă mică sau mare și afișează un mesaj corespunzător.
6. Verificarea unui număr de tip „perfect square”
Scrie un program care citește un număr întreg și utilizează operatorul ternar pentru a verifica dacă este un pătrat perfect (adică rădăcina sa pătrată este un număr întreg).
7. Reducere la un magazin online
Scrie un program care citește valoarea totală a unei comenzi. Dacă suma este mai mare de 200 lei, se aplică o reducere de 15%. Dacă suma este mai mică sau egală cu 200, reducerea este de 5%. Folosește operatorul ternar pentru calculul reducerii.
8. Verificare divizibilitate
Scrie un program care citește un număr și folosește operatorul ternar pentru a determina dacă numărul este divizibil atât cu 3, cât și cu 5. Afișează un mesaj corespunzător.
Aceste probleme oferă oportunitatea de a exersa utilizarea instrucțiunii switch și a operatorului ternar într-un mod eficient și concis, pentru rezolvarea problemelor de logică simplă și condiționare.
