Introducere
Capitolul de față tratează tablourile (array-urile) unidimensionale în C++ și utilizarea bibliotecilor <iostream>
(intrare/ieșire) și <cmath>
(funcții matematice). Vei vedea modele de citire, procesare, căutare, inversare, sortare, precum și calcule cu normă, medie și varianță.
using namespace std;
.Introduction
This chapter covers one-dimensional arrays in C++ and the use of <iostream>
(I/O) and <cmath>
(math functions). You’ll learn reading patterns, processing, search, reverse, sort, as well as computing norm, average, and variance.
using namespace std;
.Teorie
Declarare și inițializare
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int v[5]; // declarare: 5 elemente (neinițializate)
int a[5] = {1,2,3,4,5}; // inițializare completă
int b[] = {10,20,30}; // dimensiunea este 3
cout << a[0] << " " << b[2] << '\n';
}
Indexare
Indicele pornește de la 0
până la n-1
. Ultimul element pentru dimensiunea n
este v[n-1]
.
Citire și afișare (iostream)
#include <iostream>
using namespace std;
int main() {
int n; cin >> n;
int v[100];
for (int i = 0; i < n; ++i) cin >> v[i];
for (int i = 0; i < n; ++i) cout << v[i] << ' ';
cout << '\n';
}
Calcule utile (cmath)
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n; cin >> n;
int v[100]; for (int i=0;i<n;++i) cin>>v[i];
long long s = 0, s2 = 0;
for (int i=0;i<n;++i) { s += v[i]; s2 += 1LL * v[i] * v[i]; }
double media = (double)s / n;
double norma = sqrt((double)s2); // ||v||2
cout << "media=" << media << " norma=" << norma << '\n';
}
Algoritmi clasici pe tablouri
- Min/Max: inițializezi cu primul element, apoi compari în buclă.
- Căutare liniară: verifici pe rând fiecare element (complexitate
O(n)
). - Inversare: schimbi
v[i]
cuv[n-1-i]
pentrui < n/2
. - Sortare simplă: bubble/selection/insertion pentru începători (didactic), sortări rapide ulterior.
Theory
Declaration & initialization
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int v[5]; // declaration: 5 items (uninitialized)
int a[5] = {1,2,3,4,5}; // full init
int b[] = {10,20,30}; // size is 3
cout << a[0] << " " << b[2] << '\n';
}
Indexing
Indices go from 0
to n-1
. Last element for size n
is v[n-1]
.
Read & print (iostream)
#include <iostream>
using namespace std;
int main() {
int n; cin >> n;
int v[100];
for (int i = 0; i < n; ++i) cin >> v[i];
for (int i = 0; i < n; ++i) cout << v[i] << ' ';
cout << '\n';
}
Handy math (cmath)
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n; cin >> n;
int v[100]; for (int i=0;i<n;++i) cin>>v[i];
long long s = 0, s2 = 0;
for (int i=0;i<n;++i) { s += v[i]; s2 += 1LL * v[i] * v[i]; }
double mean = (double)s / n;
double norm = sqrt((double)s2);
cout << "mean=" << mean << " norm=" << norm << '\n';
}
Classic array algorithms
- Min/Max: init with first element, then compare in a loop.
- Linear search: check each element (
O(n)
). - Reverse: swap
v[i]
withv[n-1-i]
fori < n/2
. - Simple sorting: bubble/selection/insertion for learning; switch to faster sorts later.
Exerciții
1) Suma și media elementelor
Rezolvare
#include <iostream>
using namespace std;
int main() {
int n; cin >> n;
int v[100];
long long s = 0;
for (int i=0;i<n;++i) { cin >> v[i]; s += v[i]; }
double media = (double)s / n;
cout << "suma=" << s << " media=" << media << '\n';
}
2) Valoarea minimă și poziția
Rezolvare
#include <iostream>
using namespace std;
int main() {
int n; cin >> n;
int v[100]; for (int i=0;i<n;++i) cin >> v[i];
int mn = v[0], p = 0;
for (int i=1;i<n;++i) if (v[i] < mn) { mn=v[i]; p=i; }
cout << "min=" << mn << " la poz " << p << '\n';
}
3) Căutare liniară a unei valori x
Rezolvare
#include <iostream>
using namespace std;
int main() {
int n,x; cin >> n; int v[100];
for(int i=0;i<n;++i) cin>>v[i];
cin >> x;
int poz = -1;
for (int i=0;i<n;++i) if (v[i]==x) { poz=i; break; }
cout << poz << '\n'; // -1 dacă nu există
}
4) Inversarea tabloului
Rezolvare
#include <iostream>
using namespace std;
int main() {
int n; cin >> n; int v[100];
for(int i=0;i<n;++i) cin>>v[i];
for(int i=0;i<n/2;++i) swap(v[i], v[n-1-i]);
for(int i=0;i<n;++i) cout<<v[i]<<' ';
}
5) Norma vectorului (cmath)
Rezolvare
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n; cin>>n; int v[100];
long long s2=0;
for(int i=0;i<n;++i){ cin>>v[i]; s2 += 1LL*v[i]*v[i]; }
cout << sqrt((double)s2) << '\n';
}
Exercises
1) Sum and mean
Solution
#include <iostream>
using namespace std;
int main() {
int n; cin >> n;
int v[100];
long long s = 0;
for (int i=0;i<n;++i) { cin >> v[i]; s += v[i]; }
double mean = (double)s / n;
cout << "sum=" << s << " mean=" << mean << '\n';
}
2) Minimum value and position
Solution
#include <iostream>
using namespace std;
int main() {
int n; cin >> n;
int v[100]; for (int i=0;i<n;++i) cin >> v[i];
int mn = v[0], p = 0;
for (int i=1;i<n;++i) if (v[i] < mn) { mn=v[i]; p=i; }
cout << "min=" << mn << " at " << p << '\n';
}
3) Linear search of x
Solution
#include <iostream>
using namespace std;
int main() {
int n,x; cin >> n; int v[100];
for(int i=0;i<n;++i) cin>>v[i];
cin >> x;
int pos = -1;
for (int i=0;i<n;++i) if (v[i]==x) { pos=i; break; }
cout << pos << '\n';
}
4) Reverse array
Solution
#include <iostream>
using namespace std;
int main() {
int n; cin >> n; int v[100];
for(int i=0;i<n;++i) cin>>v[i];
for(int i=0;i<n/2;++i) swap(v[i], v[n-1-i]);
for(int i=0;i<n;++i) cout<<v[i]<<' ';
}
5) Vector norm (cmath)
Solution
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n; cin>>n; int v[100];
long long s2=0;
for(int i=0;i<n;++i){ cin>>v[i]; s2 += 1LL*v[i]*v[i]; }
cout << sqrt((double)s2) << '\n';
}
Test de evaluare (10 întrebări)
Subiect: tablouri unidimensionale, <iostream>
, <cmath>
. Bifează varianta corectă.
Quiz (10 questions)
Topic: one-dimensional arrays, <iostream>
, <cmath>
. Select the correct option.