Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

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 puterea b): trebuie să îl înmulțim pe a în mod repetat, de b 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:

  1. Se execută instrucțiunea inițializare;
  2. Cât timp condiția este adevărată:
    1. Se execută instrucțiune 1, instrucțiune 2, …;
    2. Se execută instrucțiunea continuare;

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

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 forul 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 0uri.

#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

# Problemă Dificultate
57. Medie patratica Ușoară (2 )
501. Afisare numere pare Ușoară (2 )
505. Cate sunt multiple Medie (4 )
293. Gard Medie (4 )
503. Puteri mai mici Ușoară (2 )
Vrei mai multe probleme? Pe această pagină găsești întreaga listă de probleme propuse.

Bibliografie și alte resurse

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Instrucțiunea for (structuri repetitive)Pointer în C++. Variabile de tipul char * (char steluță)Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicVerifică dacă un număr este par sau impar fără modulo în C++Funcții în C++. Ce sunt subprogrameleMaximul și minimul a două valori în C++Citește un șir de caractere cu spații în C++Verifică dacă o literă este vocală în C++Vectorii în C++: declarare și parcurgereCifra maximă și minimă a unui număr în C++Valoarea absolută (modulul) unui număr în C++Aflarea sumei primelor N sume GaussVerifică dacă un număr aparține șirului Fibonacci în C++Interclasarea a doi vectori în C++CMMMC a două numere în C++ (cel mai mic multiplu comun)Instrucțiunea continue (structuri repetitive)Cel mai mic număr cu suma cifrelor N în C++Ce înseamnă endl în C++?Aria și circumferința unui cerc în C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Șiruri de caractere în C++. Tot ce trebuie să știiMatrice pătratice în C++. Diagonala principală și secundarăCifrele unui număr. Prelucrarea cifrelor unui număr în C++Inversarea unui șir de caractere în C++Maximul și minimul a trei valori în C++Indicatorul lui Euler în C++Suma numerelor naturale dintr-un interval dat în C++Suma 1 + 2 + 3 + ... + N în C++Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorStructuri repetitive (while, do while, for, etc)Mediana unui șir de valori în C++Cel mai semnificativ bit în C++Al N-lea termen dintr-o progresie aritmeticăNumărul de divizori al unui număr în C++Recursivitate în C++Tipuri de date în C++: numere întregi, reale, caractere și alteleCel mai frecvent element dintr-un șir în C++Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Transformarea unei litere mari în literă mică în C++Vectori de frecvență (de apariții) în C++Verifică dacă un caracter este cifră în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortTransformarea unui număr din baza 2 în baza 10 în C++Divide et Impera (metodă de programare C++)Complexitatea unui algoritm (timp și spațiu) în C++Numărul de cifre ale factorialului unui numărCel mai mare divizor comun (CMMDC) a două numere în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleDo while vs while în C++ - Care e diferența?Calculul combinărilor de n luate câte k (nCk) în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Numărul combinărilor în C++ (formula combinărilor)Numărul aranjamentelor în C++ (formula aranjamentelor)Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăOglinditul recursiv al unui număr în C++Copiuțe: Cifrele unui numărRădăcina cubică a unui număr în C++ (cube root)CMMDC recursiv a două numere naturale în C++Codul ASCII (tabel complet)Combinatorică în C++: permutări, aranjamente, combinări și alteleCum să citești și să afișezi în fișiere în C++Suma divizorilor unui număr în C++Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Operații cu numere mari în C++ - Toate funcțiile explicateInterschimbarea a două variabile în C++ (3 metode)Ce înseamnă variabilă globală și locală în C++?Factorialul unui număr în C++Vectorii în C++: citire și afișareMaximul și minimul unui vector în C++Cifra maximă a unui număr recursiv în C++Verifică dacă un caracter este literă în C++De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Distanța dintre două puncte în C++Bordarea unei matrice în C++Cifra de control a unui numărInstrucțiunea break (structuri repetitive)Radicalul unui număr în C++ (rădăcina pătrată)Verifică dacă un număr dat este o putere de 2 în C++Instrucțiunea de decizie în C++: if, else, switch, caseAl N-lea termen Fibonacci în C++Comentarii în C++Instrucțiunea while (structuri repetitive)Cea mai lungă secvență de elemente crescătoare în C++Citirea și afișarea matricelor în C++Cum să calculezi instant 2 la puterea N în C++Maximul și minimul a n valori în C++Ciurul lui Eratostene în C++Verificare dacă un număr este palindrom în C++Câte numere naturale sunt într-un interval dat? (C++)Verificarea unui an bisect în C++Suma elementelor unui vector recursiv în C++Transformarea unei litere mici în literă mare în C++Numărul permutărilor în C++ (formula permutărilor)Numărul de divizori primi ai unui număr în C++Numărul de apariții al unui număr într-un vector în C++Verifică dacă o literă este mică sau mare în C++Instrucțiunea do while (structuri repetitive)Verifică dacă trei puncte sunt coliniare C++Ce este o variabilă unsigned în C++?Verificare număr prim în C++ (Clasa a IX-a)Căutare binară în C++Aria unui triunghi folosind coordonatele acestora în C++Șirul lui Fibonacci în C++Generarea șirului Fibonacci generalizat în C++Afișarea divizorilor primi ai unui număr în C++Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Materia pentru olimpiada de informatică - tot ce trebuie să știiTransformarea unui număr din baza 10 în baza 2 în C++Inversarea unui vector în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Prima cifră a unui număr în C++Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Ce este o funcție void în C++?Află secolul unui an citit de la tastatură în C++Al N-lea termen dintr-o progresie geometricăNumere triunghiulare. Verificarea unui număr triunghiularNumărul minim de peroane pentru o gară în C++Oglinditul unui număr în C++Tipul struct în C++. Ce sunt structurile de date neomogeneCel mai puțin semnificativ bit în C++Afișarea elementelor unui vector recursiv în C++Cum să afișezi partea întreagă a unui număr real în C++Verificare dacă șir de caractere este palindrom în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont