diff options
Diffstat (limited to 'I_anno/Programmazione_1')
-rw-r--r-- | I_anno/Programmazione_1/h9_1.cc | 27 | ||||
-rw-r--r-- | I_anno/Programmazione_1/h9_2.cc | 32 | ||||
-rw-r--r-- | I_anno/Programmazione_1/h9_3.cc | 30 | ||||
-rw-r--r-- | I_anno/Programmazione_1/h9_4.cc | 40 | ||||
-rw-r--r-- | I_anno/Programmazione_1/h9_5.cc | 51 | ||||
-rw-r--r-- | I_anno/Programmazione_1/h9_6.cc | 37 |
6 files changed, 217 insertions, 0 deletions
diff --git a/I_anno/Programmazione_1/h9_1.cc b/I_anno/Programmazione_1/h9_1.cc new file mode 100644 index 0000000..12c629d --- /dev/null +++ b/I_anno/Programmazione_1/h9_1.cc @@ -0,0 +1,27 @@ +#include <iostream> + +// Array NxM. Trovare media dei valori differenza tra gli elementi della diagonale principale e secondaria + +int main() { + const short N = 4, M = 3; + int A[N][M] = { + {3, 1, 5}, + {5, 3, 1}, + {8, 7, 4}, + {4, 7, 4}, + }; + + int diff1 = A[0][0], diff2 = A[N-1][0]; + + // Condizione necessaria per matrici in cui M != N + short cond = (N < M) ? N : M; + + for(int i = 1, j = N-1, j2 = 1; i < cond; ++i, --j, ++j2) { + diff1 -= A[i][i]; + diff2 -= A[j][j2]; + } + + std::cout << static_cast<float>((diff1+diff2)/2) << std::endl; + + return 0; +} diff --git a/I_anno/Programmazione_1/h9_2.cc b/I_anno/Programmazione_1/h9_2.cc new file mode 100644 index 0000000..0e9c853 --- /dev/null +++ b/I_anno/Programmazione_1/h9_2.cc @@ -0,0 +1,32 @@ +#include <iostream> + +// Array NxM e numero p. Stampare le medie per ogni colonna dispari dei valori x <= p + +int main() { + const short N = 4, M = 4; + int p = 9; + int A[N][M] = { + {3, 1, 5, 5}, + {5, 3, 1, 5}, + {8, 7, 4, 5}, + {4, 7, 4, 5}, + }; + // Condizione necessaria per matrici in cui M != N + short cond = (N < M) ? N : M; + + for(int i = 1; i < cond; i+=2) { + int sum = 0, c = 0; + for(int j = 0; j < M; ++j) { + if(A[j][i] <= p) { + sum += A[j][i]; + c++; + } + } + + if(c > 0) { + std::cout << static_cast<float>(sum)/c << '\n'; + } + } + + return 0; +} diff --git a/I_anno/Programmazione_1/h9_3.cc b/I_anno/Programmazione_1/h9_3.cc new file mode 100644 index 0000000..9745560 --- /dev/null +++ b/I_anno/Programmazione_1/h9_3.cc @@ -0,0 +1,30 @@ +#include <iostream> +#include <algorithm> + +// Dato array V=NxM e uno grande W, trovare il numero di elementi presenti in W che sono compresi in ogni riga di V + +int main() { + const auto N = 4, M = 4, L = 3; + int V[N][M] = { + {3, 1, 5, 50}, + {5, 3, 1, 5}, + {8, 7, 4, 5}, + {4, 7, 4, 5}, + }; + + int W[L] = {4, 50, 2}; + + for(auto i = 0; i < N; ++i) { + const auto range = std::minmax_element(std::begin(V[i]), std::end(V[i])); + int count{0}; + for(auto const& j : W) { + if(j >= *range.first && j <= *range.second) + count++; + } + + std::cout << count << std::endl; + } + + + return 0; +} diff --git a/I_anno/Programmazione_1/h9_4.cc b/I_anno/Programmazione_1/h9_4.cc new file mode 100644 index 0000000..cd534b3 --- /dev/null +++ b/I_anno/Programmazione_1/h9_4.cc @@ -0,0 +1,40 @@ +#include <iostream> +#include <algorithm> + +// Data matrice V di NxM, array A e numero w<M, trovare se c'è almeno una riga di V con almeno w elementi maggiori di ogni elemento di A + +const auto N{4}, M{4}, k{3}, w{2}; + +bool row_alg(int V[N][M], int* A, int w) { + // È ovvio che sia presente almeno 0 elementi, quindi non ha senso continuare + if(w <= 0) return true; + auto max_element_of_A = std::max_element(A,A+k); + + for(auto i = 0; i < N; ++i) { + int counts = 0; + for(auto j = 0; j < M; ++j) { + if(V[i][j] > *max_element_of_A) + counts++; + + if(counts == w) + return true; + } + } + + return false; +} + +int main() { + int V[N][M] = { + {3, 59, 5, 54}, + {5, 3, 1, 5}, + {8, 7, 4, 5}, + {4, 7, 4, 5}, + }; + + int A[k] = {4, 50, 2}; + + std::cout << row_alg(V, A, w) << std::endl; + + return 0; +} diff --git a/I_anno/Programmazione_1/h9_5.cc b/I_anno/Programmazione_1/h9_5.cc new file mode 100644 index 0000000..a2e3f8b --- /dev/null +++ b/I_anno/Programmazione_1/h9_5.cc @@ -0,0 +1,51 @@ +#include <iostream> +#include <algorithm> +#include <map> + +// Date due matrici e un numero p, stampare i valori che compaiono p volte dalla prima alla seconda matrice + +int main() { + const auto N{4}, M{4}, L{4}, Q{4}, p{4}; + int V[N][M] = { + {3, 1, 5, 50}, + {5, 3, 1, 5}, + {8, 7, 4, 5}, + {4, 7, 4, 5}, + }; + + int W[L][Q] = { + {30, 3, 5, 50}, + {51, 25, 12, 5}, + {90, 12, 4, 5}, + {4, 6, 4, -3}, + }; + + std::map<int, int> values; + + for(auto i = 0; i < N; ++i) { + for(auto j = 0; j < M; ++j) { + if(values.find(V[i][j]) == values.end()) + values.insert({V[i][j], 1}); + else + values[V[i][j]] += 1; + } + } + + for(auto i = 0; i < L; ++i) { + for(auto j = 0; j < Q; ++j) { + auto elem = values.find(W[i][j]); + if(elem != values.end()) { + if(elem->second >= p) { + std::cout << W[i][j] << ' '; + } else { + std::cout << "x "; + } + } else { + std::cout << "x "; + } + } + std::cout << '\n'; + } + + return 0; +} diff --git a/I_anno/Programmazione_1/h9_6.cc b/I_anno/Programmazione_1/h9_6.cc new file mode 100644 index 0000000..e8afa45 --- /dev/null +++ b/I_anno/Programmazione_1/h9_6.cc @@ -0,0 +1,37 @@ +#include <iostream> +#include <algorithm> + +int main() { + const auto N{4}, M{4}, s{50}, z{2}; + int V[N][M] = { + {3, 1, 5, 50}, + {5, 3, 1, 5}, + {8, 7, 4, 5}, + {4, 7, 4, 5}, + }; + + int W[M] = {0}; + + for(auto i = 0; i < N; ++i) { + bool finish{false}; + int index{0}; + for(auto j = 0; j < M-1; ++j) { + int sum{0}; + for(auto zz = index; zz < index+z; ++zz) { + sum+=V[i][zz]; + if(sum >= s) { + W[i] = 1; + finish = true; + break; + } + } + index++; + if(finish) break; + } + } + + for(auto i = 0; i < N; ++i) + std::cout << W[i] << ' '; + + return 0; +} |