
Instrucțiunea for (structuri repetitive)
Această lecție este despre structura repetitivă for: definiție cu animații, exemple și probleme propuse.
De multe ori se întâmplă să avem nevoie să repetăm un set de instrucțiuni de un număr de ori. Iată câteva exemple:
- Să calculăm valoarea
a^b
(a
la putereab
): trebuie să îl înmulțim pea
în mod repetat, deb
ori; - Să calculăm media a
n
numere.
Limbajul C++ ne oferă o varietate de modalități de a repeta un set de
instrucțiuni. În această lecție vom vorbi despre structura repetitivă for
,
dar dacă vrei să vezi toate structurile repetitive în C++, poți intra pe
această pagină.
Instrucțiunea for
este utilă în cazul în care vrem să executăm niște
instrucțiuni de un număr fix de ori — spre deosebire de while
sau do while
, când executăm codul pe baza unei condiții oarecare.
Se recomandă să cunoști structura de decizie (if
și switch
) și structura repetitivă
while înainte de a
parcurge această lecție.
Sintaxa instrucțiunii for
Iată sintaxa acestei structuri.
for(inițializare; condiție; continuare) {
instrucțiune 1;
instrucțiune 2;
…
}
Sintaxa instrucțiunii for
poate părea dificilă pentru început, însă se
dovedește a fi foarte ușor de înțeles dacă analizăm modul de execuție.
Modul de execuție a instrucțiunii for
Instrucțiunea for
se execută astfel:
- Se execută instrucțiunea
inițializare
; - Cât timp
condiția
este adevărată: 1. Se executăinstrucțiune 1
,instrucțiune 2
, …; 2. Se execută instrucțiuneacontinuare
;
Observații
Practic, echivalentul instrucțiunii for
este următorul:
inițializare;
while(condiție) {
instrucțiune 1;
instrucțiune 2;
…
continuare;
}
Deși avem un echivalent al codului folosind while
, care este astfel mai
versatil, observăm că acest cod poate fi mai greu de înțeles — nu știm, cel
puțin la prima vedere, dacă instrucțiunea inițializare
are legătură sau nu
cu structura repetitivă, și nu știm dacă instrucțiunea continuare
are
legătură sau nu cu celelalte instrucțiuni dintre acolade.
Instrucțiunile inițializare
, condiție
și continuare
Pot fi lăsate goale.
Iată un echivalent pentru while(n == n)
:
for(; n == n;) {
…
}
În exemplul de mai sus, instrucțiunea de inițializare
este inexistentă, și
nu există nicio instrucțiune de continuare
.
Exemple
Să zicem că vrem să afișăm primele n
numere naturale nenule. Putem proceda
astfel:
for(int i = 1; i <= n; i++) {
cout << i << " ";
}
Mai întâi, inițializăm o variabilă i
, de tip int
, egală cu 1
. Condiția
de oprire este i <= n
, iar la fiecare pas, instrucțiunea de continuare este
i++
. Putem urmări ce se întâmplă în animația de mai jos:
Variabilă | Valoare |
---|---|
n | 5 |
i | 554433221- |
Consolă: 1 2 3 4 5
În programare, se obișnuiește să numești variabila de iterație (numit și iteratorul)
i
,j
, și așa mai departe.
Sau, putem parcurge for
ul invers:
for(int i = n; i >= 1; i--) {
cout << i << " ";
}
Probleme rezolvate
Media geometrică
Să se calculeze media geometrică a n
numere naturale. Media geometrică este
egală cu rădăcina de ordinul n
a produsului numerelor. Testează-ți
rezolvarea pe această pagină.
Exemplu: Pentru n = 3
și numerele 1, 8, 27
, rezultatul va fi 6
.
Rezolvare: Vom citi n
, după care folosind o structură repetitivă de tip
for
, vom calcula produsul numerelor. La final, ridicăm numărul la puterea 1 / n
.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n, prod = 1;
cin >> n;
for(int i = 1; i <= n; ++i) {
int x;
cin >> x;
prod *= x;
}
cout << pow(prod, 1.0 / n);
}
Zece la puterea n
Dându-se un număr natural n
(cel mult egal cu 100
), să se afișeze pe ecran
rezultatul operației 10^n
. Testează-ți rezolvarea pe această
pagină.
Exemplu: Pentru n = 3
, se va afișa 1000
.
Rezolvare: Pentru valori mici ale lui n
, putem să înmulțim repetat o
variabilă cu 10
. Cu toate acestea, răspunsul pentru n = 100
nu va încăpea
nici măcar în tipul de dată long long
. De aceea, mai simplu este să folosim
un artificiu de afișare: afișăm pe ecran 1
, urmat de n
0
uri.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cin >> n;
cout << "1";
for(int i = 1; i <= n; ++i) {
cout << "0";
}
}
Exercițiu propus
Completează următoarea secvență de cod:
Să se calculeze valoarea a^b
(a
la puterea b
):
int a, b, raspuns = 1;
cin >> a >> b;
for(int i = ???; i <= b; i++) {
raspuns *= ???;
}
cout << raspuns;
Probleme propuse
Setul de probleme 124 nu a fost găsit.
Bibliografie și alte resurse
DS
Autorul acestei lecții
Dominic Satnoianu
Această lecție a fost redactată de către Dominic Satnoianu.
© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.
Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.
Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.
Comentarii 0