// 30 de variabile separate! int nota1, nota2, nota3; int nota4, nota5, nota6; int nota7, nota8, nota9; // ... inca 21 de variabile ... int nota28, nota29, nota30; // Vrei suma? 30 de adunari! int suma = nota1 + nota2 + nota3 + nota4 + nota5 + nota6 // ... + inca 24 ...
// O singura linie! int note[30]; // Citire cu for: for (int i = 0; i < 30; i++) cin >> note[i]; // Suma cu for: int suma = 0; for (int i = 0; i < 30; i++) suma += note[i]; // 4 linii in loc de 60+!
int note[5] = dulap cu 5 sertarenote[0] = primul sertar (nu note[1]!)note[4] = ultimul sertar (nu note[5]!)int ocupă 4 bytes consecutivi în memorie. Dacă note[0] e la adresa 100, note[1] e la 104, note[2] la 108...int – numere întregi (note, vârste, scoruri)float – numere cu zecimale (temperaturi, medii)char – caractere individuale (litere, cifre)int x[10];int x[5] = {9,7,10,8,6};int x[] = {9,7,10};int x[5] = {9,7}; restul = 0// 1. Vector gol (valori nedefinite!) int note[30]; // ATENTIE: contine "gunoi" din memorie! // 2. Vector cu toate valorile int note[5] = {9, 7, 10, 8, 6}; // 3. Dimensiune dedusa automat int zile[] = {31, 28, 31, 30}; // compilatorul stie: 4 elemente // 4. Partial initializat int x[5] = {9, 7}; // x = {9, 7, 0, 0, 0} // restul se completeaza cu 0! // 5. Toate zero int note[100] = {0}; // Truc: toate 100 devin 0
int note[5] = {9, 7, 10, 8, 6}; // CITIRE (accesare) cout << note[0]; // Afiseaza: 9 cout << note[2]; // Afiseaza: 10 cout << note[4]; // Afiseaza: 6 // SCRIERE (modificare) note[2] = 8; // Vectorul acum: {9, 7, 8, 8, 6} // CALCULE cu elementele int suma = note[0] + note[1]; // suma = 9 + 7 = 16 // Un element e o variabila normala! note[3] = note[3] + 1; // sau: note[3]++; // note[3] era 8, acum e 9
cout << note[i];note[i] = 10;suma += note[i];if (note[i] >= 5)cin >> note[i];int i = 3; cout << note[i];note[i+1] = elementul de după inote[n-1] = ultimul elementnote[n/2] = elementul din mijlocnote[i] se comportă exact ca o variabilă obișnuită de tip int!| GREȘIT | CORECT | De ce? |
|---|---|---|
int note(10); | int note[10]; | Parantezele rotunde sunt pentru funcții! |
array note[10]; | int note[10]; | Nu există tipul „array”. Tipul vine primul. |
int note[]; | int note[10]; | Fără dimensiune și fără valori = eroare! |
int n; int x[n]; | int x[100]; cin>>n; | Dimensiunea trebuie să fie constantă! |
note[5] pt. vector de 5 | note[4] = ultimul | 5 elemente = indici 0,1,2,3,4. NU 5! |
int x[3]={1,2,3,4}; | int x[4]={1,2,3,4}; | 4 valori nu încap în vector de 3! |
if (x[i] = 5) | if (x[i] == 5) | Un = e atribuire, == e comparație! |
note[n]) și confuzia = vs ==int x[6] = {3, 8, 1, 5, 9, 2}; cout << x[0]; // a) ??? cout << x[3]; // b) ??? cout << x[5]; // c) ??? x[1] = x[4]; cout << x[1]; // d) ??? x[2] = x[2] + 10; cout << x[2]; // e) ??? cout << x[0] + x[5]; // f) ???
int i = 0 → începe de la primul elementi < n → continuă cât timp nu am depășiti++ → trece la următorulx[i] → elementul curentfor(int i=n-1; i>=0; i--)// Parcurgere: stanga -> dreapta for (int i = 0; i < n; i++) { // Fa ceva cu x[i] } // Exemplu: Afisare int note[5] = {9, 7, 10, 8, 6}; int n = 5; for (int i = 0; i < n; i++) { cout << "note[" << i << "] = " << note[i] << endl; }
suma = 0; (inițializare)suma += x[i]; (acumulare)// 1. CITIRE de la tastatura int note[100], n; cout << "Cate note? "; cin >> n; for (int i = 0; i < n; i++) { cout << "Nota " << i+1 << ": "; cin >> note[i]; } // 2. AFISARE pe o linie for (int i = 0; i < n; i++) cout << note[i] << " "; cout << endl;
// 3. SUMA si MEDIA int suma = 0; for (int i = 0; i < n; i++) suma += note[i]; float media = (float)suma / n; cout << "Media: " << media; // 4. NUMARARE (note >= 8) int bune = 0; for (int i = 0; i < n; i++) if (note[i] >= 8) bune++; cout << bune << " note bune";
// 5. NUMARARE PARE int pare = 0; for (int i = 0; i < n; i++) if (x[i] % 2 == 0) pare++; // 6. PRODUS long produs = 1; // NU 0! for (int i = 0; i < n; i++) produs *= x[i]; // 7. AFISARE INVERSA for (int i = n-1; i >= 0; i--) cout << x[i] << " ";
#include <iostream> #include <string> using namespace std; int main() { float temp[7]; int n = 7; string zile[] = {"Luni","Marti", "Miercuri","Joi","Vineri", "Sambata","Duminica"}; // 1. Citire for (int i = 0; i < n; i++) { cout << zile[i] << ": "; cin >> temp[i]; } // 2. Afisare + Suma float suma = 0; for (int i = 0; i < n; i++) { cout << zile[i] << ": " << temp[i] << "°C" << endl; suma += temp[i]; } // 3. Media cout << "Media: " << suma/n << "°C"; // 4. Numarare zile calde (>25°C) int calde = 0; for (int i = 0; i < n; i++) if (temp[i] > 25) calde++; cout << "Zile calde: " << calde; return 0; }
float nu ai nevoie de (float) la împărțire – e deja real!break)int x[7] = {3, 8, 1, 4, 9, 2, 7}; int n = 7; int cautat = 4; // Variabila pentru rezultat bool gasit = false; int pozitie = -1; // -1 = negasit // Parcurgere cu verificare for (int i = 0; i < n; i++) { if (x[i] == cautat) { gasit = true; pozitie = i; break; // STOP! Am gasit! } } // Afisare rezultat if (gasit) cout << "Gasit la pozitia " << pozitie; else cout << "Nu exista!";
break e esențial! Fără el, continuă să caute după ce a găsit.| Elemente | Liniară | Binară |
|---|---|---|
| 100 | 100 pași | 7 pași |
| 1.000 | 1.000 | 10 pași |
| 1.000.000 | 1.000.000 | 20 pași! |
// OBLIGATORIU: vector SORTAT! int x[8] = {2,5,8,12,15,23,37,45}; int n = 8, cautat = 15; int st = 0, dr = n - 1; bool gasit = false; int pozitie = -1; while (st <= dr) { int mij = (st + dr) / 2; if (x[mij] == cautat) { gasit = true; pozitie = mij; break; } else if (cautat < x[mij]) dr = mij - 1; // stanga else st = mij + 1; // dreapta } if (gasit) cout << "Gasit la " << pozitie; else cout << "Nu exista!";
mij = (st+dr)/2// 1. NUMARARE: Cate note de 10? int note[8] = {7,10,8,10,6,10,9,10}; int contor = 0; for (int i = 0; i < 8; i++) { if (note[i] == 10) contor++; // NU break! } cout << "Nota 10: " << contor << " ori";
// 2. PRIMA aparitie conditionala // Primul numar par din vector int x[6] = {7, 3, 9, 4, 8, 1}; int pozitie = -1; for (int i = 0; i < 6; i++) { if (x[i] % 2 == 0) { pozitie = i; break; // STOP! } } cout << "Primul par: " << x[pozitie] << " la poz " << pozitie;
x[0] (campionul inițial)i=1 (NU de la 0!)x[i] > maxim → maxim = x[i]int note[5] = {7, 9, 4, 10, 6}; int n = 5; // MAXIM int maxim = note[0]; // campion initial for (int i = 1; i < n; i++) { if (note[i] > maxim) { maxim = note[i]; // noul campion } } cout << "Maximul: " << maxim;
// MINIM - singura diferenta: > devine < int minim = note[0]; for (int i = 1; i < n; i++) { if (note[i] < minim) minim = note[i]; } cout << "Minimul: " << minim;
i=1int maxim = x[0]; int poz = 0; // pozitia max for(int i=1; i<n; i++) if(x[i] > maxim) { maxim = x[i]; poz = i; // retine si unde }
if(x[i]>maxim) maxim=x[i];if(x[i]<minim) minim=x[i];// CORECT - cu variabila temporara int temp = a[i]; // Salvam a[i] = a[i+1]; // Copiam a[i+1] = temp; // Restauram
// GRESIT - fara temp! a[i] = a[i+1]; // a[i] original PIERDUT! a[i+1] = a[i]; // Ambele au aceeasi // valoare acum!
i < n-1-pif (a[i] > a[i+1])if (a[i] < a[i+1])int a[5] = {5, 3, 8, 1, 4}; int n = 5; // Bubble Sort CRESCATOR for (int p = 0; p < n-1; p++) { for (int i = 0; i < n-1-p; i++) { if (a[i] > a[i+1]) { // Swap (interschimbare) int temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; } } } // Rezultat: {1, 3, 4, 5, 8}
// Bubble Sort DESCRESCATOR // Singura diferenta: > devine < for (int p = 0; p < n-1; p++) for (int i = 0; i < n-1-p; i++) if (a[i] < a[i+1]) { int temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; } // Rezultat: {8, 5, 4, 3, 1}
// Daca o trecere nu face swap // = vectorul e deja sortat! bool sortat; for(int p=0; p<n-1; p++) { sortat = true; for(int i=0; i<n-1-p; i++) if(a[i] > a[i+1]) { int t=a[i]; a[i]=a[i+1]; a[i+1]=t; sortat = false; } if(sortat) break; //STOP! }
#include <iostream> using namespace std; int main() { const int MAX = 100; int note[MAX], n; // 1. CITIRE cout << "Cati elevi? "; cin >> n; for(int i = 0; i < n; i++) { cout << "Nota elevului " << i+1 << ": "; cin >> note[i]; } // 2. AFISARE CATALOG cout << "\n=== CATALOG ===\n"; for(int i = 0; i < n; i++) cout << "Elev " << i+1 << ": " << note[i] << endl; // 3. SUMA + MEDIA int suma = 0; for(int i = 0; i < n; i++) suma += note[i]; float media = (float)suma / n; cout << "Suma: " << suma << endl; cout << "Media: " << media << endl; // 4. MAX si MIN cu pozitie int mx = note[0], pmx = 0; int mn = note[0], pmn = 0; for(int i = 1; i < n; i++) { if(note[i] > mx) { mx=note[i]; pmx=i; } if(note[i] < mn) { mn=note[i]; pmn=i; } } cout << "Max: " << mx << " (elev " << pmx+1 << ")\n"; cout << "Min: " << mn << " (elev " << pmn+1 << ")\n"; // 5. NUMARARE note de 10 int zece = 0, promovati = 0; for(int i = 0; i < n; i++) { if(note[i] == 10) zece++; if(note[i] >= 5) promovati++; } cout << "Note de 10: " << zece << endl; cout << "Promovati: " << promovati << "/" << n << endl; // 6. SORTARE descrescatoare for(int p=0; p<n-1; p++) for(int i=0; i<n-1-p; i++) if(note[i] < note[i+1]) { int t=note[i]; note[i]=note[i+1]; note[i+1]=t; } cout << "\nClasament: "; for(int i=0; i<n; i++) cout << note[i] << " "; return 0; }
| # | Greșeala | Consecința | Soluția |
|---|---|---|---|
| 1 | Sortezi INAINTE de statistici | Pierzi asocierea elev-notă | Statistici → apoi sortare |
| 2 | suma/n (int/int) | 58/8 = 7 (nu 7.25!) | (float)suma/n |
| 3 | maxim = 0 | Eșec la note negative | maxim = note[0] |
| 4 | break la numărare | Găsește doar prima apariție | Fără break la numărare! |
| 5 | i <= n în for | Accesare în afara vectorului | i < n (strict mai mic) |
// GRESIT: suma/n cand ambele sunt int int suma = 58, n = 8; cout << suma / n; // Afiseaza: 7 !!! cout << (float)suma/n; // Afiseaza: 7.25 ✔
// GRESIT: maxim = 0 cu numere negative int x[3] = {-3, -1, -7}; int maxim = 0; // Maximul REAL e -1! maxim = x[0]; // CORECT: -3 ✔
int x[n]; – declarare, acces cu x[i], index de la 0for(int i=0; i<n; i++) – citire, afișare, sumă, medie, numărarebreak la găsiremax=x[0], parcurgere de la i=1for(i=0; i<n; i++) – strict mai mic!== pentru comparație, = pentru atribuire(float)suma/n pentru medie reală// DECLARARE int x[100], n; // CITIRE cin >> n; for(int i=0; i<n; i++) cin >> x[i]; // AFISARE for(int i=0; i<n; i++) cout << x[i] << " "; // SUMA + MEDIA int s = 0; for(int i=0; i<n; i++) s += x[i]; float m = (float)s / n;
// NUMARARE (cate >= 8?) int c = 0; for(int i=0; i<n; i++) if(x[i] >= 8) c++; // CAUTARE LINIARA int poz = -1; for(int i=0; i<n; i++) if(x[i] == cautat) { poz = i; break; } // MAXIM int mx = x[0]; for(int i=1; i<n; i++) if(x[i] > mx) mx = x[i];
// MINIM int mn = x[0]; for(int i=1; i<n; i++) if(x[i] < mn) mn = x[i]; // SWAP (interschimbare) int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp; // BUBBLE SORT crescator for(int p=0; p<n-1; p++) for(int i=0; i<n-1-p; i++) if(x[i] > x[i+1]) { int t=x[i]; x[i]=x[i+1]; x[i+1]=t; }