C++ – Tablouri unidimensionale

C++ – One-Dimensional Arrays

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ță.

În exemplele de rezolvare, la cererea ta, am inclus explicit linia 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.

Per your request, solution snippets explicitly include 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] cu v[n-1-i] pentru i < 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] with v[n-1-i] for i < 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ă.

1) Declararea corectă a unui tablou cu 10 întregi este:

2) Inițializarea corectă cu 1,2,3,4,5 este:

3) Ultimul index pentru un tablou cu n elemente este:

4) Citirea corectă a n elemente într-un tablou v este:

5) Media corectă pentru sumă întreagă s este:

6) Norma euclidiană a vectorului v este:

7) Pentru minim, inițializarea corectă este:

8) Inversarea tabloului in-place corectă este:

9) Complexitatea căutării liniare este:

10) Pentru sqrt și pow ai nevoie de:

Quiz (10 questions)

Topic: one-dimensional arrays, <iostream>, <cmath>. Select the correct option.

1) Correct declaration of an array of 10 ints:

2) Proper initialization with 1,2,3,4,5:

3) The last index for a size-n array is:

4) Correctly reading n elements into v:

5) Correct average for integer sum s:

6) Euclidean norm of v is:

7) For minimum, a correct initialization is:

8) Correct in-place reverse is:

9) Time complexity of linear search:

10) Header needed for sqrt and pow: