Scrieți un program i c/c++
să se ordonează liniile tabloului în ordine ascendentă a numărului de elemente negative în fiecare linie
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <ctime>
bool comparator(std::vector<int> a, std::vector<int> b)
{
int aNr = 0, bNr = 0;
for (int i = 0; i < a.size(); i++) {
if (a[i] < 0) {
aNr++;
}
if (b[i] < 0) {
bNr++;
}
}
return aNr < bNr;
}
void ordoneaza(std::vector<std::vector<int>>& tablou)
{
std::sort(tablou.begin(), tablou.end(), comparator);
}
void afiseaza(std::vector<std::vector<int>> tablou)
{
for (int i = 0; i < tablou.size(); i++) {
for (int j = 0; j < tablou[i].size(); j++) {
std::cout << std::setw(5) << tablou[i][j];
}
std::cout << std::endl;
}
}
int main()
{
std::vector<std::vector<int>> tablou;
srand(time(NULL));
int n = rand() % 10 + 10, m = rand() % 10 + 10;
for (int i = 0; i < n; i++) {
std::vector<int> linie;
for (int j = 0; j < m; j++) {
linie.push_back(rand() % 201 - 100);
}
tablou.push_back(linie);
}
std::cout << "Inițial:" << std::endl;
afiseaza(tablou);
ordoneaza(tablou);
std::cout << "Final:" << std::endl;
afiseaza(tablou);
}
Explicație:
Cum nu s-a specificat provenienţa tabloului, am generat unul aleator, partea esențială a exerciţiului fiind probabil sortarea, implementată prin în funcţiile ordoneaza() şi comparator().